web3.py的便捷工具
项目描述
# web3utils.py - web3.py之上的一些糖
web3utils是在[web3.py](https://github.com/pipermerriam/web3.py)之上的一个薄层
具有以下功能
* 如果您有标准设置,则立即访问`web3`和`eth`对象
* 调用合约函数的更短方式
* 如果`type(value) == bytes`,则自动将输入值的编码设置为`web3.sha3(value)`
这些改变是为了使我的shell使用和编码更快。我希望它也对您有所帮助!
如果web3.py对此持开放态度,我打算将这些片段推向上游。
### 安装
*注意:web3utils需要Python 3*
#### 使用web3utils库
`pip install web3utils`
#### 贡献web3utils库
```
git clone git@github.com/carver/web3utils.py.git
virtualenv -p python3 venv
. venv/bin/activate
pip install -r requirements-dev.txt
pip install -e .
```
### 使用
#### 立即访问web3和eth
打印您的初始账户余额,以以太币为单位
```
from web3utils import web3, eth
wei = eth.getBalance(eth.accounts[0])
balance = web3.fromWei(wei, 'ether')
print(balance)
```
与web3.py比较
```
from web3 import Web3, IPCProvider
web3 = Web3(IPCProvider())
wei = web3.eth.getBalance(web3.eth.accounts[0])
balance = web3.fromWei(wei, 'ether')
print(balance)
```
这是一项小改进,但在命令行中效果不错。
#### 简洁的合约访问
几项重要变更
* 方法调用更快捷,如 `contract.owner()` 而不是 `contract.call().owner()`
* 将所有方法参数字符串编码为 utf-8 ([类似于 Solidity](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI#argument-encoding))
* 当返回空结果时,不再返回 `"0x000..."`,而是返回 `None`
简短合约调用将被假设为只读(等同于 web3.py 中的 `.call()`),
除非首先对其进行修改。
请注意,这 *不会* 阻止您调用尝试更改状态的合约方法。
这种状态更改将永远不会作为交易发送到整个网络。
您可以通过以下方式切换回交易
```
contract.withdraw(amount, transact={'from': eth.accounts[1], 'gas': 100000, ...})
```
这相当于 web3.py 中的这种方法
```
contract.transact({'from': eth.accounts[1], 'gas': 100000, ...}).withdraw(amount)
```
### 为什么需要 Python 3?
*简短版本*
实际上,`str` 和 `bytes` 之间的区别很重要。如果您
想为未来(以太坊)编写代码,不要使用过去(语言)。
*长篇大论*
与 EVM 交互需要了解您正在使用的位。例如,sha3 哈希期望
接收一系列字节进行处理。计算字符串的 sha3 哈希(或应该是)
一个类型错误;哈希算法不知道如何处理
一系列字符,即 Unicode 代码点。作为调用者,您需要知道您正在
计算什么类型的哈希
1. 一系列字节:`b'[ c$o!\x91\xf1\x8f&u\xce\xdb\x8b(\x10.\x95tX'`
2. 以十六进制格式表示的字符串表示的字节:`'0x5b2063246f2191f18f2675cedb8b28102e957458'`
3. 使用 utf-8 编码生成的字节:**Oops,这些字节无法使用 utf-8 读取**
4. 使用 utf-16 编码生成的字节:`⁛④Ⅿ\uf191⚏칵诛ဨ键塴'`
Python 3 不允许您忽略许多这些细节。这是好事,因为与 EVM 的交互精度至关重要。以太币就在危险之中。
如果您对此感到抗拒——我理解,我经历过。对大多数人来说,这并不直观。但如果你要在以太坊之上开发,了解 [编码](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/) 确实很有价值!您的金钱就取决于它!
如果您对此感到抗拒——我理解,我经历过。这并不直观,对大多数人来说。但它真的很值得学习 [编码](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/) 的知识,如果你打算在以太坊之上进行开发。你的钱就靠它了!
如果您对此感到抗拒——我理解,我经历过。这并不直观,对大多数人来说。但它真的很值得学习 [编码](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/) 的知识,如果你打算在以太坊之上进行开发。你的钱就靠它了!
如果您对此感到抗拒——我理解,我经历过。这并不直观,对大多数人来说。但它真的很值得学习 [编码](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/) 的知识,如果你打算在以太坊之上进行开发。你的钱就靠它了!
如果您对此感到抗拒——我理解,我经历过。这并不直观,对大多数人来说。但它真的很值得学习 [编码](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/) 的知识,如果你打算在以太坊之上进行开发。你的钱就靠它了!
### 愿望清单
过滤器可能会超时并引发以下异常。
相反,在 web3.py 中捕获异常,并通过错误通知观察者
(甚至更好的方法,重新创建过滤器并从您离开的地方恢复事件)
```
Exception in thread Thread-22:8957
Traceback (most recent call last)
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "/home/carver/filter_listener/venv/local/lib/python2.7/site-packages/web3/utils/filters.py", line 84, in _run
changes = self.web3.eth.getFilterChanges(self.filter_id)
File "/home/carver/filter_listener/venv/local/lib/python2.7/site-packages/web3/utils/functional.py", line 14, in inner
value = fn(*args, **kwargs)
File "/home/carver/filter_listener/venv/local/lib/python2.7/site-packages/web3/eth.py", line 312, in getFilterChanges
"eth_getFilterChanges", [filter_id],
File "/home/carver/filter_listener/venv/local/lib/python2.7/site-packages/web3/providers/manager.py", line 35, in request_blocking
raise ValueError(response["error"])
ValueError: {u'message': u'filter not found', u'code': -32000}
```
项目详情
下载文件
下载您平台对应的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。
源代码分发
本版本没有提供源代码分发文件。请参阅有关生成分发存档的教程。
编译版本
web3utils-0.1.3-py3-none-any.whl (12.4 kB 查看哈希值)