python - 通过python计算uniswap对地址
问题描述
我正在尝试基于这个solidity示例,使用python、web3和eth-abi库计算Uniswap对的(离线,即没有http请求)地址。
address factory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
address token0 = 0xCAFE000000000000000000000000000000000000; // change me!
address token1 = 0xF00D000000000000000000000000000000000000; // change me!
address pair = address(uint(keccak256(abi.encodePacked(
hex'ff',
factory,
keccak256(abi.encodePacked(token0, token1)),
hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f'
))));
有一些想法:
hexadem_ ='0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f'
hexadem_1 = 0xff
abiEncoded_1 = encode_abi_packed(['address', 'address'], ( token_0, token_1 ))
salt_ = web3.Web3.solidityKeccak(['bytes'], ['0x' +abiEncoded_1.hex()])
abiEncoded_2 = encode_abi_packed(['bytes', 'address', 'bytes32'], (bytes(hexadem_1), factory, salt_))
resPair = web3.Web3.solidityKeccak(['bytes','bytes'], ['0x' +abiEncoded_2.hex(), hexadem_])
有人可以建议我,有什么问题,应该考虑哪种方式?
解决方案
首先,resPair 太长,不能作为合约地址。可以通过阅读以下内容来解释规则:https ://eips.ethereum.org/EIPS/eip-1014
还要确保按字母顺序输入两个地址。使用 .sort() 函数来执行此操作。
这是正确的代码:
hexadem_ ='0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f'
hexadem_1 = 0xff
factory = '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f'
abiEncoded_1 = encode_abi_packed(['address', 'address'], ('0x7825e833d495f3d1c28872415a4aee339d26ac88', '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' )) #these two addresses to be changed as fit. Currently they are TLOS and WETH
salt_ = w3.solidityKeccak(['bytes'], ['0x' +abiEncoded_1.hex()])
abiEncoded_2 = encode_abi_packed([ 'address', 'bytes32'], ( factory, salt_))
resPair = w3.solidityKeccak(['bytes','bytes'], ['0xff' + abiEncoded_2.hex(), hexadem_])[12:]
resPair
希望这可以帮助!我发现这是一个有趣的挑战 :)
推荐阅读
- java - 我可以使用哪个 JDK 版本来支持 Lombok 版本 1.16.16?
- javascript - 赛普拉斯:有没有办法断言输入的值是否为空或至少有一定数量的字符
- python - 如何将 Yolo 格式的边界框坐标转换为 OpenCV 格式
- microsoft-graph-api - MSgraph,最多需要 48 小时才能看到更改
- r - 循环遍历数据框并匹配 R 中另一个文件中的值
- c - c - char 数组只打印第一个字符
- javascript - React Native Expo 中的 Jest 测试用例中断
- python - 如何使用动态@id 将文本发送到输入字段
- swagger - 如何使用 Power Apps 自定义 API 从 Power Apps 调用 IoT Central Device Bridge?
- javascript - 表达式预期在 if 条件附近