Web3.py第4版的第一个测试版于2017年11月中旬发布,此后又发布了5个版本,目前已经稳定发布到4.6。主要版本变化意味着一些向后兼容的更改,以及这些更改启用的一些全新功能。感兴趣的话请继续阅读本概述。
如何安装
等不及要玩了吗?现在用pip安装。Pip默认不会安装测试版,因此请使用–pre标志立即获取v4:
pip install --pre web3
Python3.5以上
其中一个更重要的变化是现在需要Python 3.5。你的项目仍然停留在py2上吗?立即升级代码。它比你想象的要快2to3。Python 3提供了许多有用的功能和库,并且它消除了bytes
和str
的歧义,这为升级铺平了道路。
更直观的参数和返回类型
全局特征
如果浏览在v3中返回十六进制字符串的函数,你会发现它们中的大多数在v4中返回类似bytes
的对象。下面示例中的HexBytes
类是内置字bytes
型的子类,因此可以在bytes
所在的任何位置使用。
>>> from web3.auto import w3
>>> block_hash = w3.eth.getBlock(4359745).hash
HexBytes('0x03087766bf68e78671d1ea436ae087da74a12761dac020011a9eddc4900bf13b')
# get the first byte:
>>> block_hash[0]
3
# show how many bytes are in the hash
>>> len(block_hash)
32
# hex-encode the hash
>>> w3.toHex(block_hash)
'0x03087766bf68e78671d1ea436ae087da74a12761dac020011a9eddc4900bf13b'
# cast back to the basic `bytes` type
>>> bytes(block_hash)
b"\x03\x08wf\xbfh\xe7\x86q\xd1\xeaCj\xe0\x87\xdat\xa1'a\xda\xc0 \x01\x1a\x9e\xdd\xc4\x90\x0b\xf1;"
合约参数
如果合约返回ABI bytes
类型,那么将获得python bytes值。如果它返回ABI 字符串
类型,那么你将得到一个python str。同样