updated tests
This commit is contained in:
parent
34689cb3f3
commit
750d70c202
@ -84,4 +84,5 @@ var (
|
|||||||
BigFalse = Big0
|
BigFalse = Big0
|
||||||
Big32 = big.NewInt(32)
|
Big32 = big.NewInt(32)
|
||||||
Big256 = big.NewInt(0xff)
|
Big256 = big.NewInt(0xff)
|
||||||
|
Big257 = big.NewInt(257)
|
||||||
)
|
)
|
||||||
|
@ -15,6 +15,7 @@ type Env struct {
|
|||||||
depth int
|
depth int
|
||||||
state *state.StateDB
|
state *state.StateDB
|
||||||
skipTransfer bool
|
skipTransfer bool
|
||||||
|
initial bool
|
||||||
Gas *big.Int
|
Gas *big.Int
|
||||||
|
|
||||||
origin []byte
|
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) SetDepth(i int) { self.depth = i }
|
||||||
func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error {
|
func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error {
|
||||||
if self.skipTransfer {
|
if self.skipTransfer {
|
||||||
|
// ugly hack
|
||||||
|
if self.initial {
|
||||||
|
self.initial = false
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if from.Balance().Cmp(amount) < 0 {
|
if from.Balance().Cmp(amount) < 0 {
|
||||||
return errors.New("Insufficient balance in account")
|
return errors.New("Insufficient balance in account")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
return vm.Transfer(from, to, amount)
|
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 := state.GetOrNewStateObject(from)
|
||||||
caller.SetBalance(ethutil.Big("1000000000000000000"))
|
|
||||||
|
|
||||||
vmenv := NewEnvFromMap(state, env, exec)
|
vmenv := NewEnvFromMap(state, env, exec)
|
||||||
vmenv.skipTransfer = true
|
vmenv.skipTransfer = true
|
||||||
|
vmenv.initial = true
|
||||||
ret, err := vmenv.Call(caller, to, data, gas, price, value)
|
ret, err := vmenv.Call(caller, to, data, gas, price, value)
|
||||||
|
|
||||||
return ret, vmenv.logs, vmenv.Gas, err
|
return ret, vmenv.logs, vmenv.Gas, err
|
||||||
|
@ -79,12 +79,6 @@ 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.Logger.SetLogLevel(5)
|
|
||||||
if name != "createNameRegistratorZeroMem" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
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 {
|
||||||
|
@ -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)
|
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 {
|
if self.Recoverable {
|
||||||
// Recover from any require exception
|
// Recover from any require exception
|
||||||
defer func() {
|
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 (
|
var (
|
||||||
op OpCode
|
op OpCode
|
||||||
|
|
||||||
@ -513,10 +513,12 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price *
|
|||||||
// 0x40 range
|
// 0x40 range
|
||||||
case BLOCKHASH:
|
case BLOCKHASH:
|
||||||
num := stack.Pop()
|
num := stack.Pop()
|
||||||
if num.Cmp(new(big.Int).Sub(self.env.BlockNumber(), ethutil.Big256)) < 0 {
|
|
||||||
stack.Push(ethutil.Big0)
|
n := U256(new(big.Int).Sub(self.env.BlockNumber(), ethutil.Big257))
|
||||||
} else {
|
if num.Cmp(n) > 0 && num.Cmp(self.env.BlockNumber()) < 0 {
|
||||||
stack.Push(ethutil.BigD(self.env.GetHash(num.Uint64())))
|
stack.Push(ethutil.BigD(self.env.GetHash(num.Uint64())))
|
||||||
|
} else {
|
||||||
|
stack.Push(ethutil.Big0)
|
||||||
}
|
}
|
||||||
|
|
||||||
self.Printf(" => 0x%x", stack.Peek().Bytes())
|
self.Printf(" => 0x%x", stack.Peek().Bytes())
|
||||||
|
Loading…
Reference in New Issue
Block a user