将 L1 资金存入 Spark 非常简单。SE 和用户协作生成聚合公钥并从中派生出 pay-to-taproot 地址。然后他们共同创建并签署两笔交易:一笔退出交易,以及在它之前触发退出交易相对时间锁的中间分支交易。一旦这两笔交易都签署完毕,用户最终可以将存款交易广播到 pay-to-taproot 地址。请注意,资金交易的输入应该是隔离见证输入。现在用户在 Spark 中拥有一个叶子。

逐步流程

  1. 密钥生成:
    • 用户和 SE 一起生成聚合公钥,这是用户公钥和 SE 公钥(本身由各个 SO 公钥派生)的总和。然后为此密钥派生 pay-to-taproot 地址。
    • PubKeyCombined=PubKeyUser+PubKeySE\text{PubKey}_{Combined} = \text{PubKey}_{User} + \text{PubKey}_{SE}
    • 其中 PubKeySE=λiPubKeySOi\text{PubKey}_{SE} = \sum \lambda_i * \text{PubKey}_{SO_i}
    • λi\lambda_ix0=0x_0 = 0ii 的拉格朗日系数
  1. 设置和签名:
    • 用户构建一笔将资金发送到 pay-to-taproot 地址的存款交易,但不广播它。
    • 用户和 SE 协作创建并签署两笔交易:
      1. 一笔没有时间锁的中间分支交易(不广播),消费存款交易。这笔交易触发其下叶子的相对时间锁。
      2. 一笔从中间交易消费的退出交易。如果用户希望单方面退出 Spark,则广播此交易。
    • 所有相关方都签署这两笔交易,以提供单方面退出途径。Spark 兼容钱包应验证所有相关交易的有效性。
  1. 存储:
    • 用户和 SE 安全存储已签名的交易
  1. 用户存款和确认:
    • 用户广播在步骤 2 中创建的存款交易。一旦 L1 交易得到确认,资金就可以在 Spark 内转移。