LoginSignup
2
1

More than 5 years have passed since last update.

Transfer Gateway (LoomNetwork) @Rinkeby

Last updated at Posted at 2019-04-01

はじめに

TransferGateway

前回 https://qiita.com/oggata/items/698cee81c60985cebc57
で、TransferGatewayのexampleを試してみました。
今回は、testnet(rinkeby)などを使って、複数の環境でtokenやcoinをTransferさせてみた覚書です。

TransferGatewayとは

普段使っているEthereumの世界(mainnetやtestnet)と、Loomnetworkの世界をつなぐための"玄関"となるのがTransferGatewayです。
馴染みのopenzeppelin-solidityなどから作ったERCのコントラクトに下記のような関数を付加し、これまでのEtereum環境と、Loomの環境それぞれにdeployすることで簡単に接続することが可能となります。

    function depositToGateway(address _gateway, uint256 _uid) public {
        safeTransferFrom(msg.sender, _gateway, _uid);
    }

alt

Network

(memo)
https://loomx.io/developers/docs/en/testnet-plasma.html

Name Url Type Detail
loom_dapp_chain 127.0.0.1:46658 local ローカルチェーンネットワーク
extdev_plasma_us1 extdev-plasma-us1.dappchains.com:80 testnet Loomテストネットのplasmaチェーン(安定的開発者β)
Dev Plasma Test test-z-asia1.dappchains.com testnet 実験的ベータ
Validator Test test-z-validator1.dappchains.com testnet バリデーターベータ
Plasma Chain plasma.dappchains.com mainnet エンドユーザーベータ (Loom MarketPlace)
Mainnet ユーザーベータ
Social Chain Block Explorer メインネット DelegateCall

