跳转至

将您的代码从 v4 迁移到 v5

原文:https://web3py.readthedocs.io/en/stable/v5_migration.html

Web3.py 遵循语义版本化,这意味着版本 5 引入了向后不兼容的变化。如果你的项目依赖于 Web3.py v4,那么你可能需要做一些改变。

以下是最常见的必需更新:

不再支持 Python 3.5

您需要升级到 Python 3.6 或 3.7

不再支持 v1

您需要将eth-abi依赖项升级到 v2

对基础 API 的更改

JSON-RPC 更新

在 v4 中,JSON-RPC 调用查找事务或块,但没有找到它们,返回None。现在,如果没有找到一个事务或块,将根据情况抛出一个BlockNotFoundTransactionNotFound错误。这适用于以下 web3 方法:

移除的方法

  • contract.functions.buildTransaction.<method name>contract.buildTransaction被移除
  • contract.constructor.transactcontract.deploy被移除
  • contract.functions.<method name>.estimateGascontract.estimateGas被移除
  • contract.<functions/events>.<method name>.callcontract.call被移除
  • contract.<functions/events>.<method name>.transactcontract.transact被移除
  • contract.events.<event name>.createFiltercontract.eventFilter被移除
  • middleware_stack更名为middleware_onion()
  • web3.miner.hashratehashrate() 的重复,已被删除。
  • web3.version.networkversion()的副本,已被移除。
  • web3.providers.tester.EthereumTesterProviderweb3.providers.tester.TestRPCProvider已被删除为 EthereumTesterProvider()
  • web3.eth.enableUnauditedFeatures被删除
  • web3.txpool被移至 txpool()
  • web3.clientVersionweb3.version.node被移除
  • web3.version.ethereum被删除为 protocolVersion()
  • 重新定位个人 RPC 端点以反映奇偶校验和 Geth 实施:
  • web3.admin模块重新定位到web3.geth名称空间
  • web3.miner模块重新定位到web3.geth名称空间

不推荐的方法

预计 v6 中将删除以下方法:

  • web3.sha3已被弃用于keccak()
  • web3.soliditySha3已被弃用于solidityKeccak()
  • chainId()被弃用为 chainId() 。详情请见第 #1293
  • web3.eth.getCompilers()已被弃用,不会被替换
  • getTransactionFromBlock()已被弃用于getTransactionByBlock()

已弃用的简明合约和隐含合约

在版本 6 中,已经不推荐使用 ConciseContract 和 ImplicitContract,并且将被删除。

ImplicitContract 实例将需要使用详细语法。例如:

contract.functions.<function name>.transact({})

已经用 ContractCaller API 替换了 ConciseContract。现在,您可以使用以下方法,而不是使用简明合约工厂:

contract.caller.<function_name>

或者经典的合约语法:

contract.functions.<function name>.call()

一些更具体的例子可以在合约呼叫者文档中找到

经理供应商

在 v5 中,只允许一个供应商。虽然允许多个供应商是我们希望在未来支持的一个特性,但是 v4 中处理多个供应商的方式并不理想。他们唯一能做的就是撤退。没有任何循环机制,也没有任何选择供应商的控制。最终,想法是扩展管理器 API,以支持将定制逻辑注入到供应商选择过程中。

目前来看,manager.providers改成了manager.provider。同样的,web3.providers的实例被改成了web3.provider

测试网变化

Web3.py 将不再自动在 IPCProvider 中查找 testnet 连接。应该用类似from web3.auto.infura.ropsten import w3的东西来代替。

实体

Web3.py 已经停止推断域名的.eth TLD。如果使用域名而不是地址,您需要指定 TLD。如果 TLD 丢失,将抛出一个InvalidTLD错误。

必需的 Infura API 密钥

为了在 2019 年 3 月 27 日之后与 Infura 交互,您需要设置一个名为WEB3_INFURA_PROJECT_ID的环境变量。你可以通过访问https://infura.io/register获得一个项目 id。



回到顶部