Discussion:
[bitcoin-dev] Multi CSV Transaction
Praveen Baratam via bitcoin-dev
2018-02-20 16:53:25 UTC
Permalink
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
ᐧ
Daniel Robinson via bitcoin-dev
2018-02-21 00:59:45 UTC
Permalink
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 <
Post by Praveen Baratam via bitcoin-dev
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
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
Praveen Baratam via bitcoin-dev
2018-02-21 02:36:31 UTC
Permalink
Thank you Daniel!

Your detailed explanation did clear things up :-)
ᐧ
Post by Daniel Robinson via bitcoin-dev
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.
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
}
}
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 <
Post by Praveen Baratam via bitcoin-dev
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
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
--
Dr. Praveen Baratam

about.me <http://about.me/praveen.baratam>
Loading...