写在前面:
DeFi领域目前充斥着各式各样的新协议,例如最近爆火的YFI(yearn.finance)就是其中之一,但本质上,它并不属于真正的DeFi协议,据加密货币研究员Hasu分析表明,类似YFI这样重治理的协议,或多或少都存在托管问题,而这就会涉及到用户资金的安全问题,因此他建议参与者将YFI(yearn.finance)视为一个托管型投资基金。
DeFi如何在治理与存款安全之间取得平衡?
长话短说:
在7月25日-8月6日这段时间,yearn.finance开发者 Andre Cronje控制了4000万美元的客户资金;
8月6日,在与我讨论这篇文章的早期草稿时,Andre Cronje将相关的治理权移交给了9名社区利益相关者,并通过6-of-9多重签名机制进行控制;
大多数用户并没有意识到,所有重治理的协议,比如yearn.finance、Compound或者Aave,或多或少都存在托管资金的问题;
什么是yearn.finance?
根据yearn.finance的官方描述,它是作为一个收益聚合协议,但我喜欢把它想象成一个任何人都可以参与投资的基金,然后一名投资经理(或一组经理)将这些资本引导到DeFi领域中 收益的机会中。
自7月中旬推出治理代币 YFI以来,yearn.finance的人气激增,虽然其代币因公平推出而受到称赞,但市场普遍存在一种误解,即很多人会认为资金是由YFI代币持有者,或者至少是由代表他们利益的多重签名钱包所控制的。
但实际上,治理是这样运作的:
YFI代币持有人可以就新提案进行投票,这些投票是非正式的,当一项提案获得批准时,yearn.finance的开发者Andre Cronje就会去实施它。与此相对的Compound,是先实施提案,然后通过正式投票激活。
自7月21日开始,9名YFI社区利益相关者,通过6-of-9多重签名的方式控制了额外YFI代币的铸造;
有一名控制者负责所有的投资决策,因此他实际上相当于控制了客户资金;
控制器
为了了解资金的保管方式,我们就需要了解金库和策略。金库基本上是存放投资者资金的盒子,而策略则是执行投资策略的智能合约,例如将币借给年化收益 的货币市场。任何人都可以部署它们,但要分配人们的钱,金库必须与特定的策略相连接。
而金库与策略之间的这种连接,是由一个称为控制器(Controller)的中央智能合约来实现的。截至8月6日,这个控制器的治理地址就是Andre Cronje的地址:
我们将简要介绍更改一个金库策略的步骤。
首先,调用setStrategy函数:
只有在msg.sender设置为控制器管理者,这个函数才会执行。
更改策略首先从现有策略中提取所有资金,然后将其送回到金库:
在下一步中,你会在金库中调用earn,这会调用控制器的earn函数:
…从而将资金转入新策略。
你可以在这里亲自检查控制器。
简而言之,控制器可以设置每个金库的策略,也可以更改现有金库的策略。
存在资金被盗的风险
控制器的这种功能,允许进行非常简单,但十分强大的攻击。在任何时候,它都可以决定将金库与耗尽所有客户资金的策略连接起来。策略可以简单到将这些资金转移到对手控制的账户上,而对于用户来说,不会有警告或反应的时间。
与常规的管理密钥(admin key )攻击向量一样,主要的风险不一定是Andre Cronje本人变成恶意者,而是这个管理密钥被第三方所窃取。
在8月6日的快照中,有1.65亿美元的资金锁定在yearn.finance中,其中大部分都锁在YFI相关的曲线池中,因此它们不易受到治理攻击,而剩余有4000万美元的资金锁定在金库中,这些钱就暴露在控制者面前。
Andre Cronje本人的反应
8月6日,我与Andre Cronje讨论了本文的早期草稿,以确认我的分析是正确的。在讨论过程中,他决定调用控制器的setGovernance函数。