diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-11-19 17:57:00 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-11-19 17:57:00 +0800 |
commit | ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8 (patch) | |
tree | 5ce6b23c32fc1f47cc688ac954b3d26d4eec9cad /core/gaspool.go | |
parent | 23f42d9463e55fe86100b86c2ab0b7c95f181f91 (diff) | |
parent | a1d9ef48c505ab4314ca8e3ee1fc272032da3034 (diff) | |
download | dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.gz dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.bz2 dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.lz dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.xz dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.zst dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.zip |
Merge pull request #1917 from obscuren/validator-interface
core, eth, rpc: split out block validator and state processor
Diffstat (limited to 'core/gaspool.go')
-rw-r--r-- | core/gaspool.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/core/gaspool.go b/core/gaspool.go new file mode 100644 index 000000000..2ef07c754 --- /dev/null +++ b/core/gaspool.go @@ -0,0 +1,46 @@ +// Copyright 2014 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. + +package core + +import "math/big" + +// GasPool tracks the amount of gas available during +// execution of the transactions in a block. +// The zero value is a pool with zero gas available. +type GasPool big.Int + +// AddGas makes gas available for execution. +func (gp *GasPool) AddGas(amount *big.Int) *GasPool { + i := (*big.Int)(gp) + i.Add(i, amount) + return gp +} + +// SubGas deducts the given amount from the pool if enough gas is +// available and returns an error otherwise. +func (gp *GasPool) SubGas(amount *big.Int) error { + i := (*big.Int)(gp) + if i.Cmp(amount) < 0 { + return &GasLimitErr{Have: new(big.Int).Set(i), Want: amount} + } + i.Sub(i, amount) + return nil +} + +func (gp *GasPool) String() string { + return (*big.Int)(gp).String() +} |