在《在區塊鏈上運行程序,到底是啥意思?DAPP到底是什么?》里我們談到,BTC腳本語言不具備圖靈完備性,ETH使用的語言,比如Solidity具備圖靈完備性。
具備圖靈完備性的語言,可以使用循環語句,可以一遍又一遍地執行一組指令。這個特性可能會造成網絡堵塞。
ETH如何解決這個問題?
用Gas。簡單地說,你必須為你的程序執行的每一條指令——付費。
昨天我們說到,Solidity語言編寫的代碼,會被編譯為字節碼。這組字節碼,就是一組EVM可執行的指令。
而執行每條指令,都有相關的Gas成本。參考下表:
這張表中,EVM可以執行的每條指令,在Gas Used這一列,都有相應的Gas價格。
這樣,如果你想在ETH網絡里,跑一百萬次循環語句堵塞網絡,你需要花費的Gas,會是個天文數字哦!你會放棄的!
你可能會問,這個Gas,是我們轉賬eth時設定的Gas嗎?
每次ETH轉賬,Gas,Gas Price,Gas Limit,感覺一臉懵逼,傻傻分不清楚啊!
Gas (燃料)
如前表,Gas的多少,對應于交易中EVM實際執行的運算復雜度。
運算越簡單所需Gas就越低。反之,如果轉賬過程中,需要用到其它復雜指令,Gas就會高。
比如 BALANCE指令,Gas高達400.
Gas Price(燃料價格)
是指你愿意為每個Gas,花費多少ETH。Gas Price由交易者設定。一般用Gwei作單位。
1 Gwei = 0.000000001 Eth。 Gas Price越高,付出的Eth也就越多。
當你設定Gas price = 30 Gwei,表示,愿意為每個Gas付出:0.00000003 Eth。
Gas 由你主動出價。如果價格太低,礦工們就會拒絕幫你打包,幫你轉發交易。
但是如果設置太高,就會增加交易成本。
轉賬手續費(Tx Fee)
它等于——實際花費燃料(Gas Used)x 單價(Gas Price)
比如,一次交易運算量,需要50Gas,而Gas Price設為3 Gwei。整個交易的手續費= 50 * 3 = 150 Gwei = 0.00000015 Eth。
Gas Limit (燃料供給上限)
交易中Gas上限值。是指:交易中最多花費多少Gas。
由于交易復雜度各不相同,ETH網絡需要完成交易后,才能計算出一共要花費多少Gas。
所以,ETH網絡,要求交易者在發出交易之前,為交易設定一個Gas上限。
如果交易還沒完成,而消耗的Gas,已經超過交易者設定的Gas Limit,那么交易就會被取消。
轉賬的ETH會退回,但燃料費還是要扣除,用作獎勵礦工。
而如果交易已經完成,而消耗的Gas沒要達到Gas Limit,則只花費實際消耗的Gas,不會多算。
強調
設置Gas的主要目的,不是為了金錢!
而是為了每條指令都有價!阻止惡意的循環語句和其它惡意語句,阻止惡意代碼的運行。
責任編輯;zl
評論
查看更多