一. 现阶段跨链技术的发展现状
(一)概述
跨链技术的目的为了实现不同区块链下资产的交互,Vitalik曾在跨链交互报告[1]中提出三种跨链方式:公证人机制(Notary schemes)、侧链/中继(Sidechains/relays)和哈希锁定(Hash-locking)。下图展示了三种跨链方式的特性比较
-图片来源: EthFans.org -
公证人机制削弱了安全性,而哈希锁定机制的技术难度过高,侧链/中继模式由于具有可信化共识机制,且技术实现具有可行性因而得到广泛的发展。
(二)现有侧链/中继实现跨链解决方案
中继作为不同区块链交互的实现手段,侧链作为载体通过不同共识协议保证跨链可以持续稳定的实现。
需要解决问题:
-
链间交互问题:不同区块链之间的信息传递,代币的锁定,兑换与释放。
-
交互的信任问题;增加交互过程中跨链用户的作恶成本,降低或杜绝跨链用户的作恶情况。
-
拜占庭容错;侧链节点的信任问题,在由少数节点作恶的情况下依然保证整条侧链的安全。
-
中间人攻击;当普通跨链用户增多,节点数量无法满足需求,用户通过向中间人提交信息,中间人再将信息传递至节点。为了保证中间人不作恶信息传递的安全,大多数跨链项目早期没有中间人的存在。
不同跨链项目为解决上述问题给出了不同的解决方案,下面将举例各项目的不同解决方案。
本文将重点介绍 Mallow 的实现方案
二. OFGP简介
Mallow:创世网关联盟,名字来源于《基地》中的一位行商 Hober Mallow, 行商在星球之间进行贸易,通过商业贸易帮助化解了谢顿危机,Mallow 希望通过自由的商业贸易来建立跨链的价值传输。
OFGP:是一套开放的联盟网关协议, 任何组织可以通过开源代码部署自己的网关联盟,完成主链上的资产抵押认证,将价值传递到侧链,实现跨链的价值传输,解决部分区块链拓展问题,并实现多个公有链孤岛的价值传输。
Mallow 与 OFGP 的关系:
Mallow 作为 OFGP 的率先实践者,联盟中节点部署 OFGP 协议,作为 Mallow 节点,处理 OFGP 各项事务。
(一)OFGP框架图及框架图解释
-OFGP 框架图-
网络层(Networking)
网络层作为 OFGP 基础部分,分为 Mallow 节点及公链两部分。Mallow 节点作为OFGP协议软件程序的运行节点,承担数据验证,维护节点的责任;公链是具有独立区块数据,共识协议的公共区块链系统,OFGP 协议便承担着连接各个公链的责任。
- Mallow节点
节点多签地址生成
多签私钥的安全管理
- 公链
BCH,ETH,BTC,EOS……
共识层(Consensus)
共识层作为各条公链信息交互及 Mallow 节点需要遵守的协议,维护着整个 OFGP 协议系统信息安全传递及稳定运行。各 Mallow 节点依托 Braft 算法,达到拜占庭容错的目的;跨链协议包括监听,信息传递,合约注册,权限管理等多事务。
- Braft
Braft 节点
共识流程
节点动态加入退出机制
- 跨链协议
主/侧链监听(watcher)
交易签名,签名信息传递(signer)
交易广播,验证,主/侧链相应
业务层(Application)
在网络层及共识层外还需要业务层提供用户入口及查询的基础应用和以 OFGP 为技术基础的拓展应用,从而发挥出 OFGP 最大的附加价值。
- 基础应用
钱包,为用户提供 OFGP 协议使用入口。
区块链浏览器,为用户提供 OFGP 协议交易信息查询工具。
- 拓展应用
DEX,增加去中心化交易所的资产流通种类。
支付场景,OFGP 的高效 TPS 为区块链应用场景的应用提供了可能。
智能合约,打破由于主链技术限制造成智能合约应用发展瓶颈。
三. OFGP框架详解
(一)网络层(Networking)
Mallow 节点
多重签名:多重签名技术就是多个用户同时对一个数字资产进行签名。可以理解为,一个数字资产账户多个人拥有签名权和支付权。多重签名的表现形式是 m/n(m<n),一共有 n 个私钥可以给一个账户签名,而当 m 个地址签名时就可以支付一笔交易。在 OFGP 中 n 为 Mallow 节点总数,m 为保证拜占庭容错的节点数目,m=(2n+1)/3。
由于 OFGP 协议中 Mallow 多节点将掌握一个账户的签名权利(持有私钥),为了均衡各节点权利,采用多签技术实现。
为了保证侧链发币交易请求的签名安全,以及多节点的私钥管理安全,OFGP 设计了完善复杂的私钥管理结构。
OFGP使用了软件私钥管理方案,节点可以根据该方案在云端或者本地主机搭建服务。
-私钥管理方案-
私钥管理方案分为三大部分,密钥存储服务,密钥管理服务,私钥代理服务。具体方案详见 OFGP白皮书 3.6 。
OFGP 的多签名流程实现复杂,保障了在私钥安全的情况下完成签名,加强了多签地址中资产的安全性。
- 外部服务向私钥代理服务发出签名请求(需提供必要的参数:待签名的数据以及用到的密钥的标识符)。
- 私钥代理服务检测请求方和请求内容合法后,将请求发送给私钥管理服务。
- 密钥管理服务执行签名。
- 密钥管理服务根据提供的标识符获取密钥的存储访问路径和解密密钥。
- 密钥管理服务通过存储访问路径从存储服务通过取得加密后的密钥,利用解密密钥解出原始密钥,对数据执行加签,完成后安全移除加载的密钥信息,返回加签后的数据给私钥代理服务。
- 私钥代理服务返回相关数据给外部服务请求方。
注:摘自 OFGP 白皮书
(二)共识层(Consensus)
Braft
BraftChain 共识协议基于 Raft 算法,支持 Byzantine Fault Tolerance,在不超过(n-1)/3个节点(节点总数为n,n>=4)出现异常的情况下可以正常运行。协议保证在正常运行时区块链不会出现暂时或永久的分叉,一次确认即为可靠确认。且交易确认速度可以达到秒级, 节点运营方均为实名 ,并且有严格的增删节点机制,以保证网络质量以及异常情况可追责。
Braft 节点数最少为 4 个,且需要满足 3f+1(f >0,且为整数)的限制,恶意节点数小于等于 f 时,网络可以正常运行;当需要有新的数据写入区块时必须有超过2f+1个节点的验证同意。
Braft 节点分为 Leader,Candidate,Follower。服务器节点一定处于在三种状态之一,正常状态下只有一个服务器作为 Leader,剩下的节点都可以被定义为 Follower,Candidate 从 Follower 中产生,Candidate 作为一个状态,在正常运行没有出现选举的情况下节点中不会产生 Candidate,且 Candidate 过程非常短暂。
Leader 负责打包区块并广播给所有的 Follower,Follower 负责对打包区块进行验证。
Follower 在正常情况下不会发出任何请求,只接收相应来自 Leader,Candidate 的请求。当 Follower 在数据验证过程中发现错误,会发起重新 Leader 选举,收到多数票的候选节点会成为新的 Leader。
任期(term)从一个新的 Leader 选举开始,结束于 Follower 的数据的失败,便会开始新的一轮投票选举。
-图片来源: Atlassian.net -
Braft 协议的区块打包过程可以理解为 Raft 的复制状态机(一致性算法的实现一种方式),目前 Mallow 中区块的出块的时间间隔为 10s/块。
区块打包过程分为三个状态:
- 广播状态 ;节点需要对比验证本地Term,区块高度,确认自己为合法节点并广播自身节点有效消息。
- 验证状态 ;当已经验证过的节点数达到 2f+1(总数 3f+1),说明节点接受信息通过全网确认,信息有效,可以添加新的区块,Leader 并广播新区块。
- 上链状态 ;广播区块链上链,并开始新区块的添加工作。
节点的加入/退出必须得到大多数节点的认可;当有新节点请求加入或退出时,Leader会将下一个区块设置为 Reconfig 类型。
具体方案详见 OFGP白皮书 3.6 。
跨链协议
跨链协议指主链(ETH,BCH…)与侧链之间的通信协议,负责主链到侧链的发币,也负责侧链到主链的回兑,并且保证双向锚定过程中的资产安全和汇率合理稳定。
下图为跨链协议示意图:
Watcher:每一个公链都有 Watcher 对其进行监控,当用户有代币跨链兑换请求时,将请求数据及交易数据发送给 Signer。
Signer:对 Watcher 传递的交易请求信息进行验证签名,并在主链上验证用户在主链发送的请求交易。
Mallow 区块浏览器: https://explore.ofgp.io
BCH 多签地址:pp3eju4zt9g3xpfps94s08vh9kfqh4t7zgcghf00uf
各节点以太坊地址:
0x6bcb244c6eb027ffed5c99943491637bc4824171
0x862775d4b99075883a18eed2cafcf0d9ae839e03
0x18945052716c87a4ab53063488f34f1a11b05ed2
0xb42c436da7ece89914f75bd7239105bcba13590d
GatewayVote 合约地址:
0xd9c422d2205248e7ec4d4c21a6b270baa66784c0
WBCH Token 合约地址:
0x286748cae9ee8f98a399032cf45cbbad8de3cb8a
BCH — ETH 跨链流程
以该笔交易为例:
用户兑换 0.01BCH 为 WBCH
- BCH 主链请求交易
当用户需要发起 BCH 兑换,目前需要通过 iBitcome 钱包发起一笔交易,将需要转化的 BCH 发送至 BCH 多签地址(pp3eju4zt9g3xpfps94s08vh9kfqh4t7zgcghf00uf)
该笔交易详情信息: https://bch.btc.com/a38883fddd593f1e08ecd68c4d7b9e68ab2294070632ab8efdc1802aabe22b8a
-图片来源:iBitcome 钱包客户端-
包含接受 WBCH 的 ETH 地址在该交易的输入脚本中,Watcher 监控到多签地址中有新交易转入并检测交易脚本中信息。
- Mallow节点投票
Mallow 节点在得到 Watcher 的信息后,后通过以太坊 GatewayVote 智能合约地址发起投票。
投票通过向 GatewayVote 合约发送交易实现,目前 Mallow 四个节点中只需要三个节点投票通过交易便得到通过确认。
Follower 节点发起投票交易:
https://etherscan.io/tx/0xb10963de4bde948c2d58a1508e6dfcd12588062bc5fcc14216eb0183a466a0a1
https://etherscan.io/tx/0x507cd9b007f23fa7de66300cac1cbcb5a69f5d291bf5070d72169aef584b0577
-图片来源: etherscan.io -
可以看到Follower节点投票的交易只有一个Confirmation的Event。
节点投票&发币交易:
https://etherscan.io/tx/0x188cc0b3045cba078067ee1b1d5b2d3b486dcd67f8703f8cb14759161b928edc
-图片来源: etherscan.io -
可以看到 4 个 Event 中,Confirmation 进行投票,OperationDone 表示投票结束, MintByGateway 表示网关同意该笔兑换操作。Mint Event 调用 WBCH Token 的合约,输入参数为 WBCH 接收地址及兑换数量,同时可以在 WBCH Token 的合约地址中看到该Event。
发币合约调用交易根据节点投票交易的上链顺序决定,第三个投票上链交易同时进行发币。
-图片来源: etherscan.io -
- 侧链交易确认
在打开 Mallow 中该笔交易的 ETH 的 Tx 时,看到的交易为调用 GatewayVote 的交易,该笔交易调用了 WBCH Token 合约,进行 WBCH Token 的发放。同时在 Mallow 侧链中会对该交易进行记录生成 Hash 并写入区块。这样便完成了一次完整的 BCH-WBCH 兑换过程。
ETH — BCH跨链流程
以该笔交易为例:
-图片来源:iBitcome 客户端-
- WBCH 燃烧
用户发起一笔 WBCH 燃烧交易:
https://etherscan.io/tx/0x494b74400505b343479e4c00f9bc869e475b97e21b35343ac1942a11bdb76302
-图片来源: etherscan.io -
该笔交易通过 Burn Event 对 WBCH 进行燃烧,并通过 BurnForGateway Event 与 GatewayVote 节点进行通信。可以在 GatewayVote 合约的 Events 中看过该笔燃烧交易。
-图片来源: etherscan.io -
- 多签脚本投票验证
Watcher 对 Ethereum 区块链进行监听,当有燃烧交易生成,Leader 便创建一个待签名的 BCH 交易,广播给网络中的所有节点进行签名,节点收到签名请求后,对交易内容进行合法性校验,如果校验通过,签名,并将签名内容广播给网络中的所有节点,否则广播拒绝签名节点收集其他节点的签名结果,如果成功收集到满足多签个数的签名结果,则签名,并发送交易到 BCH 链。
- BCH 交易发送
当 3 个节点签名通过后,多签地址便会发送一笔 BCH 转账交易,同时在 Mallow 侧链上记录该笔交易。 https://bch.btc.com/9231cded28b78adcf85fa43bec517b1ab9d0a0e62fb5a577fc2a16ef1a6e5a48
(三)业务层(Application)
基础应用
- 钱包
钱包作为普通用户储存数字资产以及与区块链交互的工具,作为 OFGP 跨链入口最为合适。
iBitcome 为目前首家利用 OFGP 集合成 Mallow 联盟实现跨链的去中心化钱包。
-图片来源:iBitcome 客户端-
- 区块链浏览器
区块链浏览器作为区块链数据的可视化工具,用户可以通过区块链浏览器查询 Mallow 交易数据。
Mallow 区块链浏览器地址: https://explore.ofgp.io
-图片来源: Mallow 区块浏览器-
拓展应用
- 去中心化交易所
-图片来源: OFGP 白皮书 -
OFGP 作为跨链的实现方案,解决了公链之前的信息和价值交互的问题,更高的流动性将有机会增加更多的附加价值。
主流的去中心化交易所在以太坊上通过智能合约实现。Mallow 所实现的 BCH-WBCH 方案,为 BCH 的去中心化交易提供了可能,并且打通了 BCH/ETH 的价值传输通道,对于 BCH,ETH 的价值拓展具有推动作用。
四. 拓展与发展
目前 Mallow 实现了 OFGP 的稳定汇率单向跨链交互,Bitcoin Cash 链上资产兑换为 Ethereum 链上等价资产及 Ethereum 链上资产反向兑换为 Bitcoin Cash 链上等价资产。双向资产不同汇率的原子交换将成为 OFGP 的拓展及发展的有力方向。
(一)应用拓展
- OTC 交易提供 Atomic swap的服务
对于经验丰富的加密货币用户,大多数更愿意避免使用中心化交易所,希望能够避免通过第三方进行交易。OTC 交易双方通过场外平台达成交易意向(如利于 ETH 兑换BCH),OFGP 可以作为去中心化网关提供安全稳定的 Atomic swap 服务。交易双方将兑换数字货币打入特定多签地址,在通过 OFGP 协议验证认可后实现交换。
- BCH侧链提供网关支持
Bitcoin Cash 基于 OmniLayer 开发出 wormhole 协议,使用 OP_RETURN 操作码实现了智能合约的发币方案,极大拓展了 Bitcoin Cash 的应用场景。OFGP 可以作为 BCH 侧链,为在 BCH 链上发行数字资产提供稳定的网关服务,提高 BCH 链上资产与其他数字资产的交互能力。
- 众筹
目前众筹多采用以太坊智能合约实现,且众筹大多接受ETH数字货币,OFGP 为众筹方提供接受 BCH 及 BCH 链上资产的可能,以及利用 WHC 发起众筹接受 ETH 链上资产的可能。
目前单一的众筹渠道,限制了项目方的可选择性。但数字货币的发展难以预料,跨链技术的存在,可以丰富项目方的发币公链的选择,同时在 ETH,BCH 等公链发行等价数字货币。
- 代币映射
公链众筹项目早期多选择在以太坊发行代币,但项目主链开发完成,以太坊代币向项目主链的代币映射往往技术实现复杂,利用 OFGP 可以轻松实现代币的映射。
(二)发展展望
- 公链资产互通
数字货币的发展对于数字货币的流动性要求越来越高,目前公链的价值孤岛将随着跨链技术的完善而逐渐打破。
公链下多币种的等价代币映射兑换。等价数字资产的互通仅是 OFGP 实现的第一阶段,BCH 利用 OP_RETURN 操作码发行的数字货币,在以太坊中可以实现代币映射发行等价的 ERC20 代币,同时ERC20 代币可以在 BCH上 映射发行 OP_RETURN 代币。
- 动态汇率的资产互通
目前在不同公链间生成等价值的跨链代币,虽实现了价值的跨链交互但具有很强的局限性。用户需要以去中心化的模式将 BCH 兑换为 ETH,让需要先兑换为 WBCH 再通过去中心化交易所交易为 ETH,这中间将产生大量损耗,增加用户兑换成本。
OFGP 协议在技术升级中可以增加动态汇率的资产兑换功能,打破目前实现的等价代币兑换限制,实现去中心化机制的原子互换功能。
五. FAQ
(一)通识方面
Q:侧链与跨链之间的关系?
A:侧链是一种与主链(公链)的交互手段,作为多条主链交互载体,从而达到跨链的目的。
Q:跨链的实现的意义?
A:跨链的根本意义增加了数字货币的流动性价值并丰富了公链的交互拓展能力,从而可以衍生出更多具有实际价值的拓展应用,如OTC交易,众筹等。
Q:Mallow 是什么?OFGP 是什么?
A:Mallow 是第一家运行 OFGP 的多节点组成的网关联盟,联盟希望通过自由的商业贸易来建立跨链的价值传输。
OFGP是一套开放的联盟网关协议, 任何组织可以通过开源代码部署自己的网关联盟,完成主链上的资产抵押认证,将价值传递到侧链,实现跨链的价值传输,解决部分区块链拓展问题,并实现多个共有链孤岛的价值传输。
Q:Mallow 和 OFGP 的关系?
Mallow是一家运行OFGP协议实现跨链技术的网关联盟。
Q:Mallow 侧链是联盟链吗?
A:Mallow 侧链是联盟链,采用 Braft 共识协议。
Q:Mallow 和 Liquid 有什么区别?
A:Liquid是一个私有联盟的比特币侧链,意在提高比特币网络的交易速度及用户体验。Liquid 建立在Elements 区块链平台之上,随着更多公链接入Elements,Liquid的跨链功能将得到丰富,但目前仅能实现侧链与比特币主链的跨链功能。
Mallow 是致力于实现跨链功能的联盟网关侧链,意在建立公链间的交互渠道,打破公链的价值孤岛。目前已经实现 BCH 与 ETH 之前的数字货币价值交互。
(二)技术方面
Q:任何人都可以使用OFGP协议,开发自己的网关吗?
A:OFGP作为开源协议,任何人都可以利用OFGP建立自己的联盟网关。
OFGP开源协议地址: https://github.com/ofgp
Q:OFGP选在Braft协议的原因?Braft协议具有哪些优势?
A:Braft协议保证在正常运行时区块链不会出现暂时或永久的分叉,一次确认即为可靠确认。且交易确认速度可以达到秒级,节点运营方均为实名,并且有严格的增删节点机制,以保证网络质量以及异常情况可追责。
Q:为什么在WBCH的转账记录中仅能查到Burn及Transfer记录,没有代币生成的交易记录?
A:因为WBCH代币的生成过程是当Leader向GatewayVote合约发起投票交易,在该笔交易中同时调用WBCH的合约地址,实现发币过程。
Q:GatewayVote智能合约具有哪些作用?
节点投票通过向GatewayVote合约发送交易实现;调用WBCH Token合约实现WBCH发放。
Q:以目前4个Mallow节点,BCH兑换为WBCH总共需要在BCH及ETH上发起多少笔交易?
A:
- 用户向BCH多签地址转账需要兑换为WBCH的BCH
- 节点投票,向GatewayVote合约发起交易
- 节点投票,向GatewayVote合约发起交易
- 发起投票并调用WBCH合约发放WBCH代币,向GatewayVote合约发起交易
Q:为什么在BCH兑换WBCH投票过程通过合约实现,WBCH兑换BCH投票过程通过多签脚本实现?
A:因为BCH为UTXO结构,无法向ETH一样通过智能合约实现投票过程。
(三)使用方面
Q:目前有哪些钱包支持Mallow协议?
A:目前iBitcome钱包支持Mallow协议,可以现实BCH对WBCH的兑换。
iBitcome钱包地址: https://www.ibitcome.com
Q:在兑换时需要支付手续费吗?
A:目前Mallow属于测试阶段,在测试阶段用户不需要支付手续费,但需要支付区块链网络的矿工费用。在正式发布后用户需要正常支付兑换手续费。
Q:在交易过程中,需要一定的区块确认高度吗?如需要BCH是几个?ETH是几个?
A:需要,BCH需要2个区块确认,ETH需要30个区块确认。
Q:Mallow侧链的区块链浏览器地址?
Q:最小BCH兑换WBCH额度?
A:0.01BCH
引用:
[1]: https://blockstream.com/technology/sidechains.pdf
[2]: https://blockstream.com/technology/sidechains.pdf
[3]: https://plasma.io/
[4]: https://ethresear.ch/t/plasma-cash-plasma-with-much-less-per-user-data-checking/1298
[5]: https://ethresear.ch/t/minimal-viable-plasma/426
[6]: https://github.com/cosmos/ethermint
[8]: https://tendermint.com/static/docs/tendermint.pdf
[9]: https://polkadot.network/
[10]: https://medium.com/@davekaj/blockchain-interoperability-cosmos-vs-polkadot-48097d54d2e2
[11]: https://blockstream.com/technology/sidechains.pdf
[12]: https://medium.com/crypto-economics/what-is-plasma-plasma-cash-6fbbef784a
[13]: https://ethresear.ch/t/plasma-cash-plasma-with-much-less-per-user-data-checking/1298
[14]: https://github.com/w3f/polkadot-white-paper/blob/master/PolkaDotPaper.pdf
[16]: https://github.com/ofgp/ofgp-core/wiki/Open-federated-gateway-protocol-%28OFGP%29-whitepaper-en
[17]: https://ramcloud.atlassian.net/wiki/download/attachments/6586375/raft.pdf
[18]: https://github.com/ofgp/ofgp-core/wiki/Open-federated-gateway-protocol-%28OFGP%29-whitepaper-en