Fixed deref ptr
This commit is contained in:
parent
863785a520
commit
80261c803a
|
@ -164,6 +164,7 @@ func (bc *BlockChain) setLastBlock() {
|
||||||
bc.Add(bc.genesisBlock)
|
bc.Add(bc.genesisBlock)
|
||||||
fk := append([]byte("bloom"), bc.genesisBlock.Hash()...)
|
fk := append([]byte("bloom"), bc.genesisBlock.Hash()...)
|
||||||
bc.Ethereum.Db().Put(fk, make([]byte, 255))
|
bc.Ethereum.Db().Put(fk, make([]byte, 255))
|
||||||
|
bc.CurrentBlock = bc.genesisBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the last know difficulty (might be 0x0 as initial value, Genesis)
|
// Set the last know difficulty (might be 0x0 as initial value, Genesis)
|
||||||
|
@ -201,10 +202,13 @@ func (bc *BlockChain) GetBlock(hash []byte) *Block {
|
||||||
|
|
||||||
func (self *BlockChain) GetBlockByNumber(num uint64) *Block {
|
func (self *BlockChain) GetBlockByNumber(num uint64) *Block {
|
||||||
block := self.CurrentBlock
|
block := self.CurrentBlock
|
||||||
for ; block.Number.Uint64() != num; block = self.GetBlock(block.PrevHash) {
|
for ; block != nil; block = self.GetBlock(block.PrevHash) {
|
||||||
|
if block.Number.Uint64() == num {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if block.Number.Uint64() == 0 && num != 0 {
|
if block != nil && block.Number.Uint64() == 0 && num != 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,10 @@ type RlpEncodeDecode interface {
|
||||||
RlpValue() []interface{}
|
RlpValue() []interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Rlp(encoder RlpEncode) []byte {
|
||||||
|
return encoder.RlpEncode()
|
||||||
|
}
|
||||||
|
|
||||||
type RlpEncoder struct {
|
type RlpEncoder struct {
|
||||||
rlpData []byte
|
rlpData []byte
|
||||||
}
|
}
|
||||||
|
|
17
ethvm/vm.go
17
ethvm/vm.go
|
@ -670,9 +670,13 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
|
||||||
stack.Pop()
|
stack.Pop()
|
||||||
case DUP1, DUP2, DUP3, DUP4, DUP5, DUP6, DUP7, DUP8, DUP9, DUP10, DUP11, DUP12, DUP13, DUP14, DUP15, DUP16:
|
case DUP1, DUP2, DUP3, DUP4, DUP5, DUP6, DUP7, DUP8, DUP9, DUP10, DUP11, DUP12, DUP13, DUP14, DUP15, DUP16:
|
||||||
n := int(op - DUP1 + 1)
|
n := int(op - DUP1 + 1)
|
||||||
stack.Dupn(n)
|
v := stack.Dupn(n)
|
||||||
|
|
||||||
self.Printf(" => [%d] 0x%x", n, stack.Peek().Bytes())
|
self.Printf(" => [%d] 0x%x", n, stack.Peek().Bytes())
|
||||||
|
|
||||||
|
if OpCode(closure.Get(new(big.Int).Add(pc, ethutil.Big1)).Uint()) == POP && OpCode(closure.Get(new(big.Int).Add(pc, big.NewInt(2))).Uint()) == POP {
|
||||||
|
fmt.Println(toValue(v))
|
||||||
|
}
|
||||||
case SWAP1, SWAP2, SWAP3, SWAP4, SWAP5, SWAP6, SWAP7, SWAP8, SWAP9, SWAP10, SWAP11, SWAP12, SWAP13, SWAP14, SWAP15, SWAP16:
|
case SWAP1, SWAP2, SWAP3, SWAP4, SWAP5, SWAP6, SWAP7, SWAP8, SWAP9, SWAP10, SWAP11, SWAP12, SWAP13, SWAP14, SWAP15, SWAP16:
|
||||||
n := int(op - SWAP1 + 2)
|
n := int(op - SWAP1 + 2)
|
||||||
x, y := stack.Swapn(n)
|
x, y := stack.Swapn(n)
|
||||||
|
@ -1004,3 +1008,14 @@ func (self *Message) Exec(codeAddr []byte, caller ClosureRef) (ret []byte, err e
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mainly used for print variables and passing to Print*
|
||||||
|
func toValue(val *big.Int) interface{} {
|
||||||
|
// Let's assume a string on right padded zero's
|
||||||
|
b := val.Bytes()
|
||||||
|
if b[0] != 0 && b[len(b)-1] == 0x0 && b[len(b)-2] == 0x0 {
|
||||||
|
return string(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue