diff options
author | Taylor Gerring <taylor.gerring@gmail.com> | 2014-12-22 01:42:32 +0800 |
---|---|---|
committer | Taylor Gerring <taylor.gerring@gmail.com> | 2014-12-22 01:42:32 +0800 |
commit | 1360f027d9e365242466ca346b2b56f421729d91 (patch) | |
tree | a30ff7292e87583781b682b47d851d0f6e1925fc /vm/address.go | |
parent | b3629c6f62bd3774eb8858819a8ee07dfb775b73 (diff) | |
parent | 795b14330ad4399ef292835eac452d258dcd7464 (diff) | |
download | dexon-1360f027d9e365242466ca346b2b56f421729d91.tar dexon-1360f027d9e365242466ca346b2b56f421729d91.tar.gz dexon-1360f027d9e365242466ca346b2b56f421729d91.tar.bz2 dexon-1360f027d9e365242466ca346b2b56f421729d91.tar.lz dexon-1360f027d9e365242466ca346b2b56f421729d91.tar.xz dexon-1360f027d9e365242466ca346b2b56f421729d91.tar.zst dexon-1360f027d9e365242466ca346b2b56f421729d91.zip |
Merge pull request #216 from ethereum/develop
Update tests branch from develop
Diffstat (limited to 'vm/address.go')
-rw-r--r-- | vm/address.go | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/vm/address.go b/vm/address.go index 06bd35f6b..611979c94 100644 --- a/vm/address.go +++ b/vm/address.go @@ -11,19 +11,29 @@ type Address interface { Call(in []byte) []byte } -type PrecompiledAddress struct { - Gas *big.Int +type PrecompiledAccount struct { + Gas func(l int) *big.Int fn func(in []byte) []byte } -func (self PrecompiledAddress) Call(in []byte) []byte { +func (self PrecompiledAccount) Call(in []byte) []byte { return self.fn(in) } -var Precompiled = map[uint64]*PrecompiledAddress{ - 1: &PrecompiledAddress{big.NewInt(500), ecrecoverFunc}, - 2: &PrecompiledAddress{big.NewInt(100), sha256Func}, - 3: &PrecompiledAddress{big.NewInt(100), ripemd160Func}, +var Precompiled = map[string]*PrecompiledAccount{ + string(ethutil.LeftPadBytes([]byte{1}, 20)): &PrecompiledAccount{func(l int) *big.Int { + return GasEcrecover + }, ecrecoverFunc}, + 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}, + 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}, } func sha256Func(in []byte) []byte { |