修复 getAllPools 方法中数据覆盖的问题
对 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 条评论