* [bitcoin-dev] Multi CSV Transaction @ 2018-02-20 16:53 Praveen Baratam 2018-02-21 0:59 ` Daniel Robinson 0 siblings, 1 reply; 3+ messages in thread From: Praveen Baratam @ 2018-02-20 16:53 UTC (permalink / raw) To: bitcoin-dev [-- Attachment #1.1: Type: text/plain, Size: 388 bytes --] Hello Everybody, I need a little clarity about how OP_CHECKSEQUENCEVERIFY (CSV) works in transactions. Can I use multiple CSV end points as depicted in the figure below? I basically want to allow different conditions at different delays. [image: Inline image 3] I just want to know if OP_CHECKSEQUENCEVERIFY can be used to achieve the above. Thank you. Praveen ᐧ [-- Attachment #1.2: Type: text/html, Size: 1520 bytes --] [-- Attachment #2: Multi CSV.png --] [-- Type: image/png, Size: 119739 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [bitcoin-dev] Multi CSV Transaction 2018-02-20 16:53 [bitcoin-dev] Multi CSV Transaction Praveen Baratam @ 2018-02-21 0:59 ` Daniel Robinson 2018-02-21 2:36 ` Praveen Baratam 0 siblings, 1 reply; 3+ messages in thread From: Daniel Robinson @ 2018-02-21 0:59 UTC (permalink / raw) To: Praveen Baratam, Bitcoin Protocol Discussion [-- Attachment #1.1: Type: text/plain, Size: 1818 bytes --] Yes, although it's a functionality of Bitcoin Script generally, not OP_CSV in particular. Bitcoin Script allows you to use nested IF statements, and enforce whatever different conditions you want in each branch. Here's your contract in Ivy <https://ivy-lang.org/bitcoin/>: contract MultiCSV( bob: PublicKey, carol: PublicKey, bobDelay: Duration, carolDelay: Duration, val: Value ) { clause bobSpend(sig: Signature) { verify checkSig(bob, sig) verify older(bobDelay) unlock val } clause carolSpend(sig: Signature) { verify checkSig(carol, sig) verify older(carolDelay) unlock val } clause bothSpend(bobSig: Signature, carolSig: Signature) { verify checkMultiSig([bob, carol], [bobSig, carolSig]) unlock val } } It compiles to the following Bitcoin Script: PUSH(carolKey) PUSH(bobKey) 2 PICK 2 EQUAL IF ROT DROP 0 4 ROLL 4 ROLL 2 2ROT 2 CHECKMULTISIG ELSE ROT IF DROP CHECKSIGVERIFY PUSH(carolDelay) CHECKSEQUENCEVERIFY DROP 1 ELSE NIP CHECKSIGVERIFY PUSH(bobDelay) CHECKSEQUENCEVERIFY DROP 1 ENDIF ENDIF On Tue, Feb 20, 2018 at 5:32 PM Praveen Baratam via bitcoin-dev < bitcoin-dev@lists.linuxfoundation.org> wrote: > Hello Everybody, > > I need a little clarity about how OP_CHECKSEQUENCEVERIFY (CSV) works in > transactions. > > Can I use multiple CSV end points as depicted in the figure below? I > basically want to allow different conditions at different delays. > > [image: Multi CSV.png] > > I just want to know if OP_CHECKSEQUENCEVERIFY can be used to achieve the > above. > > Thank you. > > Praveen > ᐧ > _______________________________________________ > bitcoin-dev mailing list > bitcoin-dev@lists.linuxfoundation.org > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev > [-- Attachment #1.2: Type: text/html, Size: 3768 bytes --] [-- Attachment #2: Multi CSV.png --] [-- Type: image/png, Size: 119739 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [bitcoin-dev] Multi CSV Transaction 2018-02-21 0:59 ` Daniel Robinson @ 2018-02-21 2:36 ` Praveen Baratam 0 siblings, 0 replies; 3+ messages in thread From: Praveen Baratam @ 2018-02-21 2:36 UTC (permalink / raw) To: Daniel Robinson; +Cc: Bitcoin Protocol Discussion [-- Attachment #1.1: Type: text/plain, Size: 2157 bytes --] Thank you Daniel! Your detailed explanation did clear things up :-) ᐧ On Wed, Feb 21, 2018 at 6:29 AM, Daniel Robinson <danrobinson010@gmail.com> wrote: > Yes, although it's a functionality of Bitcoin Script generally, not OP_CSV > in particular. Bitcoin Script allows you to use nested IF statements, and > enforce whatever different conditions you want in each branch. > > Here's your contract in Ivy <https://ivy-lang.org/bitcoin/>: > > contract MultiCSV( > bob: PublicKey, > carol: PublicKey, > bobDelay: Duration, > carolDelay: Duration, > val: Value > ) { > clause bobSpend(sig: Signature) { > verify checkSig(bob, sig) > verify older(bobDelay) > unlock val > } > clause carolSpend(sig: Signature) { > verify checkSig(carol, sig) > verify older(carolDelay) > unlock val > } > clause bothSpend(bobSig: Signature, carolSig: Signature) { > verify checkMultiSig([bob, carol], [bobSig, carolSig]) > unlock val > } > } > > It compiles to the following Bitcoin Script: > > PUSH(carolKey) PUSH(bobKey) 2 PICK 2 EQUAL IF ROT DROP 0 4 ROLL 4 ROLL 2 > 2ROT 2 CHECKMULTISIG ELSE ROT IF DROP CHECKSIGVERIFY PUSH(carolDelay) > CHECKSEQUENCEVERIFY DROP 1 ELSE NIP CHECKSIGVERIFY PUSH(bobDelay) > CHECKSEQUENCEVERIFY DROP 1 ENDIF ENDIF > > On Tue, Feb 20, 2018 at 5:32 PM Praveen Baratam via bitcoin-dev < > bitcoin-dev@lists.linuxfoundation.org> wrote: > >> Hello Everybody, >> >> I need a little clarity about how OP_CHECKSEQUENCEVERIFY (CSV) works in >> transactions. >> >> Can I use multiple CSV end points as depicted in the figure below? I >> basically want to allow different conditions at different delays. >> >> [image: Multi CSV.png] >> >> I just want to know if OP_CHECKSEQUENCEVERIFY can be used to achieve the >> above. >> >> Thank you. >> >> Praveen >> ᐧ >> _______________________________________________ >> bitcoin-dev mailing list >> bitcoin-dev@lists.linuxfoundation.org >> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev >> > -- Dr. Praveen Baratam about.me <http://about.me/praveen.baratam> [-- Attachment #1.2: Type: text/html, Size: 5240 bytes --] [-- Attachment #2: Multi CSV.png --] [-- Type: image/png, Size: 119739 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-02-21 2:36 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-02-20 16:53 [bitcoin-dev] Multi CSV Transaction Praveen Baratam 2018-02-21 0:59 ` Daniel Robinson 2018-02-21 2:36 ` Praveen Baratam
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox