aboutsummaryrefslogtreecommitdiffstats
path: root/vm
diff options
context:
space:
mode:
Diffstat (limited to 'vm')
-rw-r--r--vm/address.go16
-rw-r--r--vm/common.go1
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)