比特币转接桥/网关
比特币转接桥/网关是ChainX上实现比特币资产跨链的模块。
对于Bitcoin链而言,ChainX采用
总结而言,ChainX对于Bitcoin链采用“单向轻节点验证,多签控制原链资产”的模型。
比特币轻节点验证:采用比特币轻节点验证逻辑,才有比特币块头的情况下通过默克尔证明验证交易真实存在。
比特币多签:在比特币链上采用多签脚本的模式,实现比特币上的多重签名技术。
比特币信托:在ChainX链上注册并持有比特币多签私钥的角色,由信托候选者经过信托换届后可成为比特币信托。
比特币信托候选者:首先必须是ChainX验证者,然后将一组冷热公钥注册到ChainX链上后即可成为比特币信托候选者。
比特币信托换届:从上一届信托指定下一个信托,并在ChainX链上信托多签投票后通过决定下一届信托并产生信托多签地址的过程。
比特币多签地址:在信托换届时由信托们注册的冷热公钥根据比特币多签脚本生成的冷热地址。
信托多签:当前届的信托在ChainX链上有一个多签地址,信托通过该多签地址可以进行一些决议,如信托缓解,设置比特币提现手续费等
比特币Relay:一个链外程序,将比特币区块头及涉及与ChainX相关的比特币的交易提交到ChainX链上。
ChainX在Runtime环境内实现了一个完全的比特币轻节点验证逻辑模块,该逻辑模块从某个比特币块高开始(genesis时决定),接受后续高度的比特币区块,并拥有切换“最重工作量证明链”的功能。因此若Bitcoin链上产生的最新区块被比特币Relay正常提交到ChainX上后,比特币转接桥就是具备了一份Bitcoin区块头信息的拷贝,拥有比特币的可验证的元数据。
比特币转接桥中的轻节点验证逻辑将会验证比特币块头:
等SPV应该具备的验证逻辑,同时具备与Bitcoin链相同的最重工作量证明下的确认逻辑,假设确认数是m,在接受了第n个块头后,会将第n-m+1个区块标记为确认,参见:
在比特币转接桥中,只接受外部提交的比特币区块头数据,而验证数据是否合法与轻节点业务逻辑均在ChainX的Runtime中独立运行决策,不受外部影响。
因此在ChainX中的比特币轻节点的验证与确认区块逻辑是
在ChainX 1.0 中,与ChainX相关的比特币交易可以先提交到转接后,再等待到比特币区块头确认后执行交易处理流程,而在ChainX 2.0简化了这一过程,只允许提交在ChainX链上已经确认的区块头之前的比特币交易,在还未确认的区块头下的比特币交易不允许提交。
在ChainX链中,持有多签私钥的角色称为“信托(trustee)”。信托主要负责管理资产安全及处理比特币提现申请。
信托在ChainX链上需要处理的主要流程为处理提现,执行流程如下:
另一方面信托需要根据已经充值到ChainX的热地址的余额,周期性移动热冷地址中的比特币以保证比特币锁定在多签地址中的安全性。移动热冷地址的比特币交易可以被Relay提交到比特币转接桥中,但是不会有特别处理。
关于多签及信托的更多内容请参见 信托
由以上介绍可知,比特币转接桥采用了单向Relay加信托多签的模式维护比特币转接桥的比特币跨链过程。因此总体的比特币转接桥业务逻辑如下图所示:
由上图可以看到:
前置条件:
ChainX链上首先需要有信托生成对应的热冷信托多签地址。
比特币区块头:
充值过程:
提现过程:
用户的比特币充值交易没有携带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,并移除与这个地址相关的未认领充值交易。