Reworked the EVM gas instructions to use 64bit integers rather than
arbitrary size big ints. All gas operations, be it additions,
multiplications or divisions, are checked and guarded against 64 bit
integer overflows.
In additon, most of the protocol paramaters in the params package have
been converted to uint64 and are now constants rather than variables.
* common/math: added overflow check ops
* core: vmenv, env renamed to evm
* eth, internal/ethapi, les: unmetered eth_call and cancel methods
* core/vm: implemented big.Int pool for evm instructions
* core/vm: unexported intPool methods & verification methods
* core/vm: added memoryGasCost overflow check and test
t.Skip("implementing this function is difficult. it requires all sort of interfaces to be implemented which isn't trivial. The value (the actual test) isn't worth it")
MaximumExtraDataSize=big.NewInt(32)// Maximum size extra data may be after Genesis.
ExpByteGas=big.NewInt(10)// Times ceil(log256(exponent)) for the EXP instruction.
SloadGas=big.NewInt(50)// Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added.
CallValueTransferGas=big.NewInt(9000)// Paid for CALL when the value transfer is non-zero.
CallNewAccountGas=big.NewInt(25000)// Paid for CALL when the destination address didn't exist prior.
TxGas=big.NewInt(21000)// Per transaction not creating a contract. NOTE: Not payable on data of calls between transactions.
TxGasContractCreation=big.NewInt(53000)// Per transaction that creates a contract. NOTE: Not payable on data of calls between transactions.
TxDataZeroGas=big.NewInt(4)// Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions.
DifficultyBoundDivisor=big.NewInt(2048)// The bound divisor of the difficulty, used in the update calculations.
QuadCoeffDiv=big.NewInt(512)// Divisor for the quadratic particle of the memory cost equation.
GenesisDifficulty=big.NewInt(131072)// Difficulty of the Genesis block.
DurationLimit=big.NewInt(13)// The decision boundary on the blocktime duration used to determine whether difficulty should go up or not.
SstoreSetGas=big.NewInt(20000)// Once per SLOAD operation.
LogDataGas=big.NewInt(8)// Per byte in a LOG* operation's data.
CallStipend=big.NewInt(2300)// Free gas given at beginning of call.
EcrecoverGas=big.NewInt(3000)//
Sha256WordGas=big.NewInt(12)//
const(
MaximumExtraDataSizeuint64=32// Maximum size extra data may be after Genesis.
ExpByteGasuint64=10// Times ceil(log256(exponent)) for the EXP instruction.
SloadGasuint64=50// Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added.
CallValueTransferGasuint64=9000// Paid for CALL when the value transfer is non-zero.
CallNewAccountGasuint64=25000// Paid for CALL when the destination address didn't exist prior.
TxGasuint64=21000// Per transaction not creating a contract. NOTE: Not payable on data of calls between transactions.
TxGasContractCreationuint64=53000// Per transaction that creates a contract. NOTE: Not payable on data of calls between transactions.
TxDataZeroGasuint64=4// Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions.
QuadCoeffDivuint64=512// Divisor for the quadratic particle of the memory cost equation.
SstoreSetGasuint64=20000// Once per SLOAD operation.
LogDataGasuint64=8// Per byte in a LOG* operation's data.
CallStipenduint64=2300// Free gas given at beginning of call.
EcrecoverGasuint64=3000//
Sha256WordGasuint64=12//
Sha3Gasuint64=30// Once per SHA3 operation.
Sha256Gasuint64=60//
IdentityWordGasuint64=3//
Sha3WordGasuint64=6// Once per word of the SHA3 operation's data.
SstoreResetGasuint64=5000// Once per SSTORE operation if the zeroness changes from zero.
SstoreClearGasuint64=5000// Once per SSTORE operation if the zeroness doesn't change.
SstoreRefundGasuint64=15000// Once per SSTORE operation if the zeroness changes to zero.
JumpdestGasuint64=1// Refunded gas, once per SSTORE operation if the zeroness changes to zero.
IdentityGasuint64=15//
EpochDurationuint64=30000// Duration between proof-of-work epochs.
CallGasuint64=40// Once per CALL operation & message call transaction.
CreateDataGasuint64=200//
Ripemd160Gasuint64=600//
Ripemd160WordGasuint64=120//
CallCreateDepthuint64=1024// Maximum depth of call/create stack.
ExpGasuint64=10// Once per EXP instruction
LogGasuint64=375// Per LOG* operation.
CopyGasuint64=3//
StackLimituint64=1024// Maximum size of VM stack allowed.
TierStepGasuint64=0// Once per operation, for a selection of them.
LogTopicGasuint64=375// Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas.
CreateGasuint64=32000// Once per CREATE operation & contract-creation transaction.
SuicideRefundGasuint64=24000// Refunded following a suicide operation.
MemoryGasuint64=3// Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL.
TxDataNonZeroGasuint64=68// Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions.
MaxCodeSize=24576
)
var(
GasLimitBoundDivisor=big.NewInt(1024)// The bound divisor of the gas limit, used in update calculations.
MinGasLimit=big.NewInt(5000)// Minimum the gas limit may ever be.
GenesisGasLimit=big.NewInt(4712388)// Gas limit of the Genesis block.
TargetGasLimit=new(big.Int).Set(GenesisGasLimit)// The artificial target
Sha3Gas=big.NewInt(30)// Once per SHA3 operation.
Sha256Gas=big.NewInt(60)//
IdentityWordGas=big.NewInt(3)//
Sha3WordGas=big.NewInt(6)// Once per word of the SHA3 operation's data.
SstoreResetGas=big.NewInt(5000)// Once per SSTORE operation if the zeroness changes from zero.
SstoreClearGas=big.NewInt(5000)// Once per SSTORE operation if the zeroness doesn't change.
SstoreRefundGas=big.NewInt(15000)// Once per SSTORE operation if the zeroness changes to zero.
JumpdestGas=big.NewInt(1)// Refunded gas, once per SSTORE operation if the zeroness changes to zero.
IdentityGas=big.NewInt(15)//
GasLimitBoundDivisor=big.NewInt(1024)// The bound divisor of the gas limit, used in update calculations.
EpochDuration=big.NewInt(30000)// Duration between proof-of-work epochs.
CallGas=big.NewInt(40)// Once per CALL operation & message call transaction.
CreateDataGas=big.NewInt(200)//
Ripemd160Gas=big.NewInt(600)//
Ripemd160WordGas=big.NewInt(120)//
DifficultyBoundDivisor=big.NewInt(2048)// The bound divisor of the difficulty, used in the update calculations.
GenesisDifficulty=big.NewInt(131072)// Difficulty of the Genesis block.
MinimumDifficulty=big.NewInt(131072)// The minimum that the difficulty may ever be.
CallCreateDepth=big.NewInt(1024)// Maximum depth of call/create stack.
ExpGas=big.NewInt(10)// Once per EXP instruction.
LogGas=big.NewInt(375)// Per LOG* operation.
CopyGas=big.NewInt(3)//
StackLimit=big.NewInt(1024)// Maximum size of VM stack allowed.
TierStepGas=big.NewInt(0)// Once per operation, for a selection of them.
LogTopicGas=big.NewInt(375)// Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas.
CreateGas=big.NewInt(32000)// Once per CREATE operation & contract-creation transaction.
SuicideRefundGas=big.NewInt(24000)// Refunded following a suicide operation.
MemoryGas=big.NewInt(3)// Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL.
TxDataNonZeroGas=big.NewInt(68)// Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions.
MaxCodeSize=24576
DurationLimit=big.NewInt(13)// The decision boundary on the blocktime duration used to determine whether difficulty should go up or not.