remove pre compiled for tests

pull/243/merge
obscuren 10 years ago
parent 5b561f434d
commit 4704a0a288
  1. 5
      tests/helper/vm.go
  2. 11
      tests/vm/gh_test.go
  3. 57
      vm/address.go

@ -116,6 +116,8 @@ func RunVm(state *state.StateDB, env, exec map[string]string) ([]byte, state.Log
price = ethutil.Big(exec["gasPrice"]) price = ethutil.Big(exec["gasPrice"])
value = ethutil.Big(exec["value"]) value = ethutil.Big(exec["value"])
) )
// Reset the pre-compiled contracts for VM tests.
vm.Precompiled = make(map[string]*vm.PrecompiledAccount)
caller := state.GetOrNewStateObject(from) caller := state.GetOrNewStateObject(from)
@ -138,6 +140,9 @@ func RunState(statedb *state.StateDB, env, tx map[string]string) ([]byte, state.
caddr = FromHex(env["currentCoinbase"]) caddr = FromHex(env["currentCoinbase"])
) )
// Set pre compiled contracts
vm.Precompiled = vm.PrecompiledContracts()
coinbase := statedb.GetOrNewStateObject(caddr) coinbase := statedb.GetOrNewStateObject(caddr)
coinbase.SetGasPool(ethutil.Big(env["currentGasLimit"])) coinbase.SetGasPool(ethutil.Big(env["currentGasLimit"]))

@ -79,6 +79,7 @@ func RunVmTest(p string, t *testing.T) {
helper.CreateFileTests(t, p, &tests) helper.CreateFileTests(t, p, &tests)
for name, test := range tests { for name, test := range tests {
//helper.Log.Infoln("Running", name)
db, _ := ethdb.NewMemDatabase() db, _ := ethdb.NewMemDatabase()
statedb := state.New(nil, db) statedb := state.New(nil, db)
for addr, account := range test.Pre { for addr, account := range test.Pre {
@ -116,12 +117,6 @@ func RunVmTest(p string, t *testing.T) {
ret, logs, gas, err = helper.RunState(statedb, env, test.Transaction) ret, logs, gas, err = helper.RunState(statedb, env, test.Transaction)
} }
// Log the error if there is one. Error does not mean failing test.
// A test fails if err != nil and post params are specified in the test.
if err != nil {
helper.Log.Infof("%s's: %v\n", name, err)
}
rexp := helper.FromHex(test.Out) rexp := helper.FromHex(test.Out)
if bytes.Compare(rexp, ret) != 0 { if bytes.Compare(rexp, ret) != 0 {
t.Errorf("%s's return failed. Expected %x, got %x\n", name, rexp, ret) t.Errorf("%s's return failed. Expected %x, got %x\n", name, rexp, ret)
@ -129,10 +124,14 @@ func RunVmTest(p string, t *testing.T) {
if isVmTest { if isVmTest {
if len(test.Gas) == 0 && err == nil { if len(test.Gas) == 0 && err == nil {
// Log VM err
helper.Log.Infof("%s's: %v\n", name, err)
t.Errorf("%s's gas unspecified, indicating an error. VM returned (incorrectly) successfull", name) t.Errorf("%s's gas unspecified, indicating an error. VM returned (incorrectly) successfull", name)
} else { } else {
gexp := ethutil.Big(test.Gas) gexp := ethutil.Big(test.Gas)
if gexp.Cmp(gas) != 0 { if gexp.Cmp(gas) != 0 {
// Log VM err
helper.Log.Infof("%s's: %v\n", name, err)
t.Errorf("%s's gas failed. Expected %v, got %v\n", name, gexp, gas) t.Errorf("%s's gas failed. Expected %v, got %v\n", name, gexp, gas)
} }
} }

@ -20,32 +20,37 @@ func (self PrecompiledAccount) Call(in []byte) []byte {
return self.fn(in) return self.fn(in)
} }
var Precompiled = map[string]*PrecompiledAccount{ var Precompiled = PrecompiledContracts()
// ECRECOVER
string(ethutil.LeftPadBytes([]byte{1}, 20)): &PrecompiledAccount{func(l int) *big.Int { // XXX Could set directly. Testing requires resetting and setting of pre compiled contracts.
return GasEcrecover func PrecompiledContracts() map[string]*PrecompiledAccount {
}, ecrecoverFunc}, return map[string]*PrecompiledAccount{
// ECRECOVER
// SHA256 string(ethutil.LeftPadBytes([]byte{1}, 20)): &PrecompiledAccount{func(l int) *big.Int {
string(ethutil.LeftPadBytes([]byte{2}, 20)): &PrecompiledAccount{func(l int) *big.Int { return GasEcrecover
n := big.NewInt(int64(l+31)/32 + 1) }, ecrecoverFunc},
n.Mul(n, GasSha256)
return n // SHA256
}, sha256Func}, string(ethutil.LeftPadBytes([]byte{2}, 20)): &PrecompiledAccount{func(l int) *big.Int {
n := big.NewInt(int64(l+31)/32 + 1)
// RIPEMD160 n.Mul(n, GasSha256)
string(ethutil.LeftPadBytes([]byte{3}, 20)): &PrecompiledAccount{func(l int) *big.Int { return n
n := big.NewInt(int64(l+31)/32 + 1) }, sha256Func},
n.Mul(n, GasRipemd)
return n // RIPEMD160
}, ripemd160Func}, string(ethutil.LeftPadBytes([]byte{3}, 20)): &PrecompiledAccount{func(l int) *big.Int {
n := big.NewInt(int64(l+31)/32 + 1)
string(ethutil.LeftPadBytes([]byte{4}, 20)): &PrecompiledAccount{func(l int) *big.Int { n.Mul(n, GasRipemd)
n := big.NewInt(int64(l+31)/32 + 1) return n
n.Mul(n, GasMemCpy) }, ripemd160Func},
return n string(ethutil.LeftPadBytes([]byte{4}, 20)): &PrecompiledAccount{func(l int) *big.Int {
}, memCpy}, n := big.NewInt(int64(l+31)/32 + 1)
n.Mul(n, GasMemCpy)
return n
}, memCpy},
}
} }
func sha256Func(in []byte) []byte { func sha256Func(in []byte) []byte {

Loading…
Cancel
Save