ITADN

修复 getAllPools 方法中数据覆盖的问题

#187Pull RequestEthanWalker10 创建于 2025-01-22已合并
E
EthanWalker10commented
对 PoolManager 合约进行单元测试, 定位 getAllPools 方法中存在给 poolsInfo 数组赋值时覆盖数据的问题. 问题代码为 `poolsInfo[i + j] =...`, 随着循环进行, i=2;j=0; 会覆盖 i=0;j=2; 时的数据. 对赋值逻辑进行了修复. 部分测试函数如下: ```solidity modifier poolCreated() { address pool1 = poolManager.createAndInitializePoolIfNecessary(params1); address pool2 = poolManager.createAndInitializePoolIfNecessary(params2); address pool3 = poolManager.createAndInitializePoolIfNecessary(params3); _; } function comparePoolInfoWithParams( PoolManager.PoolInfo calldata poolInfo, IPoolManager.CreateAndInitializeParams calldata params ) public pure returns(bool ok) { ok = poolInfo.token0 == params.token0 && poolInfo.token1 == params.token1 && poolInfo.fee == params.fee && poolInfo.tickLower == params.tickLower && poolInfo.tickUpper == params.tickUpper; } function testGetAllPools() public poolCreated { PoolManager.PoolInfo[] memory poolsInfo = poolManager.getAllPools(); assertEq(poolsInfo.length, 3); IPoolManager.CreateAndInitializeParams[3] memory multiParams = [params1, params2, params3]; console2.log(multiParams[0].token0, multiParams[1].token0, multiParams[2].token0); for (uint24 i=0; i < poolsInfo.length; i++) { assert(this.comparePoolInfoWithParams(poolsInfo[i], multiParams[i])); } } ```
合并状态:已合并 合并于 2025-01-31 关闭于 2025-01-31 3 条评论