クロスチェーンの価値移転
This section will explain how to enable ERC-20 value transfer between Baobab network and your ServiceChain with the provided test code. You will add KLAY to the operator account and deploy bridge and ERC-20 contracts. その後、SCNに契約アドレスを登録します。 そして、ERC-20の値を転送するテストを行う。
前提条件
- We assume that you installed the ServiceChain, and connected the ServiceChain to the Baobab EN by the instructions in Connecting to Baobab.
- リポジトリservicechain-value-transfer-examplesをクローンします。
Node.js
(v14) とnpm
をインストールする (インストール方法)- この例では、axiosとcaver-jsという2つのパッケージを利用しているが、どちらもv14をサポートしている。
ERC-20トークン転送(ワンステップ)
Step 1: Add KLAY to the operator accounts.
SCN に接続し、subbridge.parentOperator
と subbridge.childOperator
を実行してアカウントアドレスを確認する。
$ kscn attach --datadir ~/data> subbridge.childOperator"0x10221f7f9355017cd0c11444e7eecb99621bacce"> subbridge.parentOperator"0x3ce216beeafc62d20547376396e89528e1d778ca"
subbridge.parentOperator
と subbridge.childOperator
はトランザクションを送信するのに十分なKAIAを持っていなければならない。 subbridge.parentOperator
はKairosネットワークのアカウントで、subbridge.childOperator
はServiceChainネットワークのアカウントであることに注意してください。
Kaia Toolkit](https://toolkit.kaia.io/account/)を使ってテストアカウントを作成し、[the faucet](https://faucet.kaia.io/)からテストKAIAを入手する。 その後、KAIAをparentOperator
に送る。 childOperator
has to get KLAY from the test account generated by homi
(Refer to EN Setup and SCN Connection Guide).
$ kscn account import ~/homi-output/keys_test/testkey1Your new account is locked with a password. Please give a password. Do not forget this password.Passphrase:Repeat passphrase:Address: {80119c31cdae67c42c8296929bb4f89b2a52cec4}
$ kscn attach --datadir ~/data> personal.unlockAccount("80119c31cdae67c42c8296929bb4f89b2a52cec4")Unlock account 80119c31cdae67c42c8296929bb4f89b2a52cec4Passphrase:True> kaia.sendTransaction({from:"80119c31cdae67c42c8296929bb4f89b2a52cec4", to:subbridge.childOperator, value: web3.toPeb(1000, "KAIA")})"0x84caab84ebf0c4bb4ecf0a7849f1de3e479f1863a95f70c51047a7ca7bc64b33"
オペレーターの口座に十分な残高があるか確認する。 サブブリッジがインストールされている SCN ノードのコンソールから、以下のように問い合わせることができます:
> kaia.getBalance(subbridge.childOperator)1e+21> subbridge.childOperatorBalance1e+21> subbridge.parentOperatorBalance1e+18
ステップ2:契約の展開
- SCN に接続し、契約展開のためのノード環境を準備します。 リポジトリservicechain-value-transfer-examplesをクローンします。
このステップでは、ブリッジ・コントラクトとトークン・コントラクトの両方を、親チェーンと子チェーンにデプロイする。 トークンコントラクトは、鋳造/移転テスト用であり、ブリッジコントラクトは、価値移転リクエストをリッスン/処理するために使用される。
$ git clone https://github.com/klaytn/servicechain-value-transfer-examples$ cd servicechain-value-transfer-examples$ npm install$ cd erc20
テキストエディタで bridge_info.json
を以下のように編集する。
child
セクションのurl
(ServiceChain ネットワーク上の SCN ノード) を SCN ノードの IP アドレスに、kscnd.conf
のRPC_PORT
を適切なポート番号に置き換えてください。child.key
をhomi
が生成したtestkey1
に置き換える。child.operator
に、前のステップで調べたsubbridge.childOperator
アドレスを設定する。parent
セクションのurl
(Kairos ネットワーク上の EN ノード) を EN ノードの IP に、kend.conf
のRPC_PORT
を適切なポート番号に置き換えてください。- parent.key`を、前のステップでKaia Toolkitを使って作成したテストアカウントの秘密鍵に置き換える。
parent.operator
を前のステップのsubbridge.parentOperator
に設定する。
{ "child" : { "url": "http://192.168.0.1:7551", "key": "0x66cb283353589a10866b58d388e9d956e5a9c873a8c78fa4411d460c19c494ea", "operator": "0x10221f7f9355017cd0c11444e7eecb99621bacce" }, "parent" : { "url": "http://192.168.0.5:8551", "key": "0x26f4b5ac42ceabcfd3b23a991fdbfc792d10ce700a99582fdf9185a8f163b790", "operator": "0x3ce216beeafc62d20547376396e89528e1d778ca" } }
コマンド node erc20-deploy.js
を実行して、トークンのデプロイを実行する。 このスクリプトは、ブリッジ・コントラクトとトークン・コントラクトの両方をデプロイし、ブリッジ・ペアを初期化するためのAPIの使用法を出力する。
$ node erc20-deploy.js------------------------- erc20-deploy START -------------------------> info.bridge: 0xEa024d8101E112330f2d7B1a7e7932034E206721> info.token: 0xbE641028610F628835C36F12bE62d54d74308D70> info.bridge: 0xA5af6Ffe13b367626B5AdF827DdE7438E3Db4463> info.token: 0x52F8Fa79Fa6D37b18b7AC8f9Ca835373f3C9270f> subbridge.registerBridge("0xEa024d8101E112330f2d7B1a7e7932034E206721", "0xA5af6Ffe13b367626B5AdF827DdE7438E3Db4463")> subbridge.subscribeBridge("0xEa024d8101E112330f2d7B1a7e7932034E206721", "0xA5af6Ffe13b367626B5AdF827DdE7438E3Db4463")> subbridge.registerToken("0xEa024d8101E112330f2d7B1a7e7932034E206721", "0xA5af6Ffe13b367626B5AdF827DdE7438E3Db4463", "0xbE641028610F628835C36F12bE62d54d74308D70", "0x52F8Fa79Fa6D37b18b7AC8f9Ca835373f3C9270f")------------------------- erc20-deploy END -------------------------
ステップ3:トークン譲渡
コマンド node erc20-transfer-1step.js
でトークン転送を実行する。 このワンステップのトークン転送には、ERC-20トークンの実装を変更する必要がある。 トークンコントラクトを変更したくない場合、または既にデプロイされているトークンコントラクトをお持ちの場合は、ERC-20トークン転送(2ステップ)をご参照ください。
$ node erc20-transfer-1step.js------------------------- erc20-transfer-1step START -------------------------alice balance: 0requestValueTransfer..alice balance: 100------------------------- erc20-transfer-1step END -------------------------
もし結果がalice balance: 100
なら、正常に実行されたことになる。
ERC-20トークン転送(2ステップ)
erc20-transfer-2step.jsを実行し、2段階移籍の例を見る。 この2段階のトークン移転の例では、未修正のERC-20トークンコントラクトを使用することができます。
(1)まずブリッジ契約を承認し、次に(2)契約関数 requestERC20Transfer()
を呼び出す。
ブリッジ・コントラクトとトークン・コントラクトの両方をすでにデプロイしているので、このセクションではコントラクトをデプロイしない。 デプロイしていない場合は、最初にデプロイしなければならない。 コントラクトは node erc20-deploy.js
を使ってデプロイできる。
$ node erc20-transfer-2step.js> ------------------------- erc20-transfer-2step START -------------------------> alice balance: 100> requestValueTransfer..> alice balance: 200------------------------- erc20-transfer-2step END -------------------------
ERC-20インターフェースを介したKIP-7トークン転送(2ステップ)
KIP-7はERC-20と互換性のあるトークン規格です。 KIP-7トークンコントラクトに requestERC20Transfer()
関数を呼び出して、親チェーンと子チェーンの間でKIP-7トークンを転送することができる。
ERC-20インタフェースを介してKIP-7トークンを送信する場合、トランザクション送信者に代わってブリッジがトークンを送信できるように、approve()
関数を呼び出す。 次に requestERC20Transfer()
関数を呼び出す。
以下のコマンドは、ブリッジ契約とKIP-7契約を展開する。
$ node kip7-deploy.js> ------------------------- kip7-deploy START -------------------------> info.bridge: 0x04e929Cd2A08acd28a210369407D8Ca237Edd8FE> info.token: 0xE0E2fC6C7d1eB069153E0c12a4C87B01586b39e7> info.bridge: 0xEb502159A4B4E876B1cb423f250DCC0d276e01b6> info.token: 0xd4f02Ca1d49674056A9ec78fbBDc9e1e97726A4F> subbridge.registerBridge("0x04e929Cd2A08acd28a210369407D8Ca237Edd8FE", "0xEb502159A4B4E876B1cb423f250DCC0d276e01b6")> subbridge.subscribeBridge("0x04e929Cd2A08acd28a210369407D8Ca237Edd8FE", "0xEb502159A4B4E876B1cb423f250DCC0d276e01b6")> subbridge.registerToken("0x04e929Cd2A08acd28a210369407D8Ca237Edd8FE", "0xEb502159A4B4E876B1cb423f250DCC0d276e01b6", "0xE0E2fC6C7d1eB069153E0c12a4C87B01586b39e7", "0xd4f02Ca1d49674056A9ec78fbBDc9e1e97726A4F")------------------------- kip7-deploy END -------------------------
以下のコマンドは requestERC20Transfer()
を使ってERC-20インターフェイスを使ってKIP-7トークンを送信する例である。
$ node kip7-transfer-2step-erc20-interface.js> ------------------------- kip7-transfer-2step-erc20-interface START -------------------------> alice balance: 0> requestValueTransfer..> alice balance: 100> ------------------------- kip7-transfer-2step-erc20-interface END -------------------------
その他のケースについては、service-chain-value-transfer-exampleをご参照ください。
KIP-7およびKIP-17のネイティブ・サポート(実装予定)
現在、Kaiaチームが提供しているブリッジ契約は、トークン転送のために requestERC20Transfer()
と requestERC721Transfer()
のみをサポートしています。 KIP-7とKIP-17に対応するリクエスト機能は近日中にサポートされる予定である。 実装が完了する前に、上で見たように、ERC-20インターフェースを使用してKIP-7トークンを転送することができます。
Value Transfer for ERC-721, KIP-17, and KLAY
The workflow for ERC-721, KIP-17, and KLAY is the same as above. erc721
、kip17
、kaia
の各ディレクトリには、対応するサンプルソースコードが含まれています。