github.com/jonasnick/go-ethereum@v0.7.12-0.20150216215225-22176f05d387/vm/common.go (about) 1 package vm 2 3 import ( 4 "math/big" 5 6 "github.com/jonasnick/go-ethereum/ethutil" 7 "github.com/jonasnick/go-ethereum/logger" 8 ) 9 10 var vmlogger = logger.NewLogger("VM") 11 12 type Type byte 13 14 const ( 15 StdVmTy Type = iota 16 JitVmTy 17 18 MaxVmTy 19 ) 20 21 func NewVm(env Environment) VirtualMachine { 22 switch env.VmType() { 23 case JitVmTy: 24 return NewJitVm(env) 25 default: 26 vmlogger.Infoln("unsupported vm type %d", env.VmType()) 27 fallthrough 28 case StdVmTy: 29 return New(env) 30 } 31 } 32 33 var ( 34 GasStep = big.NewInt(1) 35 GasSha = big.NewInt(10) 36 GasSLoad = big.NewInt(20) 37 GasSStore = big.NewInt(100) 38 GasSStoreRefund = big.NewInt(100) 39 GasBalance = big.NewInt(20) 40 GasCreate = big.NewInt(100) 41 GasCall = big.NewInt(20) 42 GasCreateByte = big.NewInt(5) 43 GasSha3Byte = big.NewInt(10) 44 GasSha256Byte = big.NewInt(50) 45 GasRipemdByte = big.NewInt(50) 46 GasMemory = big.NewInt(1) 47 GasData = big.NewInt(5) 48 GasTx = big.NewInt(500) 49 GasLog = big.NewInt(32) 50 GasSha256 = big.NewInt(50) 51 GasRipemd = big.NewInt(50) 52 GasEcrecover = big.NewInt(500) 53 GasMemCpy = big.NewInt(1) 54 55 Pow256 = ethutil.BigPow(2, 256) 56 57 LogTyPretty byte = 0x1 58 LogTyDiff byte = 0x2 59 60 U256 = ethutil.U256 61 S256 = ethutil.S256 62 ) 63 64 const MaxCallDepth = 1025 65 66 func calcMemSize(off, l *big.Int) *big.Int { 67 if l.Cmp(ethutil.Big0) == 0 { 68 return ethutil.Big0 69 } 70 71 return new(big.Int).Add(off, l) 72 } 73 74 // Simple helper 75 func u256(n int64) *big.Int { 76 return big.NewInt(n) 77 } 78 79 // Mainly used for print variables and passing to Print* 80 func toValue(val *big.Int) interface{} { 81 // Let's assume a string on right padded zero's 82 b := val.Bytes() 83 if b[0] != 0 && b[len(b)-1] == 0x0 && b[len(b)-2] == 0x0 { 84 return string(b) 85 } 86 87 return val 88 }