栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

newer时期的笔记——如何分析一个DeFi收益聚合项目

newer时期的笔记——如何分析一个DeFi收益聚合项目

newer时期的笔记——如何分析一个收益聚合项目

收益聚合项目分析方法,并非完美,有些啰嗦

这里写目录标题

newer时期的笔记——如何分析一个收益聚合项目

一、 收益聚合项目(0729更新了查找收益聚合项目的其它网站)

1.1如何找到收益聚合项目1.2如何对DeFi项目进行筛选,选出收益聚合项目与交易所项目

1、在自己的项目里面出现了其它项目的图标/名称2、奖励代币有多种3、功能列表中出现了Vault字样(存疑) 1.3如何找到收益聚合项目的代码

1、官网页面里有github链接的2、有的链接在侧边栏里面3、有的链接在右上角4、有的项目没有完全将代码链接公示在官网怎么办?5、但是如果连view contract也没有怎么办?(最终办法)(而且这样的项目还不少)6、一些其它的注意事项

6.1在项目中可能我们看到的合约并不是主要的功能逻辑合约6.2 其它6.3 实际还有一种代码获取方式6.4 还有最后一种代码获取方式 二、代码逻辑架构

2.1收益聚合代码分析案例

一、 收益聚合项目(0729更新了查找收益聚合项目的其它网站) 1.1如何找到收益聚合项目

登录以下网站,可以看到不同的DeFi项目,并可以对不同的链,不同的dapp类型进行筛选:
DeFiBox | DeFi项目应用 | DeFi项目应用分类
Top Blockchain Dapps | DappRadar
DeFi Pulse - The Decentralized Finance Leaderboard
DefiLlama - DeFi Dashboard

1.2如何对DeFi项目进行筛选,选出收益聚合项目与交易所项目

说明:在这里以BSC链为例
理由:由于现在ETH手续费过高,大部分的DeFi交易通常发生在币安智能链(BSC)上
另:除了BSC外,火币智能链(HECO)、POLYGON链也是近一个月DeFi项目兴起和攻击发生的集中点


DeFi项目功能的分类(大致分类):
1、交易;2、流动性挖矿/单币挖矿;3、收益聚合;4、借贷


DeFi项目分类(大致分类):
1、交易所:交易+流动性挖矿/单币挖矿
说明:部分交易所也有自己的收益聚合,但是不多
2、收益聚合器:收益聚合+交易
说明:部分收益聚合有自己的交易功能,其中部分交易功能为项目自己编写,但依然使用接口连接到大型交易所的流动性池中;部分交易功能是一个链接,直接链接到了大型交易所的交易功能网址。
3、借贷:借贷+流动性挖矿/单币挖矿+收益聚合
说明:将借贷作为独立功能的dapp在BSC上不多,已知的有Alpaca Finance Interface
同样的部分借贷有收益聚合功能


BSC上的最大的交易所:Home | PancakeSwap
其它知名交易所:
autofarm.network
Biswap - Freedom of exchange
Home | ApeSwap
Venus - Decentralized Money Market & Stablecoin Protocol
BakerySwap
其它一些交易所名称:julswap jetswap waultswap


【关键】收益聚合项目的显著特点:

1、在自己的项目里面出现了其它项目的图标/名称

例:Alpaca Finance Interface,出现了PancakeSwap和WaultSwap

Rabbit Finance,出现了MDX,pancakeswap

HIFarm,出现了pancakeswap和apeswap

2、奖励代币有多种

BUNNY | No 1. Yield Optimizer (pancakebunny.finance)

ApeRocket

3、功能列表中出现了Vault字样(存疑)

autofarm.network:

说明:首先,这种存币+获得奖励的功能通常是流动性挖矿,单币挖矿,收益聚合等功能
但是,它们的名字交叉混杂严重,常用的名字有farm,stake,vault等等,背后所对应的功能并不相同

1.3如何找到收益聚合项目的代码 1、官网页面里有github链接的

一般拉到最下能看见,
HUNNY | The BEST Yield Optimizer (pancakehunny.finance)

autofarm.network

2、有的链接在侧边栏里面

Biswap - Freedom of exchange

3、有的链接在右上角

(仿uniswap前端的——uniswap前端特点,右上角有这三个按钮)
JulSwap Vision

4、有的项目没有完全将代码链接公示在官网怎么办?

【重要,实际上不公示代码的不少,但是它们在区块链浏览器里公开了】
ApeRocket:

点击左下角view contract即可

5、但是如果连view contract也没有怎么办?(最终办法)(而且这样的项目还不少)

前提:需要账户里有点币,点击DEPOSIT按钮,会出现授权要求:

metamask会出现以下提示,点击view full transaction details:

出现tx详情,关注data:

关注从最后一大段f为结尾,往前参数第一个数字为开头,这是合约地址,如:
0x095ea7b3000000000000000000000000274
b5b7868c848ac690dc9b4011e9e7e29133700ffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
关键:对应地址则为0x+这段地址:0x274b5b7868c848ac690dc9b4011e9e7e29133700
在bscscan上搜索,这里例子:Contract Address
0x274b5b7868c848ac690dc9b4011e9e7e29133700 | BscScan

