aboutsummaryrefslogtreecommitdiffstats
path: root/peer.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-05-15 02:35:23 +0800
committerobscuren <geffobscura@gmail.com>2014-05-15 02:35:23 +0800
commit166853aed94484b327a89a2554312f6739fce8a9 (patch)
treed55632976eff259398deb953dbc8e6db1366067f /peer.go
parent98a631b5563b8a87c3fc83f14256087251926a61 (diff)
downloaddexon-166853aed94484b327a89a2554312f6739fce8a9.tar.gz
dexon-166853aed94484b327a89a2554312f6739fce8a9.tar.zst
dexon-166853aed94484b327a89a2554312f6739fce8a9.zip
Test
Diffstat (limited to 'peer.go')
-rw-r--r--peer.go43
1 files changed, 17 insertions, 26 deletions
diff --git a/peer.go b/peer.go
index 29f98a4fb..a509178d2 100644
--- a/peer.go
+++ b/peer.go
@@ -299,28 +299,6 @@ func (p *Peer) HandleInbound() {
var block, lastBlock *ethchain.Block
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
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
@@ -342,8 +320,9 @@ func (p *Peer) HandleInbound() {
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!
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) {
+ p.catchingUp = false
+
return
}
}
@@ -375,7 +354,8 @@ func (p *Peer) HandleInbound() {
p.catchingUp = false
p.CatchupWithPeer(p.ethereum.BlockChain().CurrentBlock.Hash())
} else if ethchain.IsValidationErr(err) {
- // TODO
+ fmt.Println(err)
+ p.catchingUp = false
}
} else {
// XXX Do we want to catch up if there were errors?
@@ -385,12 +365,20 @@ func (p *Peer) HandleInbound() {
blockInfo := lastBlock.BlockInfo()
ethutil.Config.Log.Infof("Synced to block height #%d %x %x\n", blockInfo.Number, lastBlock.Hash(), blockInfo.Hash)
}
+
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:
// If the message was a transaction queue the transaction
// in the TxPool where it will undergo validation and
@@ -453,7 +441,10 @@ func (p *Peer) HandleInbound() {
if len(chain) > 0 {
ethutil.Config.Log.Debugf("[PEER] Returning %d blocks: %x ", len(chain), parent.Hash())
p.QueueMessage(ethwire.NewMessage(ethwire.MsgBlockTy, chain))
+ } else {
+ p.QueueMessage(ethwire.NewMessage(ethwire.MsgBlockTy, []interface{}))
}
+
} else {
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