成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Python開(kāi)發(fā)以太坊的類(lèi)庫(kù)Web3.py V4的新功能

microcosm1994 / 2792人閱讀

摘要:主要版本變化意味著一些向后兼容的更改,以及這些更改啟用的一些全新功能。使用私鑰簽署消息和交易現(xiàn)在可以在沒(méi)有任何客戶(hù)端連接的情況下對(duì)消息和原始交易進(jìn)行簽名以及驗(yàn)證它們。

Web3.py第4版的第一個(gè)測(cè)試版于2017年11月中旬發(fā)布,此后又發(fā)布了5個(gè)版本,目前已經(jīng)穩(wěn)定發(fā)布到4.6。主要版本變化意味著一些向后兼容的更改,以及這些更改啟用的一些全新功能。感興趣的話(huà)請(qǐng)繼續(xù)閱讀本概述。

如何安裝

等不及要玩了嗎?現(xiàn)在用pip安裝。Pip默認(rèn)不會(huì)安裝測(cè)試版,因此請(qǐng)使用--pre標(biāo)志立即獲取v4:

pip install --pre web3
Python3.5以上

其中一個(gè)更重要的變化是現(xiàn)在需要Python 3.5。你的項(xiàng)目仍然停留在py2上嗎?立即升級(jí)代碼。它比你想象的要快2to3。Python 3提供了許多有用的功能和庫(kù),并且它消除了bytesstr的歧義,這為升級(jí)鋪平了道路。

更直觀(guān)的參數(shù)和返回類(lèi)型 全局特征

如果瀏覽在v3中返回十六進(jìn)制字符串的函數(shù),你會(huì)發(fā)現(xiàn)它們中的大多數(shù)在v4中返回類(lèi)似bytes的對(duì)象。下面示例中的HexBytes類(lèi)是內(nèi)置字bytes型的子類(lèi),因此可以在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"x03x08wfxbfhxe7x86qxd1xeaCjxe0x87xdatxa1"axdaxc0 x01x1ax9exddxc4x90x0bxf1;"
合約參數(shù)

如果合約返回ABI bytes類(lèi)型,那么將獲得python bytes值。如果它返回ABI 字符串類(lèi)型,那么你將得到一個(gè)python str。同樣,合約函數(shù)的參數(shù)也會(huì)匹配對(duì)應(yīng)。

如果提供的參數(shù)類(lèi)型與相應(yīng)的ABI類(lèi)型不完全匹配,則將嘗試轉(zhuǎn)換它。 例如:

發(fā)送到ABI字符串類(lèi)型的字節(jié)值將是UTF-8解碼的

發(fā)送到ABI字節(jié)類(lèi)型的str值將被轉(zhuǎn)換為十六進(jìn)制

合約函數(shù)

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

使用私鑰簽署消息和交易

現(xiàn)在可以在沒(méi)有任何客戶(hù)端連接的情況下對(duì)消息和原始交易進(jìn)行簽名以及驗(yàn)證它們。

以下是簽署一個(gè)信息的的示例:

>>> from web3 import Account, Web3
>>> msg = "I?SF"
>>> key = b"xb2..."
>>> Account.sign(message_text=msg, private_key=key)
{"message": b"Ixe2x99xa5SF",
 "messageHash": HexBytes("0x1476abb745d423bf09273f1afd887d951181d25adc66c4834a70491911b7f750"),
 ...
 "signature": HexBytes("0xe6ca9bba58c88611fad66a6ce8f996908195593807c4b38bd528d2cff09d4eb33e5bfbbf4d3e39b1a2fd816a7680c19ebebaf3a141b239934ad43cb33fcec8ce1c")}

還有很多其他私鑰功能。有關(guān)更多信息,請(qǐng)參閱web3.eth.account文檔。

準(zhǔn)備簽名的交易

在v3中,沒(méi)有很好的方法來(lái)創(chuàng)建合約交易對(duì)象。這并不重要,因?yàn)槌藦V播這個(gè)交易之外別無(wú)他法,這已經(jīng)很容易了。但是,在第4版中,我們可能希望在廣播之前在本地簽署該交易對(duì)象。所以添加了buildTransaction()選項(xiàng),如下所示:

>>> 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)
更可預(yù)測(cè)的過(guò)濾器

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

在v4中,Web3.py將用戶(hù)的選擇添加到監(jiān)視線(xiàn)程,并在你的應(yīng)用程序合適時(shí)調(diào)用get_new_entries()。這允許你捕獲可能引發(fā)的Exception,并調(diào)試你的過(guò)濾器。新系統(tǒng)更可靠,更容易追蹤正在發(fā)生的事情,但還有更多的改進(jìn)空間。因此,請(qǐng)注意v4中的更多過(guò)濾更新以及v5中的更新。

無(wú)處不在以太坊名稱(chēng)服務(wù)

在可以輸入地址的任何地方,v4都接受作為一個(gè)名稱(chēng)。然后Web3.py將為你查找該地址。有關(guān)以太坊名稱(chēng)服務(wù)的更多詳細(xì)信息,請(qǐng)參閱此文章,了解ENS如何適合Web3.py。

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

