为什么两个Uni V3池有不同的字节码?



我正在尝试评估两个智能合约(address_1和address_2)是否都是使用web3的Uni V3池。

我的想法是请求每个合约的运行时字节码如下:

sc_i_bytecode = w3.eth.getCode(w3.toChecksumAddress(address_i))

然后将它们与我知道代表Uni V3池的另一个智能合约的字节码进行比较。我知道address_1和address_2的两个联系人都是Uni V3池,但是当我像上面那样得到它们的字节码时,它们不匹配(即sc_1_bytecode != sc_2_bytecode,尽管它们都是由同一个Uni V3工厂实现的?)。它们似乎也与我的Uni V3参考字节码不匹配。我只是想知道我是否错过了一些东西,那些确实可以有不同的字节码?

你可以在智能合约上调用factory()方法

https://etherscan.io/address/0xcbcdf9626bc03e24f779434178a73a0b4bad62ed readContract

,并验证它与v3工厂合同的地址匹配:https://etherscan.io/address/0x1f98431c8ad98523631ae4a59f267346ea31f984

在你的两个示例池中,factory()方法返回相同的v3工厂合同地址:0 x6c6bc977e13df9b0de53b251522280bb723837000 xcbcdf9626bc03e24f779434178a73a0b4bad62ed

以太坊合约代码中的方法:

interface IUniswapV3PoolImmutables {
/// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface
/// @return The contract address
function factory() external view returns (address);

至于你的问题,为什么他们有不同的字节码-我不是100%确定。可能与设置有关吗?(从etherscan中提取)

{
"optimizer": {
"enabled": true,
"runs": 800
},
"metadata": {
"bytecodeHash": "none"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"libraries": {}
}

最新更新