mirror of
https://gitlab.com/pulsechaincom/go-pulse.git
synced 2024-12-25 12:57:17 +00:00
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()) {
|
if self.pool[hash] == nil && !self.eth.BlockChain().HasBlock(b.Hash()) {
|
||||||
self.hashPool = append(self.hashPool, b.Hash())
|
self.hashPool = append(self.hashPool, b.Hash())
|
||||||
self.pool[hash] = &block{peer, peer, b, time.Now(), 0}
|
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 {
|
} else if self.pool[hash] != nil {
|
||||||
self.pool[hash].block = b
|
self.pool[hash].block = b
|
||||||
}
|
}
|
||||||
@ -218,6 +222,7 @@ out:
|
|||||||
case <-procTimer.C:
|
case <-procTimer.C:
|
||||||
// XXX We can optimize this lifting this on to a new goroutine.
|
// 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
|
// 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) {
|
amount := self.ProcessCanonical(func(block *ethchain.Block) {
|
||||||
err := self.eth.StateManager().Process(block, false)
|
err := self.eth.StateManager().Process(block, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -23,12 +23,13 @@ type JSBlock struct {
|
|||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
GasLimit string `json:"gasLimit"`
|
GasLimit string `json:"gasLimit"`
|
||||||
GasUsed string `json:"gasUsed"`
|
GasUsed string `json:"gasUsed"`
|
||||||
|
PrevHash string `json:"prevHash"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates a new QML Block from a chain block
|
// Creates a new QML Block from a chain block
|
||||||
func NewJSBlock(block *ethchain.Block) *JSBlock {
|
func NewJSBlock(block *ethchain.Block) *JSBlock {
|
||||||
if block == nil {
|
if block == nil {
|
||||||
return nil
|
return &JSBlock{}
|
||||||
}
|
}
|
||||||
|
|
||||||
var ptxs []JSTransaction
|
var ptxs []JSTransaction
|
||||||
@ -38,7 +39,14 @@ func NewJSBlock(block *ethchain.Block) *JSBlock {
|
|||||||
|
|
||||||
list := ethutil.NewList(ptxs)
|
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 {
|
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++ {
|
for attempts := 0; attempts < maxTries; attempts++ {
|
||||||
conn, err = net.DialTimeout("tcp", addr, 10*time.Second)
|
conn, err = net.DialTimeout("tcp", addr, 10*time.Second)
|
||||||
if err != nil {
|
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)
|
time.Sleep(time.Duration(attempts*20) * time.Second)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user