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  }