|
|
|
@ -18,8 +18,23 @@ type Type byte |
|
|
|
|
const ( |
|
|
|
|
StdVmTy Type = iota |
|
|
|
|
JitVmTy |
|
|
|
|
|
|
|
|
|
MaxVmTy |
|
|
|
|
|
|
|
|
|
MaxCallDepth = 1025 |
|
|
|
|
|
|
|
|
|
LogTyPretty byte = 0x1 |
|
|
|
|
LogTyDiff byte = 0x2 |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var ( |
|
|
|
|
Pow256 = common.BigPow(2, 256) |
|
|
|
|
|
|
|
|
|
U256 = common.U256 |
|
|
|
|
S256 = common.S256 |
|
|
|
|
|
|
|
|
|
Zero = common.Big0 |
|
|
|
|
|
|
|
|
|
max = big.NewInt(math.MaxInt64) |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func NewVm(env Environment) VirtualMachine { |
|
|
|
@ -34,67 +49,6 @@ func NewVm(env Environment) VirtualMachine { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var ( |
|
|
|
|
GasQuickStep = big.NewInt(2) |
|
|
|
|
GasFastestStep = big.NewInt(3) |
|
|
|
|
GasFastStep = big.NewInt(5) |
|
|
|
|
GasMidStep = big.NewInt(8) |
|
|
|
|
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) |
|
|
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
|
|
Pow256 = common.BigPow(2, 256) |
|
|
|
|
|
|
|
|
|
LogTyPretty byte = 0x1 |
|
|
|
|
LogTyDiff byte = 0x2 |
|
|
|
|
|
|
|
|
|
U256 = common.U256 |
|
|
|
|
S256 = common.S256 |
|
|
|
|
|
|
|
|
|
Zero = common.Big0 |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
const MaxCallDepth = 1025 |
|
|
|
|
|
|
|
|
|
func calcMemSize(off, l *big.Int) *big.Int { |
|
|
|
|
if l.Cmp(common.Big0) == 0 { |
|
|
|
|
return common.Big0 |
|
|
|
|