比特币转接桥/网关是ChainX上实现比特币资产跨链的模块。
对于Bitcoin链而言,ChainX采用
- 比特币轻节点验证(SPV)保证比特币的充值及提现确认过程安全性
- 比特币多签锁定持有比特币资产及由多签私钥持有者控制比特币提现
总结而言,ChainX对于Bitcoin链采用“单向轻节点验证,多签控制原链资产”的模型。
比特币轻节点验证:采用比特币轻节点验证逻辑,才有比特币块头的情况下通过默克尔证明验证交易真实存在。
比特币多签:在比特币链上采用多签脚本的模式,实现比特币上的多重签名技术。
比特币信托:在ChainX链上注册并持有比特币多签私钥的角色,由信托候选者经过信托换届后可成为比特币信托。
比特币信托候选者:首先必须是ChainX验证者,然后将一组冷热公钥注册到ChainX链上后即可成为比特币信托候选者。
比特币信托换届:从上一届信托指定下一个信托,并在ChainX链上信托多签投票后通过决定下一届信托并产生信托多签地址的过程。
比特币多签地址:在信托换届时由信托们注册的冷热公钥根据比特币多签脚本生成的冷热地址。
信托多签:当前届的信托在ChainX链上有一个多签地址,信托通过该多签地址可以进行一些决议,如信托缓解,设置比特币提现手续费等
比特币Relay:一个链外程序,将比特币区块头及涉及与ChainX相关的比特币的交易提交到ChainX链上。
ChainX在Runtime环境内实现了一个完全的比特币轻节点验证逻辑模块,该逻辑模块从某个比特币块高开始(genesis时决定),接受后续高度的比特币区块,并拥有切换“最重工作量证明链”的功能。因此若Bitcoin链上产生的最新区块被比特币Relay正常提交到ChainX上后,比特币转接桥就是具备了一份Bitcoin区块头信息的拷贝,拥有比特币的可验证的元数据。
比特币转接桥中的轻节点验证逻辑将会验证比特币块头:
- 父hash存在性
- 工作量证明
- 时间范围
等SPV应该具备的验证逻辑,同时具备与Bitcoin链相同的最重工作量证明下的确认逻辑,假设确认数是m,在接受了第n个块头后,会将第n-m+1个区块标记为确认,参见:
在比特币转接桥中,只接受外部提交的比特币区块头数据,而验证数据是否合法与轻节点业务逻辑均在ChainX的Runtime中独立运行决策,不受外部影响。
因此在ChainX中的比特币轻节点的验证与确认区块逻辑是
在ChainX 1.0 中,与ChainX相关的比特币交易可以先提交到转接后,再等待到比特币区块头确认后执行交易处理流程,而在ChainX 2.0简化了这一过程,只允许提交在ChainX链上已经确认的区块头之前的比特币交易,在还未确认的区块头下的比特币交易不允许提交。
在ChainX链中,持有多签私钥的角色称为“信托(trustee)”。信托主要负责管理资产安全及处理比特币提现申请。
信托在ChainX链上需要处理的主要流程为处理提现,执行流程如下:
- 信托周期性根据ChainX链上的提现申请组建比特币提现交易并发送到ChainX链的比特币转接桥;
- 比特币转接桥根据信托的提现请求锁定对应提现申请;
- 信托根据ChainX链上的比特币交易原文进行比特币多签签名;
- 当最后一个多签签名完成后,比特币提现交易会被Relay提交到比特币网络中;
- 待比特币网络打包后,Relay发现信托提交的比特币提现交易,将提现交易发送到ChainX链的比特币转接桥;
- 比特币转接桥通过轻节点方案验证提现交易有效性,销毁在ChainX链上对应的提现申请及X-BTC代币。
另一方面信托需要根据已经充值到ChainX的热地址的余额,周期性移动热冷地址中的比特币以保证比特币锁定在多签地址中的安全性。移动热冷地址的比特币交易可以被Relay提交到比特币转接桥中,但是不会有特别处理。
关于多签及信托的更多内容请参见 信托
由以上介绍可知,比特币转接桥采用了单向Relay加信托多签的模式维护比特币转接桥的比特币跨链过程。因此总体的比特币转接桥业务逻辑如下图所示:
由上图可以看到:
-
前置条件:
ChainX链上首先需要有信托生成对应的热冷信托多签地址。
-
比特币区块头:
- 比特币区块头由relay提交(也可以通过Substrate offchain worker 提交)
- 比特币转接桥验证比特币区块头并组建比特币区块的最重工作量链。
- 转接桥会根据最新的比特币区块头去确认在之前的某个区块为确认区块。
-
充值过程:
- 链上首先具备区块;
- 用户转账到信托的热地址,并在交易中的OP_RETURN中携带用户的ChainX地址及其他信息,携带了信息比特币转接桥才可识别出这笔充值转账交易是与哪个ChainX用户相关;
- Relay发现这笔交易,并将这笔交易提交到转接桥中;(1.0中发现交易就可提交,直到确认才会执行,2.0中只能提交确认过的交易)
- 当这笔交易是确认过的,执行这笔交易。当这笔交易是充值交易时,从OP_RETURN中解析出ChainX地址,发放对应的X-BTC金额至该ChainX账户;
- 至此,比特币充值流程执行完毕。
-
提现过程:
- 用户申请提现X-BTC;
- ChainX转接桥/网关模块中的记录模块会锁定对应的X-BTC并记录用户申请信息,该信息有唯一ID与其关联;
- 信托周期性获取当前申请中的提现,并根据提现信息组件比特币提现交易原文;
- 提现交易原文发送到ChainX比特币转接桥中后会锁定对应提现记录,之后其他的信托基于这个比特币原文进行比特币多签签名;
- 签名完成后比特币交易会提交到比特币网络中;
- 打包后relay会提交该提现交易至转接桥中,确认后会释放对应提现记录及销毁锁定的X-BTC;
- 至此,比特币提现流程执行完毕。
-
用户的比特币充值交易没有携带OP_RETURN,或OP_RETURN中解析不出有效的用户ChainX信息。
对于这类问题,ChainX的比特币转接桥制定一种协议:
比特币转接桥认为一笔对于ChainX的比特币充值交易,会与这笔比特币交易的第一个input中含有的地址相关,这个地址的持有人一定具备这笔充值交易的控制权。
因此若交易中无法获取有效的ChainX用户信息,则会在ChainX的比特币转接桥中记录该交易的第一个input的地址与这笔充值交易的一个关联关系,并称呼这种充值交易为“未认领充值交易”。
当后续若出现使用这个相同地址作为第一个input地址的另一笔充值交易,且这笔充值交易携带有效的OP_RETURN信息能获取到对应的ChainX账户地址时,将会释放与这个地址相关的未认领充值交易至这个ChainX账户地址中。
例如:
假设有一笔交易tx1 为:
input1(address1) |---------| input2(address2) |---------| output1 (信托地址) value 100000
则这笔交易执行后将会在链上记录为:
BtcAddress => BtcDepositCache(tx_hash, 100000)
当将来比特币转接桥收到了另一笔充值交易为:
input1(address1) |--------| |--------| output1(信托地址) value 99999 |--------| output(OP_RETURN) => ChainX address: 5Xxxxxxxxx
此时将会给ChainX地址5Xxxxxxxxx 发放
100000 + 99999 = 199999
的X-BTC,并移除与这个地址相关的未认领充值交易。