自己部署DEX+流动性收益+收益聚合器

自己部署DEX+liquidity+yield aggregator收益聚合器

这篇文章尚需完善,仅作记录使用
以pancakeswap+pancakebunny为例



前言

在参考这篇文章学会部署uniswap后,为了后续进行科研,还要在想办法部署自己的收益聚合器


一、pancakeswap核心交易功能部署

这篇文章已经讲的非常清楚了

唯独可以需要注意的一点就是,pair合约不一定需要去进行字节码哈希拿init_code_pair_hash,也可以在部署后的facotry合约里面的INIT_CODE_PAIR_HASH看到
部署factory后可以查看

二、pancakeswap的liquidity功能部署

部署pancakeFarm:

1、部署cake与syrup

合约:caketoken部署,syruptoken部署
前端:修改项目内token地址:src/config/constants/tokens.ts(包括cake,syrup,wbb(注意wbb最好用官方的测试链/主网地址),下面有测试链的)

2、部署masterchef

合约:Masterchef合约部署,注意cakeperblock别太大,添加liquidity(如cake-b*b),然后添加一个pid到masterchef里

3、所有权设置

合约:设置caketoken和syruptoken的所有权到masterchef

4、前端修改

前端:修改masterchef项目内的地址:src/config/constants/contracts.ts

5、multicall

合约:Multicall部署(从主网查合约源代码)
前端:修改Multicall项目内的地址:src/config/constants/Multicall.ts

6、前端修改

前端:Pid的修改:src/config/constants/farm.ts,第一个一定是cake不要动,在部署masterchef的时候也已经设置好了,可以从masterchef的poolinfo函数中查看到,它的pid设置为0,后面我们从1开始设置起,如把1对应到CAKE-B*B LP,当前前提是你要在liquidity pool添加后把lp的地址拿到

前端:Pid的修改:callhelp:135,修改cakeb*b的id为1(我们在上一步已经设置为1)

前端:pid的修改:src/state/hook.ts:334

7、注意:

关于pid的修改,注意顺序和注释

Enterstaking()这个是专门用来进行单币质押的(应该)

注意不要担心是否没有wbb的,不要担心是否要先用bb换wb*b

在pancakeswap中已经有了一步1:1,将手里的bb也就是weth9,兑换为WBB,然后再兑换成第三方token

而兑换回来的话也是将第三方token兑换回b*b

也就是说我的lp是第三方token-wb*b

当然,以上选择是在第三方token-bb兑换过程中,如果你想单独的兑换成wbb也可以

三、pancakebunny收益聚合器部署

依赖架构图:
在这里插入图片描述

PancakeBunny部署顺序:每一个都是一个合约

1、Bunny:

可以先mint一下(1000个就行),用来添加bunny-b*b

2、Bunny-b*b:

3、ZAPBSC:

CONSTANT VARIABLES下修改cake,bunny,wb*b,busd,修改router
【initialize()】

4、PRICECALCULATOR:

【initialize()】
【创建 bunny-bb 创建cake-bb】

5、Timelock:

【Admin:我的地址;delay:86400(根据官方合约)】
查看timelock发现了一个transaction延时/定时执行机制
这样机制将tx的call数据保存在合约中,由外部大量用户的调用/使用合约功能作为触发支撑

6、StrategyheLPERV1:

这里的CAKEPOOL就是CAKE-B*B的地址

7、BUNNYPOOL:

更改28行bunny地址,更改61行startegyhelper地址
(44行presaleContract没有改,而是修改了95为:
uint soldInPresale = 10001e18;
//uint soldInPresale = IPresale(presaleContract).totalBalance().div(2).mul(3); // mint 150% of presale for making flip token
【setRewardToken:bunny-b
b】

8、MINTER:

Deployer写自己,其他按照上面的地址更新
【Initialize()】
【bunnypool:setReawrdsDistribution:MINTER】
【bunny:transferOwnership->minter】

9、bunneyChef:

【Initialize()-》bunnyperblock:500000000000000000 0.5bunny,按官网上的;startblock:5585350,按官网上】
【Setminter:MINTER】
【MINTER:setBunnyChef:bunneyChef】

10、VaultController

修改bunny地址

11、Vaultfliptoflip:

找到想要收益聚合的pid-》initialize(),如cake-b*b是1
【SetbunnyChef:bunneyChef】
【SetKeeper:我的地址】
【SetMinter:MINTER】
【MINTER:setMinter:Vaultfliptoflip】

【BunnyPool:setstakepermission:MINTER,true 以及 Vaultfliptoflip,true】

四、pancakeBunny使用指导

怎么使用?
1、首先要进行授权,即cake-b*b给vaultfliptoflip的授权

2、然后选择非keeper用户(即非管理员用户(建议),避免混乱)添加liquidity,获得lp,然后deposit函数调用

3、此时调用vaultfliptoflip会发现earned为0,其关键原因在于,valutfliptoflip合约想要给你发奖励,必须要知道收集来的lp确实获得了cake

4、如何让它知道获得cake?让管理员用户,即keeper调用harvest函数(实际上查看官网合约也会发现有一个固定账户会不断的调用harvest函数,当然这个过程实际上可以通过外部调用自动化的来执行,这里是手动的)
5、调用harvest函数过后,flip合约就知道了这些LP确实获得了受益了,此时earned函数就会正确的计算出来收益,普通用户就可以调用getreward函数进行收益了

猜你喜欢

转载自blog.csdn.net/BradMoon/article/details/123132177