aboutsummaryrefslogtreecommitdiffstats
path: root/ethchain
diff options
context:
space:
mode:
authorzelig <viktor.tron@gmail.com>2014-06-26 23:37:56 +0800
committerzelig <viktor.tron@gmail.com>2014-06-26 23:37:56 +0800
commitda38faa8f7c0f2a6620b54e46fc38a201845e104 (patch)
tree2656f980c91f9f93d98215867f75c9253e330019 /ethchain
parent098136b68198083a47408ec5c04cd0c8f9fdcc87 (diff)
parent0ed19d9f2024744ba93d0e34db6939766b3cfed5 (diff)
downloadgo-tangerine-da38faa8f7c0f2a6620b54e46fc38a201845e104.tar
go-tangerine-da38faa8f7c0f2a6620b54e46fc38a201845e104.tar.gz
go-tangerine-da38faa8f7c0f2a6620b54e46fc38a201845e104.tar.bz2
go-tangerine-da38faa8f7c0f2a6620b54e46fc38a201845e104.tar.lz
go-tangerine-da38faa8f7c0f2a6620b54e46fc38a201845e104.tar.xz
go-tangerine-da38faa8f7c0f2a6620b54e46fc38a201845e104.tar.zst
go-tangerine-da38faa8f7c0f2a6620b54e46fc38a201845e104.zip
merge upstream; fix port in use warning; new logger API
Diffstat (limited to 'ethchain')
-rw-r--r--ethchain/asm.go4
-rw-r--r--ethchain/block_chain.go11
-rw-r--r--ethchain/vm.go31
3 files changed, 22 insertions, 24 deletions
diff --git a/ethchain/asm.go b/ethchain/asm.go
index 277326ff9..09d6af56f 100644
--- a/ethchain/asm.go
+++ b/ethchain/asm.go
@@ -18,7 +18,7 @@ func Disassemble(script []byte) (asm []string) {
// Get the opcode (it must be an opcode!)
op := OpCode(val)
- asm = append(asm, fmt.Sprintf("%v", op))
+ asm = append(asm, fmt.Sprintf("%04v: %v", pc, op))
switch op {
case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
@@ -28,7 +28,7 @@ func Disassemble(script []byte) (asm []string) {
if len(data) == 0 {
data = []byte{0}
}
- asm = append(asm, fmt.Sprintf("0x%x", data))
+ asm = append(asm, fmt.Sprintf("%04v: 0x%x", pc, data))
pc.Add(pc, big.NewInt(a-1))
}
diff --git a/ethchain/block_chain.go b/ethchain/block_chain.go
index f964e0e3a..05b2564cf 100644
--- a/ethchain/block_chain.go
+++ b/ethchain/block_chain.go
@@ -176,18 +176,12 @@ func (bc *BlockChain) ResetTillBlockHash(hash []byte) error {
bc.LastBlockHash = bc.genesisBlock.Hash()
bc.LastBlockNumber = 1
} else {
- // TODO: Somehow this doesn't really give the right numbers, double check.
- // TODO: Change logs into debug lines
returnTo = bc.GetBlock(hash)
bc.CurrentBlock = returnTo
bc.LastBlockHash = returnTo.Hash()
- //info := bc.BlockInfo(returnTo)
bc.LastBlockNumber = returnTo.Number.Uint64()
}
- // XXX Why are we resetting? This is the block chain, it has nothing to do with states
- //bc.Ethereum.StateManager().PrepareDefault(returnTo)
-
// Manually reset the last sync block
err := ethutil.Config.Db.Delete(lastBlock.Hash())
if err != nil {
@@ -233,6 +227,11 @@ func (bc *BlockChain) GetChainFromHash(hash []byte, max uint64) []interface{} {
for i := uint64(0); bytes.Compare(currentHash, hash) != 0 && num >= parentNumber && i < count; i++ {
// Get the block of the chain
block := bc.GetBlock(currentHash)
+ if block == nil {
+ chainlogger.Debugf("Unexpected error during GetChainFromHash: Unable to find %x\n", currentHash)
+ break
+ }
+
currentHash = block.PrevHash
chain = append(chain, block.Value().Val)
diff --git a/ethchain/vm.go b/ethchain/vm.go
index 4c1821f56..20d355674 100644
--- a/ethchain/vm.go
+++ b/ethchain/vm.go
@@ -102,22 +102,21 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
vmlogger.Debugf("(~) %x gas: %v (d) %x\n", closure.object.Address(), closure.Gas, closure.Args)
- // Memory for the current closure
- mem := &Memory{}
- // New stack (should this be shared?)
- stack := NewStack()
- require := func(m int) {
- if stack.Len() < m {
- isRequireError = true
- panic(fmt.Sprintf("stack err = %d, req = %d", stack.Len(), m))
+ var (
+ op OpCode
+
+ mem = &Memory{}
+ stack = NewStack()
+ pc = big.NewInt(0)
+ step = 0
+ prevStep = 0
+ require = func(m int) {
+ if stack.Len() < m {
+ isRequireError = true
+ panic(fmt.Sprintf("%04v (%v) stack err size = %d, required = %d", pc, op, stack.Len(), m))
+ }
}
- }
-
- // Program counter
- pc := big.NewInt(0)
- // Current step count
- step := 0
- prevStep := 0
+ )
for {
prevStep = step
@@ -128,7 +127,7 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
// Get the memory location of pc
val := closure.Get(pc)
// Get the opcode (it must be an opcode!)
- op := OpCode(val.Uint())
+ op = OpCode(val.Uint())
gas := new(big.Int)
addStepGasUsage := func(amount *big.Int) {