script (⏱,💰)

script (⏱,💰)

StarkNetのコマンドライン送金方法

今日は StarkNet basecamp の課題をやっていると、新しく作成したアカウント B が ETH を受け取れなくなってしまいました。そのため、以前にデプロイしたアカウント A の ETH をアカウント B に送金したいと思います。

アカウント A と B はコマンドラインで作成されたもので、ウォレットには組み込まれておらず、コマンドライン、SDK、またはサードパーティのコマンドラインツールを使用して 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 を検索すると、PortfolioETH のコントラクトアドレス(StarkNet では ETH はトークンとして扱われます)が見つかります。

porfolio

ETH はアップグレード可能なコントラクトであり、見つかったプロキシ(Proxy)コントラクトの abi にはTransferが含まれていません。Read/Write Contractロジック(Implementation)コントラクトのアドレスを見つけることができます。abi が必要な場合は、ロジックコントラクトのページにアクセスしてダウンロードできます。

このページでtransferを見つけることができ、パラメーターrecipientFeltamountUint256です。
transfer

transfer関数を呼び出すためには、invoke を使用します。

以下は送金コマンドです。
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)であり、2 番目のパラメーターは 0 です。

convert

送金が成功しました。
Transfer success

次はアカウント B のガスデプロイです。

他のコントラクト間のやり取りも同様の方法で行うことができます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。