比特币 - Revault 交易

  • revault
  • 发布于 2022-05-14 18:11
  • 阅读 12

本文档描述了Revault交易的结构和类型,Revault是一种使用多重签名和时间锁的比特币 vault 方案,通过定义不同类型的交易(如 deposit、unvault、spend、cancel 和 emergency 交易)及其输入输出结构,展示了如何在多个参与者之间安全地管理比特币资金,支持紧急情况下的资金转移和费用调整。

Revault 交易

所有交易均为 version 2,并使用 version 0 的原生隔离见证脚本。

我们使用 miniscript 和 output descriptors 来通用地 描述 output 的花费策略。

我们用 N 表示 股东的数量,M 表示 资金管理人的数量(允许在超时后与 cosigning servers 一起解锁 unvault 交易 output), X 表示 unvault 交易中的 CSV 值。此处的每种交易类型都表示 replace-by-fee (RBF)。

虽然在技术上可能拥有更多的参与者,但我们明确地将 股东和管理人的数量限制为 20

deposit_tx

将资金存入 vault 的交易。

IN

N/A

OUT

至少一个支付给 deposit_descriptor 的 output,其中:

deposit_descriptor = wsh(deposit_witness_script)
deposit_witness_script = thresh(N, pubkey1, pubkey2, ..., pubkeyN)

unvault_tx

花费 deposit_tx deposit output 的交易,并创建一个 unvault output,该 output 在 X 个区块后可以由 N 个 股东或管理人(与 cosigning servers 一起)花费。

Unvault 交易使用固定的 6 sat/WU 费率进行签名。这是一个完全任意的值,选择它是为了避免在 网络上大量交易且网络 mempools 的最低费率增加的情况下,过早地阻止操作。 如果此交易的费用不具竞争力,可以提高(使用 CPFP output),但如果网络 mempools 的最低费率高于 24 sat/vb,则在其费用不具竞争力时可能不会转发,直到 package relay 部署在比特币网络上。

  • version: 2
  • locktime: 0
IN
  • count: 1
  • inputs[0]:
    • txid: <deposit_tx txid>
    • vout: <deposit_tx vout>
    • sequence: 0xfffffffd
    • scriptSig: <empty>
    • witness: satisfy(deposit_descriptor)
OUT
  • count: 2

  • outputs[0]:

    • value: <deposit_tx output value - tx_fee - 330>
    • scriptPubkey: unvault_descriptor
  • outputs[1]:

    • value: 30000
    • scriptPubkey: 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'

spend_tx

花费一个或多个 unvault_tx output[0] 的交易,通过 [M + cosigners] 路径,只能在 X 个区块后花费。 CPFP output value 根据实际交易大小进行调整。

  • version: 2
  • locktime: 0
IN
  • count: 1
  • inputs[0]:
    • txid: <unvault_tx txid>
    • sequence: X
    • scriptSig: <empty>
    • witness: satisfy(unvault_descriptor)
OUT
  • count: 1
  • outputs[0]:
    • value: 2 * 32 * tx_size_vbytes
    • scriptPubkey: cpfp_descriptor
  • outputs[1]:
    • value: N/A (可能有很多)
    • scriptPubkey: N/A
  • outputs[n]:
    • value: N/A (可能有很多)
    • scriptPubkey: N/A

cancel_tx

使用 N-of-N 路径花费 unvault_tx output[0] 的交易,并 支付回 deposit output(因此是另一个 vault deposit 交易)。

Cancel 交易使用 ALL | ANYONECANPAY 签名哈希标志签名,以 允许 watchtowers(或任何其他人)附加 fee-bumping input。

Cancel 交易以固定的 22 sat/WU 费率签名。 这是为了 减少 每个 watchtowers 的资金负担。

  • version: 2
  • locktime: 0
IN
  • count: 1
  • inputs[0]:
    • txid: <unvault_tx txid>
    • vout: 0
    • sequence: 0xfffffffd
    • scriptSig: <empty>
    • witness: satisfy(unvault_descriptor)
OUT
  • count: 1
  • outputs[0]:
    • value: <unvault_tx outputs[0] value - tx_fee>
    • scriptPubkey: deposit_descriptor

emergency_txs

Emergency 交易用作威慑针对 股东资金的威胁。它们将币锁定到我们称之为 EDV(Emergency Deep Vault)的东西:一个由参与者选择的脚本,并由 P2WSH 的属性保持混淆,因为 emergency 交易永远不会被使用。

两种 Emergency 交易都以固定的 75 sat/WU 费率签名。

两种 Emergency 交易都使用 ALL | ANYONECANPAY 签名哈希标志签名, 以允许 watchtowers(或任何其他人)附加 fee-bumping input。

管理者不知道 Emergency scriptPubKey

deposit_emergency_tx

通过 N-of-N 路径将 deposit_tx output 花费到 EDV 的交易。

  • version: 2
  • locktime: 0
IN
  • count: 1
  • inputs[0]:
    • txid: <deposit_tx txid>
    • vout: <deposit_tx vout>
    • sequence: 0xfffffffd
    • scriptSig: <empty>
    • witness: satisfy(deposit_descriptor)
OUT
  • count: 1
  • outputs[0]:
    • value: <deposit_tx output value - fees>
    • scriptPubkey: 0x00 SHA256(<EDV_script>)

unvault_emergency_tx

此交易通过 N-of-N 路径将 unvault_tx output[0] 花费到 EDV。

  • version: 2
  • locktime: 0
IN
  • count: 1
  • inputs[0]:
    • txid: <unvault_tx txid>
    • vout: 0
    • sequence: 0xfffffffd
    • scriptSig: <empty>
    • witness: satisfy(unvault_descriptor)
OUT
  • count: 1
  • outputs[0]:
    • value: <unvault_tx outputs[0] value - fees>
    • scriptPubkey: 0x00 SHA256(<EDV_script>)

bypass_tx

Bypass 交易用于 股东需要立即访问资金的情况。Bypass 交易避免了 股东设置并由 watchtowers 强制执行的费用控制。Bypass 交易花费 deposit_tx 并支付给任意地址。

  • version: 2
  • locktime: 0
IN
  • count: 1
  • inputs[0]:
    • txid: <deposit_tx txid>
    • vout: <deposit_tx vout>
    • sequence: 0xfffffffd
    • scriptSig: <empty>
    • witness: satisfy(deposit_descriptor)
OUT

未指定

  • 原文链接: github.com/revault/pract...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
revault
revault
江湖只有他的大名,没有他的介绍。