5分鐘!就能學會以太坊 JSON API 基礎知識!

2020-12-05 CSDN

作者 | Nicolas Schapeler

責編 | Carol

出品 | 區塊鏈大本營(ID:blockchain_camp)

前幾天,作者遇到了這樣一種情況,需要在一個讓web3.py幾乎不可能工作的環境中使用Python與Ethereum網絡進行通信。

由於作者仍然需要與網絡通信,所以作者使用了Ethereum提供的JSON-RPC API,所有的web3庫都構建在這個API之上。原來,這是非常有趣的一件事,讓我們一起來看看吧。

基礎設置

首先,讓我們聲明幾個變量,這將有助於以後發送請求:

import requestsimport jsonsession = requests.Session()url = "https://ropsten.infura.io/v3/YOUR_INFURA_KEY"headers = {'Content-type': 'application/json'}

為了簡單起見,我們使用Infura節點連接到Ethereum Ropsten Testnet。你可以在這裡獲得一個API 密鑰:https://infura.io/。

你的第一個請求

讓我們先來了解一下網絡當前的gas價格。我們可以簡單地做以下操作:

# Prepare the data we will senddata = {"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id":1}response = session.post(url, json=data, headers=headers)# Check ifresponseis validifresponse.ok: # Get result of the requestand decode it to decimal gasPriceHex = response.json().get("result") gasPriceDecimal = int(gasPriceHex, 16)else: # Handle Error print("Error occured")

我們怎麼知道使用哪種方法以及發送什麼參數呢?所有這些都可以在以太坊官方文檔中找到。

獲取最新的塊

讓我們來嘗試一些更有趣的東西——讓我們獲取最新的塊,看看我們可以從那裡讀取什麼?

# Set params and prepare datablockNumber = "latest"# Boolean indicating if we want the full transactions (True) or just their hashes (false)fullTrx = Falseparams = [ blockNumber, fullTrx]data = {"jsonrpc": "2.0", "method": "eth_getBlockByNumber","params": params, "id": 1}response = session.post(url, json=data, headers=headers)# Check if response is validif response.ok:# Get the block block = response.json().get("result")# Get the transactions contained in the block transactions = block.get("transactions")else:# Handle Erro

讓我們仔細看看其中一筆交易:

params = [transactions[0]]data = {"jsonrpc": "2.0", "method": "eth_getTransactionByHash","params": params, "id": 3}response = session.post(url, json=data, headers=headers)if response.ok: transaction = response.json().get("result")else:# Handle Error print("Error occured

可能你已經開始了解這些調用的工作模式,所以讓我們嘗試一些更高級的方法。

發送交易

首先,讓我們使用web3.py庫創建一個新帳戶,並向其中加載一些Ropsten ether。

import web3w3 = web3.Web3()account = w3.eth.account.create('put any phrase here')address = account.addresspKey = account.privateKey

要發送創建交易,我們需要隨機數。我們也可以使用與上述相同的模式通過RPC JSON API獲取信息:

# Get the nonce at the latest blockparams = [address, "latest"]data = {"jsonrpc": "2.0", "method": "eth_getTransactionCount","params": params, "id": 3}response = session.post(url, json=data, headers=headers)if response.ok: nonce = response.json().get("result")else:# Handle Error print("Error occured")

接下來,我們將創建並籤名交易,然後再次使用 JSON RPC API 將其發送出去:

# Create our transactionsigned_txn = w3.eth.account.signTransaction({# Faucet address'to': '0x687422eEA2cB73B5d3e242bA5456b782919AFc85','nonce': nonce,'gasPrice': gasPriceHex,'gas': 100000,'value': w3.toWei(0.5,'ether'),# 3 Because we are on Ropsten'chainId':3, }, pKey)

如果你要在其他以太坊(Test)網絡上進行測試,請確保相應地設置鏈ID。

params = [signed_txn.rawTransaction.hex()]data = {"jsonrpc": "2.0", "method": "eth_sendRawTransaction","params": params, "id": 4}response = session.post(url, json=data, headers=headers)if response.ok: receipt = response.json().get("result")else:# Handle Error print("Error occured")

請注意我們是如何重新利用開始時獲取的汽油價格的。

結論

就這樣簡單,你剛剛利用5分鐘學習了使用JSON RPC Ethereum API與世界上最具影響力的區塊鏈進行交互的基礎知識!你可以在這裡找到所有代碼:https://github.com/nschapeler/ethereum-rpcjson。

原文:https://hackernoon.com/learn-the-basics-of-the-ethereum-json-api-in-5-minutes-7k3x3yn0

