日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

譯者 | 李睿

Web3、區(qū)塊鏈技術(shù)和加密貨幣如今都是令人關(guān)注的熱門話題。技術(shù)、應(yīng)用、生態(tài)系統(tǒng)以及對(duì)社會(huì)的影響都在以驚人的速度發(fā)展。本文將從開(kāi)發(fā)人員Alvin Lee的角度來(lái)討論如何學(xué)習(xí)開(kāi)發(fā)Web3,雖然他開(kāi)發(fā)經(jīng)驗(yàn)豐富,但是在開(kāi)發(fā)Web3方面則是一名新手。本文將了解Web3開(kāi)發(fā)的先決條件,如何使用Python/ target=_blank class=infotextkey>Python通過(guò)Web3的頂級(jí)API服務(wù)Infura訪問(wèn)區(qū)塊鏈,最后介紹用于管理錢包的一個(gè)簡(jiǎn)單項(xiàng)目。

如何開(kāi)始

盡管Alvin Lee從20世紀(jì)90年代末就開(kāi)始進(jìn)行編程,但在Web3世界里,他卻是一名初學(xué)者。他并不是專家,所以不會(huì)試圖解釋W(xué)eb3基本原理。但市面上有很多很好的指南和教程,因此他建議從Infura文檔開(kāi)始,它非常全面且易于理解。

如果用戶喜歡更互動(dòng)的學(xué)習(xí)方式,也可以從技術(shù)社區(qū)獲得支持。

現(xiàn)在,學(xué)習(xí)Web3先從一些基礎(chǔ)知識(shí)開(kāi)始。首先需要?jiǎng)?chuàng)建一個(gè)Infura賬戶,一個(gè)存儲(chǔ)加密貨幣的錢包,當(dāng)然還需要一些錢。

創(chuàng)建Infura賬戶

Infura公司是區(qū)塊鏈API和開(kāi)發(fā)人員使用工具的提供商。這意味著如果服務(wù)商想訪問(wèn)區(qū)塊鏈,不需要自己運(yùn)行節(jié)點(diǎn)。與其相反,只需采用一個(gè)友好的API,Infura就會(huì)完成所有繁重的工作。Infura免費(fèi)并且安全,因?yàn)樗粫?huì)存儲(chǔ)用戶的私鑰,也無(wú)法修改其交易或多次重放它們。

用戶可以免費(fèi)開(kāi)戶,不需要采用信用卡。

創(chuàng)建Infura項(xiàng)目

創(chuàng)建項(xiàng)目是事情變得有趣的地方。每個(gè)項(xiàng)目都有一個(gè)API密鑰,用于標(biāo)識(shí)它并允許用戶使用Infura,用戶可以按照說(shuō)明進(jìn)行操作。

設(shè)置加密錢包

下一個(gè)難題是設(shè)置加密錢包。在區(qū)塊鏈環(huán)境中,加密錢包持有的余額完全由一組數(shù)字密鑰控制,因此沒(méi)有所謂的個(gè)人賬戶所有權(quán),每個(gè)帳戶都有一個(gè)公鑰(在區(qū)塊鏈中可見(jiàn))和一個(gè)控制該帳戶的私鑰。持有私鑰的用戶完全控制了一個(gè)賬戶。用戶還可以將多個(gè)帳戶作為一組私鑰進(jìn)行管理。加密錢包為用戶提供了一種安全的方式來(lái)管理其帳戶/私鑰以及其他好處,例如便利性、便攜性和兼容性。

Infura推薦使用MetaMask,用戶可以將MetaMask作為瀏覽器擴(kuò)展安裝。

在設(shè)置加密錢包之后,可以開(kāi)始討論如何賺錢。

如何賺錢

區(qū)塊鏈不是免費(fèi)使用的,加密貨幣經(jīng)濟(jì)學(xué)需要投入更多的資金。簡(jiǎn)單地說(shuō),每筆交易都要支出費(fèi)用。如果想嘗試區(qū)塊鏈技術(shù)則需要投入資金。幸運(yùn)的是,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),有一些測(cè)試網(wǎng)絡(luò)可以免費(fèi)獲得測(cè)試資金,雖然不能用它來(lái)?yè)Q取真實(shí)的貨幣,但是可以用它來(lái)開(kāi)發(fā)和測(cè)試Web3應(yīng)用程序。

