-
bitcoin $77323.969542 USD
0.01% -
ethereum $2523.414850 USD
2.23% -
tether $0.999674 USD
0.01% -
bnb $732.334794 USD
2.37% -
xrp $1.364311 USD
0.51% -
usd-coin $0.999831 USD
0.00% -
solana $101.751035 USD
1.88% -
tron $0.339246 USD
0.15% -
hyperliquid $78.911101 USD
-1.42% -
zcash $1143.169120 USD
2.95% -
dogecoin $0.084522 USD
0.58% -
monero $539.820025 USD
5.75% -
chainlink $11.538258 USD
0.03% -
unus-sed-leo $9.111763 USD
0.28% -
cardano $0.208079 USD
-0.46%
了解智能合约中的重入攻击(DAO 黑客解释)
A reentrancy attack exploits Ethereum’s execution model by recursively calling a vulnerable function before state updates, as seen in The DAO hack—where $50M was drained due to updating balances after external calls.
2026/01/16 01:40
什么是重入攻击?
1. 当外部合约在初始执行完成之前回调当前合约时,就会发生重入攻击。
2. 此漏洞是由于不正确的状态管理而产生的,具体来说,当状态变量在外部调用之后而不是之前更新时。
3. 攻击者部署包含回退函数的恶意合约,该函数会递归调用目标合约中的易受攻击函数。
4. 每个递归调用都会重新进入相同的逻辑路径,反复耗尽资金,而不会更新余额,直到整个调用堆栈展开。
5. 此类攻击利用以太坊的同步、单线程执行模型,其中外部调用在调用上下文中保留控制流。
DAO 事件:历史崩溃
1. DAO 是 2016 年在以太坊上推出的去中心化自治组织,旨在作为受智能合约规则管理的风险投资基金。
2.其代码允许代币持有者从 DAO 中分离出来,并通过调用splitDAO函数来回收以太币。
3. 该函数在更新内部余额之前将以太币转移到请求者的地址,创建一个经典的可重入窗口。
4. 攻击者部署了具有后备功能的合约,在收到资金后再次触发splitDAO 。
5. 在多次嵌套调用中,超过 360 万 ETH(当时价值超过 5000 万美元)在交易恢复或停止之前被抽走。
以太坊的执行模型如何实现可重入
1. Solidity 中的每个外部调用都在相同的事务上下文中执行,保留内存、存储和调用堆栈的可见性。
2. 除非通过“检查-效果-交互”等模式显式实现,否则不存在自动重入防护。
3. Gas limit 并不能阻止递归;它们仅限制总计算量,并且回退函数需要最少的 Gas 来执行。
4. EVM 不强制调用者和被调用者之间的隔离——被调用者所做的状态更改在其持续执行期间对调用者是可见的。
5. 开发人员经常低估合约交互的相互依赖程度,尤其是在涉及第三方代币或预言机时。
需要重入的常见代码模式
1. 在发送以太币或调用外部合约(而不是之前)之后更新余额或标志。
2. 使用call.value()()而不验证返回值或限制递归深度。
3.依靠this.balance进行记账,而不是跟踪存储变量中的余额。
4. 实现没有锁、互斥体或重入修饰符(例如 OpenZeppelin 的ReentrancyGuard)的撤回模式。
5. 未能审核继承逻辑——尤其是在使用代理模式或可升级合约(其中 delegatecall 保留上下文)时。
常见问题解答
问:ERC-20 转账会发生重入吗?答:标准 ERC-20 传输函数不会触发外部调用,因此无法实现原生重入。然而,像transferFrom这样的扩展与钩子相结合(例如,在ERC-777中)引入了可能发生重入的回调表面。
问:DAO 黑客攻击是否会因为硬分叉而可逆?答:是的。以太坊社区执行了硬分叉,通过重写链历史来恢复被盗资金,导致以太坊和以太坊经典分裂。
问:现代 Solidity 版本默认情况下会阻止重入吗?答:不会。Solidity v0.8.x 包括更安全的算术和恢复行为,但不会自动注入重入保护。开发人员仍然必须手动应用防御模式。
问:使用require(msg.sender.call{value: amount}(''))比address.send()更安全吗?答:两者本质上都不是安全的。如果在状态更新之前使用,两者都允许重入。关键因素是交互顺序,而不是特定的调用机制。
免责声明:info@kdj.com
所提供的信息并非交易建议。根据本文提供的信息进行的任何投资,kdj.com不承担任何责任。加密货币具有高波动性,强烈建议您深入研究后,谨慎投资!
如您认为本网站上使用的内容侵犯了您的版权,请立即联系我们(info@kdj.com),我们将及时删除。
- CPEN Network Ink 代币:深入探讨移动挖矿、代币经济及其不断发展的遗产
- 2026-09-12 16:35:02
- XRP 投资者在市场不确定性和重大经济事件中面临关键决策
- 2026-09-12 16:40:01
- 在市场波动中,以太坊鲸鱼推动 ETH 飙升至 8 个月高位
- 2026-09-12 16:35:02
- sUSDe 收益率、Aave 借款利率和 USDe 循环:在 DeFi 的“大苹果”中走钢丝
- 2026-09-12 12:45:01
- USDC Bridge CCTP、稳定币链变、Bridge 关闭:引领跨链转账新时代
- 2026-09-12 12:45:01
- 在投资者强烈抗议和激励计划撤回之际,Metaplanet 将高管股份削减 41.1%
- 2026-09-12 12:35:02
相关百科
如何查看DOGE期货成交量及持仓量?
2026-09-12 08:39:38
了解 DOGE 期货交易量1. 期货交易量是指在特定时间范围内交易的DOGE份期货合约的总数,通常以每天或每小时计算。 2. 高成交量通常表明市场参与度较高,并且可以表明潜在的趋势延续或逆转,具体取决于价格走势背景。 3. 交易者监控交易量峰值以及突破或崩溃,以评估合法性——交易量上升支持的持续价格...
如何查看BTC期货交易量和持仓量?
2026-09-12 15:19:55
BTC期货指标的数据源1. CoinGlass API v4 提供 30 多个交易所的实时融资利率、清算热图和精细的未平仓合约细分。 2. 币安期货 API 提供对买卖深度、合约特定交易量历史记录和保证金比率快照的本机访问。 3. OKX 数据门户提供可下载的 CSV 档案,其中包含每日结算价格、按...
如何看懂DOGEUSDT永续合约图表?
2026-09-11 19:19:48
了解 DOGEUSDT 永续图表上的价格走势1. 蜡烛图的形成揭示了直接的市场情绪——绿色蜡烛表示买盘占主导地位,而红色蜡烛则反映该区间内的抛售压力。 2. 实体上方和下方的灯芯信号拒绝更高或更低的价格;在波动较大的模因币市场中,长上影线通常先于短期反转。 3. 接近关键水平的连续小实体蜡烛表明在突...
如何在币安查看BTC合约资金费用?
2026-09-10 08:00:06
找到资金费率显示1. 进入币安合约交易界面,选择BTCUSDT永续合约。 2. 观察价格图表正下方或订单簿附近的区域——该区域包含一个标有资金费率的标签框。 3. 显示值实时更新,反映当前每小时的资金费率,无论是正数还是负数。 4. 单击资金费率框将打开一个弹出窗口,显示多个结算周期的历史资金价值。...
如何计算SOLUSDT期货盈亏?
2026-09-10 19:19:37
了解 SOLUSDT 期货合约规格1、每张SOLUSDT期货合约均以USDT报价,以USDT结算,为线性永续合约。 2.基础资产为SOL,报价资产为USDT——所有盈亏计算均直接以USDT计价。 3. 价格变动的最小变动单位为0.01 USDT,合约乘数固定为每张合约1 SOL。 4. Bitget...
如何计算XRPUSDT期货盈亏?
2026-09-09 17:40:21
了解 XRPUSDT 期货合约规格1、每张XRPUSDT永续合约以USDT报价,以USDT结算,每张合约面值为1XRP。 2. 对于包括 Binance 和 Bybit 在内的大多数主要交易所,最小价格增量(报价单位)为 0.0001 美元。 3. 杠杆范围从 1 倍到 75 倍不等,具体取决于头寸...
如何查看DOGE期货成交量及持仓量?
2026-09-12 08:39:38
了解 DOGE 期货交易量1. 期货交易量是指在特定时间范围内交易的DOGE份期货合约的总数,通常以每天或每小时计算。 2. 高成交量通常表明市场参与度较高,并且可以表明潜在的趋势延续或逆转,具体取决于价格走势背景。 3. 交易者监控交易量峰值以及突破或崩溃,以评估合法性——交易量上升支持的持续价格...
如何查看BTC期货交易量和持仓量?
2026-09-12 15:19:55
BTC期货指标的数据源1. CoinGlass API v4 提供 30 多个交易所的实时融资利率、清算热图和精细的未平仓合约细分。 2. 币安期货 API 提供对买卖深度、合约特定交易量历史记录和保证金比率快照的本机访问。 3. OKX 数据门户提供可下载的 CSV 档案,其中包含每日结算价格、按...
如何看懂DOGEUSDT永续合约图表?
2026-09-11 19:19:48
了解 DOGEUSDT 永续图表上的价格走势1. 蜡烛图的形成揭示了直接的市场情绪——绿色蜡烛表示买盘占主导地位,而红色蜡烛则反映该区间内的抛售压力。 2. 实体上方和下方的灯芯信号拒绝更高或更低的价格;在波动较大的模因币市场中,长上影线通常先于短期反转。 3. 接近关键水平的连续小实体蜡烛表明在突...
如何在币安查看BTC合约资金费用?
2026-09-10 08:00:06
找到资金费率显示1. 进入币安合约交易界面,选择BTCUSDT永续合约。 2. 观察价格图表正下方或订单簿附近的区域——该区域包含一个标有资金费率的标签框。 3. 显示值实时更新,反映当前每小时的资金费率,无论是正数还是负数。 4. 单击资金费率框将打开一个弹出窗口,显示多个结算周期的历史资金价值。...
如何计算SOLUSDT期货盈亏?
2026-09-10 19:19:37
了解 SOLUSDT 期货合约规格1、每张SOLUSDT期货合约均以USDT报价,以USDT结算,为线性永续合约。 2.基础资产为SOL,报价资产为USDT——所有盈亏计算均直接以USDT计价。 3. 价格变动的最小变动单位为0.01 USDT,合约乘数固定为每张合约1 SOL。 4. Bitget...
如何计算XRPUSDT期货盈亏?
2026-09-09 17:40:21
了解 XRPUSDT 期货合约规格1、每张XRPUSDT永续合约以USDT报价,以USDT结算,每张合约面值为1XRP。 2. 对于包括 Binance 和 Bybit 在内的大多数主要交易所,最小价格增量(报价单位)为 0.0001 美元。 3. 杠杆范围从 1 倍到 75 倍不等,具体取决于头寸...
查看所有文章














