btc跨链设计

btc跨链设计

凡是涉及到消费BTC UTXO的都需要分布式签名协商
凡是涉及到不确定消费BTC 哪个UTXO的都需要PBFT协商
因此进行PBFT协商,只有prepareLockout和原来的不一致.

PrepareLockin过程

1. 用户在主链构造PrepareLockin调用,将比特币锁定到指定的地址

  1. 如何构造脚本?
  2. 如何验证脚本?
  3. 发起交易用sendrawtransaction
    需要尽快熟悉btcd代码,

    2. 等待确认块数以后,用户选取公证人在侧链做PrepareLockin.

  4. 注意区块时间的转换,留出充裕的时间
    这里我觉得需要为每条链指定好相应的参数配置,参见chancfg/params.go

    type Params struct {
    
  5. hash密码机制要保持一致,能够验证.

3. 公证人通过PBFT协商nonce,执行侧链PrepareLockin

和以太坊一样,没有什么需要特殊处理

4. 用户在凭密码解锁侧链Lockin

为用户提供和以太坊一样的服务就可以,dnc也不需要改动

5.成功以后,发起分布式签名,在主链发起交易将PrepareLockin转换为普通UTXO.

  1. 如何构建解锁脚本
  2. 其他公证人何验证脚本

5. 用户和公证人取消的过程

用户和公证人可以分别在主链侧链进行取消.

PrepareLockout过程

1. 用户在侧链调用合约PrepareLockout,将侧链币锁定.

和以太坊一样,没什么变动

2. 待确认块数以后,用户选取公证人在主链做PrepareLockout.

1.注意时间转换



3. 公证人通过PBFT协商,选取合适的UTXO,执行主链PrepareLockout

  1. 如何构建脚本
  2. 公证人如何验证脚本
  3. 如何选取相关UTXO(一开始可以最简单粗暴匹配最合适的(一个in就够的那种))


4. 用户凭密码解锁主链Lockout,

  1. 如何构建脚本,(DNC)


5. 第二部中的公证人检测到密码出现以后,在侧链执行lockout

PBFT nonce协商即可.

6. 用户以及公证人在侧链主链取消lockout的过程

公证人以及用户如何知道btc主链上的与自己相关的UTXO

公证人相关UTXO

  1. 侧链preparelockin相关UTXO
    当用户在侧链披露密码以后,公证人需要在主链进行lockin,此utxo来源为用户请求公证人在侧链进行preparelockin时记录
  2. 公证人主链lockin结果
    消费步骤1中的utxo的输出.
  3. 主链preparelockout相关UTXO
    此UTXO为用户在侧链执行preparelockout以后,公证人从步骤2中的utxo选取合适进行输出得到, 此UTXO正常一般是有两个输出,一个是找钱,一个是可以取消的output.
  4. 主链取消lockout的输出
    步骤如果发生取消,那么需要更新相关utxo记录,取消的过程也需要公证人分布式协商签名