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 のガスデプロイです。

他のコントラクトの相互作用も同様の方法で行うことができます。

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