Skip to content

Commit 7112f30

Browse files
committed
minor wording updates
1 parent 0b0674c commit 7112f30

File tree

1 file changed

+33
-32
lines changed

1 file changed

+33
-32
lines changed

bip-0345.mediawiki

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -44,34 +44,35 @@ usable for custodians of any size with minimal complication.
4444

4545
==== Example uses ====
4646

47-
A common configuration for an individual custodying Bitcoin is a "single signature and
48-
passphrase" with a hardware wallet. They are concerned about the
49-
risk associated with relying on a single manufacturer for key management as
50-
well as physical access to the hardware, so they generate a new key that is
51-
highly secure, but would be impractical for daily use. For example the key
52-
could be generated in some analog fashion, or on an old computer (with added
53-
entropy) that is then destroyed, with the private key replicated only in paper
54-
form. Or the key could be a 2-of-3 multisig using devices from different
55-
manufacturers. Perhaps the key is geographically distributed.
56-
57-
This individual can use <code>OP_VAULT</code> to make use of the highly secure
47+
A common configuration for an individual custodying Bitcoin is "single
48+
signature and passphrase" using a hardware wallet. A user with such a
49+
configuration might concerned about the risk associated with relying on a
50+
single manufacturer for key management, as well as physical access to the
51+
hardware.
52+
53+
This individual can use <code>OP_VAULT</code> to make use of a highly secure
5854
key as the unlikely recovery path, while using their existing signing procedure
59-
as the withdrawal trigger key, with a configured spend delay of 1 day. They can
60-
run software on their mobile device that monitors the blockchain for spends of
61-
the vault outpoints.
55+
as the withdrawal trigger key with a configured spend delay of e.g. 1 day.
56+
57+
The recovery path key can be of a highly secure nature that might otherwise
58+
make it impractical for daily use. For example, the key could be generated in
59+
some analog fashion, or on an old computer that is then destroyed, with the
60+
private key replicated only in paper form. Or the key could be a 2-of-3
61+
multisig using devices from different manufacturers. Perhaps the key is
62+
geographically or socially distributed.
6263

63-
If the vaulted coins move in an unexpected way, the user can immediately sweep
64-
them to the highly secure recovery path, but spending the coins on a daily
65-
basis works in the same way it did prior to vaulting - aside from the spend
66-
delay.
64+
Since it can be any Bitcoin script policy, the recovery key can include a
65+
number of spending conditions, e.g. a time-delayed fallback to an "easier"
66+
recovery method, in case the highly secure key winds up being ''too'' highly
67+
secure.
6768

68-
The recovery key could be any Bitcoin script policy: a 2-of-3 multisig with keys
69-
that live on different devices, a 3-of-5 with socially distributed keys, a
70-
Taproot construction that incorporates one of these methods along with a
71-
time-delayed fallback to an "easier" recovery method, in case the highly secure
72-
key winds up being ''too'' highly secure.
69+
The user can run software on their mobile device that monitors the blockchain
70+
for spends of the vault outpoints. If the vaulted coins move in an unexpected
71+
way, the user can immediately sweep them to the recovery path, but spending the
72+
coins on a daily basis works in the same way it did prior to vaulting (aside
73+
from the spend delay).
7374

74-
Institutional custodians of Bitcoin would likely use vaults in similar fashion.
75+
Institutional custodians of Bitcoin may use vaults in similar fashion.
7576

7677
===== Provable timelocks =====
7778

@@ -157,7 +158,7 @@ This proposal is designed to be compatible with any future sighash modes (e.g. <
157158
In typical usage, a vault is created by encumbering coins under a
158159
taptree [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki (BIP-341)]
159160
containing at least two leaves: one with an <code>OP_VAULT</code>-containing script that
160-
facilitates the expected withdrawal process, and leaf another with
161+
facilitates the expected withdrawal process, and another leaf with
161162
<code>OP_VAULT_RECOVER</code> which ensures the coins can be recovered
162163
at any time prior to withdrawal finalization.
163164

@@ -192,9 +193,9 @@ The vault has a number of stages, some of them optional:
192193
193194
* '''trigger transaction''': spends one or more <code>OP_VAULT</code>-tapleaf inputs into an output which is encumbered by a timelocked withdrawal to a fixed set of outputs, chosen at trigger time. This publicly broadcasts the intent to withdraw to some specific set of outputs.<br /><br />The trigger transaction may have an additional output which allocates some of the vault balance into a partial "revault," which simply encumbers the revaulted portion of the value into the same <code>scriptPubKey</code> as the <code>OP_VAULT</code>-containing input(s) being spent.
194195
195-
* '''withdrawal transaction''': spends the timelocked <code>OP_CHECKTEMPLATEVERIFY</code> trigger inputs into a compatible set of final withdrawal outputs per the CTV hash, after the trigger inputs have matured per the spend delay. Timelocked CTV transactions are the motivating usage of OP_VAULT, but any script template can be specified during the creation of the vault.
196+
* '''withdrawal transaction''': spends the timelocked, destination-locked trigger inputs into a compatible set of final withdrawal outputs (per, e.g., a <code>CHECKTEMPLATEVERIFY</code> hash), after the trigger inputs have matured per the spend delay. Timelocked CTV transactions are the motivating usage of OP_VAULT, but any script template can be specified during the creation of the vault.
196197
197-
* '''recovery transaction''': spends one or more <code>OP_VAULT_RECOVER</code>-tapleaf inputs to the prespecified recovery path, which can be done at any point before the withdrawal transaction confirms. Each input can optionally require a witness satisfying a specified ''recovery authorization'' script, an optional script prefixing the <code>OP_VAULT_RECOVER</code> fragment. The use of recovery authorization has certain trade-offs discussed later.
198+
* '''recovery transaction''': spends one or more vault inputs via <code>OP_VAULT_RECOVER</code> tapleaf to the prespecified recovery path, which can be done at any point before the withdrawal transaction confirms. Each input can optionally require a witness satisfying a specified ''recovery authorization'' script, an optional script prefixing the <code>OP_VAULT_RECOVER</code> fragment. The use of recovery authorization has certain trade-offs discussed later.
198199
199200

200201
=== Fee management ===
@@ -208,7 +209,7 @@ Providing dynamic fee management is critical to the operation of a vault, since
208209
But dynamic fee management can introduce
209210
[https://bitcoinops.org/en/topics/transaction-pinning/ pinning vectors]. Care
210211
has been taken to avoid unnecessarily introducing these vectors when using the new
211-
content-based spending policies that this proposal introduces.
212+
destination-based spending policies that this proposal introduces.
212213

213214
Originally, this proposal had a hard dependency on reformed transaction
214215
nVersion=3 policies, including ephemeral anchors, but it has since been revised
@@ -262,7 +263,7 @@ After the stack is parsed, the following validation checks are performed:
262263
* Let the output designated by <code><trigger-vout-idx></code> be called ''triggerOut''.
263264
* If the scriptPubKey of ''triggerOut'' is not a witness program of the same version and same tapleaf version as the currently executing script, script execution MUST fail and terminate immediately.
264265
* Let the script constructed by taking the <code><leaf-update-script-body></code> and prefixing it with minimally-encoded data pushes of the <code><n-pushes></code> leaf-update script data items be called the ''leaf-update-script''.
265-
** The leaf-update data items will be in the same order in the ''leaf-update-script'' as they appeared on the stack.
266+
** Note: the leaf-update data items will be in the same order in the ''leaf-update-script'' as they appeared on the stack.
266267
* If the scriptPubKey of ''triggerOut'' does not match that of a taptree that is identical to that of the currently evaluated input, but with the leaf script substituted for ''leaf-update-script'', script execution when spending this output MUST fail and terminate immediately.
267268
** Note: the parity bit of the resulting taproot output is allowed to vary, so both values for the new output must be checked.
268269
* Let the output designated by <code><revault-vout-idx></code> (if the index value is non-negative) be called ''revaultOut''.
@@ -303,7 +304,7 @@ If none of the conditions fail, a single true value (<code>0x01</code>) is left
303304

304305
In order to prevent possible pinning attacks, recovery transactions must be replaceable.
305306

306-
* When validating an <code>OP_VAULT_RECOVER</code> input being spent, the script must FAIL (by policy, not consensus) and terminate immediately if both<ref>'''Why are recovery transactions required to be replaceable?''' In the case of unauthorized recoveries, an attacker may attempt to pin recovery transactions by broadcasting a "rebundled" version with a low fee rate. Vault owners must be able to overcome this with replacement. In the case of authorized recovery, if an attacker steals the recovery authorization key, the attacker may try to pin the recovery transaction during theft. Requiring replaceability ensures that the owner can always raise the fee rate of the recovery transaction, even if they are RBF rule #3 griefed in the process.</ref>
307+
* When validating an <code>OP_VAULT_RECOVER</code> input being spent, the script MUST fail (by policy, not consensus) and terminate immediately if both<ref>'''Why are recovery transactions required to be replaceable?''' In the case of unauthorized recoveries, an attacker may attempt to pin recovery transactions by broadcasting a "rebundled" version with a low fee rate. Vault owners must be able to overcome this with replacement. In the case of authorized recovery, if an attacker steals the recovery authorization key, the attacker may try to pin the recovery transaction during theft. Requiring replaceability ensures that the owner can always raise the fee rate of the recovery transaction, even if they are RBF rule #3 griefed in the process.</ref>
307308
*# the input is not marked as opt-in replaceable by having an nSequence number less than <code>0xffffffff - 1</code>, per [https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki BIP-0125], and
308309
*# the version of the recovery transaction has an nVersion other than 3.
309310
@@ -325,7 +326,7 @@ A sample implementation is available on bitcoin-inquisition [https://github.com/
325326

326327
== Applications ==
327328

328-
The specification above, perhaps surprisingly, does not cover how a relative timelocked withdrawal process with a fixed target is implemented. The tapleaf update semantics specified in <code>OP_VAULT</code> as well as the output-based authorization enabled by <code>OP_VAULT_RECOVER</code> can be used to implement a vault, but they are incomplete without two other pieces:
329+
The specification above, perhaps surprisingly, does not specifically cover how a relative timelocked withdrawal process with a fixed target is implemented. The tapleaf update semantics specified in <code>OP_VAULT</code> as well as the output-based authorization enabled by <code>OP_VAULT_RECOVER</code> can be used to implement a vault, but they are incomplete without two other pieces:
329330

330331
* a way to enforce relative timelocks, like <code>OP_CHECKSEQUENCEVERIFY</code>, and
331332
* a way to enforce that proposed withdrawals are ultimately being spent to a precise set of outputs, like <code>OP_CHECKTEMPLATEVERIFY</code>.
@@ -335,7 +336,7 @@ These two pieces are combined with the tapleaf update capabilities of
335336

336337
=== Creating a vault ===
337338

338-
In order to vault coins, they must be spent into a witness v1 <code>scriptPubKey</code>
339+
In order to vault coins, they can be spent into a witness v1 <code>scriptPubKey</code>
339340
that contains a taptree of the form
340341

341342
<source>

0 commit comments

Comments
 (0)