本地部署uniswap v2

kuimale
2024-08-14 17:10
发布于 Mirror

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

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中的任何合约

合约链接:

WETH合约

Factory合约

Router合约

bytecode转initcode

0
粉丝
0
获赞
3
精选
数据来源区块链,不构成投资建议!
网站只展示作者的精选文章
2022 Tagge. With ❤️ from Lambda