Appearance
btc跨链设计
凡是涉及到消费BTC UTXO的都需要分布式签名协商 凡是涉及到不确定消费BTC 哪个UTXO的都需要PBFT协商 因此进行PBFT协商,只有prepareLockout和原来的不一致.
PrepareLockin过程
1. 用户在主链构造PrepareLockin调用,将比特币锁定到指定的地址
- 如何构造脚本?
- 如何验证脚本?
- 发起交易用sendrawtransaction 需要尽快熟悉btcd代码,
2. 等待确认块数以后,用户选取公证人在侧链做PrepareLockin.
- 注意区块时间的转换,留出充裕的时间 这里我觉得需要为每条链指定好相应的参数配置,参见chancfg/params.go
go
type Params struct {
- hash密码机制要保持一致,能够验证.
3. 公证人通过PBFT协商nonce,执行侧链PrepareLockin
和以太坊一样,没有什么需要特殊处理
4. 用户在凭密码解锁侧链Lockin
为用户提供和以太坊一样的服务就可以,dnc也不需要改动
5.成功以后,发起分布式签名,在主链发起交易将PrepareLockin转换为普通UTXO.
- 如何构建解锁脚本
- 其他公证人何验证脚本
5. 用户和公证人取消的过程
用户和公证人可以分别在主链侧链进行取消.
PrepareLockout过程
1. 用户在侧链调用合约PrepareLockout,将侧链币锁定.
和以太坊一样,没什么变动
2. 待确认块数以后,用户选取公证人在主链做PrepareLockout.
1.注意时间转换 2.
3. 公证人通过PBFT协商,选取合适的UTXO,执行主链PrepareLockout
- 如何构建脚本
- 公证人如何验证脚本
- 如何选取相关UTXO(一开始可以最简单粗暴匹配最合适的(一个in就够的那种))
4. 用户凭密码解锁主链Lockout,
- 如何构建脚本,(DNC)
5. 第二部中的公证人检测到密码出现以后,在侧链执行lockout
PBFT nonce协商即可.
6. 用户以及公证人在侧链主链取消lockout的过程
公证人以及用户如何知道btc主链上的与自己相关的UTXO
公证人相关UTXO
- 侧链preparelockin相关UTXO 当用户在侧链披露密码以后,公证人需要在主链进行lockin,此utxo来源为用户请求公证人在侧链进行preparelockin时记录
- 公证人主链lockin结果 消费步骤1中的utxo的输出.
- 主链preparelockout相关UTXO 此UTXO为用户在侧链执行preparelockout以后,公证人从步骤2中的utxo选取合适进行输出得到, 此UTXO正常一般是有两个输出,一个是找钱,一个是可以取消的output.
- 主链取消lockout的输出 步骤如果发生取消,那么需要更新相关utxo记录,取消的过程也需要公证人分布式协商签名