跨链作为区块链一种不可或缺的技术,我们研究跨链,以更好地了解区块链之间是如何相互通信。
最初构建区块链时,他们设想能够提供“一刀切”的解决方案,这意味着所有交易,智能合约或其他任何事物都在单个链上执行。 但是,现在很明显,这样的系统不太实用,尤其是在存在可伸缩性限制和创新约束的情况下。
跨链是两个相对独立的区块链之间的互操作性。换句话说,由于区块链是以标准化的方式构建的,因此它允许区块链彼此通信。跨链实施主要以资产交换和资产转移为代表,既是区块链世界的重要组成部分,也是PPIO的重要研究方向。使用交叉链,可以避免单链的局限性。今天,我们将探讨Cosmos跨链协议的逻辑结构。
根据不同的基础技术,跨链的相互作用可以分为同构的跨链和异类的跨链。对于同构链,安全机制,共识算法,网络拓扑和块生成验证逻辑是一致的,它们之间的跨链交互相对简单。
另一方面,异构链的跨链交互相对复杂,并且包括诸如针对比特币的PoW算法和针对Tendermint的PBFT共识算法之类的技术。区块组成和确定性保证机制差异很大,因此直接设计跨链交互机制并不容易。异构链之间的跨链交互通常需要第三方辅助服务。
如何实现跨链同构?
基于Tendermint开发的链可以采用同构跨链。 Cosmos中同构链之间的资产转移原理如下。
由于Tendermint使用PBFT+POS共识算法,因此只有在2/3个验证者同意的情况下,才会将区块提交到网络。可以通过检查区块头以验证区块头在特定链中是否合法来验证验证器信息。例如Tendermint正在开发两条链:链A和链B。现在假设资产需要在链上转移。首先,两个链A和B将相互注册。在注册过程中,A和B认识到它们的独立性。然后链将相互发送各自的创世块和ChainID(用于表示不同的链)。由于创世块包含验证者信息,因此在注册后,A和B链将具有另一条链的验证者信息以及区块头信息。
现在,需要将A中的资产转移到B。首先用户可以将跨链交易包Tx发送到A。A执行packageTx,销毁或锁定相关资产,然后将packageTx写入出口。出口可视为放置所有外部通知的跨链交易的邮箱。
为了将在链A中发生的事件通知链B,需要一个中继器。中继器负责将跨链消息从链A的出口转发到链B的出口。在这种情况下,中继器在链A的出口中查询packageTx,并获得packageTx的Merkle证明。该信息被打包到IBC Package PostTx事务中并发送到链B,链B查询关于packageTx位置的区块头信息。它还将区块头信息打包到IBCUpdate Chain Tx中,并将其发送到链B。注意中继器支付了IBC Package PostTx和IBCUpdate Chain Tx的交易成本。
链B接收到IBCPacketPostTx事务后,它首先通过该链中的验证器检查IBCUpdateChainTx中的区块头是否为链A的一部分,然后验证IBCPacketPostTx中跨链事务的Merkle证明是否等于该区块IBCUpdateChainTx中的头哈希。当所有支票都通过时,B链开始执行相关操作(对于B链,这意味着生成相关资产等)。
同构跨链实现方法
Cosmos中的跨链由IBC协议实现。 Cosmos生态系统中定义了以下IBC协议软件包:IBCRegisterChainTx,IBCUpdateChainTx,IBCPacketCreateTx,IBCPacketPostTx。
IBCRegisterChainTx
在跨链的开头使用以下代码注册和发送创世纪区块。验证者会将其交给另一方。此代码只能执行一次,多次执行将报告错误。
type IBCRegisterChainTx struct {
BlockchainGenesis
}
type BlockchainGenesis struct {
ChainID string
Genesis string
}
IBCUpdateChainTx
用于将当前链上的最新区块信息,区块高度和区块头信息传输到另一个链。
type IBCUpdateChainTx struct {
Header tm.Header
Commit tm.Commit
// TODO: NextValidators
}
IBCPacketCreateTx
当链条接收到交易包时,它将执行跨链交易并将相关信息放入出口。
type IBCPacketCreateTx struct {
Packet
}
type Packet struct {
SrcChainID string
DstChainID string
Sequence uint64
Type string // redundant now that Type() is a method on Payload ?
Payload Payload
}
IBCPacketPostTx
跨链交易执行后,此软件包包含Merkle证明,然后由中继器将其发送到另一个链。
type IBCPacketPostTx struct {
FromChainID string
// The immediate source of the packet, not always Packet.SrcChainID
FromChainHeight uint64
// The block height in which Packet was committed, to check Proof
Packet
Proof *merkle.IAVLProof // Merkle证明
}
plugin
从上面的协议我们可以看到,这些协议包实际上是一个事务。Tendermint有一个plugin模块,以方便我们扩展。 我们可以在plugin中实现接口,并使用IBC plugin执行跨链交易。
type Plugin interface {
// Name of this plugin, should be short.
Name() string
// Run a transaction from ABCI DeliverTx
RunTx(store KVStore, ctx CallContext, txBytes []byte) (res abci.Result)
// Other ABCI message handlers
SetOption(store KVStore, key, value string) (log string)
InitChain(store KVStore, vals []*abci.Validator)
BeginBlock(store KVStore, hash []byte, header *abci.Header)
EndBlock(store KVStore, height uint64) abci.ResponseEndBlock
}
上面的代码是plugin接口的定义。可以看出,该plugin与ABCI接口非常相似,因此IBC事务在deliverTx处交给了该plugin。
// ABCI::DeliverTx
func (app *BaseApp) DeliverTx(txBytes []byte) (res abci.Result) {
// Exec tx
switch tx := tx.(type) {
case *types.SendTx:
// 执行正常交交易
case *types.AppTx:
// 执行plugin中的交易
plugin := pgz.GetByName(tx.Name)
res = plugin.RunTx(cache, ctx, tx.Data)
return res
default:
return abci.ErrBaseEncodingError.SetLog(“Unknown tx type”)
}
return res
}
异构跨链PegZone
对于使用POW共识算法的链,例如比特币和以太坊,它们如何使用Tendermint的IBC协议跨链运作?由于这些链中使用了POW算法,因此我们无法通过验证器验证这些链的区块。我们也无法使用Merkle证明来证明这些链上跨链交易的合法性。此外,POW共识算法生成的区块是概率性最终的,并且有可能被回滚。我们需要确保跨链交易是真正的最终交易,并且不会回滚。
基于以上考虑,我们使用PegZone方案执行异构跨链。PegZone本身实际上是Tendermint开发的代理链,它实时跟踪原始链的状态,并设置安全阈值以等待原始链块的增长。当数字达到安全阈值时,原始链状态被视为具有伪实时终结性(回滚概率小),这与轻客户端钱包验证的原理相同。例如比特币安全阈值通常设置为6,而ETF安全阈值可以设置为20或100。PegZone本身具有实时确定性,可以通过IBC连接到Cosmos Hub以实现跨链。
下图使用PegZone或Peggy以及以太坊作为跨链接的示例。
从上图可以看出,PegZone可分为五个部分:
1. smart contract:资产托管在以太坊和Cosmos中代币托管中的作用。它主要提供四种方法:锁定,解锁,铸造和销毁。
2. witness:这是一个完整的以太坊节点,它监视以太坊合约的事件并等待生成100个区块。封装的见证人Tx被提交给PegZone以证明以太坊区块链上的状态变化。
3. PegZone:PegZone是基于Tendermint的区块链,可维护用户帐户信息,允许用户之间进行资产转移并提供交易查询。
4. signer:Secp256k1用于签名交易,以便可以通过智能合约有效地验证签名;这对应于智能合约的验证者公钥集。
5. relay:relay负责所有事务转发。该角色将已签名的SignTx转发到智能合约。
Cosmos Hub角色
在Cosmos中的basecoin跨链演示中,两个链(链A和链B)被跨链接,并相互发送IBC注册链Tx进行注册。 跨链时,将直接发送IBC协议包以执行资产的跨链操作。但是这种直接连接有问题。随着访问网络的区域(相当于一个独立的区块链)的数量增加,如果直接实现通信,链接的数量将以平方的顺序增加。以连接到网络的100个区域为例。 果每个区域直接需要建立IBC连接,则网络需要n(n-1)/ 2 = 4950个通信链路。如此快速的增长显然将压倒整个网络。
Hub的概念可以解决有关此问题的问题。在Cosmos生态系统中,所有区域都将注册并向集线器发送IBC软件包。
Hub运行模式
Hub管理许多区域。所有区域都需要向Hub注册。Hub跟踪每个区域的状态。每个区域将其产生的所有新区块信息报告给Hub。同时每个区域还需要同步Hub的状态。每个区域不是通过区域之间直接通信,而是通过将IBC发送到Hub进行间接通信。
当区域建立与Hub的IBC连接时,它可以自动访问连接到Hub的其他区域,这意味着一个区域不需要连接到其他区域。
当一个区域从连接到Hub的另一个区域接收令牌时,它只需要信任Hub和该区域,而不必信任网络中的所有其他区域。
责任编辑;zl
评论
查看更多