项目应该安全地存储私钥,而不应该在PC设备上以纯文本形式存储管理密钥,或依赖MetaMask热钱包。我们建议使用硬件钱包创建一个多签(Multisig)账户。例如,对于一个五人团队,每个团队成员都应该有自己的硬件钱包。当他们试图发送特权交易时,应该要求五个团队成员中至少有三个人签署该交易,从而防止攻击者在获得其中一个密钥时就能够调用任何特权功能。 对于代币合约来说,如果可能的话,应避免允许铸造新的代币。但如果没有这个可能,也要尽量使用DAO合约或时间锁合约作为所有者,而不是EOA账户(外部自有账户)。 编码错误 DeFi中,一些漏洞的复杂程度很高,但情况并不总是如此。有时,智能合约中的一个小编码错误就会变成一场大灾难,导致价值数百万的资产受到损害。 一些常见的编码错误包括: ■函数允许(修改) ■拼写错误 ■数字错误 ■缺少/不正确的变量值赋值 一个值得注意的例子是Uranium Finance的黑客事件,该事件发生在一个未经审计的合约上,最终导致了5700万美元的损失。这是由于在比较交换前后池中两个代币余额的乘积时,使用了不一致的乘数,使得攻击者可以从资金池中换出大部分代币,而成本只有1 Wei。 Uranium Finance代码: ![]() 正确代码: ![]() 另一个例子是来自于Value DeFi的黑客事件,该事件导致了1000万美元的损失。据悉,合约中的初始化函数漏掉了 "initialized = true",也就是说,任何人都可以重新初始化资金池并将自己设置为操作员。2021年5月5日,攻击者重新初始化了资金池,并将操作员的角色设置为了自己,然后使用 "governanceRecoverUnsupported() "函数耗尽了池中的质押代币。 Value DeFi中的漏洞代码: ![]() 修复代码: ![]() 上述两个例子都是由简单的编码错误引起的,而且都造成了重大损失。但是,这些类型的错误完全可以通过适当的同行评审、单元测试和安全审计来轻松消除。 闪电贷和价格操纵 闪电贷是一种从Aave或DyDx等协议中借入大量资金以获得一定费用的方式。其要求是,贷款需要在同一交易中归还。如果没有,贷款就会被退回。这些贷款的一般利用流程如下: (责任编辑:admin) |