說(shuō)到這一點(diǎn),有不同類型的區(qū)塊鏈。在這里將重點(diǎn)關(guān)注以太坊區(qū)塊鏈。

Alvin Lee在這個(gè)項(xiàng)目中使用了測(cè)試網(wǎng)Sepolia。他可以通過(guò)faucet站點(diǎn)從Sepolia獲得測(cè)試ETH(ETH是以太坊的原生加密貨幣,可以用它來(lái)支付以太坊網(wǎng)絡(luò)上的交易。而測(cè)試ETH是以太坊開(kāi)發(fā)的必要條件) 。

faucet站點(diǎn)可以將少量的測(cè)試網(wǎng)ETH轉(zhuǎn)移到加密錢包中。faucet站點(diǎn)要求用戶挖礦來(lái)賺錢,有些會(huì)定期給用戶一些錢。Alvin Lee成功地使用了ConsenSys Sepolia faucet,它每天向一個(gè)地址發(fā)送0.5個(gè)Sepolia ETH。

在介紹了這些基礎(chǔ)知識(shí)之后,以下了解Infura API。

訪問(wèn)Infura API

Infura通過(guò)HTTPS(REST)和WebSockets提供了一個(gè)JSON-RPC API。它有幾個(gè)類別,用戶可以通過(guò)一些文章了解關(guān)于它們的內(nèi)容。

此外,Infura API支持多種不同的網(wǎng)絡(luò)。每個(gè)網(wǎng)絡(luò)都有自己的https端點(diǎn),可以在訪問(wèn)API時(shí)將其用作基本URL。

以下是以太坊的端點(diǎn):

(1)Mai.NET

  • 以太坊主網(wǎng)JSON-RPC基于HTTPS—https://mainnet.infura.io/v3/<API-KEY>
  • 以太坊主網(wǎng)JSON-RPC基于WebSocket — wss://mainnet.infura.io/ws/v3/<API-KEY>

(2)Goerli

  • 以太坊Goerli測(cè)試網(wǎng)JSON-RPC基于 HTTPS— https://goerli.infura.io/v3/<API-KEY>
  • 以太坊Goerli測(cè)試網(wǎng)JSON-RPC基于WebSocket—wss://goerli.infura.io/ws/v3/<API-KEY>

(3)Sepolia

  • 以太坊Sepolia測(cè)試網(wǎng)JSON-RPC 基于HTTPS—https://sepolia.infura.io/v3/<API-KEY>
  • 以太坊Sepolia測(cè)試網(wǎng)JSON-RPC基于WebSocket—wss://sepolia.infura.io/ws/v3/<API-KEY>

為了測(cè)試是否可以訪問(wèn)API,可以使用curl獲取錢包余額。

將Infura API密鑰和API密鑰秘密存儲(chǔ)在環(huán)境變量中,簡(jiǎn)單地稱為:INFURA_API_KEY和INFURA_API_KEY_SECRET。還將MetaMask錢包的公鑰存儲(chǔ)在一個(gè)名為SEPOLIA_ACCOUNT的環(huán)境變量中。

curl命令如下:

復(fù)制

$ curl --user ${INFURA_API_KEY}:${INFURA_API_KEY_SECRET}

-X POST

-H "Content-Type: Application/json"

--data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["'"${SEPOLIA_ACCOUNT}"'","latest"],"id":1}'

https://sepolia.infura.io/v3/${INFURA_API_KEY}

a{"jsonrpc":"2.0","id":1,"result":"0x1d7e6e62f1523600"}

正如人們所見(jiàn),這有一個(gè)巨大的余額0x1d7e6e62f1523600!!!!但不必太興奮,其平衡單位是Wei。1個(gè)ETH等于1018Wei。如果計(jì)算一下數(shù)字,可以看到賬戶里有2個(gè)多一點(diǎn)的ETH。當(dāng)然,這都是測(cè)試網(wǎng)絡(luò)的錢。

