通过python3计算uniswap 3.0池(对)地址

2024-04-18

我遇到了一个关于如何计算的问题 新的 uniswap 版本 3 池(早期版本称为pair) 地址基于1 https://github.com/Uniswap/v3-sdk/blob/aeb1b09/src/utils/computePoolAddress.ts#L7 and 2 https://stackoverflow.com/questions/66710238/compute-uniswap-pair-address-via-python


在新的uniswap v3.0中还多了一个参数 对于计算池地址 - 费用金额以百分比表示,定义如下sdk https://docs.uniswap.org/sdk/reference/enums/FeeAmount与 uint24 类型。 从sdk的computePoolAddress https://github.com/Uniswap/v3-sdk/blob/aeb1b09/src/utils/computePoolAddress.ts#L7第一次解决 对于计算池地址问题,有一个令我困惑的部分来源

[defaultAbiCoder.encode(['address', 'address', 'uint24'], [token0.address, token1.address, fee])

为什么我决定使用它来计算它encodePacked (i.e. encode_abi_packed对于 python3(来自 eth_abi.packed)函数。但它产生了错误的结果。 深入了解 uniswap v3.0 外围矿池合约 -3 https://github.com/Uniswap/v3-periphery/blob/v1.0.0/contracts/libraries/PoolAddress.sol澄清了 我的错。事实证明在 3.0 版本中使用encode (i.e. encode_abi对于 python3,来自 eth_abi) 函数。更多解释here https://forum.openzeppelin.com/t/abi-encode-vs-abi-encodepacked/2948/2

因此,将所有内容耦合在一起。

借助 python3 计算池地址的主要函数。

from web3 import Web3
from eth_abi.packed import encode_abi_packed
from eth_abi import encode_abi

def compute_pairs_address_with_target_v3(factory = '0x1F98431c8aD98523631AE4a59f267346ea31F984', token_0 = None, token_1 = None, fee = 3000):
    POOL_INIT_CODE_HASH = '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54'
    token_0 = Web3.toChecksumAddress(token_0)
    token_1 = Web3.toChecksumAddress(token_1)
    abiEncoded_1 = encode_abi(['address', 'address', 'uint24'], (token_0, token_1, fee )) if int(token_0,16)<int(token_1,16) else encode_abi(['address', 'address', 'uint24'], (token_1, token_0, fee ))
    salt = Web3.solidityKeccak(['bytes'], ['0x' +abiEncoded_1.hex()])
    abiEncoded_2 = encode_abi_packed([ 'address', 'bytes32'], ( factory, salt))
    resPair = Web3.solidityKeccak(['bytes','bytes'], ['0xff' + abiEncoded_2.hex(), POOL_INIT_CODE_HASH])[12:]
    return(resPair.hex())

对其进行测试,基于4 https://github.com/Uniswap/v3-sdk/blob/aeb1b09d454dad50718a3517eb9e73b080ee4833/src/utils/computePoolAddress.test.ts and 5 https://info.uniswap.org/#/pools/0x290a6a7460b308ee3f19023d2d00de604bcf5b42

factoryAddress = '0x1111111111111111111111111111111111111111'
token0 = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
token1 = '0x6B175474E89094C44Da98b954EedeAC495271d0F'
fee = 500 #https://docs.uniswap.org/sdk/reference/enums/FeeAmount#low
targetPoolAddress = '0x90B1b09A9715CaDbFD9331b3A7652B24BfBEfD32'
assert(targetPoolAddress.lower() == compute_pairs_address_with_target_v3(factory = factoryAddress, token_0 = token0, token_1 = token1, fee = fee).lower())

token0 = '0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0'
token1 = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
factoryAddress = '0x1F98431c8aD98523631AE4a59f267346ea31F984'
fee = 3000 #https://docs.uniswap.org/sdk/reference/enums/FeeAmount#medium
targetPoolAddress = '0x290a6a7460b308ee3f19023d2d00de604bcf5b42' #WETH /MATIC 0.3 % fee
assert(targetPoolAddress.lower() == compute_pairs_address_with_target_v3(factory = factoryAddress, token_0 = token0, token_1 = token1, fee = fee).lower())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过python3计算uniswap 3.0池(对)地址 的相关文章

随机推荐

  • 如何使用 bootstrap-multiselect 动态隐藏/显示选项?

    我在用引导多选 http davidstutz github io bootstrap multiselect 为用户提供对两个按键菜单的良好控制 我的第一个菜单叫做groups和其他称为queues 队列中的每个选项都有一个 HTML5
  • Octave-'endfunction' 命令与 'endif' 匹配

    有人可以告诉我我的代码有什么问题吗 sinlaw 150 30 39 8 parse error near line 30 of file endfunction command matched by endif function phi
  • 仅当应用程序 100% 完成时,才能在仪器测试后正确清理/拆卸

    我有一堆端到端仪器测试 依赖于 Espresso 它们启动我们的启动器活动 然后在我们的应用程序中导航 最终创建多个活动 在 的最后each测试我们的 After带注释的拆卸方法执行一些清理工作 我们遇到的问题是 测试完成 成功或失败的断言
  • Xcode 不断展开项目导航器中的所有组

    从几天前开始 Xcode 不断扩展项目导航器中的所有组和子组 我反复折叠它们 这样我就可以专注于我正在做的事情 然后我回去 它们都再次展开 还有其他人经历过吗 我折叠一个组 移至 Xcode 中的另一个选项卡 然后返回 所有组都再次展开 这
  • Lambda 属性值选择器作为参数

    我需要修改一个方法 以便它有一个额外的参数 该参数将采用 lambda 表达式 该表达式将用于内部对象以返回给定属性的值 请原谅我可能错误地使用了术语 因为这是我第一次尝试 LINQ 表达式 我尝试寻找答案 但正如我所提到的 我的术语似乎不
  • 使用 paramiko 检查远程主机上是否存在路径

    帕拉米科的SFTP客户端 http www metasnark com paramiko docs paramiko SFTP class html显然没有exists方法 这是我当前的实现 def rexists sftp path os
  • JavaFX - 在 DirectoryChooser 中显示文件

    是否可以使 DirectoryChooser 显示文件 而不仅仅是目录 与此处描述的问题相同JFileChooser 选择目录但显示文件 https stackoverflow com questions 2883447 jfilechoo
  • 在reactjs中添加内联样式而不使用JSX

    我正在尝试使用reactjs向元素添加内联样式 我发现 var divStyle color white backgroundImage url imgUrl ReactDOM render div Hello World div moun
  • twitter bootstrap 下拉菜单在应该关闭时没有切换

    天哪 我一直在为这件事抓狂 4个小时的下拉菜单 我正在使用 Twitter Bootstrap 顶部的固定导航有一个下拉菜单 非常标准的东西 只是下拉菜单没有像平常那样关闭 仅当按下切换按钮本身时 它才会打开和关闭 而不是按下菜单中的项目或
  • 在 Outlook 2007 C# 中获取安全发件人列表

    我已经在 C NET 4 0 中创建了 Outlook 2007 加载项 我想读取 C 代码中的安全发件人列表 if oBoxItem is Outlook MailItem Outlook MailItem miEmail Outlook
  • 如何防止c#中对象的实例化

    我需要的是检查传递给构造函数的参数 并防止特定对象的实例化 以防它们被视为无效 我发现可以抛出异常 因此对象引用将按预期以 null 结束 例如 仅当传递给构造函数的整数为非负数时 才会实例化此类 class MyClass public
  • Bootstrap 3 并排容器

    我正在尝试制作一个网页 其中内容的左半部分尊重引导程序 container最大宽度大小 而我的右侧可以一直到页面的末尾 作为 container fluid会工作 像这样的图片 到目前为止 我已经尝试了几种方法 目前我正在使用以下代码 di
  • 如何从 for 循环构建和填充 pandas 数据框? [复制]

    这个问题在这里已经有答案了 这是我正在运行的代码的一个简单示例 我希望将结果放入 pandas 数据帧中 除非有更好的选择 for p in game players passing print p p team p passing att
  • AAD 团体声称某些用户的 JWT 令牌缺失

    我在 AAD 上遇到一些奇怪的行为 用户成功登录后 我们的 API 调用中某些用户收到未经授权的消息 结果发现 JWT 中的声明丢失了 一些用户获得 groups 声明 他所属的所有 groupId 的数组 一些用户获得 hasgroups
  • 如何在命令行中查看 git 存储库中的所有标签[重复]

    这个问题在这里已经有答案了 有类似 git show标签 之类的东西吗 git tag列出存储库中使用的标签 git tag l如果你使用 l您可以通过选项传递搜索模式来过滤掉标签
  • 在 django 中通过变量模型名称访问模型

    我有两个相同的模型 比如说 django 中的 X 和 Y 如下所示 class X models Model con models CharField max length 100 a models ForeignField FOO cl
  • Node/Busboy:获取文件大小

    我使用 Busboy 模块通过下面的 CoffeeScript 代码来解析多部分请求 有时 问题出在 数据 处理程序上 该处理程序针对包含一个文件的请求多次调用 这意味着我需要对每个尺寸进行求和才能得出整个尺寸 此外 文件 处理程序中的文件
  • 如何在 Haskell 中创建通道列表(或数组),如 Go

    我试图将 Haskell 与 Go 进行比较以获得一些并发示例 以下代码是 Go 中使用 Goroutines 和通道的简单映射缩减示例 以下 Go 代码计算平方和 1 2 2 2 3 2 1024 2 为了测试Go和Haskell的性能
  • 网络适​​配器无法在 SQL Developer 中建立连接

    我使用包含 1000 个条目的 SQL 开发人员列表创建了一个数据库 并且创建成功 连接也成功了 但今天当我尝试连接时出现错误 IO Error The Network Adapter could not establish the con
  • 通过python3计算uniswap 3.0池(对)地址

    我遇到了一个关于如何计算的问题 新的 uniswap 版本 3 池 早期版本称为pair 地址基于1 https github com Uniswap v3 sdk blob aeb1b09 src utils computePoolAdd