聊聊gas那些事
阿新 • • 發佈:2018-12-19
1、gas是什麼。
gas在詞典中的解釋是“氣體,汽油,瓦斯”的意思,在以太坊中是驅動礦工參與的手續費的基礎。 在以太坊中跟gas有關的概念有gas,usedgas,gasprice,gaslimit,具體解釋如下: gas:每筆交易設定的最大可用gas,相當於每筆交易的gaslimit usedgas:每筆交易實際花費的gas,並不是設定了多少gas,就使用多少gas,實際花費gas的計算參照gas計算部分 gasprice:gas的單價,每筆交易的usedgas * gasprice即為本次交易的手續費。 gaslimit:這裡的gaslimit指的是每個塊的最大gas限制,其作用可以限制打包的交易數量 每筆交易需要設定gas,gasprice. 有些專案上預設gas為90000,預設gasprice為18 * 1e6
2、gas有什麼用?
生成區塊的手續費,用來獎勵給生成區塊的賬戶,以提升礦工參與的積極性。同時作為一種防止惡意操作的手段,比如防止大量的垃圾交易阻塞有效交易打包進區塊(因為有手續費會提高垃圾交易的成本),防止合約程式碼的無限執行(超過gaslimit即恢復到原始狀態,同時所有gas都會被花費),通過gaslimit限制區塊打包的交易數等。
3、如何計算gas?
每筆交易花費的usedgas怎麼計算: 以太坊中,交易分兩種,一種是一般交易,主要用來轉賬用,一種是合約交易,用來執行合約。一般交易花費的gas預設是params.TxGas =10 。合約執行花費的usedgas由兩部分組成,一部分是基礎gas,預設值是params.TxGasContractCreation = 53000,第二部分是合約交易中data資料中非零字元數unzeronum*params.TxDataNonZeroGas + data資料中零字元數zeronum*params.TxDataZeroGas其中TxDataNonZeroGas預設是68,TxDataZeroGas預設是4。如果合約執行成功,則上述計算的usedgas*gasprice即為本次交易的手續費,剩餘的gas*gasprice-usedgas*gasprice將返還給使用者,如果合約執行失敗,則合約設定的gas*gasprice將全部作為手續費。
4、如何設定gas,gasprice
以下是以太坊的傳送交易的RPC介面描述,其中params中的gas*gasprice就是本次交易的最大手續費