script (⏱,💰)

script (⏱,💰)

StarkNet 命令行转账方法

今天做 StarkNet basecamp 作业时,新建的账户 B 领不到水了,于是想把之前部署过的 账户 A 的 ETH 转到 账户 B。

账户 A 和 B 都是通过命令行创建的,不能引入到钱包,只能通过命令行、SDK 或第三方命令行工具来 invoke ETH 合约的 transfer 函数达到目的。通过命令行是最简单的。

账户 B 通过 starknet new_account --account v0.11.0.2指令创建的,在 ~/.starknet_accounts/starknet_open_zeppelin_accounts.json 中,会自动添加一条记录如下

"v0.11.0.2": {
    "private_key": "0x6c.......c46",
    "public_key": "0x66e22d3fabc4575d48c8b015d830f06dfcd07fe2bcb1b707363cbdee237c2a8",
    "salt": "0x6ebe039e6862dbcc51da66b6729e2ae9c329e6f85d1c7c658055b9ddfdcef93",
    "address": "0xe669f0765742557ea1c44320b5bcf2ca2c5d5725f016a21bb48bcb07932400",
    "deployed": false
}

同样也能找到之前的账户 A,名字是version_11

"version_11": {
  "private_key": "0x5a....4ff",
  "public_key": "0x6e5c1e7e741190090f45bd323661203417e7e88c76bf872356d1c84e7462bf2",
  "salt": "0x35ff7c0aeadc5144ea68682a744f4bda3b2b07dadf17ab11dc90ce862fac7c9",
  "address": "0x4f5084d55c9b67e147660e6429a18b3c868c36da70888548b48a43b89ec4cea",
  "deployed": true
}

StarkScan 浏览器中查询账户 A,在Portfolio中就能找到ETH 的合约地址(StarkNet 中的 ETH 是 Token)。

porfolio

ETH 是可升级合约,找到的代理 (Proxy) 合约的 abi 中并没有 Transfer。在Read/Write Contract中找到逻辑合约 (Implementation) 地址。如果需要 abi,可以到逻辑合约的页面去下载。

能在该页面找到 tranfer,参数recipientFeltamountUint256
transfer

使用 invoke 去调用 transfer 函数就可以完成转账了。

转账命令如下,
starknet invoke --address 0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 --function transfer --inputs 2242186224124962059324130445823883801135621115872240251912124809464678993130 100000000000000000 0 --account version_11

--address 是 ETH 合约地址,--account是签名的账户 A 的名字

--input 的参数需要转换成 Decimal。recipient是地址,用 Python 的 int 进行转换。amount是 uint256,需要 2 个 felt 参数,第一个是int(ETH数量e18),第二个填 0。

convert

转账成功
Transfer success

接下来就有 gas 部署账户 B 了。

其他的合约交互也可以用类似方法完成。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。