فهرست منبع

updated tests

obscuren 10 سال پیش
والد
کامیت
750d70c202
4فایلهای تغییر یافته به همراه20 افزوده شده و 14 حذف شده
  1. 1 0
      ethutil/common.go
  2. 10 1
      tests/helper/vm.go
  3. 0 6
      tests/vm/gh_test.go
  4. 9 7
      vm/vm_debug.go

+ 1 - 0
ethutil/common.go

@@ -84,4 +84,5 @@ var (
 	BigFalse = Big0
 	Big32    = big.NewInt(32)
 	Big256   = big.NewInt(0xff)
+	Big257   = big.NewInt(257)
 )

+ 10 - 1
tests/helper/vm.go

@@ -15,6 +15,7 @@ type Env struct {
 	depth        int
 	state        *state.StateDB
 	skipTransfer bool
+	initial      bool
 	Gas          *big.Int
 
 	origin   []byte
@@ -68,9 +69,17 @@ func (self *Env) Depth() int     { return self.depth }
 func (self *Env) SetDepth(i int) { self.depth = i }
 func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error {
 	if self.skipTransfer {
+		// ugly hack
+		if self.initial {
+			self.initial = false
+			return nil
+		}
+
 		if from.Balance().Cmp(amount) < 0 {
 			return errors.New("Insufficient balance in account")
 		}
+
+		return nil
 	}
 	return vm.Transfer(from, to, amount)
 }
@@ -109,10 +118,10 @@ func RunVm(state *state.StateDB, env, exec map[string]string) ([]byte, state.Log
 	)
 
 	caller := state.GetOrNewStateObject(from)
-	caller.SetBalance(ethutil.Big("1000000000000000000"))
 
 	vmenv := NewEnvFromMap(state, env, exec)
 	vmenv.skipTransfer = true
+	vmenv.initial = true
 	ret, err := vmenv.Call(caller, to, data, gas, price, value)
 
 	return ret, vmenv.logs, vmenv.Gas, err

+ 0 - 6
tests/vm/gh_test.go

@@ -79,12 +79,6 @@ func RunVmTest(p string, t *testing.T) {
 	helper.CreateFileTests(t, p, &tests)
 
 	for name, test := range tests {
-		/*
-			helper.Logger.SetLogLevel(5)
-			if name != "createNameRegistratorZeroMem" {
-				continue
-			}
-		*/
 		db, _ := ethdb.NewMemDatabase()
 		statedb := state.New(nil, db)
 		for addr, account := range test.Pre {

+ 9 - 7
vm/vm_debug.go

@@ -50,10 +50,6 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
 
 	vmlogger.Debugf("(%d) (%x) %x (code=%d) gas: %v (d) %x\n", self.env.Depth(), caller.Address()[:4], context.Address(), len(code), context.Gas, callData)
 
-	if p := Precompiled[string(me.Address())]; p != nil {
-		return self.RunPrecompiled(p, callData, context)
-	}
-
 	if self.Recoverable {
 		// Recover from any require exception
 		defer func() {
@@ -70,6 +66,10 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
 		}()
 	}
 
+	if p := Precompiled[string(me.Address())]; p != nil {
+		return self.RunPrecompiled(p, callData, context)
+	}
+
 	var (
 		op OpCode
 
@@ -513,10 +513,12 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
 			// 0x40 range
 		case BLOCKHASH:
 			num := stack.Pop()
-			if num.Cmp(new(big.Int).Sub(self.env.BlockNumber(), ethutil.Big256)) < 0 {
-				stack.Push(ethutil.Big0)
-			} else {
+
+			n := U256(new(big.Int).Sub(self.env.BlockNumber(), ethutil.Big257))
+			if num.Cmp(n) > 0 && num.Cmp(self.env.BlockNumber()) < 0 {
 				stack.Push(ethutil.BigD(self.env.GetHash(num.Uint64())))
+			} else {
+				stack.Push(ethutil.Big0)
 			}
 
 			self.Printf(" => 0x%x", stack.Peek().Bytes())