Transactions
特定 txn 的 gas 成本是否取決於區塊的礦工?
問題在上面。實際上,我看到了一些(小)波動。但是,在閱讀文件後,我認為 gas 應該是恆定的,前提是交易完全相同。哪個是真的?我錯過了什麼嗎?
氣體量取決於 tx 數據的大小。高gasPrice tx 優先被開採,礦工將在自己接受的最低gas 價格下放棄非本地交易。gas 量將通過 st_transaction.go 源文件的 IntrinsicGas 方法計算,如下:
func IntrinsicGas(data []byte, contractCreation, homestead bool) *big.Int { igas := new(big.Int) if contractCreation && homestead { igas.SetUint64(params.TxGasContractCreation) } else { igas.SetUint64(params.TxGas) } if len(data) > 0 { var nz int64 for _, byt := range data { if byt != 0 { nz++ } } m := big.NewInt(nz) m.Mul(m, new(big.Int).SetUint64(params.TxDataNonZeroGas)) igas.Add(igas, m) m.SetInt64(int64(len(data)) - nz) m.Mul(m, new(big.Int).SetUint64(params.TxDataZeroGas)) igas.Add(igas, m) } return igas }
希望這會有所幫助~
特定交易的氣體量是固定的,因為成本基於交易中執行的乙太坊虛擬機 (EVM) 操作,這是確定性的。但是,必須為所使用的氣體付費,這個金額取決於發送者。每單位天然氣的數量稱為天然氣價格。因此,特定交易的價格是gas price x gas used。也就是說,即使執行相同的程式碼,交易的成本也可以在限制範圍內變化(見下文),並且由交易發送者設置。
礦工選擇將哪些交易包含在一個區塊中,他們可能依賴的一個啟發式方法是 gas 價格;據推測,gas 價格越高,交易被包括在內的可能性就越大。如果特定交易的 gas 價格太低,礦工可能會簡單地忽略它。因此,交易價格有一個實際的下限。我仍在尋找有關gas價格是否有上限的答案。