跨链价值转移
本节将介绍如何使用提供的测试代码在 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
目录包含相应的示例源代码。