我试图评估两个智能合同(address_1和address_2)是否都是使用web3的Uni V3池。
我的想法是按以下方式请求每个契约的运行时字节码:
sc_i_bytecode = w3.eth.getCode(w3.toChecksumAddress(address_i))然后将它们与另一个智能协议的字节码进行比较,我知道它代表了一个Uni V3池。I do 知道address_1和address_2的两个联系人都是Uni V3池,但是当我得到上面的字节码时,它们并不匹配(即sc_1_bytecode != sc_2_bytecode,尽管它们都是由同一个Uni V3工厂实现的?)它们似乎与我的Uni V3引用字节码的字节码不匹配。我只是想知道我是不是遗漏了什么东西,而这些东西是否确实有不同的字节码?
发布于 2021-09-28 01:15:11
您可以在智能契约上调用factory()方法
https://etherscan.io/address/0xcbcdf9626bc03e24f779434178a73a0b4bad62ed#readContract
并验证它是否匹配v3工厂合同的地址:https://etherscan.io/address/0x1f98431c8ad98523631ae4a59f267346ea31f984
在两个示例池中,工厂()方法返回相同的v3工厂合同地址:0x6c6Bc977E13Df9b0de53b2522280B72383700 0xccdf9626bc03e24f7774178a73a0b4bad62
方法来自以太扫描上的合同代码:
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);至于你的问题,为什么他们有不同的字节码-我不是百分之百肯定。可能与设置有关吗?(也从以太扫描中提取)
{
"optimizer": {
"enabled": true,
"runs": 800
},
"metadata": {
"bytecodeHash": "none"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"libraries": {}
}https://stackoverflow.com/questions/69258462
复制相似问题