ProjectOpenSea / seadrop

Smart contracts for primary drops on EVM chains

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Optimizer with too many runs results in loss of optimization

Mouradif opened this issue · comments

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.