gas:用來衡量交易 (transaction) 或合約 (contract) 在 Ethereum 上被執行的工作量,即多少個指令或多少個動作所需要耗費的單位;由於每一個操作都會消耗某些數量的 gas,越複雜的操作需要消耗較多的計算資源,從而所需的 gas 也越高。
而之所以要設計 gas 這個機制乃是因為一個 smart contract 在給予 input 之後會 run 多久才會停止 或者甚至會不會停止都是無法事先預測的 , 所以要求使用者自己設定願意花多少 gas 在 run 這個 contract 上面 。 (由 afool41 補充)
在 Bitcoin 中,每一筆交易需要手續費,衡量標準是看交易的大小 (transaction size);但站在 Ethereum 的角度則認為,手續費的計算應該取決於在區塊鏈平台上所需要的工作量。
舉例來說,在 Ethereum 當中,兩個合約,程式碼大小不同,有可能短的程式碼,耗費的 gas 高,因為裡面執行的動作很多牽涉到 sha3;但在 Bitcoin 世界,交易包含的資料越多,佔的大小越大,手續費較高。
因此需要的成本可計算如下:
Total cost = gasUsed * gasPrice
- gas price 決定 1 個 gas 價值多少 ether,而 gas price 會隨市場需求波動
- gas price 的單位是 wei ,1 wei = 10^(-18) ether
- gas price 的歷史資料
而 1 ether = 10000 gas,並且 ether 價格是由市場所決定,也因此 gas 的價值會隨 ether 而有所波動 (特別謝謝網友 afool41 糾正)
Q: gas 在交易的生命週期中,怎麼運作? A: 根據 白皮書
- 檢查交易是否格式正確(有簽章)
- 計算手續費:
STARTGAS * GASPRICE
- 初始化
GAS = STARTGAS
,每 byte 減一個 GAS - 轉移發送方交易價值給收受方。
- 如果帳戶是契約帳戶,則執行契約 code 直到完成或沒 GAS
- 如果發送方錢不夠或 GAS 燒盡:回復所有其他狀態,但礦工取走所有手續費。
- 如果在 GAS 燒盡前執行成功,返還多餘的手續費,燒掉的手續費給礦工。
- homestead-guide (含 Gas Prices, Gas Cost, Gas Limit, Gas Fees 解釋)
Q: gas 在交易的生命週期中,怎麼運作?
A: 根據 白皮書
STARTGAS * GASPRICE
GAS = STARTGAS
,每 byte 減一個 GAS