24种增加gas的anti-pattern
2025-10-26 11:01:42
2018年的「Towards Saving Money in Using Smart Contracts」paper中提出会使Ethereum上执行Smart contract所花费的gas变高的24种anti-pattern,此文章中分别说明此24种anti-pattern的形式与解决方法。

P1 — {swap(X), swap(X)} →delete, 1≤X≤16
P2 — {M consecutive jumpdests} → {jumpdest}, M≥2
P3 — {OP, pop} → {pop}, OP∈iszero,not,balance,calldataload,extcodesize,blockhash,mload,sload
P4 — {OP, pop} → {pop, pop}, OP∈add,sub,mul,div,sdiv,mod,smod,exp,sigextnd,lt,gt,slt,sgt,eq,and,or,xor,byte,sha3
P5 — {OP, pop} → {pop, pop, pop}, OP∈addmod,mulmod
P6 — {OP, pop} → delete, OP∈address,origin,caller,callvalue,calldatasize,codesize,gasprice,coinbase,timestamp,number,difficulty,gaslimit,pc,msize,gas
P7 — {swap1, swap(X), OP, dup(X), OP} → {dup2, swap(X+1), OP, OP}, 2≤X≤15,OP∈add,mul,and,or,xor
P8 — {OP, stop} → {stop}, OP can be any operation except jumpdest, jump, jumpi and all operations that change storage.
P9 — {swap(X), dup(X+1), swap1} → {dup1, swap(X+1)}, 1≤X≤15
P10 — {push(X), swap(Y), Y consecutive pops} → {Y consecutive pops, push(X)}, 1≤X≤32,1≤Y≤16
P11 — {swap(X), X+1 consecutive pops} → {X+1 consecutive pops}, 1≤X≤16
P12 — {swap(X), swap(Y), Y consecutive pops} → {X consecutive pops, swap(Y−X), (YX) consecutive pops}, 1≤X≤15,X<Y
P13 — {X consecutive push(N)s, Y consecutive pops} → {(XY) consecutive push(N)s, if X>Y; (YX) consecutive pops, otherwise}, 1≤N≤32
P14 — {X consecutive dup(N)s, Y consecutive pops} → {(XY) consecutive dup(N)s, ifX>Y; (YX) consecutive pops, otherwise}, 1≤N≤16
P15 — {dup(X), swap(X)} → {dup(X)}, 1≤X≤16
P16 — {swap1,swap2,…,swap(X),swap(X−1),…,swap1, X-1 consecutive pops} → {X-1 consecutive pops, swap1}, 2≤X≤16
P17 — {$swap$1, OP} → {OP}, OP∈add,mul,and,or,xor
P18 — {OP, iszero, iszero} → {OP}, OP∈lt,gt,slt,sgt,eq
P19 — {N consecutive push(X),M consecutive swap(Y)} → {N consecutive push(X)}, Y<N,1≤X≤32,1≤Y≤16
P20 — {push(X), swap(Y), push(M), swap1} → {push(M), push(X), swap(Y+1)}, 1≤X≤32,1≤Y≤15,1≤M≤32
P21 — {consecutive Xpush(N), dup(Y), swap(Z)} → {combination of Xpush(N) and dup(M)}, Y<=X,Z<=X,M<=X,1≤N≤32,1≤Y≤16,1≤Z≤16,1≤M≤16
P22 — {swap(N), M consecutive OPs,(N+M) consecutive and same OP′} → {M consecutive OPs,(N+M) consecutive and same OP'}, OP∈push(X),dup(Y), OP′∈add,mul,and,or,xor,1≤X≤32,1≤N≤16,1≤Y≤16
P23 — {dup1, swap(X), dup2, swap1} → {dup1, dup2, swap(X+1)}, 1≤X≤15
P24 — {dup(X), swap(X−1), swap1, dup(X), swap1} → {dup(X), dup1, swap(X), swap2}, 3≤X≤16
相关阅读
-
李斌预警:未来 1-2 年车市迎最残酷决赛,车企如何熬过寒冬?链资讯 2026-05-27 14:12:30
-
加密货币滑点全解析:定义、计算公式与降低技巧链百科 2026-05-27 14:12:20
-
BabyBoomToken (BBT 币) 深度解析:项目介绍、投资价值与价格走势分析链知识 2026-05-27 14:10:28
-
Framer 跨界推出限量机械键盘:自带网站流量统计屏,售价 3000 元仅 350 把链资讯 2026-05-27 14:06:57
-
ALGO 是什么币?深度解析 Algorand 运作机制与投资价值链百科 2026-05-27 14:02:18
-
北京大学认证:华为逻辑折叠技术才是真 3D,揭秘此前赝 3D 真相链资讯 2026-05-27 14:00:53
-
探索星空无限官网登录入口:全新直播视频软件的魅力与特色链资讯 2026-05-27 14:00:37
-
第二艘国产大型邮轮“爱达·花城号”试航成功,11 月正式交付链资讯 2026-05-27 13:55:37
-
加密货币订单簿详解:定义、工作原理与交易实战指南链百科 2026-05-27 13:52:33
-
以太坊 2026 年升级计划:次数、关键因素与未来展望链知识 2026-05-27 13:52:12