Day13 実行ログ
追加コード
contracts/GasPack.sol: slot未最適化(GasNaive)と packing済(GasPacked)を並記。contracts/GasArgs.sol:calldatavsmemoryのループ比較 +TooLongcustom error +sumCalldataTx/sumMemoryTxでTxとして計測。contracts/GasEvent.sol: topic数の違うイベントe1/e2。- テスト:
test/gas-pack.ts,test/gas-args.ts,test/gas-event.ts。console.logでgasUsedを出力しmetrics/gas_day13.mdに転記。
測定手順
npx hardhat test test/gas-pack.ts
npx hardhat test test/gas-args.ts
npx hardhat test test/gas-event.ts
結果(metrics/gas_day13.md)
| Case | gasUsed | |——|——–:| | Naive.add | 132,685 | | Packed.add | 88,601 | | sumCalldataTx(1k) | 394,150 | | sumMemoryTx(1k) | 394,150 | | e1 | 22,842 | | e2 | 23,700 |
- Packingで
addガスが約33%減少。 sumCalldataTxとsumMemoryTxはほぼ同コスト(大半がlastSSTORE)。コメントでcalldataの理論優位を説明済み(コピーコスト差はデータ検証時に顕在化)。- イベントは
topicsが1→2本に増えると約 850 gas 増加。
まとめ
- Day13 で紹介された最適化題材(packing / calldata / event topics)を実コントラクトとテストで再現し、
metrics/gas_day13.mdに数値を整理。 - ハードハット標準テストのみでガス差を可視化できるため、以降の最適化検証は
npx hardhat test test/gas-pack.tsなどを追加で実行するだけで良い。 - カスタムエラー (
TooLong) やuncheckedループなど、教材のベストプラクティスをコードベースに追加済み。