RSM Contracts

When a new Commitment Transaction is agreed then the old Commitment Transaction must be Revoked
Commitment Transaction

To allow an opportunity for penalty transactions, in case of a revoked commitment transaction, all outputs that return funds to the owner of the commitment transaction (a.k.a. the “local node”) must be delayed for to_self_delay blocks.

Alice (the owner) is delayed in getting the funds, giving Bob time to penalize her if he has a Revocation Key
2 <AlicePublicKey01> <BobPublicKey01> 2 OP_CHECKMULTISIG
<revocationpubkey> OP_CHECKSIG
revocationpubkey = AlicePublicKey01 + BobPublicKey01

Script

OP_IF
<revocationpubkey>
OP_ELSE
`to_self_delay` OP_CHECKSEQUENCEVERIFY OP_DROP
<local_delayedpubkey>
OP_ENDIF
OP_CHECKSIG

Spending the Output

The output is spent by an input with nSequence field set to to_self_delay (which can only be valid after that duration has passed) and witness:

<local_delayedsig> <>

If a revoked commitment transaction is published, the other party can spend this output immediately with the following witness:

<revocation_sig> 1

Final Note

Notes and References

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store