如何在Uniswap V3中获取ETH相关交易池?调用getPool返回0x0
解决Uniswap获取含ETH交易池的问题
你调用getPool()传入原生ETH的零地址返回0x0是正常的,因为Uniswap的交易池仅支持ERC20代币对,原生ETH(地址0x0000000000000000000000000000000000000000)并不是ERC20标准的代币,所以不存在直接以原生ETH为一方的交易池。
正确的做法是使用**WETH(Wrapped ETH)**的合约地址来替代原生ETH的零地址,WETH是将原生ETH封装成ERC20标准的代币,所有Uniswap上与ETH相关的交易池都是基于WETH创建的。
具体操作步骤
- 替换参数为对应链上的WETH合约地址,比如以太坊主网的WETH地址是
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2。调用getPool()时传入WETH地址、目标代币地址(比如USDC的0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48)以及对应的手续费层级(比如0.05%、0.3%、1%,对应数值500、3000、10000),就能获取到对应的交易池地址。 - 如果你需要批量获取所有包含WETH的交易池,
getPool()只能查询特定代币对,无法直接批量获取。此时可以通过监听Uniswap工厂合约的PoolCreated事件,遍历所有事件日志,筛选出其中一方代币为WETH的记录,以此收集所有相关交易池地址。
补充说明
Uniswap V2和V3都遵循这个逻辑——原生ETH不直接参与交易池创建,必须通过WETH封装后才能和其他ERC20代币组成交易对。
内容的提问来源于stack exchange,提问作者Lazaro Nascimento
相关产品推荐
相关产品推荐

