织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 竞争币 > 以太坊

技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件(2)

时间:2021-07-13 10:27来源:未知 作者:admin 点击:
这里我们可以将这个 adapter 理解为一个 策略池 ,用于管理用户的资金和收益。然后我们回到用户一开始的 AlchemistEth 合约中的 harvest 函数 , 发现返回的「

这里我们可以将这个 adapter 理解为一个策略池,用于管理用户的资金和收益。然后我们回到用户一开始的 AlchemistEth 合约中的 harvest 函数 , 发现返回的「4308144937764982868765」和
「4308144937764982866415」这两个值其实对应的就是 vault 库合约的 harvest 函数计算出的需要提现的代币数量和从 adapter (策略池) 中取回的代币的数量。由于这个 adapter 对应的收益代币是 WETH,精度为 18 位,那么 「4308144937764982866415」这个数值换算过来就是「4308.144937764982866415」个 WETH。

也就是说,本次 harvest 操作,收益了超过 4300 个 ETH 的收益,然后这个收益在下一步中通过 _distributeToTransmuter 函数给到了 transmuter 合约进行分发,我们看下分发过程中的逻辑是怎样的:

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

_distributeToTransmuter 函数的逻辑只有简单的 3 行,我们主要关注的是最后的外部调用 —— lowerHashMinted 函数。该函数所对应的 xtoken 在这里指的是 alETH 本身。因为 alETH 本身是用户通过借贷借出来的,所以 lowerHashMinted 这里的操作其实是使用 harvest 的收益将 alETH 总的贷出数量减少了,从而减少了每个用户的贷款。总结来说就是用 harvest 4300 ETH 的收益偿还用户的 alETH 贷款。

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

打个小总结

这里先总结下这个流程,就是 AlchemistEth 合约通过 harvest 函数,得到了 4300 ETH 的收益,并将这个收益分发出去了,用于偿还用户的 alETH 贷款,导致了我们看到的情况 —— 已经贷出 alETH 的用户在不需要还款的情况下就可以拿回他们质押的 ETH。那究竟是为什么,会有这 4300 ETH 的收益呢?这多出来的 4300 ETH 的收益是怎么来的?针对这个问题,我们开始下一轮的分析。

核心分析——Round 2

要了解为什么会多出来 4300 ETH,就必须了解 AlchemistEth 的资金存储过程。在 AlchemistEth 合约中,合约总的充值情况是使用 Vault library 库的 Data 结构体进行记录的,然后通过 flushActiveVault 函数更新对应的充值数量 (totalDeposit)。

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

然后 depositAll 函数会将充值的代币金额打到对应的 adapter(策略池) 中,那么在下一次 harvest 的时候,通过 adapter(策略池) 获取的 totalValue,就会是用户的本金加上策略池的收益。为了计算收益过程中的本金部分,我们对官方给出的交易进行 debug,发现本金仅为 9000 ETH,从 adapter 获取的收益加上本金共有 13000 ETH,也就是说 9000 ETH 的本金产生了 4300 ETH 的收益。 (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容