common.go 1.51 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

obscuren's avatar
obscuren committed
12
type Type byte
13 14

const (
obscuren's avatar
obscuren committed
15
	StdVmTy Type = iota
16
	JitVmTy
17 18 19 20

	MaxVmTy
)

21
var (
22
	GasStep         = big.NewInt(1)
23
	GasSha          = big.NewInt(10)
24 25 26 27 28 29
	GasSLoad        = big.NewInt(20)
	GasSStore       = big.NewInt(100)
	GasSStoreRefund = big.NewInt(100)
	GasBalance      = big.NewInt(20)
	GasCreate       = big.NewInt(100)
	GasCall         = big.NewInt(20)
obscuren's avatar
obscuren committed
30 31 32 33
	GasCreateByte   = big.NewInt(5)
	GasSha3Byte     = big.NewInt(10)
	GasSha256Byte   = big.NewInt(50)
	GasRipemdByte   = big.NewInt(50)
34 35 36 37
	GasMemory       = big.NewInt(1)
	GasData         = big.NewInt(5)
	GasTx           = big.NewInt(500)
	GasLog          = big.NewInt(32)
obscuren's avatar
obscuren committed
38 39
	GasSha256       = big.NewInt(50)
	GasRipemd       = big.NewInt(50)
obscuren's avatar
obscuren committed
40
	GasEcrecover    = big.NewInt(500)
41
	GasMemCpy       = big.NewInt(1)
42 43 44 45 46

	Pow256 = ethutil.BigPow(2, 256)

	LogTyPretty byte = 0x1
	LogTyDiff   byte = 0x2
47

obscuren's avatar
obscuren committed
48 49
	U256 = ethutil.U256
	S256 = ethutil.S256
50
)
51

obscuren's avatar
obscuren committed
52
const MaxCallDepth = 1025
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

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
}