Test harness to compare ERC-20s.
Tokens courtesy of their respective teams, pulled from Etherscan :).
test/gas.js runs tokens through a suite of "typical" operations and compares their gas costs per operation.
┌──────────────────────────────────────────┬────────┬───────────┬───────┬───────┬───────────┬───────┐
│ │ ANTv1 │ ANTv2 │ Comp │ Uni │ UniLpV2 │ Yfi │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ new:transfers │ 122245 │ 50974 │ 55472 │ 55494 │ 50905 (*) │ 51079 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ new:transfers-all │ 122245 │ 35974 │ 40496 │ 40530 │ 35905 (*) │ 36079 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ new:approves │ 47752 │ 43974 (*) │ 45514 │ 45562 │ 43974 (*) │ 44046 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ new:transferFroms │ 115330 │ 42617 (*) │ 50184 │ 50234 │ 43426 │ 44705 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ new:transferFroms-dust │ 122245 │ 50974 │ 55472 │ 55494 │ 50905 (*) │ 51079 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ new:transferFroms-infinity-allowance │ 130330 │ 52387 │ 57064 │ 57111 │ 52247 (*) │ 59705 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ new:transferFroms-all │ 122245 │ 35974 │ 40496 │ 40530 │ 35905 (*) │ 36079 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ prevbal:transfers │ 114786 │ 35974 │ 40472 │ 40494 │ 35905 (*) │ 36079 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ prevbal:transfers-all │ 114786 │ 20974 │ 25508 │ 25542 │ 20905 (*) │ 21079 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ prevbal:approves │ 47752 │ 43974 (*) │ 45514 │ 45562 │ 43974 (*) │ 44046 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ prevbal:transferFroms │ 107871 │ 27617 (*) │ 35184 │ 35234 │ 28426 │ 29705 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ prevbal:transferFroms-dust │ 114786 │ 35974 │ 40472 │ 40494 │ 35905 (*) │ 36079 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ prevbal:transferFroms-infinity-allowance │ 122871 │ 37387 │ 42064 │ 42111 │ 37247 (*) │ 44705 │
├──────────────────────────────────────────┼────────┼───────────┼───────┼───────┼───────────┼───────┤
│ prevbal:transferFroms-all │ 114786 │ 20974 │ 25508 │ 25542 │ 20905 (*) │ 21079 │
└──────────────────────────────────────────┴────────┴───────────┴───────┴───────┴───────────┴───────┘
Tokens with delegation enabled
┌──────────────────────────────────────────┬───────────┬─────────┬─────────────┬────────────┐
│ │ Comp Del │ Uni Del │ Comp Del to │ Uni Del to │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ new:transfers │ 87841 (*) │ 87863 │ 133185 │ 133218 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ new:transfers-all │ 72865 (*) │ 72899 │ 118209 │ 118254 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ new:approves │ 45514 (*) │ 45562 │ 45514 (*) │ 45562 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ new:transferFroms │ 82553 (*) │ 82603 │ 127898 │ 127959 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ new:transferFroms-dust │ 87841 (*) │ 87863 │ 133185 │ 133218 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ new:transferFroms-infinity-allowance │ 89433 (*) │ 89480 │ 134777 │ 134835 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ new:transferFroms-all │ 72865 (*) │ 72899 │ 118209 │ 118254 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ prevbal:transfers │ 72841 (*) │ 72863 │ 105136 │ 105169 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ prevbal:transfers-all │ 57877 (*) │ 57911 │ 90172 │ 90217 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ prevbal:approves │ 45514 (*) │ 45562 │ 45514 (*) │ 45562 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ prevbal:transferFroms │ 67553 (*) │ 67603 │ 99849 │ 99910 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ prevbal:transferFroms-dust │ 72841 (*) │ 72863 │ 105136 │ 105169 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ prevbal:transferFroms-infinity-allowance │ 74433 (*) │ 74480 │ 106728 │ 106786 │
├──────────────────────────────────────────┼───────────┼─────────┼─────────────┼────────────┤
│ prevbal:transferFroms-all │ 57877 (*) │ 57911 │ 90172 │ 90217 │
└──────────────────────────────────────────┴───────────┴─────────┴─────────────┴────────────┘
Notes on operations:
new
: recipient did not already have a pre-existing balance or approvalprevbal
: recipient already had a pre-existing balance of approval (receives gas refunds on SSTORE)
Notes on delegation suites:
Del
: recipient has been delegated toDel to
: recipient is both delegating and has been delegated to