【问题标题】:brownie mainnet-fork issue when trying to interact with contract: 'ValueError: invalid literal for int() with base 16: '''尝试与合约交互时出现的 brownie mainnet-fork 问题:'ValueError: invalid literal for int() with base 16:'''
【发布时间】:2022-01-03 22:41:38
【问题描述】:

我正在按照指示 here 使用 brownie 与分叉的主网合约进行交互。建议的三行代码是:

address = "0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419"
oracle = Contract.from_explorer(address)
oracle.latestAnswer()

但是,当我运行第二行时,我得到以下信息:

Fetching source of 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419 from api.etherscan.io...
  File "<console>", line 1, in <module>
  File "brownie/network/contract.py", line 1162, in from_explorer
    if not _verify_deployed_code(
  File "brownie/network/contract.py", line 1765, in _verify_deployed_code
    idx = -(int(actual_bytecode[-4:], 16) + 2) * 2
ValueError: invalid literal for int() with base 16: ''

似乎主网分叉是可访问的,但合约本身在某种程度上已损坏。我做错了什么?

【问题讨论】:

标签: python ethereum solidity chainlink brownie


【解决方案1】:

我一直在做这个教程,只是自己解决了这个问题。我使用的随机数生成器 VRFv2Consumer 比教程中的版本更新。

在那个版本中,构造函数被传递了一个订阅 ID,我是从 python 传递一个整数。我得到了和你完全相同的错误。我认为这是类型不匹配,因为当我将 sol 文件中的订阅 id 从 uint64 更改为 uint256,然后重新编译时,它解决了问题。

还必须转换使用订阅 ID 的 requestRandomWords 的函数调用,因此我必须将其包装在 uint64(s_subscriptionId) 中以将其改回。

我不确定这是否是您的解决方案,但我没有足够的声誉点来发表评论。希望它可能会有所帮助,如果没有,我很乐意进一步讨论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2021-12-25
    • 2022-01-09
    • 2019-04-16
    • 2018-02-01
    • 1970-01-01
    相关资源
    最近更新 更多