kasoqian

kasoqian

区块链步道师,传播区块链技术

WTF ガス最適化

WTF ガス最適化#

Solidity ガス最適化技術、Foundry を使用。Solidity スマートコントラクトをよりガス効率的に書くためのテクニックをまとめます。

大綱#

1. 定数と不変を使用

2. メモリよりも calldata を使用

3. ビットマップを使用

4. チェックなしを使用

5. uint8 よりも uint256 を使用

6. require/assert よりもカスタムエラーを使用

7. ストレージよりもローカル変数を使用

8. new/create2 よりも clone2 を使用

9. ストレージスロットのパッキング

1. 定数と不変を使用#

コード | 記事

テスト

forge test --contracts 01_Constant/Constant.t.sol --gas-report

ガスレポート

関数名ガスコスト
varConstant183
varImmutable161 ✅
variable2305

2. メモリよりも calldata を使用#

コード | 記事

テスト

forge test --contracts 02_CalldataAndMemory/CalldataAndMemory.T.sol --gas-report

ガスレポート

関数名ガスコスト
writeByCalldata67905 ✅
writeByMemory68456

3. ビットマップを使用#

コード | 記事

テスト

forge test --contracts 03_Bitmap/Bitmap.T.sol --gas-report

ガスレポート

関数名ガスコスト
setDataWithBitmap22366 ✅
setDataWithBoolArray35729

4. チェックなしを使用#

コード | 記事

テスト

forge test --contracts 04_unchecked/Unchecked.T.sol --gas-report

ガスレポート

関数名ガスコスト
forNormal1910309
forUnchecked570287 ✅

5. uint8 よりも uint256 を使用#

コード | 記事

テスト

forge test --contracts 05_uint/Uint.T.sol --gas-report

ガスレポート

関数名ガスコスト
read Uint82379
read Uint1282465
read Uint2562317 ✅
set Uint85355
set Uint1285358
set Uint2565322 ✅

6. require/assert よりもカスタムエラーを使用#

コード | 記事

テスト

forge test --contracts 06_Error/Error.T.sol --gas-report

ガスレポート

エラー名ガスコスト
Assert180
Require268
Revert164 ✅

7. ストレージよりもローカル変数を使用#

コード | 記事

テスト

forge test --contracts 07_LocalData/LocalData.T.sol --gas-report

ガスレポート

データ型ガスコスト
localData1902339 ✅
storageData4022155

8. new/create2 よりも clone2 を使用#

コード | 記事

テスト

forge test --contracts 08_Clone2/Clone2.T.sol --gas-report

ガスレポート

作成タイプガスコスト
clone241493 ✅
create293031
new79515

9. ストレージスロットのパッキング#

コード

テスト

forge test --contracts 09_Packing/Packing.T.sol --gas-report

ガスレポート

作成タイプガスコスト
normal133521
packing111351 ✅

WTF ガス最適化 贡献者#

贡献者はWTF学院の基石 #

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