aboutsummaryrefslogtreecommitdiffstats
path: root/eth/protocol.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-03-19 01:42:01 +0800
committerobscuren <geffobscura@gmail.com>2015-03-19 01:42:01 +0800
commitf0bb13609939ebbee22e9c9f39c6742341b0d20b (patch)
treef92e9d256edd93cb384a2c1f9bddc0084347ee38 /eth/protocol.go
parentf9a6038f5b82cad6956c9cbb7f1220d97570632b (diff)
parentc12046d6bfb197adb0004d629a783dd92f0cfc0f (diff)
downloadgo-tangerine-f0bb13609939ebbee22e9c9f39c6742341b0d20b.tar
go-tangerine-f0bb13609939ebbee22e9c9f39c6742341b0d20b.tar.gz
go-tangerine-f0bb13609939ebbee22e9c9f39c6742341b0d20b.tar.bz2
go-tangerine-f0bb13609939ebbee22e9c9f39c6742341b0d20b.tar.lz
go-tangerine-f0bb13609939ebbee22e9c9f39c6742341b0d20b.tar.xz
go-tangerine-f0bb13609939ebbee22e9c9f39c6742341b0d20b.tar.zst
go-tangerine-f0bb13609939ebbee22e9c9f39c6742341b0d20b.zip
Merge branch 'develop' into conversion
Diffstat (limited to 'eth/protocol.go')
-rw-r--r--eth/protocol.go48
1 files changed, 26 insertions, 22 deletions
diff --git a/eth/protocol.go b/eth/protocol.go
index 15a8e1831..a1c2ae688 100644
--- a/eth/protocol.go
+++ b/eth/protocol.go
@@ -58,13 +58,15 @@ var errorToString = map[int]string{
// ethProtocol represents the ethereum wire protocol
// instance is running on each peer
type ethProtocol struct {
- txPool txPool
- chainManager chainManager
- blockPool blockPool
- peer *p2p.Peer
- id string
- rw p2p.MsgReadWriter
- errors *errs.Errors
+ txPool txPool
+ chainManager chainManager
+ blockPool blockPool
+ peer *p2p.Peer
+ id string
+ rw p2p.MsgReadWriter
+ errors *errs.Errors
+ protocolVersion int
+ networkId int
}
// backend is the interface the ethereum protocol backend should implement
@@ -101,27 +103,29 @@ type getBlockHashesMsgData struct {
// main entrypoint, wrappers starting a server running the eth protocol
// use this constructor to attach the protocol ("class") to server caps
// the Dev p2p layer then runs the protocol instance on each peer
-func EthProtocol(txPool txPool, chainManager chainManager, blockPool blockPool) p2p.Protocol {
+func EthProtocol(protocolVersion, networkId int, txPool txPool, chainManager chainManager, blockPool blockPool) p2p.Protocol {
return p2p.Protocol{
Name: "eth",
- Version: ProtocolVersion,
+ Version: uint(protocolVersion),
Length: ProtocolLength,
Run: func(peer *p2p.Peer, rw p2p.MsgReadWriter) error {
- return runEthProtocol(txPool, chainManager, blockPool, peer, rw)
+ return runEthProtocol(protocolVersion, networkId, txPool, chainManager, blockPool, peer, rw)
},
}
}
// the main loop that handles incoming messages
// note RemovePeer in the post-disconnect hook
-func runEthProtocol(txPool txPool, chainManager chainManager, blockPool blockPool, peer *p2p.Peer, rw p2p.MsgReadWriter) (err error) {
+func runEthProtocol(protocolVersion, networkId int, txPool txPool, chainManager chainManager, blockPool blockPool, peer *p2p.Peer, rw p2p.MsgReadWriter) (err error) {
id := peer.ID()
self := &ethProtocol{
- txPool: txPool,
- chainManager: chainManager,
- blockPool: blockPool,
- rw: rw,
- peer: peer,
+ txPool: txPool,
+ chainManager: chainManager,
+ blockPool: blockPool,
+ rw: rw,
+ peer: peer,
+ protocolVersion: protocolVersion,
+ networkId: networkId,
errors: &errs.Errors{
Package: "ETH",
Errors: errorToString,
@@ -291,8 +295,8 @@ func (self *ethProtocol) statusMsg() p2p.Msg {
td, currentBlock, genesisBlock := self.chainManager.Status()
return p2p.NewMsg(StatusMsg,
- uint32(ProtocolVersion),
- uint32(NetworkId),
+ uint32(self.protocolVersion),
+ uint32(self.networkId),
td,
currentBlock,
genesisBlock,
@@ -330,12 +334,12 @@ func (self *ethProtocol) handleStatus() error {
return self.protoError(ErrGenesisBlockMismatch, "%x (!= %x)", status.GenesisBlock, genesisBlock)
}
- if status.NetworkId != NetworkId {
- return self.protoError(ErrNetworkIdMismatch, "%d (!= %d)", status.NetworkId, NetworkId)
+ if int(status.NetworkId) != self.networkId {
+ return self.protoError(ErrNetworkIdMismatch, "%d (!= %d)", status.NetworkId, self.networkId)
}
- if ProtocolVersion != status.ProtocolVersion {
- return self.protoError(ErrProtocolVersionMismatch, "%d (!= %d)", status.ProtocolVersion, ProtocolVersion)
+ if int(status.ProtocolVersion) != self.protocolVersion {
+ return self.protoError(ErrProtocolVersionMismatch, "%d (!= %d)", status.ProtocolVersion, self.protocolVersion)
}
self.peer.Infof("Peer is [eth] capable (%d/%d). TD=%v H=%x\n", status.ProtocolVersion, status.NetworkId, status.TD, status.CurrentBlock[:4])