Web3js

為什麼瀏覽器讀取區塊鏈數據需要這麼長時間?

  • July 10, 2019

我有一個 dAPP,我使用 reactjs 作為前端。應用程序從首頁上的智能合約(餘額)返回數據。我注意到的主要問題是,每次我或任何其他使用者訪問它時,從區塊鏈讀取數據需要大約 2-3 秒。在顯示數據之前,餘額顯示為“0”而不是實際值。

此外,如果使用 MetaMask 的使用者更改了他們的網路(比如說從 Eth MAINNET 到 Rinkeby),則不會顯示任何數據,而是顯示 0。

你是否也有這個問題,如果有,你是如何處理的?有沒有辦法縮短從區塊鏈讀取數據的時間,還是技術的限制?

有些人必須知道關於 dAPP 的一般結構的資訊:

  • 我有 web3.js 文件,它導入 web3 並通過 MetaMask 或 Infura 設置提供程序。
  • 我有一個 deploy.js,它使我能夠部署智能合約。該文件通過 infura 提供的 menemonic 和連結連接到 rinkeby。在輸出中我得到介面和字節碼
  • 我有另一個 javascript 文件,其結構如下:

項目清單

import web3 from './web3'; 

const address = 'the address provided by the deploy file';

const abi = ['the abi provided by the deploy file'];

export default new web3.eth.Contract(abi,address)

編輯:發現我在 ComponentDidMount 中的操作越多(獲取餘額、地址等),花費的時間就越多

如果聯繫活動節點以獲取諸如帳戶餘額之類的數據,它總是會很慢。

我首選的方法是使用更快的AmberdataAPI。您只需要一個 api 密鑰,然後您就可以:

curl \
   -X GET \
   -H "accept: application/json" \
   -H "x-api-key: <your-api-key>" \
"https://web3api.io/api/v1/addresses/0xb7e3abd75119fe3cfc76015193226b21fc19230b/account-balances/latest"

它將像這樣返回數據:

{
 "status": 200,
 "title": "OK",
 "description": "Successful request",
 "payload": {
   "address": "0x06012c8cf97bead5deae237070f9587f8e7a266d",
   "blockNumber": "7446776",
   "timestamp": 1553638186000,
   "timestampNanoseconds": 0,
   "value": "65103167814228166337",
   "blockchainId": "1c9c969065fcd1cf"
 }
}

讓我知道這是否適合你!😃

編輯:

還有一個節點包裝器包

您是否考慮過記憶體數據或儲存在 HTML5 session/localStorage 之類的地方。然後,您可以嘗試從 session/localStorage 或您首先考慮的任何記憶體中讀取,然後在可用時更新到目前餘額。

考慮一個在後台持續執行的微服務,它每分鐘左右查詢區塊鏈以獲取諸如餘額之類的資訊,在記憶體記憶體中保持最新值,或者如果您使用一個數據庫以更快地訪問,則將其轉儲到不同的數據庫。

其他方法是在渲染 UI 之前獲取數據。

引用自:https://ethereum.stackexchange.com/questions/63461