去年,全球最大的专业技术组织、有着130余年历史的IEEE(电气和电子工程师学会)设立IEEE计算机协会区块链和分布式记账委员会(IEEE Computer Society Blockchain and Distributed Ledgers Committee,IEEE C/BDL),旨在推动区块链与分布式记账技术的标准化及其应用实践。作为IEEE C的重要成员以及区块链行业领军企业,百度在推动区块链标准化方面不遗余力,积极发挥引领带头作用,并取得显著成效。针对跨链寻址协议的跨链标准等成果,相继亮相。
本文是百度应计算机协会区块链和分布式记账委员会(IEEE C/BDL)之邀,由百度区块链系统部技术负责人荆博对跨链技术及寻址协议进行详解,并对针对跨链寻址协议的跨链标准—Naming Protocol展开介绍。
研究跨链技术标准的背景
近年来,随着区块链行业的蓬勃发展,各家科技公司都在发展自己的区块链业务。由于区块链行业还处于早期发展阶段,各大公司都试图主导行业标准,因此产生了很多的区块链框架,例如在国外有IBM主导的Fabric,Intel主导的Sawtooth,Facebook主导的Libra,国内有百度主导的XuperChain等。
这些框架底层协议各不相同,并且随着区块链被被纳入新基建的范畴,鼓励开发国产自研的底层区块链框架, 如火如荼的区块链底层技术研发更加活跃,由此形成了新的数据孤岛。无论这些孤岛是基于相同的底层系统还是不同的底层系统,其数据互通都非常困难。因此,迫切需要一个解决方案能够系统地解决多链数据融合的问题,从而实现不同链之间的价值互通。
因此,国内几个主要的区块链技术公司在电子标准院的协助下,组织起人马,成立了多个标准工作组,针对跨链技术展开了深入研究,并提出了一系列的标准草案。其中,IEEE标准Standard for Blockchain Interoperability - Naming Protocol 已经立项,接下来将针对该标准展开介绍。
什么是跨链技术
跨链(Cross-Chain),简单来说就是通过一定的技术措施实现相对独立的不同区块链系统之间数据和资产的链接互通。可以将跨链理解为在不同的信息孤岛间搭建起一座座桥梁,使得信息能够便捷的流动,为价值互联网奠定基础。常见的跨链解决方案一般是针对资产类,实现不同链之间任意数据的跨链互通难度会更高。我们这些标准工作组迎难而上,试图解决的就是后者。
跨链技术常见的挑战
1)原子性。可以通过哈希时间锁的方案来实现。交易互为锚点,任意一方未生效,另一方可以及时回滚。
2)有效性。验证锚点交易的有效性。可以通过SPV证明来实现。
3)资源寻址。如何快速跨链定位并获取到相关的资源。这就需要设计一套完整的寻址协议。
针对第三项跨链寻址协议,我们立项了IEEE标准Standard for Blockchain Interoperability - Naming Protocol。
解决思路
1.区块链互操作的命名协议
跨链涉及到不同链的资源的互操作,但是由于不同链的协议各不相同,对不同链的资源进行统一定义描述是很非常困难的。
首先,我们需要一个标准协议,来为每一个区块链网络上的资源分配一个地址。这个协议可以被称为跨链寻址协议。
跨链寻址协议,英文Naming Protocol for Blockchain Interoperability。该协议可以使得任意一个区块链网络能通过标准化地址定位所要访问的其他区块链网络的资源。例如,我们可以定义一个这样的协议:
[:][//][//][?]
所有的区块链网络都可以使用这个协议来为自己区块链网络上的资源来生成一个地址。我们来继续举个例子来说明这一点:
首先,我们假定有一个区块链网络名字叫hello_chain,完全遵循我们在之前定义的它使用名为Xuper的底层框架搭建,这个网络下面跨链寻址协议。有一条子链/侧链/平行链叫child_chain。在这个child_chain上有一个使用wasm(webassembly)合约虚拟机才能执行的智能合约,合约名叫counter。顾名思义,这个合约其实是一个简单的计数器。
该合约提供了2个方法,1个叫increase,1个叫getNumber。调用increase方法,会使得每次将数值加1。而调用getNumber方法,会返回当前的数值。接着,假设我们现在正处于另一个区块链网络world_chain上,希望跨链访问hello_chain网络上的子链child_chain上的名为counter的计数器智能合约,并获取当前的数值。我们需要先按照之前定义的跨链寻址协议来生成访问地址,举个例子,我们可以这样写:
xuper://hello_chain/child_chain?module=wasm
&contract_name=counter
&method_name=getNumber
其中,
xuper: Xuper
hello_chain: hello_chain
child_chain: xuper//child_chain
module=wasm: wasm
contract_name=counter: counter
method_name=getNumbergetNumber
2.实现命名协议解析的背书节点
按照我们上面所举的例子,hello_chain需要遵循我们在之前定义的跨链寻址协议。
那么,hello_chain还需要对外暴露出一些特殊的全节点,也可以被称作是背书节点,来负责解析命名协议,并处理来自于其他区块链网络的跨链访问请求,获得结果后附带上签名,并为结果的正确性进行背书。
也就是说,其他的区块链网络如果要访问hello_chain上的资源,就必须通过hello_chain网络上对外提供信任背书服务的全节点来进行访问。这些节点会用自己的信用来为结果背书,所以叫做背书节点。
访问者可以自由选择他们信任的背书节点,甚至可以选择为此支付一定的手续费来对诚实的背书节点进行经济激励。
3.用于处理跨链的智能合约
为了实现跨链请求,我们已经定义了2个重要内容:
1)各个区块链网络都需要遵守的链名跨链寻址协议。
2)在目标链上存在的实现命名协议解析的背书节点。
但这些还是是不够的。在跨链发起的原链上还需要部署一个用于查询目标链可用背书节点,并负责向背书节点发起跨链请求的智能合约。结合该跨链合约,便可以实现对跨链合约所有协议链的统一资源寻址。该智能合约应该实现以下功能:
1)注册一个区块链网络,并登记该网络上可用的背书节点。
2)更新一个区块链网络,并更新该网络上可用的背书节点。
3)查询一个区块链网络上的可用的背书节点。
4)解析跨链访问请求,并根据背书策略,访问目标区块链网络的若干个背书节点,并获得跨链结果。
结论:假设原链是A链,目标链是B链,为了实现A链到B链的跨链,需要经历以下步骤:
1)A链和B链需要遵守并支持“区块链互操作的命名协议”。
2)B链需要开放一些背书节点,用于处理来源于其它区块链网络的跨链请求。
3)A链实现并部署用于跨链的智能合约。
4)当A链需要访问B链的资源时,先根据 通过访问A链的用于跨链的 “区块链互操作的命名协议”来生成跨链访问地址。再智能合约,来获得B链的可用背书节点信息。
5)A链将需要跨链访问的资源地址发送给B链的背书节点,并获得返回值。
百度超级链XuperChain V3.7版本已经发布了跨链能力,并针对只读事务场景和非事务场景的应用进行了开源,帮助开发者更好的进行功能组合。
戳链接或点击「阅读原文」体验:
https://xuperchain.readthedocs.io/zh/latest/design_documents/cross_chain.html
百度超级链是100%国产自研的区块链系统,性能卓越、安全可控、行业领先,在存证、司法、版权、医疗、数据协同、溯源、智慧城市等领域推出解决方案并应用,已经与北京互联网法院、重庆市、百信银行等政府、大型企业达成深度合作。
联系我们
如果你对百度超级链技术和解决方案感兴趣,或者有相关合作意向,欢迎添加百度超级链小助手微信(image-baidu)