🍁 金秋送福,大奖转不停!Gate 广场第 1️⃣ 3️⃣ 期秋季成长值抽奖大狂欢开启!
总奖池超 $15,000+,iPhone 17 Pro Max、Gate 精美周边、大额合约体验券等你来抽!
立即抽奖 👉 https://www.gate.com/activities/pointprize/?now_period=13&refUid=13129053
💡 如何攒成长值,解锁更多抽奖机会?
1️⃣ 进入【广场】,点头像旁标识进入【社区中心】
2️⃣ 完成发帖、评论、点赞、社群发言等日常任务,成长值拿不停
100% 必中,手气再差也不亏,手气爆棚就能抱走大奖,赶紧试试手气!
详情: https://www.gate.com/announcements/article/47381
#成长值抽奖赢iPhone17和精美周边# #BONK# #BTC# #ETH# #GT#
理解重入攻击及如何防止它们 🔐
重入攻击乍一看似乎很棘手。让我用简单的术语为您分解一下,并向您展示一些保护您的智能合约的方式 🛡️
什么是重入攻击? 🧐
这发生在 ContractB 在 ContractA 仍在运行时回调 ContractA。这很麻烦。攻击者喜欢这个漏洞来从合约中抽取资金 💸
想象一下:
攻击机制 🕵️♂️
你需要两个关键的东西:
流程如下:
这有点令人惊讶,虽然简单却可能造成毁灭性的后果。
易受攻击的代码示例 📝
这就是一个脆弱合约的样子: 坚固 函数 withdrawAll() public { uint bal = 余额[msg.sender]; require(bal > 0);
(bool发送,) = msg.sender.call{value: bal}(“”); require(sent, "发送以太币失败");
余额[msg.sender] = 0;发送后更新?大错! }
攻击合约的作用是: 坚固 fallback() 外部应付 { if(etherStore.balance >= 1 ether) etherStore.withdrawAll019283746574839201(; }
函数 attack)( external payable { 需求019283746574839201msg.value >= 1 ether); etherStore.deposit{value: 1 ether}(); etherStore.withdrawAll019283746574839201(; }
三种方法来阻止这些攻击 🛡️
) 1.nonReentrant 修饰符 🔒
坚固 bool private locked = false;
修饰符 nonReentrant() { require###!locked, “No reentrancy”(; 锁定 = true; _; 锁定 = false; }
将其添加到易受攻击的函数中。简单但有效。
) 2. 检查-效果-交互模式 📊
这很关键:
坚固 函数 withdrawAll() public { uint bal = 余额[msg.sender]; require###bal > 0(;
余额[msg.sender] = 0;首先更新
)bool发送,( = msg.sender.call{value: bal})“”(;然后交互 require)sent, "发送以太币失败"(; }
先更新你的状态。稍后再互动。永远如此。
) 3. 全球保护 🌐
对于更大的项目:
坚固 合约 GlobalReentrancyGuard { bool private locked = false;
修饰符 globalNonReentrant() { require###!locked, “No reentrancy”(; 锁定 = true; _; 锁定 = false; } }
让你所有的智能合约继承这个。更安全的生态系统。
最新趋势 🔥
截至2025年9月,这些攻击仍然困扰着DeFi。开发者为什么总是犯同样的错误并不完全清楚。像Slither这样的工具可以发现这些问题。Echidna和Foundry帮助测试它们🚀
安全不仅仅是添加一个修饰符。这是一种心态。
保持警惕!🛡️