跳转到主要内容

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 查看哈希值)

上传时间: Python 3

支持