diff options
author | obscuren <geffobscura@gmail.com> | 2015-01-04 00:18:43 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-01-04 00:18:43 +0800 |
commit | ca1b2a1a91401255ab4e26cec7eb575b99ecb8da (patch) | |
tree | 87b3c8fed57f688c138288ed5d90a0a3a1e3274b /vm/vm_debug.go | |
parent | 16f417f5af16de8f1c2c140f8b249bd989200bd3 (diff) | |
download | dexon-ca1b2a1a91401255ab4e26cec7eb575b99ecb8da.tar dexon-ca1b2a1a91401255ab4e26cec7eb575b99ecb8da.tar.gz dexon-ca1b2a1a91401255ab4e26cec7eb575b99ecb8da.tar.bz2 dexon-ca1b2a1a91401255ab4e26cec7eb575b99ecb8da.tar.lz dexon-ca1b2a1a91401255ab4e26cec7eb575b99ecb8da.tar.xz dexon-ca1b2a1a91401255ab4e26cec7eb575b99ecb8da.tar.zst dexon-ca1b2a1a91401255ab4e26cec7eb575b99ecb8da.zip |
Changed prev_hash to block_hash, state transition now uses vm env
* PREVHASH => BLOCKHASH( N )
* State transition object uses VMEnv as it's query interface
* Updated vm.Enviroment has GetHash( n ) for BLOCKHASH instruction
* Added GetHash to xeth, core, utils & test environments
Diffstat (limited to 'vm/vm_debug.go')
-rw-r--r-- | vm/vm_debug.go | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/vm/vm_debug.go b/vm/vm_debug.go index 6ad385fd0..baacf752b 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -42,9 +42,9 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price * msg := self.env.State().Manifest().AddMessage(&state.Message{ To: me.Address(), From: caller.Address(), - Input: callData, - Origin: self.env.Origin(), - Block: self.env.BlockHash(), Timestamp: self.env.Time(), Coinbase: self.env.Coinbase(), Number: self.env.BlockNumber(), + Input: callData, + Origin: self.env.Origin(), + Timestamp: self.env.Time(), Coinbase: self.env.Coinbase(), Number: self.env.BlockNumber(), Value: value, }) context := NewContext(msg, caller, me, code, gas, price) @@ -516,12 +516,15 @@ func (self *DebugVm) Run(me, caller ContextRef, code []byte, value, gas, price * self.Printf(" => %v", context.Price) // 0x40 range - case PREVHASH: - prevHash := self.env.PrevHash() - - stack.Push(ethutil.BigD(prevHash)) + case BLOCKHASH: + num := stack.Pop() + if num.Cmp(new(big.Int).Sub(self.env.BlockNumber(), ethutil.Big256)) < 0 { + stack.Push(ethutil.Big0) + } else { + stack.Push(ethutil.BigD(self.env.GetHash(num.Uint64()))) + } - self.Printf(" => 0x%x", prevHash) + self.Printf(" => 0x%x", stack.Peek().Bytes()) case COINBASE: coinbase := self.env.Coinbase() |