aboutsummaryrefslogtreecommitdiffstats
path: root/vm/address.go
diff options
context:
space:
mode:
Diffstat (limited to 'vm/address.go')
-rw-r--r--vm/address.go57
1 files changed, 31 insertions, 26 deletions
diff --git a/vm/address.go b/vm/address.go
index be4284421..1c9369ab7 100644
--- a/vm/address.go
+++ b/vm/address.go
@@ -20,32 +20,37 @@ func (self PrecompiledAccount) Call(in []byte) []byte {
return self.fn(in)
}
-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},
+var Precompiled = PrecompiledContracts()
+
+// XXX Could set directly. Testing requires resetting and setting of pre compiled contracts.
+func PrecompiledContracts() map[string]*PrecompiledAccount {
+ return 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 {