(1)*******但是注意,有的时候这样找不到,原因是274…中的第一个2我们在其它地址可能找到的是0,所以会忽略掉,尝试在第一个数字前补0,再在前面用0x拼
比如:我们找到的参数是
0x095ea7b30000000000000000000000000009
cf7bc57584b7998236eff51b98a168dcea9b0ffffff
Ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

按照之前的方法我们应该是0x+9cf7bc57584b7998236eff51b98a168dcea9b0,但这样实际不对,9前面应该还有两个0,需要尝试补充为:0x009cf7bc57584b7998236eff51b98a168dcea9b0

(2)实际上一个有效的办法是直接从最后一个f往前数位数,用一个小工具判断下地址长度即可,有兴趣可以自己做一个

6、一些其它的注意事项 6.1在项目中可能我们看到的合约并不是主要的功能逻辑合约

如pancakehunny中:
HUNNY | The BEST Yield Optimizer (pancakehunny.finance)
这里面它给出了合约地址:0x65003459bf2506b096a9a9c8bc691e88430567d1
但是实际上点击去会发现Contract Address 0x65003459bf2506b096a9a9c8bc691e88430567d1 | BscScan,想看它的代码的话,这是一个代理合约

那么如何找到背后的实际逻辑?看Read as Proxy按钮:

下面这个合约点进去才是真正的逻辑部分,但如果在这里面找合约本身的数据的话发现是空的,不要管这个,实际真实的数据是放在代理中的(这就是合约防护方案——热升级当中的数据+逻辑分离方法)

6.2 其它

在后面我们会提到聚合器的代码逻辑,我们在前面的这些行为只能为我们找到核心的逻辑合约

但是除了核心的逻辑合约之外还有一些比如铸币、价格计算等功能的合约

这些合约的方法我们没有必要去找tx记录看看它们跟谁交互

我们可以直接从合约的数据当中看到,比如上面这个hunny合约:
我们想找铸币合约时,从read as proxy当中看:

Minter即翻译为铸造,这就是我们的铸币合约

6.3 实际还有一种代码获取方式

在不同的项目可能会有DOC这个栏目,即项目的使用说明

在使用说明里面可能会出现github的链接,点进去会是代码,除此之外,这个栏目里可能还会有已经部署的合约地址,可以直接从里面看,比如:ACryptoS :: Advanced Crypto Strategies 我们可以看到所有的地址

6.4 还有最后一种代码获取方式

有的项目它就是不公开代码地址,但它已经放到了git上就是不想让你找到,可以通过项目安全审计的方式找到它的审计报告地址,从而找到代码地址,当然有的审计报告它给的链接是审计机构的git链接,那就不行了

二、代码逻辑架构

我们分析一段代码通常从以下几个角度来分析:

1、从整套项目逻辑的角度看,我们从整个合约为入口,对实际交互的合约来整体分析存/取/获取奖励
2、从攻击的角度看,我们对获取奖励的函数为入口,从计算奖励函数来分析获取奖励的公式是什么
另,需要注意的是,一个收益聚合的存——获取奖励——取这样的生命周期从漏洞的可能性来看的话,存的时候也可能会出现问题(第一个原因),所以有的时候存的过程也不能忽略,同时由于获取奖励要依赖于存过程的数据(第二个原因),所以存的过程最好一起分析了

这里首先提前备注一下常用的函数名:
存:stake,deposit,depositto
取:withdraw
获取奖励:getReward Harvest
一般情况下,我们可以直接看合约功能本身来确认合约功能到底是使用的哪个函数名

但有的时候为了方便,我们可以通过尝试使用功能来确认(当然需要一定代币的支持)
比如说pancakebunny,在我们approve过后,就可以使用收益聚合功能了,我们点击后点击deposit:

同时出现了tx发起提示:

然后点击data,我们就可以看到是用的哪个函数名称

当我们想看看收益是如何获得的话,等待几秒钟就可以看到受益了,点击claim:

同样的我们就可以从metamask里面看到收益获取到底使用的是哪个函数

2.1收益聚合代码分析案例

这里以pancakebunny为例,原因是它的fork很多,有autoshark,pancakehunny,merlin labs(好像已经跑路了),aperocket,它的典型特点是:有一个铸币合约和价格计算合约,代码中存在“mintfor(铸币入口)”这个东西,以及存在“valueofasset(资产价格获取入口)”这个函数,这类fork项目很容易出现漏洞
它的核心文件:
priceCalculator.sol
[xxx自定义]minter.sol,如hunnyminter.sol,spaceminter.sol
以及核心的存取奖励合约:vaultxxxxxxx
随文档会加入一些代码,可以尝试先看看:

有aperocket,autoshark,pancakebunny,hifarm,pancakehunny,growingfi等项目的
附带一些自己的攻击分析
除了pancakebunny外,还有很多自己编写,需要自己再找找

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/753952.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号