Skip to content
On this page

btc跨链设计 ​

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

PrepareLockin过程 ​

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

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

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

  1. 注意区块时间的转换,留出充裕的时间 这里我觉得需要为每条链指定好相应的参数配置,参见chancfg/params.go
go
type Params struct {
  1. hash密码机制要保持一致,能够验证.

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

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

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

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

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

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

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

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

PrepareLockout过程 ​

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

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

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

1.注意时间转换 2.

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记录,取消的过程也需要公证人分布式协商签名