A. 以太坊gas limit什麼意思
一、智能合約這么好,可不是白用的
智能合約,顧名思義,是指計算機代碼可以自動執行的合同;以太坊虛擬機是用來執行智能合約的;智能賬戶是智能合約能夠被執行的載體。換句話說,智能賬戶,這個「賬戶」是可以被以太坊虛擬機操控的,依據什麼操控呢,依據智能合約來操控。
天下沒有免費的午餐,智能合約這個功能這么好,可不是白用的,你在以太坊進行交易的時候也要付給礦工手續費的,那麼在以太坊系統上,你要付出的手續費是怎麼回事,
Gas和手續費之間又有什麼關聯呢?
二、以太坊 Gas 是怎麼回事?
以太坊Gas類似於汽車燃油,智能合約的驅動,需要以太坊Gas。Gas是一個英文單詞,中文意思是:瓦斯、汽油,這個東西在日常生活中,是一種消耗品。以太坊為什麼會產生「燃料」呢?
以太坊裡面的Gas是什麼意思呢?其實,以太坊的Gas和交易費息息相關。以太坊交易需要手續費,這個Gas就是以太坊手續費的計算模式。
在以太坊的設定中,交易費類似於一種加密的燃料,也就是Gas,這個東西可以驅動智能合約的運動。當以太坊在區塊鏈上執行交易時,燃料將按照特點的規則而逐漸被消耗。
從這一點看呢,Gas真的是和它的本意一樣,像汽車燃油一樣,想要發動汽車,必須需要燃油。
三、以太坊 Gas 和比特幣交易費有哪不同?
說到手續費,大家可能很熟悉。天下沒有免費的午餐,無論是以太坊,還是比特幣,都需要手續費,但是二者的手續費模式是不一樣的。比特幣是直接支付比特幣作為轉賬手續費的,以太坊卻不是這樣的。
以太坊本質上是一個虛擬機,這個虛擬機是去中心化的,全世界各國人民各自掌控的虛擬機,聯合起來形成一個「世界級的計算網路」。當你發送token,執行合約、轉移以太坊,或者在區塊上做其他事情時,計算機在處理這筆交易時,需要進行計算,這個計算過程需要消耗網路資源。這樣一來,你必須支付「燃料費」(也就是Gas),才能讓計算機為你工作,讓礦工為你處理交易。
通常情況下,發送方願意支付的Gas價格越高,礦工從交易中獲得的價值就越大,礦工們也就越有可能選擇這個交易。通過這種方式,礦工可以自由地選擇交易。為了給發送者設置Gas 價格做參考,礦工們可以直接提出他們執行交易所需的最低Gas 價格。
四、以太坊 Gas 的消耗量該如何計算?
以太坊虛擬機處理交易時,虛擬機會根據交易中確定的一個一個的操作指令進行逐個處理,而每個操作指令都有明文規定的Gas消耗量。
以太坊系統規定了兩個賬戶:一個是正常賬戶,一個是智能賬戶。
普通的轉賬交易,也就是調用「正常賬戶」,所需要的Gas是固定的21000;
而調用「智能賬戶」的的話,因為智能合約的復雜程度不同,使得所需要的Gas也不同。處理交易佔用的資源(計算量、內存等)越多,那麼所需要的Gas也就越多,比如:執行一次加法運算將消耗 3Gas,如果執行更復雜的運算,那麼消耗的Gas就更多。
那麼大家可能會問一個問題:當用戶的交易涉及一個惡意的智能合約,這個合約超級復雜,執行這個合約要消耗無限的燃料,怎麼辦呢?以太坊系統的方案是:為了避免惡意
智能合約引起無限的Gas消耗,用戶需要在發送交易時設定允許消耗的燃料上限,即
GasLimit,這樣一來,就算有惡意智能合約,最壞情況也只是消耗 GasLimit 所規定的燃料范圍之內。
五、以太坊 Gas 和交易手續費有什麼關系?
以太坊上,你所支付的手續費等於:GasPrice 乘以GasUsed。
你可以把 GasPrice 理解為是燃油單價, GasUsed 理解為汽車所需多少升燃油。
對於汽車,假如說每升汽油是20塊錢,一萬升汽油就是20萬塊錢。對於以太坊,每
Gas是20吉偉(吉偉是以太幣的數量單位),一萬個 Gas 就是:20乘以一萬,等於20 萬吉偉,2萬吉偉等於0.0002以太坊,也就是說,本次交易手續為 0.0002以太坊。
具體的兌換值見下表:
圖
(注釋:以太幣數量的基礎單位是「偉」,以太幣的數量單位有「偉、芬尼、以太」,其中,「以太」被用作普通交易;「芬尼」被用作微交易;「薩博」和「偉」被用作進行關於費用和合約實施。)由此我們可以發現,Gas並不是以太坊,它是一種單獨的體系,它的匯率與以太坊成一定的比例,經過了比例兌換,最終形成交易費。
具體的匯率查詢,可以查看以下網站:
https://jin10086.github.io/etherconVerter/
Gas價格和以太幣價格都是由市場自由調節的,但是二者是不一樣的,他們的不同之處在於:以太幣的價格是根據市場情況波動,而Gas的價格由礦工決定的,如果燃料價格低於礦工們的最低要求,礦工就會拒絕處理交易。Gas和以太坊分離,可以保護系統免受隨著以太坊價格的快速變化而可能出現的波動。
通常來講,大部分礦工都會選擇利益優先,處理交易時候,他們會按Gas價格從高到底排列,優先處理Gas價格高的,如果你很著急交易 ,就需要提高Gas價格,讓礦工早點看到你;如果你不著急呢,你只需要設定一個Gas價格,這個價格在礦工設置的Gas價格底線之上就行了。
六、Gas 是怎麼獲取的呢?
實際上,Gas就是從礦工那裡購買的以太幣,用戶自己賬戶中的以太幣就可以向礦工購買Gas,以太坊客戶端根據指定的交易最大支出限額,自動用以太坊購買Gas。
七、Gas 最後去了哪裡?
每筆交易,交易發起方都要設置交易的Gas限定和 Gas價格,不同的操作會產生不同的Gas成本,Gas用完時礦工將停止執行,使用的Gas會作為獎勵,獎勵給挖礦的礦工,這將涉及到幾下幾種情況:
第一種情況是,如果有剩餘Gas,那麼這些剩餘的Gas會退還給交易發起方或智能合約創建者,比如我發送1個以太坊給依依,我設置的 Gas limit 是 5萬,正常需要消耗的Gas是21000,,那麼,剩下沒有被消耗的29000會返還給我。
第二種情況是,如果我設置的Gas limit太低,或者我賬號中的以太坊不足以支付我的Gas消耗,那麼,這筆交易會因為Gas不足而被取消,並且用於計算的Gas不會退回到我的賬戶。
第三種情況是,如果交易失敗,我也必須為已經佔用的計算資源來支付手續費。
八、怎麼設置合理的 Gas 價格?
每次交易之前,可以查詢這個網站來確認需要設置的Gas價格: https://ethGasstation.info/總結一下,這篇文章我們主要介紹了以太坊的Gas和手續費:Gas相當於燃油,你在以太坊虛擬機上處理交易,會消耗計算資源,也就是Gas。在以太坊上,你所支付的手續費等於:GasPrice 乘以GasUsed,也就是:Gas的單價乘以消耗掉的Gas總量。操作的復雜程度不同,產生的Gas成本也不同,Gas用完時,礦工將停止執行,使用的Gas會作為獎勵,獎勵給挖礦的礦工,礦工會優先選擇Gas價格出的高的交易者。
B. 以太坊礦工費給誰了
員工。一個公有鏈上, 任何人都可以讀寫數據。讀取數據是免費的, 但是向公有鏈中寫數據時需要花費一定費用的, 這種開銷有助於阻止垃圾內容, 並通過支付保護其安全性。網路上的任何節點(每個包含賬本拷貝的連接設備被稱作節點) 都可以參與稱作挖礦的方式來保護網路。由於挖礦需要計算能力和電費, 所以礦工們的服務需要得到一定的報酬, 這也是礦工費的由來。
拓展資料:
什麼是 gas
以太坊和比特幣的不同之處,以太坊引入了 gas 的概念,gas的目的是限制執行交易所需的工作量,同時為執行支付費用。gas 用來衡量你的這筆交易(或者合約代碼調用)所消耗的資源(包括計算量,存儲,帶寬等)。一筆交易所產生的轉賬費用會獎勵給打包包含這筆交易的區塊的礦工。區塊不是哪個礦工產生的,所有的礦工都會競爭下一個區塊的打包權,勝出者可以打包下一個區塊。
交易不一定會存在一個區塊,它交易被廣播出去後,在數秒內全網所有的節點都會接收到這筆交易。礦工會優先打包 gas 合理,gas price 高的交易。如果用戶交易時所支付的礦工費非常低(out of gas), 那麼這筆交易可能不會被礦工打包, 從而造成交易失敗。 以太坊的交易費用= gas 數量 * gas price (gas 單價, 以太幣計價)
Gas Fee由Gas Limit(限制) 和 Gas Price(價格) 相乘得到。 不同時期、不同的操作gas limit默認值不同,而在執行操作時可以自行設置Gas Limit。需要注意的是,完成一筆交易所需的Gas 單位數量,取決於交易的復雜程度。當一筆交易越復雜,就必須要耗費較多的運算資源,因此需要花費較多Gas。 Gas Price是指Gwei的數量,它會影響到你的交易被礦工打包放上區塊鏈的速度。如果Gas Price 設的越高,就會讓給礦工更有動力將你的交易打包;相反的,如果Gas Price 設的低就要等待比較長的時間。如果不急著完成一筆交易,你就可以選擇較低的Gas Price 來省錢。在每次的交易中,你都可以依照需求調整Gas Limit和Gas Price。
C. 以太坊的gas費被誰賺了
gas主要是被消耗了,收益比較少。
Gas費的組成主要有以下幾個要素:GasFeeCap、GasPremium、GasLimit、GasUsed、BaseFee。
GasLimit是消耗資源的最大限制,GasFeeCap是用戶所能支付給礦工的最大單價限額。在Filecoin鏈上,在打包前要檢查賬戶是否有足夠的余額,不然交易不會被打包。所以GasLimit和GasFeeCap可以得到用戶的最高能支付的費用,是用戶自主設置的。但要注意的是,GasLimit不要隨意設置,多餘的GasLimit會被燃燒一部分,這是和ETHGas費機制最大的不同點。
BaseFee相當於一個基礎價位,同樣用汽車燃料費來看,可以理解為政府根據整個市場的交易情況設置了一個油價,這個價位會浮動,因此這里起到的類似於一個宏觀調控的作用。同樣也可以比喻為計程車的起步價,如果用戶不願意支付起步價,司機就不願意載人,因此如果用戶想要乘車就必須接受起步價,而這個起步價在FilecoinGas費中就是BaseFee。當然在Filecoin中這個起步價是動態的,當總GasLimit超過某個區塊(網路擁塞信號)的GasLimit目標時,它將增加;低於GasLimit目標時將降低。換句話說,在區塊擁堵或者區塊交易不夠的情況下,BaseFee都會按照12.5%進行相應的調節。
GasPremium在這個機制里被描述為小費,即在網路擁堵的情況下支付給礦工的小費,這個也意味著礦工有優先選擇權。如果你支付了GasPremium,礦工就會優先打包你區塊的數據。最終給到礦工的酬勞是小費(GasPremium)*最大消耗量(GasLimit)
D. 1分鍾搞清Gas/ Gas Price/ Gas Limit
好多朋友第一次接觸以太坊的時候,都會搞不清什麼是Gas,更搞不清Gas Price和Gas Limit是什麼。 本文將逐一介紹並理清這三者之間的關系,相信你看完後就會理解這三個gas相關的概念了。
Gas
Gas對應於一個交易(Transaction)中以太坊虛擬機(EVM)的實際運算步數。 越簡單的交易,例如單純的 以太幣轉帳交易,需要的運算步數越少, Gas亦會需要的少一點。 反之,如果要計算一些復雜運算,Gas的消耗 量就會大。 所以你提交的交易需要EVM進行的計算量越大,所需的Gas消耗量就越高了。
Gas Price
Gas Price就是你願意為一個單位的Gas出多少Eth,一般用Gwei作單位。 所以Gas Price 越高, 就表示交易中每運算一步,會支付更多的Eth。
大家可能對Gwei 這個單位感到陌生,Gwei 其實就是10 ^ -9 Eth,也就是說1 Gwei = 0.000000001 Eth。 所以,當你設定Gas price = 20 Gwei ,就意味著你願意為單步運算支付0.00000002 Eth。
說到這里,聰明如你就會意識到以太坊的手續費計算公式很簡單:
1交易手續費(Tx Fee) = 實際運行步數(Actual Gas Used) * 單步價格(Gas Price)
例如你的交易需要以太坊執行50步完成運算,假設你設定的Gas Price是2 Gwei ,那麼整個交易的手續費 就是50 * 2 = 100 Gwei 了。
Gas Limit
Gas Limit就是一次交易中Gas的可用上限,也就是你的交易中最多會執行多少步運算。 由於交易復雜程度各有不同, 確切的Gas消耗量是在完成交易後才會知道,因此在你提交交易之前,需要為交易設定一個Gas用量的上限。
如果說你提交的交易尚未完成,消耗的Gas就已經超過你設定的Gas Limit,那麼這次交易就會被取消,而 已經消耗的手續費同樣被扣取 —— 因為要獎勵已經付出勞動的礦工。 而如果交易已經完成,消耗的Gas未達到Gas Limit, 那麼只會按實際消耗的Gas 收取交易服務費。 換句話說,一個交易可能被收取的最高服務費就是Gas Limit * Gas Price 了。
最後值得一提的是Gas Price 越高,你提交的交易會越快被礦工接納。 但通常人們都不願多支付手續費, 那麼究竟應該將Gas Price設置為多少,才可以在正常時間(eg 10 mins)內,確保交易被確認到區域鏈上呢? 這個網站 可以幫到你。 寫這篇文章時候,1 Gwei的Gas Price 就可以確保 交易在50 秒左右被接納。
E. 【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刷新一次。
正常情況下,幾十秒內就可以獲取到區塊信息了。
區塊確認數=當前區塊高度-交易被打包時的區塊高度。
F. gasfee什麼意思
礦工費
礦工費(GasFee)就是支付給礦工的手續費,當你在以太坊區塊鏈上進行轉賬時,礦工要把你的交易打包並放上區塊鏈,才能使交易完成,在這過程中會消耗區塊鏈的運算資源,所以要支付費用。GasFee由GasLimit(限制)和GasPrice(價格)相乘得到。不同時期、不同的操作gaslimit默認值不同,而在執行操作時可以自行設置GasLimit。需要注意的是,完成一筆交易所需的Gas單位數量,取決於交易的復雜程度。當一筆交易越復雜,就必須要耗費較多的運算資源,因此需要花費較多Gas。
G. gaslimit鏄鎬庝箞鏍鋒敼鍙
gaslimit鏄鎬庝箞鏀瑰彉鐨
鍦ㄤ互澶鍧婂尯鍧楅摼涓婏紝姣忎釜鍖哄潡閮芥湁涓涓鈥済aslimit鈥濓紙鐕冩枡闄愬埗錛夊弬鏁幫紝瀹冨畾涔変簡榪欎釜鍖哄潡鑳藉熷勭悊鐨勬渶澶т氦鏄撴暟閲忓拰璁$畻澶嶆潅搴︺傜噧鏂欐槸浠ュお鍧婄綉緇滀腑鎵ц屾櫤鑳藉悎綰﹀拰浜ゆ槗鏃舵墍闇鐨勮祫婧愶紝鐩稿綋浜庣綉緇滅殑鎵嬬畫璐廣
鐕冩枡闄愬埗鍙浠ラ氳繃浠ヤ笅鍑犵嶆柟寮忚繘琛屾洿鏀癸細
鍖哄潡閾懼崗璁鐨勫崌綰э細鐕冩枡闄愬埗鍙浠ラ氳繃浠ュお鍧婄綉緇滃崌綰х殑鏂瑰紡榪涜屾洿鏀癸紝榪欓渶瑕佽繘琛屽叡璇嗘満鍒剁殑淇鏀廣
鍖哄潡鐭垮伐鐨勬洿鏀癸細姣忓綋涓涓鐭垮伐鎵撳寘涓涓鏂扮殑鍖哄潡鏃訛紝瀹冧滑鍙浠ラ夋嫨璁劇疆涓涓鏂扮殑鐕冩枡闄愬埗銆傝繖鏍風殑璇濓紝鏂板尯鍧楃殑鐕冩枡闄愬埗灝嗚鏇存柊涓虹熆宸ユ墍璁懼畾鐨勫箋
鑷閫傚簲鐕冩枡闄愬埗錛氫互澶鍧婄綉緇滆繕鏀鎸佷竴縐嶈嚜閫傚簲鐨勭噧鏂欓檺鍒舵満鍒訛紝鍙浠ユ牴鎹鍘嗗彶浜ゆ槗鏁版嵁鍜岀綉緇滆礋杞芥潵鑷鍔ㄨ皟鏁寸噧鏂欓檺鍒躲傝繖涓鏈哄埗鏄鐢變互澶鍧婂紑鍙戣呮彁鍑虹殑錛屾棬鍦ㄨВ鍐充氦鏄撳牭濉炲拰楂樼噧鏂欒垂鐢ㄧ殑闂棰樸
鎬諱箣錛屼互澶鍧婄綉緇滀腑鐨勭噧鏂欓檺鍒舵槸鐢卞尯鍧楅摼鍗忚銆佸尯鍧楃熆宸ヤ互鍙婅嚜閫傚簲鏈哄埗鏉ョ$悊鍜岃皟鏁寸殑銆傜噧鏂欓檺鍒剁殑鍙樺寲瀵逛互澶鍧婄綉緇滅殑鎬ц兘鍜岀噧鏂欒垂鐢ㄦ湁鐫閲嶈佺殑褰卞搷錛屽洜姝ら渶瑕佸湪璋ㄦ厧鍦拌冭檻鍚勭嶅洜緔犲悗鍋氬嚭鐩稿簲鐨勮皟鏁淬