天天看點

檢查ApeSwap工程

    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%,這些有歧義的報錯,需要進行人工走讀代碼,進行審計。

繼續閱讀