Castとは
Castは、Foundryというスマートコントラクト開発ツールに付属する、コマンドラインツールです。
Foundryをインストールするときに一緒についてきます。Foundryについては、この日本語の記事が参考になるでしょう。
どういうことができるのか
RPCコールの実行や変換をコマンドラインから行うことができます。
ターミナルから移動せずに、そのままコマンドを打つことで完結するので、時間の短縮を行うことができます。
正直、使用できるコマンドについてはこちらのreferenceを見れば分かります。
この記事ではcastが役に立つ状況や便利さを語りたいと思います。
例1: アドレスをチェックサムしたい
Solidityを書いているとき、定数のアドレスをハードコードしたい時があるでしょう。Solidityではアドレスはチェックサムされていないとコンパイルできません!! また、web3.pyはチェックサムされていないアドレスを引数に与えるとエラーが出ます。
castなら秒でチェックサムできます!!タターンッ(エンターキーを弾く)
> cast --to-checksum-address 0x6b175474e89094c44da98b954eedeac495271d0f
0x6B175474E89094C44Da98b954EedeAC495271d0F
例2:カッコいいアドレスを生成したい
先頭に0
が続くカッコイイイvanityアドレスが欲しい。
castならコマンド一発です。
> cast wallet vanity --starts-with=0000
Starting to generate vanity address...
Successfully found vanity address in 34 seconds.
Address: 0x00001bCd6F496eDbB5B45095801e8b17b02B0049
Private Key: 0xedbd9f7e259364837b982ea3742e1bd81956df90c713256ea928b7ee0c5b9312
ProfanityというVanity addressを生成する有名なツールに脆弱性がありました。秘密鍵生成ツールや生成方法にはバグがあった場合、資産の漏洩に直結します。コードをセルフauditするか、ツールの使用にはそのようなリスクが伴うことに留意するべきです。
A vulnerability disclosed in Profanity, an Ethereum vanity address tool
例3:16進数を10進数に変換したい
建てたノードが動作しているか確かめるために、eth_blockNumber
を叩いてみたけど、レスポンスが16進数なので読みづらい!!いちいち、変換サイトを検索するのも億劫です。castで一発で変換できます。
> curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":51}' http://localhost:8585
{
"jsonrpc" : "2.0",
"id" : 51,
"result" : "0xef6409"
}%
> cast --to-dec 0xef6409
15688713
または
> cast block-number --rpc-url=$MAINNET_RPC_URL
15688713
例4:Txnのトレースを見たい
テストのデバッグ時などトランザクションのトレースを見たい時ありますよね。
試しに、Uniswapのガバナンストークンの送金トランザクションを見てみましょう。
有名な関数セレクタならシグネチャtransfer(...)
のように変換されて表示されます。
> cast run --rpc-url=$MAINNET_RPC_URL 0x721dacc87c412b3a1cf5e3d8226a19a7cb0aff9c93167187e648dc05fa89e67c
Executing previous transactions from the block.
Traces:
[18462] 0x1f98…f984::transfer(0x91161424a172b777e4c3883ffeb79cb53405a021, 69218200000000000000)
├─ emit Transfer(param0: 0xee91ae665be6a92a1241911cea3cae9d50fe658d, param1: 0x91161424a172b777e4c3883ffeb79cb53405a021, param2: 69218200000000000000)
└─ ← 0x0000000000000000000000000000000000000000000000000000000000000001
Transaction successfully executed.
Gas used: 40118
最後に
castコマンドラインツールはsmart contract開発におけるスイス・アーミーナイフです。
参考リンク