需要注意的是,在這里不需要使用帳戶私鑰來(lái)檢查余額。任何人都可以查看區(qū)塊鏈中任何賬戶的余額,而帳戶余額并不是敏感信息。但是,帳戶和持有私鑰的人的身份是敏感和機(jī)密的。

在直接訪問(wèn)Infura API時(shí)有著很好的體驗(yàn),接下來(lái)需要編寫(xiě)一些代碼。

采用Python開(kāi)發(fā)Web3

Web3生態(tài)系統(tǒng)支持多種編程語(yǔ)言。可以從JAVAScript(web3.js和ethers.js)、Golang和Python(web3.py)中的流行庫(kù)訪問(wèn)Infura API。

選擇工具:web3.py

雖然現(xiàn)在大多數(shù)代碼都是用JavaScript/Node.js和Ruby編寫(xiě)的,但在學(xué)習(xí)新主題時(shí),Python是很好的選擇。web3.py庫(kù)看起來(lái)功能強(qiáng)大、成熟且文檔齊全。所以Alvin Lee決定選擇web3.py。

選擇目標(biāo):加密錢包管理器

Web3的世界可能是壓倒性的:交易、智能合約、IPFS、DAO(去中心化自治組織)、DeFi(去中心化金融)和NFT。Alvin Lee決定為這個(gè)Web3測(cè)試項(xiàng)目選擇一個(gè)簡(jiǎn)單的加密錢包管理器概念。加密錢包管理器是一種“hello web3 world”項(xiàng)目,因?yàn)樗龅木褪谦@取余額并將一些錢發(fā)送到目標(biāo)賬戶。自從Alvin Lee采用Sepolia faucet賺錢以來(lái),他決定發(fā)送一些資金來(lái)回饋它。先檢查一下代碼。

web3-test dApp(去中心化應(yīng)用)

這些代碼可以在Github上找到。

使用Poetry來(lái)構(gòu)建應(yīng)用程序。自述文件提供了一步一步的設(shè)置說(shuō)明。

在深入研究代碼之前,先運(yùn)行一下程序,看看會(huì)發(fā)生什么:

復(fù)制

$ poetry run python main.py

balance before transaction: 2.1252574454

send 20,000 gwei to 0xea4d57b2dd421c5bfc893d126ec15bc42b3d0bcd (Sepolia faucet account)

balance after transaction: 2.125184945399832

正如人們所看到的那樣,Alvin Lee的余額最初是略高于2個(gè)testnet ETH。然后,將20,000 Gwei(即200億Wei)發(fā)送到最初獲得資金的Sepolia faucet賬戶。它幾乎沒(méi)有影響資金平衡。這正好說(shuō)明Wei是一個(gè)多么小的單位。

這個(gè)代碼非常簡(jiǎn)單。只有一個(gè)名為main.py的文件。該文件包含一個(gè)main()函數(shù)和一個(gè)WalletManager類。先從main()函數(shù)開(kāi)始,它是程序的入口點(diǎn)。

main()函數(shù)不接受命令行參數(shù)或配置文件。一切都是為了簡(jiǎn)單而硬編碼的。首先,該函數(shù)實(shí)例化WalletManager類,然后定義Sepolia faucet帳戶的公鑰。現(xiàn)在開(kāi)始行動(dòng)。該函數(shù)通過(guò)調(diào)用WalletManager的get_balance()方法獲得加密錢包的余額,然后傳遞所請(qǐng)求的單位(以太幣),并將其顯示在屏幕上。接下來(lái),該函數(shù)調(diào)用send_eth()方法將20,000 Gwei發(fā)送到目標(biāo)帳戶。最后,它在匯款后再次獲取并顯示余額。

復(fù)制

def main():

wm = WalletManager()

sepolia_faucet_account = wm.w3.toChecksumAddress('0xea4d57b2dd421c5bfc893d126ec15bc42b3d0bcd')

