日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python字符串类库_Python开发以太坊的类库Web3.py V4的新功能

發布時間:2025/3/15 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python字符串类库_Python开发以太坊的类库Web3.py V4的新功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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。同樣,合約函數的參數也會匹配對應。

如果提供的參數類型與相應的ABI類型不完全匹配,則將嘗試轉換它。 例如:

發送到ABI字符串類型的字節值將是UTF-8解碼的

發送到ABI字節類型的str值將被轉換為十六進制

合約函數

合同函數的v3 API有點違反直覺,在指定函數之前指定如何處理函數,例如:contract.call().balanceOf(...)。我們使用類似web3.js的格式轉換這些格式:v1:contract.functions.balanceOf(...).call()。

使用私鑰簽署消息和交易

現在可以在沒有任何客戶端連接的情況下對消息和原始交易進行簽名以及驗證它們。

以下是簽署一個信息的的示例:

>>> from web3 import Account, Web3

>>> msg = "I?SF"

>>> key = b"\xb2..."

>>> Account.sign(message_text=msg, private_key=key)

{'message': b'I\xe2\x99\xa5SF',

'messageHash': HexBytes('0x1476abb745d423bf09273f1afd887d951181d25adc66c4834a70491911b7f750'),

...

'signature': HexBytes('0xe6ca9bba58c88611fad66a6ce8f996908195593807c4b38bd528d2cff09d4eb33e5bfbbf4d3e39b1a2fd816a7680c19ebebaf3a141b239934ad43cb33fcec8ce1c')}

還有很多其他私鑰功能。有關更多信息,請參閱web3.eth.account文檔。

準備簽名的交易

在v3中,沒有很好的方法來創建合約交易對象。這并不重要,因為除了廣播這個交易之外別無他法,這已經很容易了。但是,在第4版中,我們可能希望在廣播之前在本地簽署該交易對象。所以添加了buildTransaction()選項,如下所示:

>>> from web3.auto import w3

>>> token = w3.eth.contract(abi=...)

>>> transfer = token.functions.transfer("ethereumfoundation.eth", 1).buildTransaction()

>>> signed = w3.eth.account.signTransaction(transfer, key)

>>> w3.eth.sendRawTransaction(signed.rawTransaction)

更可預測的過濾器

在第3版中,過濾器從未按照人們想要的方式運行。標準JSON-RPC API僅支持輪詢更新篩選器。因此,為了模擬回調機制,Web3.py必須以線程為主,并支持多種方法(如stdlib或gevent)。它很麻煩,容易出現故障。這些失敗很難在運行時調試和捕獲。

在v4中,Web3.py將用戶的選擇添加到監視線程,并在你的應用程序合適時調用get_new_entries()。這允許你捕獲可能引發的Exception,并調試你的過濾器。新系統更可靠,更容易追蹤正在發生的事情,但還有更多的改進空間。因此,請注意v4中的更多過濾更新以及v5中的更新。

無處不在以太坊名稱服務

在可以輸入地址的任何地方,v4都接受作為一個名稱。然后Web3.py將為你查找該地址。有關以太坊名稱服務的更多詳細信息,請參閱此文章,了解ENS如何適合Web3.py。

例如,我們可以在ethereumfoundation.eth獲得地址的余額:

>>> from web3.auto import w3

>>> w3.eth.getBalance('ethereumfoundation.eth')

2963803006730275571720

自動初始化

猜測連接到普通客戶端需要哪些參數并不難。然而,在第3版中,有必要指定使用哪個接口,例如:

from web3 import Web3, IPCProvider

w3 = Web3(IPCProvider())

也許你從之前的例子中注意到,在v4中,這可以通過單行實現:

from web3.auto import w3

此外,可以在沒有任何接口的情況下初始化Web3,這具有相同的效果:

from web3 import Web3

w3 = Web3()

自動接口檢測可以猜測生產網絡的常見IPC和HTTP連接設置。它還會檢查你是否設置了環境變量。

地址校驗無處不在

EIP55定義了十六進制地址的校驗和機制,它將一些十六進制字符轉換為大寫字母。Web3.py選擇支持該機制有一段時間,它現在是所有地址所必需的。全小寫十六進制地址將被拒絕為無效(除了在校驗和產生全小寫十六進制地址的極少數情況下)。

此外,現在從所有方法返回校驗地址。這樣做的好處是地址相等性測試可以簡單地使用addr1 == addr2,因為只有一個EIP 55地址的有效表示。

gas價格估算

感謝https://ethgasstation.info/發布他們的算法。我們將其中的一個版本合并到Web3.py中的新gas價格估算的后端代碼中。這樣:

from web3 import Web3, middleware

from web3.gas_strategies.time_based import medium_gas_price_strategy

w3 = Web3()

w3.eth.setGasPriceStrategy(medium_gas_price_strategy)

w3.middleware_stack.add(middleware.time_based_cache_middleware)

w3.middleware_stack.add(middleware.latest_block_based_cache_middleware)

w3.middleware_stack.add(middleware.simple_cache_middleware)

w3.eth.generateGasPrice()

你肯定會想要那些新的緩存中間件,因為它會對你的節點進行大量調用。只有在自動獲得更好的價格估算時才進行此設置,這至關重要,值得花點兒時間。第一次估計測試計算大約50秒。

要查看完整的更改列表,請訪問v4發行說明。

當然,python用web3.py庫開發以太坊來說非常的方便,有興趣的用戶可以關注我們的python以太坊教程,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。

這里是原文

總結

以上是生活随笔為你收集整理的python字符串类库_Python开发以太坊的类库Web3.py V4的新功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。