本文目錄一覽:
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-hant/n/134523.html