diff options
author | obscuren <geffobscura@gmail.com> | 2015-01-06 00:37:30 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-01-06 00:39:42 +0800 |
commit | b99b2c446ca3a81a692eb58294d5a4f6a999f00c (patch) | |
tree | 11c6091f79a7a5bccd485bf1d74f7dec7504b6e9 /vm | |
parent | d001479a47ee27a460a7cc6df136176662fd1799 (diff) | |
download | dexon-b99b2c446ca3a81a692eb58294d5a4f6a999f00c.tar dexon-b99b2c446ca3a81a692eb58294d5a4f6a999f00c.tar.gz dexon-b99b2c446ca3a81a692eb58294d5a4f6a999f00c.tar.bz2 dexon-b99b2c446ca3a81a692eb58294d5a4f6a999f00c.tar.lz dexon-b99b2c446ca3a81a692eb58294d5a4f6a999f00c.tar.xz dexon-b99b2c446ca3a81a692eb58294d5a4f6a999f00c.tar.zst dexon-b99b2c446ca3a81a692eb58294d5a4f6a999f00c.zip |
Precompiled contract & Depth change
* Added pre-compiled contract 0x04 (mem cpy)
* Changed depth error to return the gas instead of consuming
Diffstat (limited to 'vm')
-rw-r--r-- | vm/address.go | 16 | ||||
-rw-r--r-- | vm/common.go | 1 |
2 files changed, 17 insertions, 0 deletions
diff --git a/vm/address.go b/vm/address.go index 611979c94..be4284421 100644 --- a/vm/address.go +++ b/vm/address.go @@ -21,19 +21,31 @@ func (self PrecompiledAccount) Call(in []byte) []byte { } var Precompiled = map[string]*PrecompiledAccount{ + // ECRECOVER string(ethutil.LeftPadBytes([]byte{1}, 20)): &PrecompiledAccount{func(l int) *big.Int { return GasEcrecover }, ecrecoverFunc}, + + // SHA256 string(ethutil.LeftPadBytes([]byte{2}, 20)): &PrecompiledAccount{func(l int) *big.Int { n := big.NewInt(int64(l+31)/32 + 1) n.Mul(n, GasSha256) return n }, sha256Func}, + + // RIPEMD160 string(ethutil.LeftPadBytes([]byte{3}, 20)): &PrecompiledAccount{func(l int) *big.Int { n := big.NewInt(int64(l+31)/32 + 1) n.Mul(n, GasRipemd) return n }, ripemd160Func}, + + string(ethutil.LeftPadBytes([]byte{4}, 20)): &PrecompiledAccount{func(l int) *big.Int { + n := big.NewInt(int64(l+31)/32 + 1) + n.Mul(n, GasMemCpy) + + return n + }, memCpy}, } func sha256Func(in []byte) []byte { @@ -54,3 +66,7 @@ func ecrecoverFunc(in []byte) []byte { return ethutil.LeftPadBytes(crypto.Sha3(crypto.Ecrecover(append(hash, sig...))[1:])[12:], 32) } + +func memCpy(in []byte) []byte { + return in +} diff --git a/vm/common.go b/vm/common.go index 529bbdeb1..acf18eede 100644 --- a/vm/common.go +++ b/vm/common.go @@ -38,6 +38,7 @@ var ( GasSha256 = big.NewInt(50) GasRipemd = big.NewInt(50) GasEcrecover = big.NewInt(500) + GasMemCpy = big.NewInt(1) Pow256 = ethutil.BigPow(2, 256) |