Skip to content

Instantly share code, notes, and snippets.

@changwu-tw
Last active September 8, 2016 02:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save changwu-tw/b7ac9a08479d5beae8a56b645be63503 to your computer and use it in GitHub Desktop.
Save changwu-tw/b7ac9a08479d5beae8a56b645be63503 to your computer and use it in GitHub Desktop.

gas

gas:用來衡量交易 (transaction) 或合約 (contract) 在 Ethereum 上被執行的工作量,即多少個指令或多少個動作所需要耗費的單位;由於每一個操作都會消耗某些數量的 gas,越複雜的操作需要消耗較多的計算資源,從而所需的 gas 也越高。

而之所以要設計 gas 這個機制乃是因為一個 smart contract 在給予 input 之後會 run 多久才會停止 或者甚至會不會停止都是無法事先預測的 , 所以要求使用者自己設定願意花多少 gas 在 run 這個 contract 上面 。 (由 afool41 補充)

在 Bitcoin 中,每一筆交易需要手續費,衡量標準是看交易的大小 (transaction size);但站在 Ethereum 的角度則認為,手續費的計算應該取決於在區塊鏈平台上所需要的工作量。

舉例來說,在 Ethereum 當中,兩個合約,程式碼大小不同,有可能短的程式碼,耗費的 gas 高,因為裡面執行的動作很多牽涉到 sha3;但在 Bitcoin 世界,交易包含的資料越多,佔的大小越大,手續費較高。

https://cl.ly/hN0x/Screen%20Shot%202016-09-05%20at%2011.02.54%20PM.png

圖片來源;gas price [檔案]

因此需要的成本可計算如下:

Total cost = gasUsed * gasPrice

gas price

  • gas price 決定 1 個 gas 價值多少 ether,而 gas price 會隨市場需求波動
  • gas price 的單位是 wei ,1 wei = 10^(-18) ether

而 1 ether = 10000 gas,並且 ether 價格是由市場所決定,也因此 gas 的價值會隨 ether 而有所波動 (特別謝謝網友 afool41 糾正)

gas 運作

Q: gas 在交易的生命週期中,怎麼運作? A: 根據 白皮書

  1. 檢查交易是否格式正確(有簽章)
  2. 計算手續費: STARTGAS * GASPRICE
  3. 初始化 GAS = STARTGAS,每 byte 減一個 GAS
  4. 轉移發送方交易價值給收受方。
  5. 如果帳戶是契約帳戶,則執行契約 code 直到完成或沒 GAS
  6. 如果發送方錢不夠或 GAS 燒盡:回復所有其他狀態,但礦工取走所有手續費。
  7. 如果在 GAS 燒盡前執行成功,返還多餘的手續費,燒掉的手續費給礦工。

補充資料

@ChihChengLiang
Copy link

Q: gas 在交易的生命週期中,怎麼運作?
A: 根據 白皮書

  1. 檢查交易是否格式正確(有簽章)
  2. 計算手續費: STARTGAS * GASPRICE
  3. 初始化 GAS = STARTGAS,每 byte 減一個 GAS
  4. 轉移發送方交易價值給收受方。
  5. 如果帳戶是契約帳戶,則執行契約 code 直到完成或沒 GAS
  6. 如果發送方錢不夠或 GAS 燒盡:回復所有其他狀態,但礦工取走所有手續費。
  7. 如果在 GAS 燒盡前執行成功,返還多餘的手續費,燒掉的手續費給礦工。

@ChihChengLiang
Copy link

歷史 gas price 資料 https://etherscan.io/charts/gasprice

@changwu-tw
Copy link
Author

末段解釋 Gas Prices, Gas Cost, Gas Limit, Gas Fees

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment