Uniswap V3给合约审计带来的新挑战

万众期待的Uniswap V3终于面世了,它的白皮书(https://uniswap.org/whitepaper-v3.pdf)及相关源代码(https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts)已经向业界全面公开。

这两天各个专业人士发表了对V3的看法,这些看法主要集中在V3所具备的新特点、带来的新体验。作为在安全领域从业的我们则更加关注V3对合约审计尤其是去中心化交易所合约审计带来的新挑战。

V3的问世毫无疑问将掀起新一轮DEX的升级大潮,因为它在资金效率、费用消耗、预言机优化等方面所作的改进将再次成为现有项目模仿的范本,也将成为众多正在DEX赛道上创业团队参照的蓝本。

我们相信一批新的DEX合约会用到V3的实现方式,而这些新的DEX合约可能产生安全问题的源头在以下两方面: 

qym2tgLxfzpvTDa6ajUvXs0LEWc6GEyEn7Me3Sig.png

1.由于V3引入了新的代码许可协议,因此在商业方面将使得一些项目想直接照抄,拷贝变得有所顾忌,而不得不模仿它的实现方式,改写它的源代码。一旦改写代码就会给合约审计带来挑战。

2.在整体安全性上Uniswap的合约还是相当不错的,这其中最重要的一个原因就是它的代码简洁、功能删繁就简。而V3在一系列细节上进行了修改,这在功能及性能上比V2有了极大提高,但在安全性方面就增加了复杂度。如果模仿团队对这些改动不求甚解、完全照搬、甚至和以前的实现方式混用则会引入潜在的风险。

那么具体V3在哪些方面对准备借鉴、参考它实现方式的团队带来了安全性方面的挑战呢?

我们认为有以下四大方面:

HtxPyXgRPXIU2fIPpqbxeF2dUivWwi4i6sd9ZHoj.png

一、交易对由单个流动性池变为多个流动性池

V3的这个做法是为了提高资金效率,让用流动性提供者将资金存入到交易量最大的价格区间。然而这就导致流动性池由单个变为多个。那么交易过程就会涉及到交易在多个资金池之间的切换,就会涉及到复杂的合约交互。

此外,每个流动性池现在可以设置不同的费率,这其中的计算逻辑就会比单一流动性池要复杂,这其中稍有不慎就会涉及到逻辑实现和计算过程的错误。

二、LP代币由同质(ERC-20)通证变为非同质通证

在V2中,流动性池的代币都被设计为同质通证,而在V3,它被设计为非同质通证。为了因应这个变化,V3中累积的费用会存在另外的池子中。但凡多了资金池,就多了被黑客攻击的对象、就多了风险隐患,因此对这类新增加的资金池在安全方面的保障和维护就成为团队必须要考虑的问题。

三、 UNI治理权可以转交给其它地址

本质上这种方式如果使用得当、管理周全倒也不会对系统造成严重的风险。但权力是“固定”的、人却是“灵活”的。如果这个治理权被转移到不当地址(比如非DAO社区、非多签钱包等)则后患无穷。

四、预言机的优化

V3对预言机进行了大胆的优化:其最重大的变化在我们看来就是价格计算方式的变化以及由计算方式带来的一系列实现方式、流程逻辑的变化。

V3将价格的计算由算术平均值(arithmetic mean)变为几何平均值(geometric mean)。用通俗的话说就是由加法运算变为对数运算。理论上,这极大拓展了价格的覆盖区间,使得传统上利用外在因素在极短时间引发价格剧烈波动从而操控交易的方式进一步失效。

但“福兮祸也”,这会不会在看上去一片大好的情况下引发新的问题?现在还不得而知,只能有待时间来证明。

此外,在V3白皮书中提到,这种方式让其它合约调用预言机时能从某个交易对的多个流动性池中得到更可靠的数据。对此我们的担心在于,如果某个池子被攻击时,这个预言机所报的数据会不会不仅无效,而且误差被更加放大?

对此,我们依然建议项目方在处理预言机喂价方面要谨慎又谨慎,尽量从多个数据源取数据,而不要依赖单一数据源,无论这个单一的数据源在理论计算上看上去多么美好、多么健壮。

原创文章,作者:灵踪安全,如若转载,请注明出处:https://btc.cheshirex.com/?p=2194

发表评论

登录后才能评论