balance = str(wm.get_balance('ether'))

print(f'balance before transaction: {balance}')

print(f'send 20,000 gwei to {sepolia_faucet_account} (Sepolia faucet account)')

wm.send_eth(sepolia_faucet_account, 20000, 'gwei')

balance = str(wm.get_balance('ether'))

print(f'balance after transaction: {balance}')

if __name__ == '__main__':

main()

然后看一下WalletManager類。它有四種方法:

復(fù)制

·__init__(),

·__create_web3_instance()

·get_balance()

·sent_eth()

方法1:__init__()

以下逐一進(jìn)行了解。__init__()方法作為構(gòu)造函數(shù),它首先調(diào)用__create_web3_instance()方法,并將結(jié)果存儲(chǔ)在一個(gè)名為w3的變量中。然后__init__()提取幾個(gè)環(huán)境變量并存儲(chǔ)它們。它繼續(xù)計(jì)算一些Gas費(fèi)用(Gas是區(qū)塊鏈運(yùn)行的燃料)和給驗(yàn)證交易的人員的獎(jiǎng)勵(lì)。

它還存儲(chǔ)鏈ID,用于標(biāo)識(shí)Sepolia測(cè)試網(wǎng)(在本例中)。稍后在向Sepolia測(cè)試網(wǎng)發(fā)送交易時(shí),將需要這個(gè)ID。

復(fù)制

Import

import os

import web3

class WalletManager:

def __init__(self):

self.w3 = self.__create_web3_instance()

self.account = os.environ[‘SEPOLIA_ACCOUNT’]

self.account_private_key = os.environ[‘METAMASK_PRIVATE_KEY’]

self.max_fee_per_gas = self.w3.toWei(‘250’, ‘gwei’)

self.max_priority_fee_per_gas = self.w3.eth.max_priority_fee

self.chain_id = self.w3.eth.chain_id

方法2:__create_web3_instance()

可以了解__create_web3_instance()方法內(nèi)部發(fā)生了什么。

__create_web3_instance()是一個(gè)靜態(tài)方法,因?yàn)樗恍枰獊?lái)自WalletManager類的任何信息。它從環(huán)境中獲取Infura API密鑰和API密鑰秘密,然后將它們編碼為基本身份驗(yàn)證令牌。它在Sepolia測(cè)試網(wǎng)上為項(xiàng)目準(zhǔn)備了適當(dāng)?shù)亩它c(diǎn),然后用所有信息實(shí)例化了Web3庫(kù)中的一個(gè)Web3對(duì)象。這個(gè)對(duì)象將允許通過(guò)一個(gè)方便的Python接口調(diào)用Infura API(而不是構(gòu)造JSON-RPC請(qǐng)求并解析結(jié)果)。

復(fù)制

@staticmethod

def __create_web3_instance():

infura_api_key = os.environ['INFURA_API_KEY']

infura_api_key_secret = os.environ['INFURA_API_KEY_SECRET']

data = f'{infura_api_key}:{infura_api_key_secret}'.encode('ascii')

basic_auth_token = .b64encode(data).strip().decode('utf-8')

infura_sepolia_endpoint = f'https://sepolia.infura.io/v3/{infura_api_key}'

headers = dict(Authorization=f'Basic {basic_auth_token}')

return web3.Web3(web3.HTTPProvider(infura_sepolia_endpoint, request_kwargs=dict(headers=headers)))

方法3:get_balance()

下一個(gè)是get_balance()方法。

這是一種極其簡(jiǎn)單的方法。它只調(diào)用Web3對(duì)象的w3.eth.get_balance()方法并傳遞帳戶。eth.get_balance()總是返回Wei的結(jié)果,Wei通常太小。而這種方法提供了將結(jié)果轉(zhuǎn)換為另一種面額(例如Gwei或Ether)的選項(xiàng)。它通過(guò)調(diào)用Web3實(shí)例再次提供的w3.fromWei()方法來(lái)實(shí)現(xiàn)。需要注意的是,不必使用私鑰來(lái)檢查余額。

