跨鏈價值轉移
本節將介紹如何使用提供的測試代碼在 Kairos 網絡和您的 ServiceChain 之間啟用 ERC-20 值傳輸。 您將把 KAIA 添加到運營商賬戶,並部署橋接和 ERC-20 合約。 然後在 SCN 上註冊合同地址。 您將測試 ERC-20 值的轉移。
先決條件
- 我們假定您已安裝了 ServiceChain,並按照連接至 Kairos中的說明將 ServiceChain 連接至 Kairos EN。
- 克隆存儲庫 servicechain-value-transfer-examples。
- 安裝
Node.js
(v14) 和npm
(How to install) - 本示例使用了兩個軟件包:axios 和 caver-js,它們都支持 v14。
ERC-20 代幣轉讓(一步式)
步驟 1:將 KAIA 添加到操作員賬戶。
連接 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 建立測試帳號,並從 the faucet 取得測試 KAIA。 然後向parentOperator
發送一些 KAIA。 childOperator "必須從 "homi "生成的測試賬戶獲取 KAIA(請參閱《EN 設置和 SCN 連接指南》)。
$ 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
部分(ServiceChain 網絡上的 SCN 節點)中的url
替換為 SCN 節點 IP 和kscnd.conf
中RPC_PORT
的正確端口號。 - 用
homi
生成的testkey1
替換child.key
。 - 將
child.operator
設置為我們在上一步中查看的subbridge.childOperator
地址。 - 將 "父節點 "部分(Kairos 網絡上的 EN 節點)中的 "url "替換為 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 代幣轉移(兩步法)](#erc-20-token-transfer-twost step)。
$ node erc20-transfer-1step.js------------------------- erc20-transfer-1step START -------------------------alice balance: 0requestValueTransfer..alice balance: 100------------------------- erc20-transfer-1step END -------------------------
如果結果是 alice balance: 100
,則表示已成功執行。
ERC-20 令牌傳輸(兩步法)
運行 erc20-transfer-2step.js,查看兩步轉移示例。 通過這個兩步代幣轉移示例,可以使用未經修改的 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 令牌傳輸(兩步法)
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 令牌。
ERC-721、KIP-17 和 KAIA 的價值轉移
ERC-721、KIP-17 和 KAIA 的工作流程與上述相同。 erc721
、kip17
和 kaia
目錄包含相應的示例源代碼。