什么是和平中继(
Peace Relay
)?
KyberNetwork(KNC)
是一个提供去中心化交易服务,实现加密资产即时转换并保证流动性的网络。和平中继是
KNC
开发的一种智能合约系统,旨在使用中继合约来进行跨
EVM
跨链通信。
中继合约通过验证区块的
merkle-patricia
证明,可以确定 区块内包含的状态、交易和收据等信息。
结合
SmartPool
实现的
ETH
哈希验证算法,可以实现在任何
EVM
链上实现所有跨链跨代币的可靠传输。 这里使用的
merkle-patricia
证明代码是
Zac Mitton
实现的。
和平中继(
Peace Relay
)怎么工作的?
重要提示:
·
为了进行跨链验证,我们需要验证存储在中继合约中的块头信息,以便可以根据块头中的梅克尔树根验证其他信息(例如交易证明,帐户状态证明)。
在中继合约的初级版本中,我们假设提交的区块头都是来自相应链的正确信息。
将来这些区块头信息将采用
PoW
进行验证,并将允许重新组织区块。
·
在实例中,当用户想把
ETH
的资金转移到
ETC
, 合约会锁定他的
ETH
从而返回
ETC
。 然后用户可以在
ETC
链上做任何交易。
详细步骤:
假设用户想要将资金从
ETH
转移到
ETC
。 我们将使用
Kovan
测试网代表
ETH, Rinkeby
测试网代表
ETC
。 换句话说,我们将锁定
/
解锁
Kovan
中的
ETH
并获得
Rinkeby
中的
ETC
(造币
/
销毁)。
·
在
Kovan
和
Rinkeby
上同时部署的
PeaceRelay
中继合约(各
1
份)
·
在
Kovan
上部署
ETHLocking
合约
·
在
Rinkeby
上部署
ETHToken
合约
将
ETH
换到
ETC
上的代币
/
从
Kovan
到
Rinkeby
1.
使用
ETHLocking.lock()
函数发送期望转换的
ETH
到
Kovan
上的锁定合约
ETHLocking
。
请注意,除非在执行过程中
GAS
耗尽,否则此功能将无法中止(抛出)。
2.
等待包含交易的
Kovan
区块被发送到
Rinkeby
。 同时,生成脱链的交易证明。
3.
使用上一步中生成的证明来发送交易执行
ETHToken.mint()
函数。 这将铸造
ETC
。
然后用户可以随意花费这些
ETC
,直到有一天他们希望将
ETC
转换回
ETH / Kovan
将
ETC
转回为
ETH /
从
Rinkeby
回到
Kovan
1.
使用
ETHToken.burn()
函数将
ETC
进行销毁。
2.
等待包含交易的
Rinkeby
区块被发送到
Kovan
。 同时,生成脱链的交易证明。
这里的证明包含交易和相应的交易收据
3.
使用上一步中的证明发送交易以执行
ETHLocking.unlock()
函数来解锁
ETH
软件安装教程
前提条件
需要有
2
个钱包:
一
个用于提交块头,另一个用于为智能合约提交造币
/
解锁交易。
合约部署
合约代码可以在
./contracts
文件夹中找到。
1.
在
Rinkeby
上部署
PeaceRelay
合约。 这份合约负责接收来自
Kovan
的块头。
2.
在
Kovan
上部署另一个
PeaceRelay
合约。 此合约将负责接收来自
Rinkeby
的块头。
3.
在
Rinkeby
上部署一个
ETC
合约,它将使用
PeaceRelay
合约地址(步骤
1
)作为构造函数参数。
4.
在
Kovan
上部署
ETHLocking
合约,该合约使用
Kovan
上
PeaceRelay
(步骤
2
)和
Rinkeby
上
ETC
合约(步骤
3
)作为其构造函数参数。
设置中继合约
我们使用
AWS
服务器来完成块头的中继。 所有必要的文件都可以在
./cli
文件夹中找到。 创建一个
linux
服务器(你也可以在本地运行)并将这些文件上传到服务器上。
1.
编辑
settings.json
文件。 输入两个钱包的不同合约地址和专用密钥,它们执行块头提交和交易提交。
2.
运行命令
: node peacerelay.js --from = {srcChain} --to = {destChain} --start = {blockNum}
其中
·
srcChain
是块头将被中继的源链(小写)
·
destChain
是接收块头的目的链(小写)
·
blockNum
是要中继的起始块号
·
例如。
节点
peacerelay.js --from = kovan --to = rinkeby --start = 6919465
(从块
6919465
开始,将
Kovan
块头复制到
Rinkeby PeaceRelay
合约中)
·
例如。
节点
peacerelay.js --from = rinkeby --to = kovan --start = 2136659
(从块
2136659
开始,继续
Rinkeby
到
Kovan PeaceRelay
合约的块头)
设置网页
1.
假定合约已经部署并且已经建立了中继合约。
2.
运行
truffle deploy
来编译合约。 你现在应该有一个
build
文件夹。 前端网站需要
json
文件。 (即合约的
ABI
)
3.
确保
settings.json
文件包含正确的信息,如
'
设置中继合约
'
部分的步骤
2
中所述。
4.
运行
npm install
来安装依赖项。
5.
运行
npm run dev
或
yarn && yarn start
。
6.
网站应可以通过
localhost
:
3000
访问
参考链接:
1.
https://github.com/KyberNetwork/peace-relay
2.
https://github.com/ethereum/btcrelay
官方网址:
http://www.ethereumclassic.org