關於java獲取eth餘額的信息

本文目錄一覽:

ETH 查詢某個錢包的所有代幣以及地址

思路:

1、獲取錢包W的所有交易記錄

2、把from、to記錄到數組A中

3、根據ABI規則,input去掉前面8字元大小的方法名,剩下的依次按64字元進行分割,得到參數列表。因為地址都是居右的,所以取出居右的參數後,對比ETH地址長度,一致則存到數組A中待用

4、遍曆數組A,調用ERC20的標準合約方法symbol、decimals,如果都存在則表示該元素為代幣,將塔存到數組B待用

5、遍曆數組B,調用ERC20合約方法balanceOf獲取代幣餘額,存到數組C中

6、此時,我們就成功獲取到錢包W的所有代幣B,及其餘額C

2022年02月15日

Python3 使用Web3.py查詢以太坊賬戶餘額

from web3 import Web3

def QuerryBalanceETH(accounts):

    w3 = Web3(Web3.HTTPProvider(‘. infura .io/v3/ {此處設置自己託管賬戶ID} ‘))

    #accounts = w3.eth.accounts

    balance = w3.eth.getBalance(accounts,’latest’)#latest表示使用區塊鏈中最後一個塊的狀態,也就是最後的餘額

    print(‘balance@latest = {0}’.format(balance))

    return balance

1、什麼是Infura?

專業一點講,Infura是一種IaaS(Infrastructure as a Service)產品,目的是為了降低訪問以太坊數據的門檻。

通俗一點講,Infura就是一個可以讓你的dApp快速接入以太坊的平台,不需要本地運行以太坊節點。

從程序員的角度講,Infura就是一個Web3 Provider,背後是負載均衡的API節點集群。使用它的好處就是,你永遠不必擔心連接的節點失效的問題,Infura會管理好這一切。

除此之外,Infura還可以很方便地接入IPFS,這是另外一個話題,這裡就不討論了。

最後,也是非常重要的一點:Infura目前是免費的。

2、如何使用Infura?

使用Infura首先需要註冊一個賬戶,訪問官網 ,點擊註冊並提供一個郵箱,會收到一封郵件,點擊郵件中的鏈接激活就可以了,然後你就會看到下面的界面:

點擊右上角的黑色按鈕,創建新項目,就可以生成你專屬的Project ID了(左邊的紅框)。

參考文章:

java中怎麼樣調用eth的智能合約

一般來說,部署智能合約的步驟為:

1啟動一個以太坊節點 (例如geth或者testrpc)。

2使用solc編譯智能合約。 = 獲得二進位代碼。

3將編譯好的合約部署到網路。(這一步會消耗以太幣,還需要使用你的節點的默認地址或者指定地址來給合約簽名。) = 獲得合約的區塊鏈地址和ABI(合約介面的JSON表示,包括變數,事件和可以調用的方法)。(譯註:作者在這裡把ABI與合約介面弄混了。ABI是合約介面的二進位表示。)

4用web3.js提供的JavaScript API來調用合約。(根據調用的類型有可能會消耗以太幣。)

【ETH錢包開發03】web3j轉賬ETH

在之前的文章中,講解了創建、導出、導入錢包。

【ETH錢包開發01】創建、導出錢包

【ETH錢包開發02】導入錢包

本文主要講解以太坊轉賬相關的一些知識。交易分為ETH轉賬和ERC-20 Token轉賬,本篇先講一下ETH轉賬。

1、解鎖賬戶發起交易。錢包keyStore文件保存在geth節點上,用戶發起交易需要解鎖賬戶,適用於中心化的交易所。

2、錢包文件離線簽名發起交易。錢包keyStore文件保存在本地,用戶使用密碼+keystore的方式做離線交易簽名來發起交易,適用於dapp,比如錢包。

本文主要講一下第二種方式,也就是錢包離線簽名轉賬的方式。

交易流程

1、通過keystore載入轉賬所需的憑證Credentials

2、創建一筆交易RawTransaction

3、使用Credentials對象對交易簽名

4、發起交易

注意以下幾點:

1、Credentials

這裡,我是通過獲取私鑰的方式來載入 Credentials

還有另外一種方式,通過密碼+錢包文件keystore方式來載入 Credentials

2、nonce

nonce是指發起交易的賬戶下的交易筆數,每一個賬戶nonce都是從0開始,當nonce為0的交易處理完之後,才會處理nonce為1的交易,並依次加1的交易才會被處理。

可以通過 eth_gettransactioncount 獲取nonce

3、gasPrice和gasLimit

交易手續費由gasPrice 和gasLimit來決定,實際花費的交易手續費是 gasUsed * gasPrice 。所有這兩個值你可以自定義,也可以使用系統參數獲取當前兩個值

關於 gas ,你可以參考我之前的一篇文章。

以太坊(ETH)GAS詳解

gasPrice和gasLimit影響的是轉賬的速度,如果gas過低,礦工會最後才打包你的交易。在app中,通常給定一個默認值,並且允許用戶自己選擇手續費。

如果不需要自定義的話,還有一種方式來獲取。獲取以太坊網路最新一筆交易的 gasPrice ,轉賬的話, gasLimit 一般設置為21000就可以了。

Web3j還提供另外一種簡單的方式來轉賬以太幣,這種方式的好處是不需要管理nonce,不需要設置gasPrice和gasLimit,會自動獲取最新一筆交易的gasPrice,gasLimit 為21000(轉賬一般設置成這個值就夠用了)。

這個問題,我想是很多朋友所關心的吧。但是到目前為止,我還沒有看到有講解這方面的博客。

之前問過一些朋友,他們說可以通過區塊號、區塊哈希來判斷,也可以通過Receipt日誌來判斷。但是經過我的一番嘗試,只有 BlockHash 是可行的,在web3j中根據 blocknumber 和 transactionReceipt 都會報空指針異常。

原因大致是這樣的:在發起一筆交易之後,會返回 txHash ,然後我們可以根據這個 txHash 去查詢這筆交易相關的信息。但是剛發起交易的時候,由於手續費問題或者乙太網絡擁堵問題,會導致你的這筆交易還沒有被礦工打包進區塊,因此一開始是查不到的,通常需要幾十秒甚至更長的時間才能獲取到結果。我目前的解決方案是輪詢的去刷 BlockHash ,一開始的時候 BlockHash 的值為0x00000000000,等到打包成功的時候就不再是0了。

這裡我使用的是rxjava的方式去輪詢刷的,5s刷新一次。

正常情況下,幾十秒內就可以獲取到區塊信息了。

區塊確認數=當前區塊高度-交易被打包時的區塊高度。

原創文章,作者:MDDH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/134523.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MDDH的頭像MDDH
上一篇 2024-10-04 00:06
下一篇 2024-10-04 00:06

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論