跳至主要内容

跨链价值转移

本节将介绍如何使用提供的测试代码在 Kairos 网络和您的 ServiceChain 之间启用 ERC-20 值传输。 您将把 KAIA 添加到运营商账户,并部署桥接和 ERC-20 合约。 然后在 SCN 上注册合同地址。 您将测试 ERC-20 值的转移。

先决条件

ERC-20 代币转让(一步式)

步骤 1:将 KAIA 添加到操作员账户。

连接 SCN 并通过执行 subbridge.parentOperatorsubbridge.childOperator 检查账户地址。


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

subbridge.parentOperatorsubbridge.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/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 部分(ServiceChain 网络上的 SCN 节点)中的 url 替换为 SCN 节点 IP 和 kscnd.confRPC_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: 0
requestValueTransfer..
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 的工作流程与上述相同。 erc721kip17kaia目录包含相应的示例源代码。

让这个页面变得更好