本地部署uniswap v2

在很多情景下, 合约开发需要先进行测试.

remix/ganache等工具可以在一定程度上帮忙解决合约测试的问题.

但是关于代币交换的合约测试, 一般情况下都选择在testnet上面进行.

testnet`由于是公共的, 存在测试代币少/网络问题/部署延迟等一系列问题, 并不是最优选.

2年前在本地部署过uniswap`的前端程序用来测试代币的交换, 今天翻出来记录下.

假设你已经部署了Factory/Router/WETH/Multicall合约, 并且已经获取到了init code has值.

  1. github上面找到uniswap的代码仓库并clone到本地.

    git clone https://github.com/Uniswap/interface uniswap-local
    // 使用v2的最终版本
    git checkout v2.6.5
    
  2. 增加本地ganache节点, 修改以下文件:

    假设新增节点名为GANACHE.
    
    打开src/constants/index.ts, 在ChainTokenList末尾加上[ChainId.GANACHE]: [WETH[ChainId.GANACHE]]
    
    打开src/constants/v1/index.ts, 在V1_FACTORY_ADDRESSES末尾加上[ChainId.GANACHE]: ''  (如果你会用到uniswap v1)
    
    打开src/constants/multicall/index.ts, 在MULTICALL_NETWORKS末尾加上[ChainId.GANACHE]: '你的Multicall合约地址'
    
    打开src/state/lists/hooks.ts, 在TokenAddressMap末尾加上[ChainId.GANACHE]: {}
    
    打开src/utils/index.ts, 在ETHERSCAN_PREFIXES末尾加上1337: 'ganache.'
    
    打开src/components/Header/index.tsx, 在NETWORK_LABELS加上[ChainId.GANACHE]: 'Ganache'  (这里是在页面右上角显示的节点名称)
    
    打开src/connectors/index.ts, 在supportedChainIds: [1, 3, 4, 5, 42]末尾加上1337
    
    由于ChainId是从@uniswap/sdk中引用的, 所以还需要修改一下文件:
    
    打开node_modules/@uniswap/sdk/dist/sdk.cjs.development.js, 找到function (ChainId)函数, 在末尾加上ChainId[ChainId["GANACHE"] = 1337] = "GANACHE";
    
    打开node_modules/@uniswap/sdk/dist/sdk.esm.js, 找到function (ChainId)函数, 在末尾加上ChainId[ChainId["GANACHE"] = 1337] = "GANACHE";
    
    打开node_modules/@uniswap/sdk/dist/constants.d.ts, 在ChainId末尾加上GANACHE = 1337
    
  3. 还需要添加一个本地节点的WETH:

    打开node_modules/@uniswap/sdk/dist/sdk.cjs.development.js, 在WETH末尾添加_WETH[exports.ChainId.GANACHE] = /*#__PURE__*/new Token(exports.ChainId.GANACHE, '你的WETH合约地址', 18, 'WETH', 'Wrapped Ether')
    
    打开node_modules/@uniswap/sdk/dist/sdk.esm.js, 在WETH末尾添加_WETH[ChainId.GANACHE] = /*#__PURE__*/new Token(ChainId.GANACHE, '你的WETH合约地址', 18, 'WETH', 'Wrapped Ether')
    
  4. 修改uniswap v2文件:

    打开src/constants/multicall/index.ts, 将MULTICALL_NETWORKS中的[ChainId.GANACHE]替换为你部署的Multicall合约地址
    
    打开src/constants/index.ts, 将ROUTER_ADDRESS替换为你部署的Router合约地址
    
    打开src/state/swap/hooks.ts, 将BAD_RECIPIENT_ADDRESSES里面的Factory和Router合约地址替换为你自己部署的
    
    打开node_modules/@uniswap/sdk/dist/sdk.cjs.development.js, 将FACTORY_ADDRESS替换为你部署的Factory合约地址;
    将INIT_CODE_HASH替换为你自己的init code hash
    
    打开node_modules/@uniswap/sdk/dist/sdk.esm.js, 将FACTORY_ADDRESS替换为你部署的Factory合约地址;
    将INIT_CODE_HASH替换为你自己的init code hash
    

最后, 执行yarn install安装依赖, 再执行yarn运行程序即可.

不要忘记启动本地ganache服务.

另外, 你还可以通过免费的ipfs服务提供快速代币列表, 在 src/constants/lists.ts 文件中的 DEFAULT_LIST_OF_LISTS 中添加你的ipfs文件链接即可.

注意, multicall合约必须存在, 否则本地uniswap v2程序中将无法检索你部署到ganache中的任何合约

合约链接:

Subscribe to kuimale
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.