翻译:@jesse_meta (@defieye_io的核心成员)
原文链接:https://docsend.com/view/yii5arvd4fw4a8sh
译者注:昨日badger的安全事故让多少人惊出一身冷汗。在defi的世界里,code is the law。在这里,Jesse给大家带来小白也读得懂的智能合约科普。
每一个DeFi项目都是基于复杂的智能合约系统。通过分析智能合约的公式,你能更明白这个项目是否值得信任。
当一个智能合约是被外部账号(external owned account, EOA)控制的时候,你需要知道这个外部控制账号能够调用什么函数。因为它可能会有直接影响到用户资金安全或者项目投资条款的调用函数。比如代币铸造、所有权转移、改变费用和奖励。
如果一个外部控制账号掌控着智能合约,你需要相信这个第三方的行为符合你的利益,这和去中心化金融的概念是相违背的。你需要小心这类例子。
一个智能合约所有者可以铸造任意数量的代币到它的外部控制账号的例子:
如果一个智能合约的所有者能够对关键函数做出直接影响,我们一般要避免参与这种中心化的项目。
通常,我们要选择这样的去中心化智能合约,即合约逻辑初始化期间、部署过程已经结束后,智能合约所有者的地址已经被销毁(如下面例子)。
铸造函数本身不代表着危险,但取决于它在什么背景下使用。它可以造成以下的风险:
无限铸造
新的铸造者
代币通货膨胀
所有这些情况可破坏代币分发机制,下面进行详细解释。
无限制造
无限铸造有严重的风险,因为恶意行为者可以铸造代币,发放到特定地址。这些铸造出来的代币售出后会导致代币价格崩塌,抽空相关LP的流动性。如果你是这种行为的受害者,你将会因为代币变得一文不值或者无法售出而出局。
新的铸造者
如果一个外部控制账号可以成为新的铸造者或者设任意其他外部控制账号(包括自己)作为铸造的代币的接收者,此时资金是危险的,因为代币会被偷走卖掉。
这里是添加铸造者的函数:
代币通货膨胀
代币通货膨胀是指代币无限供应或者代币铸造与代币燃烧系统不均衡。
以下例子,你可以看到当总代币供给达到硬顶的时候,新代币铸造是有限的。(这是一个好的例子,但用户也需要关注hardCap具体值是多少)
这个函数可能对农场矿工有很大的风险,因为会被骗子利用,将资金挪到一个外部控制账户的地址或者一个分开的中心化合约。用户会面临失去资金的风险。
以下图展示了迁移函数的代码例子
项目可以引入资金锁定期,来阻止任何人(包括用户和团队)在特定时期内解除质押代币或者在交易所卖出。如果资金有锁定期,请确保这符合你的投资计划,因为你只有在锁定期结束后才能获得资金。
即使你有资金在质押,这个函数可以允许创造者暂停智能合约。你只能在只能暂停期结束后才能拿到资金。
这可能是危险的。举个例子,一个智能合约的漏洞被发现了,资金需要转移到更安全的地方。如果质押的代币在公开市场上的价格下跌,用户需要解除质押的代币到市场卖出,但暂停函数使用户无法解除质押。
有些骗子项目在引入暂停函数的同时会设置其他条件,允许他们将资金从智能合约转移到自己的钱包。
以下是一个暂停函数的例子。
一个智能合约可能包含由开发团队有意设计来欺骗用户的可疑函数。
设计糟糕的可能带来无法预估后果的函数也可被认为是可疑函数。需要有相关的技术技能来检查代码,来决定这些可疑函数是否是危险的。以下是一些例子。
时间锁
在合约部署过程中或者链上交易时,将时间锁添加到函数中。智能合约部署者基于一些原因会加时间锁,一个主要原因时可以在公开市场上控制代币销售。
一个项目可能会想允许它的开发者持有大量份额的代币来作为他们辛勤工作的奖励。它可能也想让投资者在项目开始阶段以优惠的价格购买到大量的代币。但如果这些持有者可以随时出售代币,代币价格可能会是危险的。时间锁可以用来解决这个问题,因为它限制了代币持有者,使他们只能在解锁期后销售代币。
时间锁也可以作为智能合约上的影响用户资金、奖励、存款和赎回条款的函数的安全措施。然而,时间锁不能保证用户的安全,因为他们只是给用户时间来对重大改变做出反应。
如果需要的话,农场矿工要用特别的Telegram机器人来追踪改变,在改变发生之前采取必要的措施来保护资金。这包括解除质押或者赎回代币到更安全的地方。
代币安置
记得一定要去检查用户的资金存在哪里以及用户的奖励如何储存。这些可能会被由开发团队的外部控制账户掌控,或者智能合约给了团队对资金完全掌控的权利。
当资金被中心化控制,开发团队可以挪动资金到任何地方,最坏的情况就是偷走资金。
代码检查
你要检查那些分析过的智能合约代码是否在 Etherscan上检验过了,合约的字节代码应该和区块链上的匹配。
注:
(added by DeFiEye社区核心成员 cy )
代币分发
如果外部控制账号们持有的代币数量占了总供应量很大的比例(例如,一个私人所有者拥有超过15%的代币),就存在代币大量抛售造成价格大跌的风险。不可信任的项目可能会在预售前或者空投的时候给它的团队成员发放大量代币。