5 Uniswap V2合约代码开发时Factory合约中的getPair函数和Router02合约中的算法定位出来的Pair池子地址不一致,导致无法获取储备量

1685091923748.png

1685092128358.png 详细代码如上图 问题描述: 最近在仿Uniswap V2进行合约开发,但是发布完V2的Factory合约和Router02合约以后碰到了一些问题: 我在已发布的Factory下创建了两个代币的池子TokenA和TokenB的池子,但是在获取储备量的时候发现无法获取储备量,打了一些日志上去,发现通过 IUniswapV2Factory(factory).getPair(tokenA, tokenB);和 pair = address(uint(keccak256(abi.encodePacked(                 hex'ff',                 factory,                 keccak256(abi.encodePacked(token0, token1)),                 hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash             )))); 计算出的pair池子的地址不一致,通过 pair = address(uint(keccak256(abi.encodePacked(                 hex'ff',                 factory,                 keccak256(abi.encodePacked(token0, token1)),                 hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash             )))); 获取的池子地址无法获取到储备量,但是入参时的Factory的地址和两个代币的地址都是一样的,有那位大佬可以帮忙分析一下嘛

请先 登录 后评论

最佳答案 2023-05-30 09:29

这个是英文 init_code_hash 没有匹配。

在 UniswapV2Factory 添加一句代码获取 init_code_hash:

bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(UniswapV2Pair).creationCode));

然后把获取的 code hash 替换掉 router 合约里面的 code hash.

请先 登录 后评论

其它 0 个回答