首页 > 世链号 > 【coinparkAPP下载】Cosmos 跨链协议研究
币风港  

【coinparkAPP下载】Cosmos 跨链协议研究

摘要:跨链,狭义上来说是两个相对独立的区块链账本间进行资产互操作的过程。

跨链,狭义上来说是两个相对独立的区块链账本间进行资产互操作的过程。跨链的实现形态主要表现为资产互换和资产转移,是区块链世界实现资产,数据交互的一个重要环节,同时也是 PPIO 的重点研究方向。今天我们来一起探究一下 Cosmos 跨链协议的逻辑架构即现实意义。Cosmos 跨链交互根据所跨越的区块链底层技术平台的不同可以分为同构链跨链和异构链跨链:同构链之间安全机制、共识算法、网络拓扑、区块生成验证逻辑都一致,它们之间的跨链交互相对简单。而异构链的跨链交互相对复杂,比如比特币采用 PoW 算法而 Tendermint 采用 PBFT 共识算法,其区块的组成形式和确定性保证机制均有很大不同,直接跨链交互机制不易设计。异构链之间的跨链交互一般需要第三方辅助服务辅助跨链交互。

同构跨链怎么实现?


基于 Tendermint 开发的链都可以采用同构跨链,cosmos 中同构链之间进行资产转移的原理如下。由于 Tendermint 采用 PBFT+POS 共识算法,每个区块都是经过全网 ⅔ 节点签名过的,所以得到 Validator 信息就可以通过对区块头进行校验来验证这个区块头是不是某一个链中的合法区块。ChainA,ChainB 都是用 Tendermint 开发的链,现在 ChainA,ChainB 之间需要进行跨链资产转移,第一步 A,B 两个链之间会相互进行注册,在注册的过程中,A,B 两个链会将各自的创世区块以及 ChainID (用于表示不同链)发送给对方,由于创世区块中含有 Validator 信息,所以通过注册后 A,B 两个链会有对方链的 Validator 信息,以及区块头信息。现在 A 中的资产需要向 B 中转移,首先发送一个跨链交易 packageTx 到 A 中,A 执行这个 packageTx,将相关的资产进行销毁或锁定,接下来将 packageTx 写入 egress 中,egress 可以看成是一个信箱,所有向外部通知的跨链交易的都放入到 egress 中。为了将 A 链中发生的事件通知给 B 链,需要一个 relayer,relayer 是一个中继程序负责将 A 链中 egress 中的跨链消息转发给 B 链,relayer 查询 A 链中 egress 中的 packageTx,并获取 packageTx 的 Merkle Proof,将这些信息打包成 IBCPacketPostTx 交易发送到 B 链上,并查询 packageTx 所在的区块头信息,将区块头信息打包成 IBCUpdateChainTx 发送到 B 链上, 注意这里 relayer 是需要支付 IBCPacketPostTx,IBCUpdateChainTx 执行的交易费用的。B 链接收到 IBCPacketPostTx 交易后开始执行,首先通过 A 链中的 Validator 校验 IBCUpdateChainTx 中的区块头是否是 A 链的,然后校验 IBCPacketPostTx 中跨链交易的 Merkle proof 是否等于 IBCUpdateChainTx 中的区块头 hash。当所有校验全部通过时 B 链开始执行相关操作(在 B 链是生成相关资产等)

Cosmos 跨链协议研究同构跨链实现方法# 跨链协议 *cosmos 中的跨链是通过 IBC 协议实现,cosmos 中一共定义以下几个 IBC 协议包 :IBCRegisterChainTx, IBCUpdateChainTx, IBCPacketCreateTx, IBCPacketPostTx。IBCRegisterChainTx* 在跨链开始用来注册,并发送创世区块,Validator 给对方,这个只能执行一次,多次执行会报错。

 * 

[code]
type IBCRegisterChainTx struct { BlockchainGenesis}type BlockchainGenesis struct { ChainID string Genesis string}
[/code]

IBCUpdateChainTx 向另外一个链推送当前链上区块最新信息,区块高度,区块头信息。

[code]
type IBCUpdateChainTx struct { Header tm.Header Commit tm.Commit// TODO: NextValidators}
[/code]

IBCPacketCreateTx 当链收到这个交易包时会执行跨链交易,并将在 egress 中放入相关信息。

[code]
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}
[/code]

IBCPacketPostTx 这个包中包含跨链交易执行后的 Merkle proof,由 relayer 发送给另外一个链。

[code]
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 证明}
[/code]

# plugin
那么如何执行这些跨链协议,从上面协议的定义可以看出,这些协议包其实都是一个交易,Tendermint 为了方便我们扩展,Tendermint 中有一个插件模块,我们可以实现 plugin 中接口,在 ibc 插件中执行跨链交易。Cosmos 跨链协议研究

[code]
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}
[/code]

上面的代码是 plugin 接口的定义,可以看出 plugin 与 abci 接口很类似,所以在 deliverTx 时将 ibc 交易交给 plugin

 * 

[code]
// ABCI::DeliverTxfunc (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 }
[/code]

