Refund gas
This commit is contained in:
parent
8b15732c1e
commit
0d77632839
|
@ -163,6 +163,15 @@ func (self *StateObject) BuyGas(gas, price *big.Int) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *StateObject) RefundGas(gas, price *big.Int) {
|
||||||
|
self.gasPool.Add(self.gasPool, gas)
|
||||||
|
|
||||||
|
rGas := new(big.Int).Set(gas)
|
||||||
|
rGas.Mul(rGas, price)
|
||||||
|
|
||||||
|
self.Amount.Sub(self.Amount, rGas)
|
||||||
|
}
|
||||||
|
|
||||||
func (self *StateObject) Copy() *StateObject {
|
func (self *StateObject) Copy() *StateObject {
|
||||||
stCopy := &StateObject{}
|
stCopy := &StateObject{}
|
||||||
stCopy.address = make([]byte, len(self.address))
|
stCopy.address = make([]byte, len(self.address))
|
||||||
|
|
|
@ -110,6 +110,15 @@ func (self *StateTransition) BuyGas() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *StateTransition) RefundGas() {
|
||||||
|
coinbase, sender := self.Coinbase(), self.Sender()
|
||||||
|
coinbase.RefundGas(self.gas, self.tx.GasPrice)
|
||||||
|
|
||||||
|
// Return remaining gas
|
||||||
|
remaining := new(big.Int).Mul(self.gas, self.tx.GasPrice)
|
||||||
|
sender.AddAmount(remaining)
|
||||||
|
}
|
||||||
|
|
||||||
func (self *StateTransition) TransitionState() (err error) {
|
func (self *StateTransition) TransitionState() (err error) {
|
||||||
//snapshot := st.state.Snapshot()
|
//snapshot := st.state.Snapshot()
|
||||||
|
|
||||||
|
@ -141,6 +150,8 @@ func (self *StateTransition) TransitionState() (err error) {
|
||||||
// XXX Transactions after this point are considered valid.
|
// XXX Transactions after this point are considered valid.
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
|
self.RefundGas()
|
||||||
|
|
||||||
if sender != nil {
|
if sender != nil {
|
||||||
self.state.UpdateStateObject(sender)
|
self.state.UpdateStateObject(sender)
|
||||||
}
|
}
|
||||||
|
@ -148,6 +159,8 @@ func (self *StateTransition) TransitionState() (err error) {
|
||||||
if receiver != nil {
|
if receiver != nil {
|
||||||
self.state.UpdateStateObject(receiver)
|
self.state.UpdateStateObject(receiver)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.state.UpdateStateObject(self.Coinbase())
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// Increment the nonce for the next transaction
|
// Increment the nonce for the next transaction
|
||||||
|
@ -203,10 +216,6 @@ func (self *StateTransition) TransitionState() (err error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return remaining gas
|
|
||||||
remaining := new(big.Int).Mul(self.gas, tx.GasPrice)
|
|
||||||
sender.AddAmount(remaining)
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue