跳转到内容
搜索文档

终止开关

最后更新 查看 MarkdownAgent 设置

在编写合约时,请务必小心编写安全的代码并包含一个终止开关,以确保如果代码中确实存在任何错误,可以将其粉碎。如果您没有包含终止开关,并且智能合约中存在可以被利用的漏洞,这可能会导致窃取智能合约或其他个人的资源。

臭名昭著的 DAO 事件中,这一点变得尤为突出。DAO 智能合约作为一个复杂的去中心化风险投资基金,在巅峰时期持有从一群投资者那里收集的价值 2.5 亿美元的 Ether。黑客利用智能合约中的漏洞,窃取了价值 5000 万美元的 Ether。

因为无法撤销以太坊中的交易,所以出现了一个极具争议的“硬分叉”,大多数社区同意接受一个包含不规则状态更改的区块,该区块基本上将所有 DAO 资金抽干到一个特殊的“WithdrawDAO”恢复合约中。通过说服足够多的矿工接受这个不规则区块为有效区块,DAO 能够将资金返还给投资者。然而,并非所有人都同意这条链,那些不同意的人拒绝了不规则区块并组成了 Ethereum Classic 网络,每条区块链独立发展。

限制

终止开关本身可能会引发问题。例如,如果作为库的合约其终止开关被触发。所有依赖于此合约的合约都无法按预期运行,即使底层的库代码是不可变的。最近,攻击者触发了一个底层库函数中的终止开关,导致超过 500,000 个 Ether 被困在多重签名钱包中。多重签名库的用户认为代码的不可变性意味着库将始终按预期运行,并接受了该区块。在这件事发生之后,出现了许多检查智能合约是否有错误的工具或提供漏洞赏金。

只有在考虑区块链状态时,与区块链交互的智能合约才是确定性的。

这有什么不同?

这是一种提供透明度和问责制的截然不同的方法。因为所有合约和交易都是公开的并通过共识进行验证的,信任分散在人们中间,而不是集中在少数大型机构中。

给予机构的信任是历史性的。这段历史建立了可信度。

对基于共识的算法的信任基于大多数人是诚实的假设,或者更准确地说,不能使足够大的一部分人串通起来产生恶意结果。这就是信任的民主化。在 DAO 攻击中,大多数节点同意接受不规则状态转换。这有效地消除了攻击的破坏,并且表明,至少在区块链的世界里,感知就是现实。因为大多数人“相信”——接受了这个不规则区块,它就变成了一个“真实的”——有效的区块。

这篇文档对您有帮助吗?