>>> from web3.auto import w3
>>> w3.eth.getBalance("ethereumfoundation.eth")
2963803006730275571720
自動(dòng)初始化

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

from web3 import Web3, IPCProvider
w3 = Web3(IPCProvider())

也許你從之前的例子中注意到,在v4中,這可以通過(guò)單行實(shí)現(xiàn):

from web3.auto import w3

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

from web3 import Web3
w3 = Web3()

自動(dòng)接口檢測(cè)可以猜測(cè)生產(chǎn)網(wǎng)絡(luò)的常見(jiàn)IPC和HTTP連接設(shè)置。它還會(huì)檢查你是否設(shè)置了環(huán)境變量。

地址校驗(yàn)無(wú)處不在

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

此外,現(xiàn)在從所有方法返回校驗(yàn)地址。這樣做的好處是地址相等性測(cè)試可以簡(jiǎn)單地使用addr1 == addr2,因?yàn)橹挥幸粋€(gè)EIP 55地址的有效表示。

gas價(jià)格估算

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

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()

你肯定會(huì)想要那些新的緩存中間件,因?yàn)樗鼤?huì)對(duì)你的節(jié)點(diǎn)進(jìn)行大量調(diào)用。只有在自動(dòng)獲得更好的價(jià)格估算時(shí)才進(jìn)行此設(shè)置,這至關(guān)重要,值得花點(diǎn)兒時(shí)間。第一次估計(jì)測(cè)試計(jì)算大約50秒。

要查看完整的更改列表,請(qǐng)?jiān)L問(wèn)v4發(fā)行說(shuō)明。

當(dāng)然,python用web3.py庫(kù)開(kāi)發(fā)以太坊來(lái)說(shuō)非常的方便,有興趣的用戶(hù)可以關(guān)注我們的python以太坊教程,主要是針對(duì)python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的詳解。

這里是原文

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42468.html

相關(guān)文章

  • Python開(kāi)發(fā)以太類(lèi)庫(kù)Web3.py V4功能

    摘要:主要版本變化意味著一些向后兼容的更改,以及這些更改啟用的一些全新功能。使用私鑰簽署消息和交易現(xiàn)在可以在沒(méi)有任何客戶(hù)端連接的情況下對(duì)消息和原始交易進(jìn)行簽名以及驗(yàn)證它們。 Web3.py第4版的第一個(gè)測(cè)試版于2017年11月中旬發(fā)布,此后又發(fā)布了5個(gè)版本,目前已經(jīng)穩(wěn)定發(fā)布到4.6。主要版本變化意味著一些向后兼容的更改,以及這些更改啟用的一些全新功能。感興趣的話(huà)請(qǐng)繼續(xù)閱讀本概述。 如何安裝 ...

    VPointer 評(píng)論0 收藏0
  • Android App 如何生成以太坊錢(qián)包

    摘要:以太坊,主要講解如何使用開(kāi)發(fā)基于的以太坊應(yīng)用,包括賬戶(hù)管理狀態(tài)與交易智能合約開(kāi)發(fā)與交互過(guò)濾器和事件等。 Android應(yīng)用程序以太坊錢(qián)包生成,要做的工作不少,不過(guò)如果我們一步一步來(lái)應(yīng)該也比較清楚: 1.在app/build.gradle中集成以下依賴(lài)項(xiàng): compile (org.web3j:core-android:2.2.1) web3j核心是用于從服務(wù)器下載以太坊區(qū)塊鏈數(shù)據(jù)的核心...

    不知名網(wǎng)友 評(píng)論0 收藏0
  • Android App 如何生成以太坊錢(qián)包

    摘要:以太坊,主要講解如何使用開(kāi)發(fā)基于的以太坊應(yīng)用,包括賬戶(hù)管理狀態(tài)與交易智能合約開(kāi)發(fā)與交互過(guò)濾器和事件等。 Android應(yīng)用程序以太坊錢(qián)包生成,要做的工作不少,不過(guò)如果我們一步一步來(lái)應(yīng)該也比較清楚: 1.在app/build.gradle中集成以下依賴(lài)項(xiàng): compile (org.web3j:core-android:2.2.1) web3j核心是用于從服務(wù)器下載以太坊區(qū)塊鏈數(shù)據(jù)的核心...

    _ipo 評(píng)論0 收藏0
  • Web程序員如何入門(mén)以太開(kāi)發(fā)

    摘要:加入以太坊生態(tài)系統(tǒng),一起征服世界。數(shù)字,字符串等要注意的第二件事是以太坊中的是位。一旦你掌握了這些東西,我個(gè)人會(huì)認(rèn)為你是一個(gè)有能力的以太坊開(kāi)發(fā)者 我經(jīng)常構(gòu)建使用以太坊的Web應(yīng)用程序,我理所當(dāng)然地認(rèn)為每天都使用的是神奇的工具集。我們的生態(tài)系統(tǒng)正在迅速發(fā)展,我認(rèn)為很多新人都感到不知所措。以太坊是一項(xiàng)了不起的技術(shù),但它也是新生的,而且根本沒(méi)有足夠的時(shí)間讓專(zhuān)業(yè)知識(shí)充分滲透。我希望人們知道以太...

    SwordFly 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

microcosm1994

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<