ApeSwap一個去中心化的交易所,既有類似Uniswap的TokenA/TokenB兌換,又有類似SushiSwap的質押挖礦。其工廠合約、路由合約、配對合約參考了Uniswap V2,BananaToken、MasterApe合約參考SushiSwap的SushiToken和MasterChef。具體如下:
-
ApeFactory合約
https://bscscan.com/address/0x0841BD0B734E4F5853f0dD8d7Ea041c241fb0Da6#code
參考 UniswapV2的UniswapV2Factory
-
ApeRouter合約
https://bscscan.com/address/0xcF0feBd3f17CEf5b47b0cD257aCf6025c5BFf3b7#code
參考UniswapV2的UniswapV2Router02
-
BananaToken合約
https://bscscan.com/address/0x603c7f932ED1fc6575303D8Fb018fDCBb0f39a95#code
參考 SushiSwap的SushiToken
-
MasterApe合約
https://bscscan.com/address/0x5c8D727b265DBAfaba67E050f2f739cAeEB4A6F9#code
參考SushiSwap的MasterChef
-
Timelock合約
https://bscscan.com/address/0x2F07969090a2E9247C761747EA2358E5bB033460#code
參考SushiSwap的Timelock
在ApeSwap的配對合約中,手續費仍然是0.3%,但協定抽成比例改成了1/4,即從這0.3%中再抽取1/4給開發團隊,剩餘的給LP提供者。下面介紹ApeSwap的檢查流程。
1 下載下傳ApeSwap工程
位址:https://github.com/ApeSwapFinance/apeswap-banana-farm
2 修改配置和安裝依賴包
将下載下傳的apeswap-banana-farm-master.zip解壓,然後将工程檔案夾名稱改為apeswap-banana-farm。
2.1 修改yarn.lock
由于dependencies字段下的ethereumjs-abi需要手動指定版本号,故在yarn.lock的第3729行,改成如下:
dependencies:
ethereumjs-abi "0.6.8"
2.2 安裝依賴包
cd apeswap-banana-farm
sudo yarn install
3 編譯合約
a) 在ganache設定IP為127.0.0.1,端口為8545,重新開機ganache
b)打開一個黑框框終端,依次輸入如下指令:
## 進入工程
cd apeswap-banana-farm
## 打開truffle控制台
truffle console
## 編譯智能合約
compile
## 退出truffle
## 按Ctrl+C、Ctrl+D 退出truffle
4 用Slither檢查合約
4.1 用相對路徑代替@
由于Slither不支援@方式的代碼導入,是以需要用相對路徑來代替@,比如
## 修改前
import "@pancakeswap/pancake-swap-lib/contracts/token/BEP20/BEP20.sol";
## 修改後
import "../node_modules/@pancakeswap/pancake-swap-lib/contracts/token/BEP20/BEP20.sol";
即在apeswap-banana-farm/contracts的每個合約檔案裡,用 …/node_modules/@pancakeswap 替換 @pancakeswap
4.2 啟動Docker
在桌面的工作列找到Docker,輕按兩下啟動它,然後,打開Slither執行個體,指令如下:
## 在Slither執行個體
docker run -it -v /Users/apple/Downloads/ShenJi/20211012/apeswap-banana-farm:/contract trailofbits/eth-security-toolbox
## 進入/contract目錄
cd /contract
4.3 檢查合約
a) 檢查BananaToken合約
slither ./contracts/BananaToken.sol --solc /usr/bin/solc-v0.6.12
b) 檢查BEP20RewardApe合約
slither ./contracts/BEP20RewardApe.sol --solc /usr/bin/solc-v0.6.12
c) 檢查BEP20RewardApeV2合約
slither ./contracts/BEP20RewardApeV2.sol --solc /usr/bin/solc-v0.6.12
d) 檢查BNBRewardApe合約
slither ./contracts/BNBRewardApe.sol --solc /usr/bin/solc-v0.6.12
e) 檢查BnbStaking合約
slither ./contracts/BnbStaking.sol --solc /usr/bin/solc-v0.6.12
f) 查LotteryRewardPool合約
slither ./contracts/LotteryRewardPool.sol --solc /usr/bin/solc-v0.6.12
g) 檢查MasterApe合約
slither ./contracts/MasterApe.sol --solc /usr/bin/solc-v0.6.12
注意,Slither的誤報率比較高,約為40%,這些有歧義的報錯,需要進行人工走讀代碼,進行審計。