Go-Ethereum
哪裡扣除了gas費用?從交易價值還是賬戶餘額?
對於
sendTransaction
方法,gas 成本是從value
參數中減去還是從賬戶餘額中減去?
交易費用將從賬戶餘額中扣除。這筆交易處理後,首先會購買gas,然後執行轉賬。在state_transaction.go文件中,
preCheck()
方法會檢查交易的 nonce 併購買 gas,buyGas()
方法的實現如下:func (st *StateTransition) buyGas() error { mgas := st.msg.Gas() if mgas.BitLen() > 64 { return vm.ErrOutOfGas } mgval := new(big.Int).Mul(mgas, st.gasPrice) var ( state = st.state sender = st.from() ) if state.GetBalance(sender.Address()).Cmp(mgval) < 0 { return errInsufficientBalanceForGas } if err := st.gp.SubGas(mgas); err != nil { return err } st.gas += mgas.Uint64() st.initialGas.Set(mgas) state.SubBalance(sender.Address(), mgval) return nil }
state.SubBalance(sender.Address(), mgval)
表示從賬戶餘額中扣除交易費用。希望有幫助~