详细代码如上图 问题描述: 最近在仿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的地址和两个代币的地址都是一样的,有那位大佬可以帮忙分析一下嘛
这个是英文 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.