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 了。

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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。