forked from cerc-io/plugeth
Attempt to catch up from unknown block
This commit is contained in:
parent
2458697dad
commit
9ed8dc7384
@ -73,6 +73,10 @@ func (self *BlockPool) SetBlock(b *ethchain.Block, peer *Peer) {
|
||||
if self.pool[hash] == nil && !self.eth.BlockChain().HasBlock(b.Hash()) {
|
||||
self.hashPool = append(self.hashPool, b.Hash())
|
||||
self.pool[hash] = &block{peer, peer, b, time.Now(), 0}
|
||||
|
||||
if !self.eth.BlockChain().HasBlock(b.PrevHash) && self.pool[string(b.PrevHash)] == nil {
|
||||
peer.QueueMessage(ethwire.NewMessage(ethwire.MsgGetBlockHashesTy, []interface{}{b.PrevHash, uint32(256)}))
|
||||
}
|
||||
} else if self.pool[hash] != nil {
|
||||
self.pool[hash].block = b
|
||||
}
|
||||
@ -218,6 +222,7 @@ out:
|
||||
case <-procTimer.C:
|
||||
// XXX We can optimize this lifting this on to a new goroutine.
|
||||
// We'd need to make sure that the pools are properly protected by a mutex
|
||||
// XXX This should moved in The Great Refactor(TM)
|
||||
amount := self.ProcessCanonical(func(block *ethchain.Block) {
|
||||
err := self.eth.StateManager().Process(block, false)
|
||||
if err != nil {
|
||||
|
@ -23,12 +23,13 @@ type JSBlock struct {
|
||||
Name string `json:"name"`
|
||||
GasLimit string `json:"gasLimit"`
|
||||
GasUsed string `json:"gasUsed"`
|
||||
PrevHash string `json:"prevHash"`
|
||||
}
|
||||
|
||||
// Creates a new QML Block from a chain block
|
||||
func NewJSBlock(block *ethchain.Block) *JSBlock {
|
||||
if block == nil {
|
||||
return nil
|
||||
return &JSBlock{}
|
||||
}
|
||||
|
||||
var ptxs []JSTransaction
|
||||
@ -38,7 +39,14 @@ func NewJSBlock(block *ethchain.Block) *JSBlock {
|
||||
|
||||
list := ethutil.NewList(ptxs)
|
||||
|
||||
return &JSBlock{ref: block, Size: block.Size().String(), Number: int(block.Number.Uint64()), GasUsed: block.GasUsed.String(), GasLimit: block.GasLimit.String(), Hash: ethutil.Bytes2Hex(block.Hash()), Transactions: list, Time: block.Time, Coinbase: ethutil.Bytes2Hex(block.Coinbase)}
|
||||
return &JSBlock{
|
||||
ref: block, Size: block.Size().String(),
|
||||
Number: int(block.Number.Uint64()), GasUsed: block.GasUsed.String(),
|
||||
GasLimit: block.GasLimit.String(), Hash: ethutil.Bytes2Hex(block.Hash()),
|
||||
Transactions: list, Time: block.Time,
|
||||
Coinbase: ethutil.Bytes2Hex(block.Coinbase),
|
||||
PrevHash: ethutil.Bytes2Hex(block.PrevHash),
|
||||
}
|
||||
}
|
||||
|
||||
func (self *JSBlock) ToString() string {
|
||||
|
1
peer.go
1
peer.go
@ -221,7 +221,6 @@ func (self *Peer) Connect(addr string) (conn net.Conn, err error) {
|
||||
for attempts := 0; attempts < maxTries; attempts++ {
|
||||
conn, err = net.DialTimeout("tcp", addr, 10*time.Second)
|
||||
if err != nil {
|
||||
//peerlogger.Debugf("Peer connection failed. Retrying (%d/%d) (%s)\n", attempts+1, maxTries, addr)
|
||||
time.Sleep(time.Duration(attempts*20) * time.Second)
|
||||
continue
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user