common.go 1.25 KB
Newer Older
obscuren's avatar
obscuren committed
1
package vm
2 3

import (
4 5
	"math/big"

6
	"github.com/ethereum/go-ethereum/ethutil"
obscuren's avatar
obscuren committed
7
	"github.com/ethereum/go-ethereum/logger"
8 9
)

obscuren's avatar
obscuren committed
10
var vmlogger = logger.NewLogger("VM")
11

12 13 14 15 16 17 18 19 20
type Type int

const (
	StandardVmTy Type = iota
	DebugVmTy

	MaxVmTy
)

21
var (
22 23 24 25 26 27 28 29 30 31 32 33
	GasStep         = big.NewInt(1)
	GasSha          = big.NewInt(20)
	GasSLoad        = big.NewInt(20)
	GasSStore       = big.NewInt(100)
	GasSStoreRefund = big.NewInt(100)
	GasBalance      = big.NewInt(20)
	GasCreate       = big.NewInt(100)
	GasCall         = big.NewInt(20)
	GasMemory       = big.NewInt(1)
	GasData         = big.NewInt(5)
	GasTx           = big.NewInt(500)
	GasLog          = big.NewInt(32)
34 35 36 37 38

	Pow256 = ethutil.BigPow(2, 256)

	LogTyPretty byte = 0x1
	LogTyDiff   byte = 0x2
39

obscuren's avatar
obscuren committed
40 41
	U256 = ethutil.U256
	S256 = ethutil.S256
42
)
43

obscuren's avatar
obscuren committed
44
const MaxCallDepth = 1025
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

func calcMemSize(off, l *big.Int) *big.Int {
	if l.Cmp(ethutil.Big0) == 0 {
		return ethutil.Big0
	}

	return new(big.Int).Add(off, l)
}

// Simple helper
func u256(n int64) *big.Int {
	return big.NewInt(n)
}

// Mainly used for print variables and passing to Print*
func toValue(val *big.Int) interface{} {
	// Let's assume a string on right padded zero's
	b := val.Bytes()
	if b[0] != 0 && b[len(b)-1] == 0x0 && b[len(b)-2] == 0x0 {
		return string(b)
	}

	return val
}