(memo)
(※Karmaをもらえる https://faucet.dappchains.com/ が動かなかったが、Karmaなしでもextdev_plasma_us1というネットワークを指定してdeploy可能。)

Name Ethereum Link TransferGateway Address
Devnet Plasma (extdev-plasma-us1) Rinkeby 0xb73C9506cb7f4139A4D6Ac81DF1e5b6756Fab7A2
Devnet Plasma (test-z-asia1) Rinkeby 0x3c826a09DF9ad39B9acF550b1bf35C9b6AfCd943
Plasma Chain Mainnet 0x223CA78df868367D214b444d561B9123c018963A
Validator Test Rinkeby n/a

(参考)https://loomx.io/developers/docs/ja/testnet-plasma.html

Setup

1.loomのインストール

$ curl https://raw.githubusercontent.com/loomnetwork/loom-sdk-documentation/master/scripts/get_loom.sh | sh
$ ./loom 
$ ./loom init
$ ./loom run
$ history
$ ./loom genkey -k priv_key -a pub_key
local address: 0xF6337F78a0AF189d5ee9Ba4314364f8658B4A745
local address base64: 9jN/eKCvGJ1e6bpDFDZPhli0p0U=

2.explorerを開く

https://blockexplorer.loomx.io/
を開き、下記のloomが起動しているローカルのaddress+IPを入力する
http://127.0.0.1:46658

3.sampleのインストール

$ git clone https://github.com/loomnetwork/truffle-dappchain-example
$ cd truffle-dappchain-example/
$ cp ../priv_key extdev_private_key
$ npm install -g yarn
$ yarn
//yarn deployはデフォルトで、loom_dapp_chainにdeployする.
//package.jsonに     "deploy:extdev": "truffle deploy --network extdev_plasma_us1",
//と記載されているのでこの場合は、extdev_plasma_us1にdeployする

$ yarn deploy

Starting migrations...
======================
> Network name:    'loom_dapp_chain'
> Network id:      13654820909954
> Block gas limit: 0

$ yarn deploy:extdev

Starting migrations...
======================
> Network name:    'extdev_plasma_us1'
> Network id:      9545242630824
> Block gas limit: 0

この2つの環境についてtruffle-configに記述されている。

truffle-config.js
    loom_dapp_chain: {
      provider: function() {
        const privateKey = readFileSync(path.join(__dirname, 'private_key'), 'utf-8')
        const chainId = 'default'
        const writeUrl = 'http://127.0.0.1:46658/rpc'
        const readUrl = 'http://127.0.0.1:46658/query'
        const loomTruffleProvider = new LoomTruffleProvider(chainId, writeUrl, readUrl, privateKey)
        loomTruffleProvider.createExtraAccountsFromMnemonic("gravity top burden flip student usage spell purchase hundred improve check genre", 10)
        return loomTruffleProvider
      },
      network_id: '*'
    },

    extdev_plasma_us1: {
      provider: function() {
        const privateKey = readFileSync(path.join(__dirname, 'extdev_private_key'), 'utf-8')
        const chainId = 'extdev-plasma-us1'
        const writeUrl = 'http://extdev-plasma-us1.dappchains.com:80/rpc'
        const readUrl = 'http://extdev-plasma-us1.dappchains.com:80/query'
        return new LoomTruffleProvider(chainId, writeUrl, readUrl, privateKey)
      },
      network_id: '9545242630824'
    },
$ yarn gen:rinkeby-key
#Rinkeby 
https://faucet.rinkeby.io/
$ export INFURA_API_KEY=1234567890
$ yarn deploy:rinkeby

ExtDevコインとRinkebyトークンの交換

アドレスを紐付ける

node ./gateway-cli.js map-contracts token
//(MyTokenContractAddress)->(MyRinkebyTokenContractAddress)
Submitted request to map 0x2A7B63620AEd6DF6cE3447e20E58cAcCFD6538D3 to 0xE2759F793AFf841B49Dc97a26819109491F0403D

node ./gateway-cli.js map-contracts coin
//(MyCoinContractAddress)->(MyRinkebyCoinContractAddress)
Submitted request to map 0xD41fB46DFD4a4e5f73Ac6F18339ec87465Cb86aA to 0x3A37F91077c0BEb27089e7B7E8383CF7E25405B8

//rinkebyのコントラクトaddress <-> rinkebery-Address From
//(MyRinkebyToken address(wallet address))<->(LoomLocalAddress)
mapping eth:0x2210d424a2cf814fc9d78dd094b52a7a0edbed14 to extdev-plasma-us1:0xf6337f78a0af189d5ee9ba4314364f8658b4a745
Mapped extdev-plasma-us1:0xf6337f78a0af189d5ee9ba4314364f8658b4a745 to eth:0x2210d424a2cf814fc9d78dd094b52a7a0edbed14

tokenをmint

//idを指定してRinkebyでtokenをmintする
$ node ./gateway-cli.js mint-token 1
Token 1 minted, Rinkeby tx hash: 0x1421e67f0be56fb37196258b52c7c83401765ae65db651d78bdaa9d57bfe9863
$ node ./gateway-cli.js mint-token 2
Token 2 minted, Rinkeby tx hash: 0xcf11f7ab25d3ff71aa962d119a0b3f8a8e499e878caac44fa8a8ff907a94bcbe
$ node ./gateway-cli.js mint-token 3
Token 3 minted, Rinkeby tx hash: 0x85740398d62c9c2a95e1a6fc91abbb5be999f6a60645d799c19e1b8719dd691a

tokenの転送例

//token1をrinkeby->ext-devに転送する
$ node ./gateway-cli.js deposit-token 1
Token 1 deposited, Rinkeby tx hash: 0x475079d79de98bc9baa642eb41321a50ef7f0f1955844af891fc3ded91e38df8

//Rinkebyのtoken残高
$ node ./gateway-cli.js token-balance -c eth
0x2210d424A2cf814fC9d78DD094b52a7A0EDbEd14 owns 2 tokens.
First 2 token(s): 3,2

//ext-devのtoken残高
$ node ./gateway-cli.js token-balance
0xf6337f78a0af189d5ee9ba4314364f8658b4a745 owns 1 tokens.

Gateway(Rinkeby)の保有残高
node ./gateway-cli.js token-balance -a gateway -c eth
0xb73C9506cb7f4139A4D6Ac81DF1e5b6756Fab7A2 owns 1 tokens.

coinの転送例

$ node ./gateway-cli.js deposit-coin 120
120 tokens deposited to Ethereum Gateway.
Rinkeby tx hash: 0x34fc4f092cfe7bd9846d7c5119455b1752b5e121d0d81d1ff0683abd228d7a8b

// Rinkebyの残高
$ node ./gateway-cli.js coin-balance -c eth
0x2210d424A2cf814fC9d78DD094b52a7A0EDbEd14 balance is 999999880

// extdevの残高
$ node ./gateway-cli.js coin-balance
0xf6337f78a0af189d5ee9ba4314364f8658b4a745 balance is 0

// Gateway(Rinkeby)の残高
$ node ./gateway-cli.js coin-balance -a gateway -c eth
0xb73C9506cb7f4139A4D6Ac81DF1e5b6756Fab7A2 balance is 120

ext-devからRinkebyにtokenを戻す

# Rinkebyに戻す
node ./gateway-cli.js withdraw-token 1

# Rinkeby残高
node ./gateway-cli.js token-balance -c eth

# extdev残高
node ./gateway-cli.js token-balance

ext-devからRinkebyにcoinを戻す

node ./gateway-cli.js token-balance -a gateway -c eth

# Rinkebyに60戻す
node ./gateway-cli.js withdraw-coin 60

# Rinkeby残高
node ./gateway-cli.js coin-balance -c eth

# extdev残高
node ./gateway-cli.js coin-balance

# Gateway(Rinkeby)残高
node ./gateway-cli.js coin-balance -a gateway -c eth

参考

(一連のtestnetでの流れ)
https://loomx.io/developers/docs/en/extdev-transfer-gateway.html

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1