forked from cerc-io/plugeth
Test
This commit is contained in:
parent
98a631b556
commit
166853aed9
43
peer.go
43
peer.go
@ -299,28 +299,6 @@ func (p *Peer) HandleInbound() {
|
|||||||
var block, lastBlock *ethchain.Block
|
var block, lastBlock *ethchain.Block
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
// 1. Compare the first block over the wire's prev-hash with the hash of your last block
|
|
||||||
// 2. If these two values are the same you can just link the chains together.
|
|
||||||
// [1:0,2:1,3:2] <- Current blocks (format block:previous_block)
|
|
||||||
// [1:0,2:1,3:2,4:3,5:4] <- incoming blocks
|
|
||||||
// == [1,2,3,4,5]
|
|
||||||
// 3. If the values are not the same we will have to go back and calculate the chain with the highest total difficulty
|
|
||||||
// [1:0,2:1,3:2,11:3,12:11,13:12]
|
|
||||||
// [1:0,2:1,3:2,4:3,5:4,6:5]
|
|
||||||
|
|
||||||
// [3:2,11:3,12:11,13:12]
|
|
||||||
// [3:2,4:3,5:4,6:5]
|
|
||||||
// Heb ik dit blok?
|
|
||||||
// Nee: heb ik een blok met PrevHash 3?
|
|
||||||
// Ja: DIVERSION
|
|
||||||
// Nee; Adding to chain
|
|
||||||
|
|
||||||
// See if we can find a common ancestor
|
|
||||||
// 1. Get the earliest block in the package.
|
|
||||||
// 2. Do we have this block?
|
|
||||||
// 3. Yes: Let's continue what we are doing
|
|
||||||
// 4. No: Let's request more blocks back.
|
|
||||||
|
|
||||||
// Make sure we are actually receiving anything
|
// Make sure we are actually receiving anything
|
||||||
if msg.Data.Len()-1 > 1 && p.catchingUp {
|
if msg.Data.Len()-1 > 1 && p.catchingUp {
|
||||||
// We requested blocks and now we need to make sure we have a common ancestor somewhere in these blocks so we can find
|
// We requested blocks and now we need to make sure we have a common ancestor somewhere in these blocks so we can find
|
||||||
@ -342,8 +320,9 @@ func (p *Peer) HandleInbound() {
|
|||||||
if !p.ethereum.StateManager().BlockChain().HasBlock(block.Hash()) {
|
if !p.ethereum.StateManager().BlockChain().HasBlock(block.Hash()) {
|
||||||
// We don't have this block, but we do have a block with the same prevHash, diversion time!
|
// We don't have this block, but we do have a block with the same prevHash, diversion time!
|
||||||
if p.ethereum.StateManager().BlockChain().HasBlockWithPrevHash(block.PrevHash) {
|
if p.ethereum.StateManager().BlockChain().HasBlockWithPrevHash(block.PrevHash) {
|
||||||
//ethutil.Config.Log.Infof("[PEER] Local and foreign chain have diverted after %x, finding best chain!\n", block.PrevHash)
|
|
||||||
if p.ethereum.StateManager().BlockChain().FindCanonicalChainFromMsg(msg, block.PrevHash) {
|
if p.ethereum.StateManager().BlockChain().FindCanonicalChainFromMsg(msg, block.PrevHash) {
|
||||||
|
p.catchingUp = false
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -375,7 +354,8 @@ func (p *Peer) HandleInbound() {
|
|||||||
p.catchingUp = false
|
p.catchingUp = false
|
||||||
p.CatchupWithPeer(p.ethereum.BlockChain().CurrentBlock.Hash())
|
p.CatchupWithPeer(p.ethereum.BlockChain().CurrentBlock.Hash())
|
||||||
} else if ethchain.IsValidationErr(err) {
|
} else if ethchain.IsValidationErr(err) {
|
||||||
// TODO
|
fmt.Println(err)
|
||||||
|
p.catchingUp = false
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// XXX Do we want to catch up if there were errors?
|
// XXX Do we want to catch up if there were errors?
|
||||||
@ -385,12 +365,20 @@ func (p *Peer) HandleInbound() {
|
|||||||
blockInfo := lastBlock.BlockInfo()
|
blockInfo := lastBlock.BlockInfo()
|
||||||
ethutil.Config.Log.Infof("Synced to block height #%d %x %x\n", blockInfo.Number, lastBlock.Hash(), blockInfo.Hash)
|
ethutil.Config.Log.Infof("Synced to block height #%d %x %x\n", blockInfo.Number, lastBlock.Hash(), blockInfo.Hash)
|
||||||
}
|
}
|
||||||
|
|
||||||
p.catchingUp = false
|
p.catchingUp = false
|
||||||
p.CatchupWithPeer(p.ethereum.BlockChain().CurrentBlock.Hash())
|
|
||||||
|
hash := p.ethereum.BlockChain().CurrentBlock.Hash()
|
||||||
|
p.CatchupWithPeer(hash)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p.catchingUp = false
|
if lastBlock != nil && err == nil {
|
||||||
|
fmt.Println("Did proc. no err")
|
||||||
|
} else {
|
||||||
|
fmt.Println("other")
|
||||||
|
}
|
||||||
|
fmt.Println("length of chain", msg.Data.Len())
|
||||||
case ethwire.MsgTxTy:
|
case ethwire.MsgTxTy:
|
||||||
// If the message was a transaction queue the transaction
|
// If the message was a transaction queue the transaction
|
||||||
// in the TxPool where it will undergo validation and
|
// in the TxPool where it will undergo validation and
|
||||||
@ -453,7 +441,10 @@ func (p *Peer) HandleInbound() {
|
|||||||
if len(chain) > 0 {
|
if len(chain) > 0 {
|
||||||
ethutil.Config.Log.Debugf("[PEER] Returning %d blocks: %x ", len(chain), parent.Hash())
|
ethutil.Config.Log.Debugf("[PEER] Returning %d blocks: %x ", len(chain), parent.Hash())
|
||||||
p.QueueMessage(ethwire.NewMessage(ethwire.MsgBlockTy, chain))
|
p.QueueMessage(ethwire.NewMessage(ethwire.MsgBlockTy, chain))
|
||||||
|
} else {
|
||||||
|
p.QueueMessage(ethwire.NewMessage(ethwire.MsgBlockTy, []interface{}))
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ethutil.Config.Log.Debugf("[PEER] Could not find a similar block")
|
ethutil.Config.Log.Debugf("[PEER] Could not find a similar block")
|
||||||
// If no blocks are found we send back a reply with msg not in chain
|
// If no blocks are found we send back a reply with msg not in chain
|
||||||
|
Loading…
Reference in New Issue
Block a user