异构跨链 PegZone 对于 bitcoin, ethereum 这类使用 POW 共识算法的链,如何与使用 Tendermint 的 IBC 协议进行跨链操作呢?由于这些链采用的 POW 算法那么我们无法通过 Validator 对这些链的区块头进行校验,进而无法使用 Merkle proof 来证明这些链上的跨链交易的合法性。其次 POW 共识算法产生的区块是属于概率最终性的,有被回滚的可能性,在进行跨链时我们需要保证跨链的交易是最终确定的且不会被回滚的。基于以上几点考虑,我们采用 PegZone 方案来进行异构跨链,PegZone 本身其实是一条用 Tendermint 开发的代理链,实时跟踪原始链的状态,通过设定一个安全阀值,等待原始链区块增长数达到安全阀值时就认为原始链的状态达到了伪实时最终性(回滚概率小),这点和轻客户端钱包验证是相同的原理,例如比特币安全阀值通常设置为 6,以太坊安全阀值可以设置为 20 或者 100。而 PegZone 本身具备实时最终性,就可以通过 IBC 与 Hub 相连,从而实现跨链。接下来还是用例子来说明下,以 Ethereum 为例来看,有兴趣的朋友可参考 Github 上的 cosmos/Peggy 项目。示意图如下:Cosmos 跨链协议研究上图我们可以看出 PegZone 可以分为 5 个部分:

  • Smart Contract:资产托管的角色,保管以太坊中的代币和 Cosmos 中的代币。主要提供了 lock、unlock、mint、burn 四个方法。
  • Witness:是一个以太坊全节点,监听以太坊合约的 event,并等待 100 个区块产生后,封装 WitnessTx 提交到 PegZone 中来证明在以太坊内状态更改。
  • PegZone:PegZone 是基于 Tendermint 的区块链,负责维护用户的账户信息,允许用户之间资产的转移,并提供交易查询。
  • Signer:使用 secp256k1 对交易进行签名,以便签名能够高效的被智能合约验证,对应于智能合约的校验者公钥集合。
  • Relayer:中继器负责交易转发。将所有 Signer 签名后的 SignTx 转发到 smart contract 中。

cosmos hub 的作用在 cosmos 中自带的 basecoin 跨链 demo 中,两个链 ChainA,ChainB,这两个链之间进行跨链,A,B 两个链之间相互发送 IBCRegisterChainTx 进行注册。在跨链的时候直接发送 IBC 协议包,进行资产跨链操作。这种直接连接的方式会有个问题,随着接入到网络中 Zone (Zone 相当于一个独立的区块链)的数量上升,以直连方式实现通信会导致链路数量呈平方级上升。以 100 个 Zone 接入到网络中为例,如果各个 Zone 直接都要建立起 IBC 连接,则网络中需要有 n(n-1)/2=4950 条通信链路!如此快速的增长显然会令网络不堪重负。通过 hub 就可以解决连接爆发增长的问题,所有的 zone 都向 hub 进行注册,向 hub 发送 IBC 包。Cosmos 跨链协议研究#hub 工作方式 hub 管理着许多 zone,所有的 zone 都需要向 hub 进行注册,由 hub 追踪各个 zone 的状态,每一个 zone 不停地把自身产出的新区块信息汇报给 hub,同时每一个 zone 也需要同步 hub 的状态。每一个 zone 之间不是直接进行通信,而是通过向 hub 发送 IBC 间接进行通信。Hub 与 Zone 直接通信,而 Zone 与 Zone 之间通过 IBC 间接通信。当 Zone 对 Hub 建立起一个 IBC 连接,它可以自动访问其他连接到该 Hub 上的 Zone ,这意味着 Zone 无需与其他 Zone 连接,而仅仅连接到 Hub 上即可。当一个 Zone 通过 Hub 收到来自其他 Zone 的代币时,它只需要信任 Hub 以及代币来源的 Zone,而不需要信任网络中所有其它的 Zone 。总结今天我们带大家一起学习了,Cosmos 跨链平台的设计架构,如何实现支持模块化建立同构链,如何支持通过 Bridge 的方式对接外部异构链。以及 Cosmos 系统的最大的特点,即 Cosmos 系统内的所有链(Zone)都是同构链且可更方便地支持资产跨链流转,所有的 Zone 都共享同一套网络协议、共识机制以及数据存储方式,可模块化地通过 API 接口组装新的 Zone 区块链。目前跨链项目总体处于探索阶段,未来跨链的推动还依赖于区块链应用的实质性落地。并且跨链交易的场景也更多地依赖于人们对区块链应用的使用,依赖于通证所代表功能和权益的使用,而不仅仅只是交易,如资产上链、跨链预言机、资产置留等场景,最终建立打通各孤岛式数字资产的流通网络。未来 PPIO 可以借助跨链技术使用其他链上的资产用于支付存储、带宽的费用,实现数据资产,使用资产的通兑通换。今后我们还会和大家探讨更多区块链技术方面的知识,如果您想更进一步的和我们一起学习探索,就快来关注 PPIO 公众号,加入 PPIO 开发者社区或 Discord 群组,和我们一起创造精彩。

 

来源链接:mp.weixin.qq.com

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:msy2134。