復(fù)制

balance = self.w3.eth.get_balance(selpytf.account)

if unit != 'wei':

return self.w3.fromWei(balance, unit)

方法4:send_eth()

最后但同樣重要的是send_eth()方法。這里有很多內(nèi)容,所以可以將其分成多個(gè)塊。

首先,send_eth()轉(zhuǎn)換要發(fā)送給Wei的金額(如果需要),然后它獲取該帳戶的交易計(jì)數(shù)并將其存儲(chǔ)為nonce。nonce允許在需要時(shí)覆蓋掛起的交易。

復(fù)制

def send_eth(self, target_account, amount, unit='wei'):

if unit != 'wei':

amount = self.w3.toWei(amount, unit)

nonce = self.w3.eth.get_transaction_count(self.account)

接下來(lái),它構(gòu)造一個(gè)交易對(duì)象。最重要的字段是from(加密錢包的賬戶)、to(交易的接收者)和value(要發(fā)送多少錢)。然后,還要決定支付多少Gas,Gas越多,驗(yàn)證器包含交易的可能性就越大。chainId標(biāo)識(shí)運(yùn)行這一交易的網(wǎng)絡(luò)和幾個(gè)管理字段(空數(shù)據(jù)和類型)。

復(fù)制

tx = {'nonce': nonce,

'maxFeePerGas': self.max_fee_per_gas,

'maxPriorityFeePerGas': self.max_priority_fee_per_gas,

'from': self.account,

'to': target_account,

'value': amount,

'data': b'',

'type': 2,

'chainId': self.chain_id}

tx['gas'] = self.w3.eth.estimate_gas(tx)

這里有一筆交易,可以發(fā)送嗎?先不要這么快發(fā)送。首先,需要采用私鑰簽名。這是防止其他人從用戶的賬戶轉(zhuǎn)賬的原因。使用私鑰簽署交易允許驗(yàn)證器確認(rèn)私鑰與帳戶的公鑰相對(duì)應(yīng)。

復(fù)制

signed_tx = self.w3.eth.account.sign_transaction(tx, self.account_private_key)

現(xiàn)在可以將交易作為原始交易發(fā)送。這意味著Infura永遠(yuǎn)不會(huì)看到用戶的私鑰,它不能改變交易或?qū)⑵滢D(zhuǎn)賬到另一個(gè)賬戶。這就是區(qū)塊鏈的魔力。在發(fā)送交易后,返回一個(gè)哈希碼并等待交易完成。如果結(jié)果的狀態(tài)為1,則一切正常。如果不是,代碼將引發(fā)異常。

復(fù)制

tx_hash = self.w3.eth.send_raw_transaction(signed_tx.rawTransaction)

result = self.w3.eth.wait_for_transaction_receipt(tx_hash)

if result['status'] != 1:

raise RuntimeError('transaction failed: {tx_hash}')

這就是以一種非常基本但安全的方式與區(qū)塊鏈交互所需要的全部?jī)?nèi)容。

結(jié)論:用Infura開(kāi)始Web3之旅

即使對(duì)于一名經(jīng)驗(yàn)豐富的程序員來(lái)說(shuō),從頭開(kāi)始進(jìn)入Web3的世界也可能令人望而生畏。而在逐步的學(xué)習(xí)中學(xué)到了很多技巧。在大多數(shù)情況下,人們知道自己還有很多內(nèi)容要學(xué)。Infura通過(guò)提供可靠的API、出色的指導(dǎo)以及與生態(tài)系統(tǒng)的其他組件(例如MetaMask和web3.py庫(kù))的強(qiáng)大集成,使其變得簡(jiǎn)單。如果人們處于類似的位置,希望學(xué)習(xí)Web3開(kāi)發(fā),或者甚至想要開(kāi)始Web3的職業(yè)生涯,那么強(qiáng)烈建議從Infura開(kāi)始。

原文標(biāo)題:From Zero to Hero: Learning Web3 With Infura and Python,作者:Alvin Lee

分享到:
標(biāo)簽:Python
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定