Go-Ethereum

哪裡扣除了gas費用?從交易價值還是賬戶餘額?

  • June 15, 2018

對於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)表示從賬戶餘額中扣除交易費用。

希望有幫助~

引用自:https://ethereum.stackexchange.com/questions/24820