Optimizer with too many runs results in loss of optimization
Mouradif opened this issue · comments
Mourad Kejji commented
I tried several different values for the run
attribute of the optimizer's configuration and compared results using hardhat-contract-sizer
. I've reach the highest level of optimization for one single run:
with runs: 1_000_000
·------------------------------------|---------------------------|-----------------·
| Solc version: 0.8.17 · Optimizer enabled: true · Runs: 1000000 │
·····································|···························|··················
| Contract Name · Size (KiB) · Change (KiB) │
·····································|···························|··················
| console · 0.084 · │
·····································|···························|··················
| Strings · 0.084 · │
·····································|···························|··················
| SafeTransferLib · 0.084 · │
·····································|···························|··················
| MerkleProof · 0.084 · │
·····································|···························|··················
| ECDSA · 0.084 · │
·····································|···························|··················
| Math · 0.084 · │
·····································|···························|··················
| MaliciousRecipient · 1.037 · │
·····································|···························|··················
| TwoStepAdministered · 2.063 · │
·····································|···························|··················
| ERC721A · 4.319 · │
·····································|···························|··················
| TestERC721 · 4.548 · │
·····································|···························|··················
| ERC721ContractMetadata · 7.873 · │
·····································|···························|··················
| ERC721SeaDrop · 18.371 · │
·····································|···························|··················
| ERC721SeaDropRandomOffset · 18.739 · │
·····································|···························|··················
| ERC721SeaDropBurnable · 18.883 · │
·····································|···························|··················
| SeaDrop · 20.595 · │
·····································|···························|··················
| ERC721PartnerSeaDrop · 22.067 · │
·····································|···························|··················
| ERC721PartnerSeaDropRandomOffset · 22.455 · │
·····································|···························|··················
| ERC721PartnerSeaDropBurnable · 22.579 · │
·------------------------------------|---------------------------|-----------------·
With runs: 1
:
·------------------------------------|---------------------------|----------------·
| Solc version: 0.8.17 · Optimizer enabled: true · Runs: 1 │
·····································|···························|·················
| Contract Name · Size (KiB) · Change (KiB) │
·····································|···························|·················
| console · 0.084 · 0.000 │
·····································|···························|·················
| SafeTransferLib · 0.084 · 0.000 │
·····································|···························|·················
| MerkleProof · 0.084 · 0.000 │
·····································|···························|·················
| Math · 0.084 · 0.000 │
·····································|···························|·················
| Strings · 0.084 · 0.000 │
·····································|···························|·················
| ECDSA · 0.084 · 0.000 │
·····································|···························|·················
| MaliciousRecipient · 0.765 · -0.272 │
·····································|···························|·················
| TwoStepAdministered · 1.394 · -0.669 │
·····································|···························|·················
| ERC721A · 3.171 · -1.148 │
·····································|···························|·················
| TestERC721 · 3.219 · -1.329 │
·····································|···························|·················
| ERC721ContractMetadata · 5.743 · -2.130 │
·····································|···························|·················
| ERC721SeaDrop · 14.150 · -4.221 │
·····································|···························|·················
| ERC721SeaDropRandomOffset · 14.436 · -4.304 │
·····································|···························|·················
| ERC721SeaDropBurnable · 14.499 · -4.384 │
·····································|···························|·················
| SeaDrop · 15.334 · -5.261 │
·····································|···························|·················
| ERC721PartnerSeaDrop · 17.053 · -5.015 │
·····································|···························|·················
| ERC721PartnerSeaDropRandomOffset · 17.357 · -5.098 │
·····································|···························|·················
| ERC721PartnerSeaDropBurnable · 17.401 · -5.178 │
·------------------------------------|---------------------------|----------------·
That's a pretty huge difference so I thought I'd suggest this update here.