I made an error proposing the new covenant. It should be unchanged as in the original example:
‘covenant or(and(_, pk(Transfer)) covenant transitive, and(pk(Exit), _) covenant drop)’ since the placeholder stays for the control of the rightful owner without transfer signature on or off chain. The exit could be alternatively automatic allowing to exit a stalling unchained platform: ‘covenant or(and(_, pk(Transfer)) covenant transitive, and(delay(100), _) covenant drop)’ There remains the question why the rightful owner is not enforcing the covenant instead of having it enforced by on-chain consensus. I do not yet have a good answer for that as in contrast to the debt example, here it is aligned with the interest of the current owner to have the covenant. Tamas Blummer > On Jun 30, 2019, at 18:57, Tamas Blummer <tamas.blum...@gmail.com> wrote: > > Hello ZmnSCPxj, > > Yes, representation of debt is more interesting here as it requires the > covenant, wheras this example, as you point out, was less convincing given > alternatives. > I created this example to avoid discussion of topics not approriate on this > list. > > Thank you for the suggestion of unchained execution of transfers with > cut-through exit transaction as this made the example much stronger: > > The most important question for someone who trusts his coins to some > unchained platform is probably the question of how exit is guaranteed if one > is unhappy with what one gets. > > With the exit covenant exit conditions are set in stone, since validated > on-chain. If the exit key is owned by a trusted arbiter other than the > federation governing the unchained platform > then one at least have the option to cut losses at some point by presenting > the arbiter a chain of valid transactions and asking to sign the exit. > > Participants in the unchained platform would also be interested to regularly > snapshot the economic effect of offchain transactions with cut-through > transactions as such cut-through shortens the chain of transactions > they would need to get on chain if chosing the exit without consent of the > federation governing the transfers. > > So the convenant needed is: 'covenant or(_ covenant transitive, and(pkExit, > _) covenant drop)' which gives unrestricted flexibility to the unchained > platform with the exception that it has to maintain the exit option. > > > Tamas Blummer > > >> On Jun 29, 2019, at 22:25, ZmnSCPxj <zmnsc...@protonmail.com> wrote: >> >> Good morning Tamas, >> >> While I think covenants for some kind of debt tool is mildly interesting and >> an appropriate solution, I wonder about this particular use-case. >> >> It seems to me that, as either the `Transfer` signers or `Exit` signers are >> always involved, that the `Transfer` signers can be constrained so as to >> ensure that the rules are followed correctly, without requiring that >> covenants be used on the Bitcoin layer. >> After all, the outputs of each transaction signed by the `Transfer` signers >> are part of the transaction that is being signed; surely the `Transfer` >> signers can validate that the output matches the contract expected, without >> requiring that fullnodes also validate this? >> >> In particular, it seems to me that covenants are only useful if there exist >> some alternative that does not involve some kind of fixed `Transfer` signer >> set, but still requires a covenant. >> Otherwise, the `Transfer` signer set could simply impose the rules by >> themselves. >> >> >> Another thing is that, if my understanding is correct, the "sidechain" here >> is not in fact a sidechain; the "sidechain" transaction graph is published >> on the Bitcoin blockchain. >> Instead, the `Transfer` signers simply validate some smart contract, most >> likely embedded as a pay-to-contract in the `pk(Alice)`/`pk(Bob)` public >> keys, and ensure that the smart contract is correctly executed. >> In that case, it may be useful to consider Smart Contracts Unchained >> instead: https://zmnscpxj.github.io/bitcoin/unchained.html >> >> It would be possible, under Smart Contracts Unchained, to keep the >> `Transfer`-signed transactions offchain, until `Exit`-signing. >> Then, when this chain of transaction spends is presented to the >> participants, the participants can be convinced to sign a "cut-through" >> transaction that cuts through the offchain transactions, with the resulting >> cut-through being the one confirmed onchain, and signed only the >> participants, without the `Transfer` or `Exit` federation signatures >> appearing onchain. >> This hides not only the smart contract being executed, but also the fact >> that a Smart Contracts Unchained technique was at all used. >> >> Regards, >> ZmnSCPxj >> >> >> Sent with ProtonMail Secure Email. >> >> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐ >> On Saturday, June 29, 2019 1:53 PM, Tamas Blummer via bitcoin-dev >> <bitcoin-dev@lists.linuxfoundation.org> wrote: >> >>> I introduced you to gerneralized covenants[1] earlier, but in a domain >>> specific context that de-routed us from technical discussion. Let me >>> demonstrate the concept in a more generic use: >>> >>> A covenant >>> >>> or(and(pk(Transfer), _) covenant transitive, and(pk(Exit),_) covenant drop) >>> >>> would put a coin under the alternative control of a Transfer and Exit keys >>> together with the script in control of the current owner. >>> Additional transaction level validations of transactions spending input >>> with covenants apply as in [1] >>> >>> Owner of such coins would be able to transfer them to others provided an >>> addtional Transfer signature, in which case the coin remains encumbered >>> with the same covenant. >>> If Exit and owner signs the covenant is dropped on the output, it becomes a >>> plain Bitcoin again. >>> >>> The Thransfer and Exit signatures could be threshold signatures of a >>> federation, whereby member decide if the proposed transfer transaction >>> complies with whatever unique rules they impose. >>> >>> The result is a federated side chain embedded into the Bitcoin block chain. >>> >>> Bob could purchase some asset guarded by the federation with a transaction: >>> >>> Inputs >>> 100.0001 pk(Bob) >>> >>> Outputs >>> 0.1 or(and(pk(Transfer), pk(Bob)), and(pk(Exit), pk(Bob)) covenant >>> or(and(pk(Transfer), _) covenant transitive, and(pk(Exit),_) covenant drop) >>> 99.9 pk(Transfer) >>> >>> Transfer to Alice with consent of the transfer validators: >>> >>> Inputs >>> 0.1 or(and(pk(Transfer), pk(Bob)), and(pk(Exit), pk(Bob)) covenant >>> or(and(pk(Transfer), _) covenant transitive, and(pk(Exit),_) covenant drop) >>> 100.001 pk(Alice) >>> >>> Outputs >>> 0.1 or(and(pk(Transfer), pk(Alice)), and(pk(Exit), pk(Alice)) covenant >>> or(and(pk(Transfer), _) covenant transitive, and(pk(Exit),_) covenant drop) >>> 100 pk(Bob) >>> >>> Alice might be approved to exit with the exit signature of the federation: >>> >>> Inputs >>> 0.1 or(and(pk(Transfer), pk(Alice)), and(pk(Exit), pk(Alice)) covenant >>> or(and(pk(Transfer), _) covenant transitive, and(pk(Exit),_) covenant drop) >>> 99.9 pk(Transfer) >>> >>> Outputs >>> 99.9999 pk(Alice) >>> >>> Tamas Blummer >>> [1] >>> https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-June/017059.html >> >> >
signature.asc
Description: Message signed with OpenPGP
_______________________________________________ bitcoin-dev mailing list bitcoin-dev@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev