本文档描述了Revault交易的结构和类型,Revault是一种使用多重签名和时间锁的比特币 vault 方案,通过定义不同类型的交易(如 deposit、unvault、spend、cancel 和 emergency 交易)及其输入输出结构,展示了如何在多个参与者之间安全地管理比特币资金,支持紧急情况下的资金转移和费用调整。
所有交易均为 version 2,并使用 version 0 的原生隔离见证脚本。
我们使用 miniscript 和 output descriptors 来通用地 描述 output 的花费策略。
我们用 N
表示 股东的数量,M
表示 资金管理人的数量(允许在超时后与 cosigning servers 一起解锁 unvault 交易 output),
X
表示 unvault 交易中的 CSV 值。此处的每种交易类型都表示 replace-by-fee (RBF)。
虽然在技术上可能拥有更多的参与者,但我们明确地将 股东和管理人的数量限制为 20
。
将资金存入 vault 的交易。
N/A
至少一个支付给 deposit_descriptor
的 output,其中:
deposit_descriptor = wsh(deposit_witness_script)
deposit_witness_script = thresh(N, pubkey1, pubkey2, ..., pubkeyN)
花费 deposit_tx
deposit output 的交易,并创建一个
unvault output,该 output 在 X
个区块后可以由 N
个 股东或管理人(与 cosigning
servers 一起)花费。
Unvault 交易使用固定的 6 sat/WU
费率进行签名。这是一个完全任意的值,选择它是为了避免在
网络上大量交易且网络 mempools 的最低费率增加的情况下,过早地阻止操作。
如果此交易的费用不具竞争力,可以提高(使用 CPFP output),但如果网络 mempools 的最低费率高于
24 sat/vb
,则在其费用不具竞争力时可能不会转发,直到 package relay 部署在比特币网络上。
<deposit_tx txid>
<deposit_tx vout>
0xfffffffd
<empty>
satisfy(deposit_descriptor)
count: 2
outputs[0]:
<deposit_tx output value - tx_fee - 330>
unvault_descriptor
outputs[1]:
30000
cpfp_descriptor
其中:
unvault_descriptor = wsh(unvault_witness_script)
unvault_witness_script = or(1@thresh(len(stakeholders), stakeholders), 9@and(thresh(len(managers), managers), and(thresh(len(cosigners), cosigners), older(X))))
cpfp_descriptor = wsh(cpfp_witness_script)
cpfp_witness_script = thresh(1, pubkey1, pubkey2, ..., pubkeyM) # The pubkeys being the managers'
花费一个或多个 unvault_tx
output[0]
的交易,通过 [M
+ cosigners]
路径,只能在 X
个区块后花费。
CPFP output value 根据实际交易大小进行调整。
<unvault_tx txid>
X
<empty>
satisfy(unvault_descriptor)
2 * 32 * tx_size_vbytes
cpfp_descriptor
使用 N-of-N 路径花费 unvault_tx
output[0]
的交易,并
支付回 deposit output(因此是另一个 vault deposit 交易)。
Cancel 交易使用 ALL | ANYONECANPAY
签名哈希标志签名,以
允许 watchtowers(或任何其他人)附加 fee-bumping input。
Cancel 交易以固定的 22 sat/WU
费率签名。 这是为了
减少 每个 watchtowers 的资金负担。
<unvault_tx txid>
0xfffffffd
<empty>
satisfy(unvault_descriptor)
<unvault_tx outputs[0] value - tx_fee>
deposit_descriptor
Emergency 交易用作威慑针对 股东资金的威胁。它们将币锁定到我们称之为 EDV(Emergency Deep Vault)的东西:一个由参与者选择的脚本,并由 P2WSH 的属性保持混淆,因为 emergency 交易永远不会被使用。
两种 Emergency 交易都以固定的 75 sat/WU
费率签名。
两种 Emergency 交易都使用 ALL | ANYONECANPAY
签名哈希标志签名,
以允许 watchtowers(或任何其他人)附加 fee-bumping input。
管理者不知道 Emergency scriptPubKey
。
通过 N
-of-N
路径将 deposit_tx
output 花费到 EDV 的交易。
<deposit_tx txid>
<deposit_tx vout>
0xfffffffd
<empty>
satisfy(deposit_descriptor)
<deposit_tx output value - fees>
0x00 SHA256(<EDV_script>)
此交易通过 N
-of-N
路径将 unvault_tx
output[0]
花费到 EDV。
<unvault_tx txid>
0xfffffffd
<empty>
satisfy(unvault_descriptor)
<unvault_tx outputs[0] value - fees>
0x00 SHA256(<EDV_script>)
Bypass 交易用于 股东需要立即访问资金的情况。Bypass
交易避免了 股东设置并由 watchtowers 强制执行的费用控制。Bypass
交易花费 deposit_tx
并支付给任意地址。
<deposit_tx txid>
<deposit_tx vout>
0xfffffffd
<empty>
satisfy(deposit_descriptor)
未指定
- 原文链接: github.com/revault/pract...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!