mirror of
https://github.com/bitcoin/bips.git
synced 2025-05-12 12:03:29 +00:00
Merge pull request #160 from mruddy/bip65
BIP65: add sections on ability to freeze funds and implementations
This commit is contained in:
commit
11d8610907
@ -40,7 +40,7 @@ An example where this technique is used is in micro-payment channels, where the
|
|||||||
nLockTime field proves that should the receiver vanish the sender is guaranteed
|
nLockTime field proves that should the receiver vanish the sender is guaranteed
|
||||||
to get all their escrowed funds back when the nLockTime is reached.
|
to get all their escrowed funds back when the nLockTime is reached.
|
||||||
|
|
||||||
However the nLockTime field is insufficient if you wish to prove that
|
However, the nLockTime field is insufficient if you wish to prove that a
|
||||||
transaction output ''cannot'' be spent until some time in the future, as there
|
transaction output ''cannot'' be spent until some time in the future, as there
|
||||||
is no way to prove that the secret keys corresponding to the pubkeys controlling
|
is no way to prove that the secret keys corresponding to the pubkeys controlling
|
||||||
the funds have not been used to create a valid signature.
|
the funds have not been used to create a valid signature.
|
||||||
@ -60,7 +60,7 @@ either Alice or Bob to steal the funds illegitimately. Equally Lenny may prefer
|
|||||||
not to have immediate access to the funds to discourage bad actors from
|
not to have immediate access to the funds to discourage bad actors from
|
||||||
attempting to get the secret keys from him by force.
|
attempting to get the secret keys from him by force.
|
||||||
|
|
||||||
However with CHECKLOCKTIMEVERIFY the funds can be stored in scriptPubKeys of
|
However, with CHECKLOCKTIMEVERIFY the funds can be stored in scriptPubKeys of
|
||||||
the form:
|
the form:
|
||||||
|
|
||||||
IF
|
IF
|
||||||
@ -86,12 +86,12 @@ funds with the following scriptSig:
|
|||||||
|
|
||||||
There exist a number of protocols where a transaction output is created that
|
There exist a number of protocols where a transaction output is created that
|
||||||
requires the co-operation of both parties to spend the output. To ensure the
|
requires the co-operation of both parties to spend the output. To ensure the
|
||||||
failure of one party does not result in the funds becoming lost refund
|
failure of one party does not result in the funds becoming lost, refund
|
||||||
transactions are setup in advance using nLockTime. These refund transactions
|
transactions are setup in advance using nLockTime. These refund transactions
|
||||||
need to be created interactively, and additionaly, are currently vulnerable to
|
need to be created interactively, and additionaly, are currently vulnerable to
|
||||||
transaction mutability. CHECKLOCKTIMEVERIFY can be used in these protocols,
|
transaction mutability. CHECKLOCKTIMEVERIFY can be used in these protocols,
|
||||||
replacing the interactive setup with a non-interactive setup, and additionally,
|
replacing the interactive setup with a non-interactive setup, and additionally,
|
||||||
making transaction mutability a non-issue.
|
making transaction mutability (aka malleability) a non-issue.
|
||||||
|
|
||||||
|
|
||||||
====Two-factor wallets====
|
====Two-factor wallets====
|
||||||
@ -172,6 +172,17 @@ sufficiently far into the future that large miners profitably can't sell the
|
|||||||
sacrifices at a discount.
|
sacrifices at a discount.
|
||||||
|
|
||||||
|
|
||||||
|
===Freezing Funds===
|
||||||
|
|
||||||
|
In addition to using cold storage, hardware wallets, and P2SH multisig outputs
|
||||||
|
to control funds, now funds can be frozen in UTXOs directly on the blockchain.
|
||||||
|
With the following scriptPubKey, nobody will be able to spend the encumbered
|
||||||
|
output until the provided expiry time. This ability to freeze funds reliably may
|
||||||
|
be useful in scenarios where reducing duress or confiscation risk is desired.
|
||||||
|
|
||||||
|
<expiry time> CHECKLOCKTIMEVERIFY DROP DUP HASH160 <pubKeyHash> EQUALVERIFY CHECKSIG
|
||||||
|
|
||||||
|
|
||||||
===Replacing the nLockTime field entirely===
|
===Replacing the nLockTime field entirely===
|
||||||
|
|
||||||
As an aside, note how if the SignatureHash() algorithm could optionally cover
|
As an aside, note how if the SignatureHash() algorithm could optionally cover
|
||||||
@ -276,9 +287,21 @@ time.
|
|||||||
|
|
||||||
PayPub - https://github.com/unsystem/paypub
|
PayPub - https://github.com/unsystem/paypub
|
||||||
|
|
||||||
Jeremy Spilman Micropayment Channels - http://www.mail-archive.com/bitcoin-development%40lists.sourceforge.net/msg02028.html
|
Jeremy Spilman Micropayment Channels - https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2013-April/002433.html
|
||||||
|
|
||||||
|
|
||||||
|
==Implementations==
|
||||||
|
|
||||||
|
Python / python-bitcoinlib
|
||||||
|
|
||||||
|
- https://github.com/petertodd/checklocktimeverify-demos
|
||||||
|
|
||||||
|
JavaScript / Node.js / bitcore
|
||||||
|
|
||||||
|
- https://github.com/mruddy/bip65-demos
|
||||||
|
|
||||||
|
|
||||||
==Copyright==
|
==Copyright==
|
||||||
|
|
||||||
This document is placed in the public domain.
|
This document is placed in the public domain.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user