跨鏈價值轉移
本節將介紹如何使用提供的測試代碼在 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 網絡上的賬戶。
在 https://toolkit.kaia.io/account/accountKeyLegacy 上創建測試賬戶,並從 水龍頭 獲取測試 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
替換為上一步中從 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 代幣轉移(兩步法)](#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
目錄包含相應的示例源代碼。