① imtoken錢包轉賬失敗怎麼回事
imtoken錢包轉賬失敗怎麼回事,相信很多人在使用imtoken錢包的時候經常的會碰到轉賬失敗的情況,不少人不知道這個情況是怎麼引起的,下面跟著小編一起來看看吧。
imtoken錢包轉賬失敗怎麼回事
Outofgas(Gas不足)
打個通俗易懂的比喻吧,就像你開車必須要有汽油一樣,你在以太坊上轉賬也需要有Gas。開車≈轉賬,汽油≈Gas。如果你要從A地驅車前往B地,按照實時的交通情況,你需要消耗200升汽油。但你為這次行程只准備了150升汽油,那是派攔否能到達B地呢?在現實生活中,大家肯定都知道,你一定是到不了的。同時雖然你沒到達B地,但是你的汽油卻已經消耗了。
那麼回到區塊鏈的世界,也是同樣的道理。如果你要進行一筆轉賬,就要為這筆轉賬設置一個Gas。如果你設置的過低,就會出現「汽車」沒到達目的地就沒「油」的情況,即交易失敗。失敗原因就是outofgas(汽油不足)。同時,又因為礦工們已經進行了打絕羨首包的操作,但在打包過程中發現Gas不足,導致這筆交易打包失敗了。礦工費仍然會被扣除,但這些礦工費都是由礦工們收取的,imToken並不收你一分錢。
BadInstruction(指令錯誤)
Badinstruction字面意思是「指令錯誤」。出現這種提示的原因,大概率是因為智能合約的代碼本身就存在邏輯問題,從而導致合約在執行的過程中,出現「指令錯誤」。這就像一台壞了的機器,你輸入一個指令,機器是不能正常運作的。這時候,我們該找誰解決呢?當然是智能合約的創建方,去修復這台「壞了的機器」。另外轉賬的礦工費仍然會被礦工收走。
Reverted(回退)
以太坊上包含兩類賬戶,普通賬戶和合約賬戶。普通賬戶是由用戶通過私鑰控制,而合約賬戶是由部署在以太坊上的智能合約控制。
那麼,reverted是什麼情況呢?reverted其實是一個函數,用於立即中止合約的執行,並且把狀態回滾。雖然是智能合約,比一般的合約更「聰明」,但是有些合約在執行的過程中還是會「犯錯」的。
這聽起來是不是過於抽象,讓我們打個簡單的比方。出現reverted的一種可能情況:你的合約規定,當你輸入一塊錢,你可以得到一杯喜茶並數。但是這個合約並沒有檢查庫存里是否有足夠的喜茶。當店裡沒有喜茶庫存的時候,後面來的人,即使它輸入一塊錢,也不能得到喜茶。這時候,你原本的函數-即輸入一塊錢就會得到一杯喜茶的函數就會失敗,它會發出錯誤的信息並回滾到當前的交易狀態。
看到這里,想必大家也已經明白了,出現badinstruction和reverted,都是因為智能合約的問題,所以建議大家直接去找合約的創建者,也就是項目方。
② 以太坊轉幣失敗
交易未被打包不會扣除礦工費,絕大多數未被打包的情況是礦工費設置的過低導致的。
轉賬失敗大致分為兩種情況:一種情況是交易未被打包導致轉賬失敗,另外一種情況是交易在打包的過程中發生了錯誤導致交易失敗。
轉賬時設置合適的礦工費。在imToken2。0國際版中,設置礦工費的滑動桿最大值和最小值都是從以太坊網路實時獲取的,推薦的礦工費就是能夠保證你這筆交易成功的最小值,所以只要按照App內部推薦的礦工費數值設置就可以了。
③ 【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刷新一次。
正常情況下,幾十秒內就可以獲取到區塊信息了。
區塊確認數=當前區塊高度-交易被打包時的區塊高度。
④ ETH開發實踐——批量發送交易
在使用同一個地址連續發送交易時,每筆交易往往不可能立即到賬, 當前交易還未到賬的情況下,下一筆交易無論是通過 eth.getTransactionCount() 獲取nonce值來設置,還是由節點自動從區塊中查詢,都會獲得和前一筆交易同樣的nonce值,這時節點就會報錯 Error: replacement transaction underpriced
在構建一筆新的交易時,在交易數據結構中會產生一個nonce值, nonce是當前區塊鏈下,發送者(from地址)發出的交易(成功記錄進區塊的)總數, 再加上1。例如新構建一筆從A發往B的交易,A地址之前的交易次數為10,那麼這筆交易中的nonce則會設置成11, 節點驗證通過後則會放入交易池(txPool),並向其他節點廣播,該筆交易等待礦工將其打包進新的區塊。
那麼,如果在先構建並發送了一筆從地址A發出的,nonce為11的交易,在該交易未打包進區塊之前, 再次構建一筆從A發出的交易,並將它發送到節點,不管是先通過web3的eth.getTransactionCount(A)獲取到的過往的交易數量,還是由節點自行填寫nonce, 後面的這筆交易的nonce同樣是11, 此時就出現了問題:
實際場景中,會有批量從一個地址發送交易的需求,首先這些操作可能也應該是並行的,我們不會等待一筆交易成功寫入區塊後再發起第二筆交易,那麼此時有什麼好的解決辦法呢?先來看看geth節點中交易池對交易的處理流程
如之前所說,構建一筆交易時如果不手動設置nonce值,geth節點會默認計算發起地址此前最大nonce數(寫入區塊的才算數),然後將其加上1, 然後將這筆交易放入節點交易池中的pending隊列,等到節點將其打包進區塊。
構建交易時,nonce值是可以手動設置的,如果當前的nonce本應該設置成11, 但是我手動設置成了13, 在節點收到這筆交易時, 發現pending隊列中並沒有改地址下nonce為11及12的交易, 就會將這筆nonce為13的交易放入交易池的queued隊列中。只有當前面的nonce補齊(nonce為11及12的交易被發現並放入pending隊列)之後,才會將它放入pending隊列中等待打包。
我們把pending隊列中的交易視為可執行的,因為它們可能被礦工打包進最新的區塊。 而queue隊列因為前面的nonce存在缺失,暫時無法被礦工打包,稱為不可執行交易。
那麼實際開發中,批量從一個地址發送交易時,應該怎麼辦呢?
方案一:那麼在批量從一個地址發送交易時, 可以持久化一個本地的nonce,構建交易時用本地的nonce去累加,逐一填充到後面的交易。(要注意本地的nonce可能會出現偏差,可能需要定期從區塊中重新獲取nonce,更新至本地)。這個方法也有一定的局限性,適合內部地址(即只有這個服務會使用該地址發送交易)。
說到這里還有個坑,許多人認為通過 eth.getTransactionCount(address, "pending") ,第二個參數為 pending , 就能獲得包含本地交易池pending隊列的nonce值,但是實際情況並不是這樣, 這里的 pending 只包含待放入打包區塊的交易, 假設已寫入交易區塊的數量為20, 又發送了nonce為21,22,23的交易, 通過上面方法取得nonce可能是21(前面的21,22,23均未放入待打包區塊), 也可能是22(前面的21放入待打包區塊了,但是22,23還未放入)。
方案二是每次構建交易時,從geth節點的pending隊列取到最後一筆可執行交易的nonce, 在此基礎上加1,再發送給節點。可以通過 txpool.content 或 txpool.inspect 來獲得交易池列表,裡面可以看到pending及queue的交易列表。
啟動節點時,是可以設置交易池中的每個地址的pending隊列的容量上限,queue隊列的上容量上限, 以及整個交易池的pending隊列和queue隊列的容量上限。所以高並發的批量交易中,需要增加節點的交易池容量。
當然,除了擴大交易池,控制發送頻率,更要設置合理的交易手續費,eth上交易寫入區塊的速度取決於手續費及eth網路的擁堵狀況,發送每筆交易時,設置合理的礦工費用,避免大量的交易積壓在交易池。
⑤ 以太坊錢包不更新
網路不順暢或其它。
節點同步慢原因以及解決方法:1、以太坊錢包節點同步需要聯網操作,如果你的網路不暢通就會造成同步慢這種情況,所以在同步之前請檢查好你的網路,確認網路狀況良好在進行同步。2、節點同步需要佔用大量的內存,如果你的電腦內存不夠就會造成階段同步慢甚至停止同步這種情況,建議用戶在同步節點之前清理一下電腦保證電腦內存充足,目前有用戶反映同步節點內存最高可佔用100G左右內存哦。3、可以在以太坊錢包中修改peer數,默認peer是25個,建議你可以修改成巨大的數值,例如9999個。4、同步階段還需要你的路由器支持uPnP。可以在路由器設置中修改。5、需要公網IP,如果你沒有的話就會慢很多,所以建議設置一個公網IP吧。6、也有網友反映是錢包本身的問題,以太坊錢包軟體本身並不是很成熟,在同步節點的時候會有很多問題出現,這個只有等待以太坊官方修改。7、電腦配置不能太低。8、第一次同步時使用--fast選項,可以更快地同步到最新塊。9、使用的是geth,運行時間長了可能會有問題,可以考慮每天重啟一次geth。10、及時更新geth到最新版本。11、硬碟空間要足夠大,建議至少1T以上。為了運行以太坊全節點,買了500G的硬碟空間,使用--fast同步完成後才佔40多G空間,之後正常模式同步硬碟佔用空間快速增長,3個月左右已經430G了,最近又買了500G磁碟空間。12、交易未被打包時,相同nonce值可以覆蓋之前的交易,覆蓋交易只看nonce值,至於交易的其它部分內容可以相同也可以不同。13、如果有低nonce值還未被打包,新的交易gasPrice再高,也需要先等低nonce值的交易被打包,如果低nonce值的交易因為gasPrice設低了而等待,需要先使用相同nonce值來修改gasPrice。
以太幣(ETH)是以太坊的一種加密數字代幣,被視為「比特幣2。0版」,創始人是傑弗里_維爾克。
⑥ 交易所顯示轉賬以太坊代幣成功,但是91token錢包沒有到賬
交易所提幣需要審核,先確認交易所已經發出交易,若交易所沒有發出交易,請前往交易平台與相關工作人員聯系
可以前往 Etherscan 查詢交易是否成功 https://etherscan.io(imToken 支持以太系並且符合 ERC-20 標準的代幣),視頻教程:https://v.qq.com/x/page/z0517hhjoz5.html
一些交易所雖然提示交易成功, 只是代表交易所已發送該交易信息到鏈上, 接下來需要等待礦工打包, 礦工打包成功確認該交易後, 才可認定為該交易成功, 如果你已聯系了交易所確定該交易已經發出, 但是未在 Etherscan 上查詢到該交易的信息, 那麼即代表礦工還未打包該次交易
如果已經距離交易所發幣過了很久的時間, 並且在 Etherscan 上依然查詢不到該交易的任何信息, 那麼有可能這條交易已經被遺棄, 請及時聯系發幣的交易所或發幣的第三方平台, 再重新發送一次交易
如果在 Etherscan 上查詢到該交易記錄, 但是未在 91token 當中顯示, 那麼你可以在資產頁下拉刷新,若刷新依舊沒有(token 首先要打開一鍵添加資產的開關),或者嘗試切換錢包;網路慢的情況,嘗試切換到移動網路
⑦ 以太坊轉賬流程
發起:用戶在本地的以太坊錢包軟體中選擇要發送的交易地址(From)、輸入目標地址(To)、金額(Value)、是否部署或調用合(Data)、手續費單價(Gasprice)等,確認發送至以太坊節點節點和錢包可以是同一台
廣播:節點收到(或自己發起)交易後,會對交易進行驗證。驗證:交易的簽名、發起賬號的余額是否能支付轉賬余額與手續費、Nonce是否為賬號已發出的交易數。驗證為合法後,將交易加入節點的交易池中交易池中存儲著待打包的交
安裝以太坊瀏覽器錢包插件,創建錢包,獲取虛擬以太幣,進行轉賬交易。 實驗內容 學習 初識以太坊,發送交易 1.學習《初始以太坊,發送交易》,虛擬以太幣交易。