aboutsummaryrefslogtreecommitdiffstats
path: root/core/vm/gas.go
diff options
context:
space:
mode:
authorGustav Simonsson <gustav.simonsson@gmail.com>2015-04-02 11:17:15 +0800
committerGustav Simonsson <gustav.simonsson@gmail.com>2015-04-02 12:22:32 +0800
commitc26c8d3a44cdd45994b6d99777d620565bab8f9c (patch)
tree6ab5a74981e9fb9f869f1ef884a375163b898113 /core/vm/gas.go
parent516ec28544e0f9c76e18d82742d3ae58cfb59cc1 (diff)
downloaddexon-c26c8d3a44cdd45994b6d99777d620565bab8f9c.tar
dexon-c26c8d3a44cdd45994b6d99777d620565bab8f9c.tar.gz
dexon-c26c8d3a44cdd45994b6d99777d620565bab8f9c.tar.bz2
dexon-c26c8d3a44cdd45994b6d99777d620565bab8f9c.tar.lz
dexon-c26c8d3a44cdd45994b6d99777d620565bab8f9c.tar.xz
dexon-c26c8d3a44cdd45994b6d99777d620565bab8f9c.tar.zst
dexon-c26c8d3a44cdd45994b6d99777d620565bab8f9c.zip
Read most protocol params from common/params.json
* Add params package with exported variables generated from github.com/ethereum/common/blob/master/params.json * Use params package variables in applicable places * Add check for minimum gas limit in validation of block's gas limit * Remove common/params.json from go-ethereum to avoid outdated version of it
Diffstat (limited to 'core/vm/gas.go')
-rw-r--r--core/vm/gas.go58
1 files changed, 12 insertions, 46 deletions
diff --git a/core/vm/gas.go b/core/vm/gas.go
index 976333a78..f7abe63f8 100644
--- a/core/vm/gas.go
+++ b/core/vm/gas.go
@@ -2,6 +2,7 @@ package vm
import (
"fmt"
+ "github.com/ethereum/go-ethereum/params"
"math/big"
)
@@ -13,45 +14,10 @@ var (
GasSlowStep = big.NewInt(10)
GasExtStep = big.NewInt(20)
- GasStorageGet = big.NewInt(50)
- GasStorageAdd = big.NewInt(20000)
- GasStorageMod = big.NewInt(5000)
- GasLogBase = big.NewInt(375)
- GasLogTopic = big.NewInt(375)
- GasLogByte = big.NewInt(8)
- GasCreate = big.NewInt(32000)
- GasCreateByte = big.NewInt(200)
- GasCall = big.NewInt(40)
- GasCallValueTransfer = big.NewInt(9000)
- GasStipend = big.NewInt(2300)
- GasCallNewAccount = big.NewInt(25000)
- GasReturn = big.NewInt(0)
- GasStop = big.NewInt(0)
- GasJumpDest = big.NewInt(1)
+ GasReturn = big.NewInt(0)
+ GasStop = big.NewInt(0)
- RefundStorage = big.NewInt(15000)
- RefundSuicide = big.NewInt(24000)
-
- GasMemWord = big.NewInt(3)
- GasQuadCoeffDenom = big.NewInt(512)
- GasContractByte = big.NewInt(200)
- GasTransaction = big.NewInt(21000)
- GasTxDataNonzeroByte = big.NewInt(68)
- GasTxDataZeroByte = big.NewInt(4)
- GasTx = big.NewInt(21000)
- GasExp = big.NewInt(10)
- GasExpByte = big.NewInt(10)
-
- GasSha3Base = big.NewInt(30)
- GasSha3Word = big.NewInt(6)
- GasSha256Base = big.NewInt(60)
- GasSha256Word = big.NewInt(12)
- GasRipemdBase = big.NewInt(600)
- GasRipemdWord = big.NewInt(12)
- GasEcrecover = big.NewInt(3000)
- GasIdentityBase = big.NewInt(15)
- GasIdentityWord = big.NewInt(3)
- GasCopyWord = big.NewInt(3)
+ GasContractByte = big.NewInt(200)
)
func baseCheck(op OpCode, stack *stack, gas *big.Int) error {
@@ -71,8 +37,8 @@ func baseCheck(op OpCode, stack *stack, gas *big.Int) error {
return err
}
- if r.stackPush && len(stack.data)-r.stackPop+1 > 1024 {
- return fmt.Errorf("stack limit reached (%d)", maxStack)
+ if r.stackPush && len(stack.data)-r.stackPop+1 > int(params.StackLimit.Int64()) {
+ return fmt.Errorf("stack limit reached (%d)", params.StackLimit.Int64())
}
gas.Add(gas, r.gas)
@@ -145,13 +111,13 @@ var _baseCheck = map[OpCode]req{
BALANCE: {1, GasExtStep, true},
EXTCODESIZE: {1, GasExtStep, true},
EXTCODECOPY: {4, GasExtStep, false},
- SLOAD: {1, GasStorageGet, true},
+ SLOAD: {1, params.SloadGas, true},
SSTORE: {2, Zero, false},
- SHA3: {2, GasSha3Base, true},
- CREATE: {3, GasCreate, true},
- CALL: {7, GasCall, true},
- CALLCODE: {7, GasCall, true},
- JUMPDEST: {0, GasJumpDest, false},
+ SHA3: {2, params.Sha3Gas, true},
+ CREATE: {3, params.CreateGas, true},
+ CALL: {7, params.CallGas, true},
+ CALLCODE: {7, params.CallGas, true},
+ JUMPDEST: {0, params.JumpdestGas, false},
SUICIDE: {1, Zero, false},
RETURN: {2, Zero, false},
PUSH1: {0, GasFastestStep, true},