2026年10月19日周一

标签:合约安全

汇总与「合约安全」相关的文章,帮助你系统了解该主题。

让自毁越用越贵而不是哪天禁用:EIP-4760 的 SELFDESTRUCT 定时炸弹
加密货币百科
让自毁越用越贵而不是哪天禁用:EIP-4760 的 SELFDESTRUCT 定时炸弹

EIP-4760 对合约自毁指令的处理不走一刀切:把 SELFDESTRUCT 改名 SENDALL、只保留转账语义,同时让它的 Gas 成本每隔约九天(两万多个槽)翻倍一次、经历十三次翻倍后完成转换。本文拆解这条总长约四个月的指数涨价曲线如何给开发者留出可预期的逃生期。

重入锁可以不写存储吗:EIP-5283 的信号量预编译与它的三个对手
钱包与链上工具
重入锁可以不写存储吗:EIP-5283 的信号量预编译与它的三个对手

智能合约的传统重入锁要读写一个存储槽,而 2022 年 7 月提出的 EIP-5283 想在地址 0x0A 放一个叫信号量的预编译合约:只检查调用栈上有没有出现过同一个地址,完全不写存储,每次固定消耗 100 Gas。这份提案处于 Stagnant 停摆状态。本文讲清存储锁的工作原理、信号量方案的算法与账本、瞬态存储等三条竞争路线,以及普通用户从这场技术竞赛里能带走什么判断。

自愿焊死自毁出口的合约:EIP-2937 的 SET_INDESTRUCTIBLE 想锁住什么
钱包与链上工具
自愿焊死自毁出口的合约:EIP-2937 的 SET_INDESTRUCTIBLE 想锁住什么

SELFDESTRUCT 让合约可以销毁自身代码,也让依赖它的公共库存在被一纸调用连根拔起的风险。2020 年 9 月维塔利克提交的 EIP-2937 给合约一个选择权:执行 SET_INDESTRUCTIBLE 操作码后,本笔交易里谁也别想再销毁它。本文讲这份 Stagnant 提案怎么用交易级全局变量实现"不可毁承诺",它与整条禁用自毁路线的分歧,以及 2024 年后自毁语义收窄让它走向怎样的尾声。

tx.origin 和 msg.sender 听谁的:EIP-7645 想把"始作俑者"改写成直接来电
钱包与链上工具
tx.origin 和 msg.sender 听谁的:EIP-7645 想把"始作俑者"改写成直接来电

合约里查"谁发起了这笔交易"有两个答案:tx.origin 给最初的点火者,CALLER 给直接调用者,钓鱼合约正是利用两者的落差骗过授权检查。2024 年 3 月的 EIP-7645 提议让 0x32 操作码永远返回与 0x33 相同的值,把这块运营了近十年的技术债直接抹平。本文讲清两个操作码的分工、钓鱼利用路径,以及这份 Stagnant 提案与账户抽象的关系。

先问一句“你是代理吗”:ERC-897 给升级型合约定的两个查询问题
NFT 与铭文
先问一句“你是代理吗”:ERC-897 给升级型合约定的两个查询问题

ERC-897 创建于 2018 年 2 月 21 日,仓库记录状态为 Stagnant。它不规定代理合约怎么写,只规定代理合约怎么自报家门:任何代理应当实现 `proxyType()` 和 `implementation()` 两个函数,让工具用统一方式判断一个地址是不是代理、代理指向哪个实现。本文按原文拆解转发型与可升级型两种代理类型编号、返回 0 视为非代理的约定,以及查代理时它管不到的那半部分。

只想打钱、不想进对方合约:EIP-5065 想加的那条转账指令
钱包与链上工具
只想打钱、不想进对方合约:EIP-5065 想加的那条转账指令

在 EVM 里给一个合约地址转 ETH,等于顺带执行了对方合约里的接收函数,重入风险由此而来。EIP-5065 提出一条只转账、不移交执行流的指令,连 Gas 数字都算好了。本文拆解它相对自毁转账技巧的成本账、与重入防御的关系,以及它停在 Stagnant 的原因。

金库份额数字的膨胀攻击:第一笔存款为什么最危险
DeFi 教程
金库份额数字的膨胀攻击:第一笔存款为什么最危险

一些金库合约用份额与资产的比例记账,第一笔存入的金额和方式会成为攻击面:先存一笔极小份额、再向金库直接捐赠资产,就能让后续存款人的份额数被舍入归零。本文拆解这类份额通胀攻击的记账原理与主流防御写法。

可升级合约与权限:把资金放进协议前先查这四道阀门
DeFi 教程
可升级合约与权限:把资金放进协议前先查这四道阀门

多数 DeFi 协议的存款地址只是代理合约,真正的逻辑在背后可以被整体替换。本文解释代理模式的原理、升级权限的常见归属形态,以及存款前应该逐项确认的升级权、时间锁、暂停权和不可变范围。