相關焦點

  • 以太坊可用RPC節點列表
    一些RPC節點可能由於不可預知的原因,間歇性的無法訪問,大家使用前可以使用以下命令測試一下RPC節點的連通性:curl RPC_URL -H 'Content-Type: application/json' -X POST --data '{"jsonrpc":"2.0","method
  • 以太坊2.0合約存入ETH突破200萬枚|以太坊2.0|以太坊|波卡|filecoin
    本周技術周刊包含以太坊、波卡、Filecoin、BSN網絡的技術類新聞。以太坊網絡Sigma Prime發布以太坊2.0客戶端Lighthouse v1.0.5版本據官方消息,以太坊2.0客戶端Lighthouse開發團隊Sigma Prime 發布Lighthouse v1.0.5版本。
  • 玩遊戲就能免費賺比特幣和以太坊?盤點2020年5大送幣網站
    最近兩年大家都能經常在網上看到關於「比特幣」和「以太坊」等數字貨幣的消息。尤其是今年2月,比特幣價格突破到7萬元人民幣一個,也引起了很多投資者的關注和入場。雖然最近數字貨幣的價格已經有所回落,不過對於大部分人來說,現在比特幣和以太坊的價格仍然十分昂貴,而且它們時常大幅波動的價格也讓很多人不敢貿然購買。可能很多人不知道,其實有一種方法是可以不花一分錢就能領取比特幣和以太坊的。在各區塊鏈平臺投入應用之初,有許多網站會自願提供少量的數字貨幣給開發者和普通用戶,作為測試和科普使用,因此這類網站也被圈內人稱為某某幣水龍頭。
  • Web3.js基於以太坊的Javascript API
    web3.js是一個庫集合,你可以使用HTTP或IPC連接本地或遠程以太它節點進行交互。 web3的JavaScript庫能夠與以太坊區塊鏈交互。 它可以檢索用戶帳戶,發送交易,與智能合約交互等。1.0.0-beta.36Web3.js API類型eth:Etherum區塊鏈相關方法;net:節點的網絡狀態;personal:帳戶功能和發送;db:獲取/放置本地LevelDB;shh:使用Whisper的P2P消息傳遞;安裝Web3.jsnode實例化web3首先,我們檢查是否使用的dapp瀏覽器或更新版本的MetaMask,將以太坊提供程序注入到
  • 深度| 以太坊「大都會」終極指南:現在正在發生什麼?!
    讓我們慢慢道來:降低系統的整體能源成本:全世界的比特幣礦工每小時耗資約5萬美元,一年耗資約4.5億美元!通過使用 PoS 協議,你可以將整個過程虛擬化,大幅減少成本;無 ASIC 優勢:由於整個過程是虛擬的,它將不再依賴誰有更好的設備或者 ASICs 。
  • 一文了解以太坊姊妹鏈xDai的生態系統
    (圖片來自:pixabay)xDai和以太坊的相似之處沒有以太坊,就沒有xDai。xDai是一個EVM(以太坊虛擬機)側鏈,她獨立於以太坊運行,但依賴以太坊創建其原生代幣XDAI(從以太坊轉換的DAI)以及多用途治理代幣STAKE。
  • 火星人許子敬:以太坊已成為一個自我維繫的生態系統
    2016年9月份遭到了DoS攻擊,那個時候是上海以太坊開發者大會的第一天,12月份的以太坊又「死」了。2017年以太坊企業聯盟成立,很多企業第一次採用以太坊,似乎以太坊死不了了,而且似乎以太坊看起來非常成功,因為以太坊吸引了眾多企業的興趣,這些企業來自於世界各國。很多機構、用戶也對以太坊有興趣。
  • 以太坊雲算力挖礦原理
    如果說比特幣開啟了人們認識區塊鏈技術的大門,這是區塊鏈1.0的時代,那麼以太坊就開啟了區塊鏈2.0的時代。那麼它究竟是什麼?以太坊是區塊鏈的一個基礎設施,他是一個開源的有智能合約功能的公共的區塊鏈平臺,通過ETH提供去中心化的虛擬機來處理點對點合約,簡單來說就是可編程的區塊鏈。它並不是給用戶一系列的預先設定好的操作,例如比特幣。而是允許用戶按照自己的意願創建複雜的操作,這樣一來,它就可以作為多種類型去中心化區塊鏈應用的平臺。包括加密貨幣在內但並不僅限於此。生動舉例說明一下。
  • 「價值分析」- 歐洲以太坊??什麼是 Aeternity(AE)
    以太貓(造成了乙太網主網擁堵)是一個很好的例子。當交易量飆升時, 在以太坊會創建和交易獨特資產的如此簡單的事情,就會使網絡陷入嚴重延遲和擁堵狀態。以太坊會斷定,此可伸縮性問題,是區塊鏈blockchain被大規模採用和商用落地的最重要的關鍵技術挑戰。
  • Utmost.Finance - 以太坊金融股權生態系統
    UTMOST.FINANCE項目概述UTMOST.FINANCE(以下簡稱UFI)(中文名稱為「以太坊金融股權生態系統」,簡稱股權系統)是基於以太坊2.0開發的區塊鏈股權系統,可應用於各種資產的流通。UFI是一個完全開源的社區。通過價值轉移協議和去中心化的區塊鏈股權,構建了各種資產流通的系統。
  • 以太坊本次幣市牛市行情的發動機
    以太坊基礎設施面臨的挑戰    儘管以太坊充滿了潛力的應用程式,但其基礎設施設計也有其自身的限制。除了下面提到的幾個問題之外,可擴展性、靈活性、出塊時間、奇偶性問題也是構建以太坊基礎設施時必須面臨的問題。    錢包初始化問題,智能合約問題,連接以太坊需要手動操作問題,構建未來證明架構方面的困難問題是最大的問題。
  • [中文] 以太坊(Ethereum )白皮書
    以太坊的目標就是提供一個帶有內置的成熟的圖靈完備語言的區塊鏈,用這種語言可以創建合約來編碼任意狀態轉換功能,用戶只要簡單地用幾行代碼來實現邏輯,就能夠創建以上提及的所有系統以及許多我們還想像不到的的其它系統。
  • 以太坊是什麼?10%是龐氏騙局,網友:以太坊第二層項目將成主流
    以太坊是什麼?10%是龐氏騙局,網友:以太坊第二層項目將成主流2018有爭議的是什麼?是區塊鏈,最大爭議則是以太坊!有人認為區塊鏈最具有顛覆的科技之一,有人認為區塊鏈是割韭菜、詐騙等,其中最大爭議就是以太坊,有人認為以太坊10%是龐氏騙局,今天說說是區塊鏈的以太坊。一以太坊發展以太坊誕生於2013年7月,短短的幾年就以他獨特的性能,成為區塊鏈的主流,以太坊主要是為開發人員提供了最為優質的資源和工具。
  • SERO正式發布對以太坊的跨鏈功能
    著名的基於非交互式零知識證明(NIZK)並支持圖靈完備智能合約的隱私保護公鏈 SERO,在2021年1月8日正式發布了 SERO 公鏈到以太坊公鏈的資產跨鏈轉移的功能。該技術基於聚合籤名以及公證人技術,實現了以太坊和 SERO 公鏈之間的資產跨鏈轉移功能。同時,CoralSwap對這類跨鏈資產的交易支持,可以作為一種非常低Gas的Swap平臺,替代以太坊上的其它同類產品。
  • 以太坊的「黑暗森林」:混沌與生機
    本文將以太坊網絡比作「黑暗森林」,其與生俱來的無需許可,透明開放的性之下也暗湧著混沌與危機。而我們作為社區的一員應該作何態度?又該如何發揮其正面效應?雖然以太坊無需許可的特性需要付出一定代價,但卻十分必要,我們也能從中受益。摘要以太坊在技術層、社區層以及治理層都是無需許可的——這意味著任何人都有權訪問。
  • 以太坊第一錢包是怎樣煉成的
    使用的方便幫助電腦解放內存,同時兼具測試以太坊智能合約功能,支持最全的Dapp、能夠與硬體錢包Ledger和Trezor兼容、一鍵發幣等優勢,使得這款最輕量級的以太坊錢包一經推出便受到以太坊社區的歡迎。 MetaMask母公司是由由以太坊聯合創始人Joseph Lubin創辦的區塊鏈巨頭「三大支柱」之一的ConsenSys。
  • CoinEx研究院:以太坊第一錢包MetaMask是怎樣煉成的
    使用的方便幫助電腦解放內存,同時兼具測試以太坊智能合約功能,支持最全的Dapp、能夠與硬體錢包Ledger和Trezor兼容、一鍵發幣等優勢,使得這款最輕量級的以太坊錢包一經推出便受到以太坊社區的歡迎。MetaMask母公司是由由以太坊聯合創始人Joseph Lubin創辦的區塊鏈巨頭「三大支柱」之一的ConsenSys。
  • 以太坊二層擴容之路:Plasma 衰落與 Rollup 崛起
    以太坊原生代幣 ETH 的價格接近歷史最高水平,以太坊區塊鏈隨著使用量增加而爆棚,鏈條在不斷增長的需求下不堪重負,研究人員和開發人員正在瘋狂地尋找新的擴容解決方案。在世界各地的區塊鏈會議上,開發人員討論了不同的擴容建議。以太坊社區迫切需要一個解決方案。
  • BCH區塊鏈用於以太坊數據層的好處是什麼
    打開APP BCH區塊鏈用於以太坊數據層的好處是什麼 發表於 2019-07-17 10:46:50 在以太坊社區論壇Ethresear.ch中,以太坊聯合創始人Vitalik Buterin發布了一篇題為《BCH:以太坊的短期數據可用層?》
  • 以「狀態」 視角理解以太坊及其未來
    這些權衡關係,作為設計上的挑戰,自然也吸引了並持續吸引著無數聰明才智,嘗試提升以太坊的可用性;其中匯聚了最多努力和想像力的,當屬為提高 「可擴展性」 而提出的一系列方案。本文想指出的是,就像以太坊範式面臨著設計上的取捨,所有這些可擴展性方案也面臨著取捨;而評價這些取捨的值得與不值得,需要我們回到以太坊本身,回到以太坊節點和以太坊用戶的真實問題和真實需要。