添加【金融之家】为好友

扫描二维码

或添加QQ 【724996599】成为为好友

满足以下场景,获得更高通过率:

1. 新融资求报道

2. 新公司求报道

3. 新产品求报道

4. 金融新闻爆料

我知道了

如有投稿需求,请发邮件至 tougao@jrzj.com

会有专人和您联系

我知道了

使用转移网关在以太坊和PlasmaChain之间转移ERC721代币

来源: 首页 > 互联网金融日报

2018-11-22 00:01:32 
在我们之前的文章里,我们谈论了如何开始设置开发环境并部署你的首个DApp到Loom PlasmaChain测试网。

PlasmaChain是DPoS链,这意味着与以太坊主网不同,参与区块创建的节点数量仅限于少数功能强大的机器。虽然这非常有利于事务吞吐量和计算时间,但也意味着PlasmaChain(以及其他任何以太坊侧链)的安全性会低于以太坊主网。

转移网关通过其大量的节点网络和PlasmaChain上创建的数字资产验证者,可以提供由以太坊网络保障的相同级别的安全性。 顾名思义,它们共同构成一组网关,通过它们可以将你的ERC721(很快也会有ERC20)资产转移到以太坊主网和其他智能合约链。

转移网关分为四个部分:

1. 以太坊网关
2. PlasmaChain网关
3. PlasmaChain地址映射器

4. 网关Oracle

让我们一个一个地来了解其原理。

以太坊和PlasmaChain网关
当有存款事件时,以太坊网关和网关Oracle通信。 这是与网关Oracle通信的机制。 PlasmaChain网关与以太坊网关的用途大致相同,只不过它是PlasmaChain的端点。

PlasmaChain地址映射器
PlasmaChain地址映射器的存在是为了实现多个链上“多个帐户”的想法。 通过在地址映射器上注册帐户,你可以领取ERC721代币,因为它们已存入PlasmaChain。

网关Oracle
网关Oracle负责在以太坊(在其他链)和PlasmaChain之间进行通信。它通常在用作PlasmaChain验证者的节点上运行,但也可以独立运行。 它监控网关合约上来自以太坊或PlasmaChain的活动,监听存款和取款事件。 当它收到一个事件时,它向另一个链发布一个事务。


示例事务

现在我们放在一起详细讲解。

老王刚在以太坊主网上用一张水系Officer换了一张火系Officer卡牌。他想把这个刚得到的火系Officer转移到PlasmaChain上,以便在“僵尸战场”,这个在PlasmaChain上构建的游戏上使用。

老王必须用PlasmaChain地址映射器注册他的以太坊账户。只需要注册一次。

为了证明老王有以太坊账户,老王将向PlasmaChain地址映射器创建一个请求,提供一个由他的以太坊账户公钥签名的消息。PlasmaChain地址映射器将该以太坊公钥映射到发出该映射请求的PlasmaChain帐户。

老王现在准备好在两条链之间移动代币了。

第一步是将代币存入以太坊网关。 这会将代币的所有权转移到网关,并发出存款事件。

第二步是网关Oracle收到此存款事件,因为它订阅了以太坊和PlasmaChain网关事件。 然后,网关Oracle执行以下两项操作之一:

如果在PlasmaChain上不存在这个代币,那么它将按照那些规格规定“铸造”一个新代币,其所有者将是PlasmaChain网关。 然后它将可供存款人的PlasmaChain账户提取,并作为存款事务的一部分包括进来。

如果PlasmaChain网关已经有这个代币(如果它最初是在PlasmaChain上创建的,然后转移到另一个链上,则有可能出现这种情况),那么它可供存款人的PlasmaChain账户提取。

最终,用他的PlasmaChain账户,老王可以通过PlasmaChain网关发出一个取款请求,然后领取到这个代币。

如果老王想要在以太坊上和别人交换这张新卡牌,或者想要把得到的一张稀有卡牌存储在他的以太坊钱包,而不是PlasmaChain钱包,以保证安全,他将从PlasmaChain网关发出一个转移请求,这个请求会被网关Oracle收到并签署。 然后他就可以拿着提款收据到以太坊上领取了。

如何把ERC721代币连接到转移网关

如果你是DApp开发者并且想要发布可转移的ERC721代币,你可能想知道如何将ERC721代币连接到转移网关。

第一步是在PlasmaChain和以太坊上部署你的ERC721合约。 合约不需要特别的,因为存款功能只是将代币的所有权从用户转移到网关合约。 不过,最好可以包含depositToGateway或类似功能,可以专门转移到已知的网关合约地址,这样你的用户不必每次都填网关地址。

pragma solidity ^0.4.24;  
import "openzeppelin-    solidity/contracts/token/ERC721/ERC721Token.sol";
contract MyAwesomeToken is ERC721Token("MyAwesomeToken", "MAT") {     // Mainnet Gateway address     address public gateway;
constructor(address _gateway) public {
  gateway = _gateway;
}
function depositToGateway(uint tokenId) public {         
  safeTransferFrom(msg.sender, gateway, tokenId);     }  
}
在两个链上都部署了ERC721代币合约之后,就需要在它们之间创建映射。 这会将你的代币“注册”到网关。 在这个例子中,我们将在以太坊测试网(Rinkeby)和PlasmaChain测试网(extdev)之间创建一个映射。

撰写本文时,Rinkeby转移网关的地址是:0x6f7Eb868b2236638c563af71612c9701AC30A388

由于这是一个测试网,因此网关合约可能会被Loom团队清除并重新部署。 因此,请确保在SDK文档面上查看当前地址。

通过使用两个ERC721代币合约的地址和证明你拥有这些合约的签名,调用extdev网关合约的addContractMapping函数就可以完成映射。

为了证明你已将ERC721合约部署到其中一个以太坊网络,你必须提供一个签名(用部署合约的以太坊私钥对消息进行签名时就会生成),以及部署合约的以太坊事务哈希。

要证明你已将ERC721合约部署到PlasmaChain更容易一些。 你只需要签署发送到PlasmaChain网关的请求,使用部署合约的密钥来注册你的合约。 然后,PlasmaChain网关将确保你的密钥是已部署合约的所有者。

样本应用

为了更简单地说明,我们有一个很棒的样本应用,你可以查看如何设置部署和使用loom-js来完成这些任务。 loom-js是一个javascript库,可以帮助你处理签名事务以及与转移网关交互等操作。 一整个类(“转移网关”)都用来提供一种简单的方法来完成诸如在链之间相互映射ERC721合约之类的事情。

可以在Loom SDK文档里找到转移网关样本应用以及loom-js。

浏览转移网关示例时,最有用最值得看的文件之一是gateway-cli.js,因为它提供了一个超棒的部署工具,你可以根据自己的合约进行修改,或者直接拿来使用。 在撰写本文时,链接Rinkeby和extdev的地址被硬编码到gateway-cli.js中,因此如果它们与文档中列出的不同,你可能需要更新它们。

免责声明:[ 金融之家-JRZJ.COM刊发此文目的在于传递更多信息,文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担 ]

责任编辑: