本文へスキップ
このページは英語からの機械翻訳を使用しており、誤りや不明瞭な表現が含まれている可能性があります。最も正確な情報については、オリジナルの英語版をご覧ください。頻繁な更新のため、一部のコンテンツはオリジナルの英語になっている可能性があります。Crowdinでの取り組みに参加して、このページの翻訳改善にご協力ください。 (Crowdin translation page, Contributing guide)

クロスチェーンの価値移転

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.parentOperatorsubbridge.childOperator を実行してアカウントアドレスを確認する。


$ kscn attach --datadir ~/data
> subbridge.childOperator
"0x10221f7f9355017cd0c11444e7eecb99621bacce"
> subbridge.parentOperator
"0x3ce216beeafc62d20547376396e89528e1d778ca"

subbridge.parentOperatorsubbridge.childOperatorはトランザクションを送信するのに十分なKAIAを持っていなければならない。 subbridge.parentOperatorはKairosネットワークのアカウントで、subbridge.childOperatorはServiceChainネットワークのアカウントであることに注意してください。 https://toolkit.kaia.io/account/accountKeyLegacy](https://toolkit.kaia.io/account/accountKeyLegacy)でテストアカウントを作成し、[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/testkey1
Your 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 80119c31cdae67c42c8296929bb4f89b2a52cec4
Passphrase:
True
> kaia.sendTransaction({from:"80119c31cdae67c42c8296929bb4f89b2a52cec4", to:subbridge.childOperator, value: web3.toPeb(1000, "KAIA")})
"0x84caab84ebf0c4bb4ecf0a7849f1de3e479f1863a95f70c51047a7ca7bc64b33"

オペレーターの口座に十分な残高があるか確認する。 サブブリッジがインストールされている SCN ノードのコンソールから、以下のように問い合わせることができます:


> kaia.getBalance(subbridge.childOperator)
1e+21
> subbridge.childOperatorBalance
1e+21
> subbridge.parentOperatorBalance
1e+18

ステップ2:契約の展開

このステップでは、ブリッジ・コントラクトとトークン・コントラクトの両方を、親チェーンと子チェーンにデプロイする。 トークンコントラクトは、鋳造/移転テスト用であり、ブリッジコントラクトは、価値移転リクエストをリッスン/処理するために使用される。


$ 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.confRPC_PORT を適切なポート番号に置き換えてください。
  • child.keyhomiが生成したtestkey1に置き換える。
  • child.operatorに、前のステップで調べたsubbridge.childOperatorアドレスを設定する。
  • parent セクションの url (Kairos ネットワーク上の EN ノード) を EN ノードの IP に、kend.confRPC_PORT を適切なポート番号に置き換えてください。
  • parent.keyを、前のステップでhttps://toolkit.kaia.io/account/accountKeyLegacyから作成したテストアカウントの秘密鍵に置き換える。
  • 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: 0
requestValueTransfer..
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. erc721kip17kaiaの各ディレクトリには、対応するサンプルソースコードが含まれています。

ページを改善してください。