|
|
@@ -129,9 +129,7 @@ func (p *peer) MarkTransaction(hash common.Hash) {
|
|
|
// SendTransactions sends transactions to the peer and includes the hashes
|
|
|
// in its transaction hash set for future reference.
|
|
|
func (p *peer) SendTransactions(txs types.Transactions) error {
|
|
|
- propTxnOutPacketsMeter.Mark(1)
|
|
|
for _, tx := range txs {
|
|
|
- propTxnOutTrafficMeter.Mark(tx.Size().Int64())
|
|
|
p.knownTxs.Add(tx.Hash())
|
|
|
}
|
|
|
return p2p.Send(p.rw, TxMsg, txs)
|
|
|
@@ -139,27 +137,17 @@ func (p *peer) SendTransactions(txs types.Transactions) error {
|
|
|
|
|
|
// SendBlockHashes sends a batch of known hashes to the remote peer.
|
|
|
func (p *peer) SendBlockHashes(hashes []common.Hash) error {
|
|
|
- reqHashOutPacketsMeter.Mark(1)
|
|
|
- reqHashOutTrafficMeter.Mark(int64(32 * len(hashes)))
|
|
|
-
|
|
|
return p2p.Send(p.rw, BlockHashesMsg, hashes)
|
|
|
}
|
|
|
|
|
|
// SendBlocks sends a batch of blocks to the remote peer.
|
|
|
func (p *peer) SendBlocks(blocks []*types.Block) error {
|
|
|
- reqBlockOutPacketsMeter.Mark(1)
|
|
|
- for _, block := range blocks {
|
|
|
- reqBlockOutTrafficMeter.Mark(block.Size().Int64())
|
|
|
- }
|
|
|
return p2p.Send(p.rw, BlocksMsg, blocks)
|
|
|
}
|
|
|
|
|
|
// SendNewBlockHashes announces the availability of a number of blocks through
|
|
|
// a hash notification.
|
|
|
func (p *peer) SendNewBlockHashes(hashes []common.Hash) error {
|
|
|
- propHashOutPacketsMeter.Mark(1)
|
|
|
- propHashOutTrafficMeter.Mark(int64(32 * len(hashes)))
|
|
|
-
|
|
|
for _, hash := range hashes {
|
|
|
p.knownBlocks.Add(hash)
|
|
|
}
|
|
|
@@ -168,33 +156,55 @@ func (p *peer) SendNewBlockHashes(hashes []common.Hash) error {
|
|
|
|
|
|
// SendNewBlock propagates an entire block to a remote peer.
|
|
|
func (p *peer) SendNewBlock(block *types.Block, td *big.Int) error {
|
|
|
- propBlockOutPacketsMeter.Mark(1)
|
|
|
- propBlockOutTrafficMeter.Mark(block.Size().Int64())
|
|
|
-
|
|
|
p.knownBlocks.Add(block.Hash())
|
|
|
return p2p.Send(p.rw, NewBlockMsg, []interface{}{block, td})
|
|
|
}
|
|
|
|
|
|
+// SendBlockHeaders sends a batch of block headers to the remote peer.
|
|
|
+func (p *peer) SendBlockHeaders(headers []*types.Header) error {
|
|
|
+ return p2p.Send(p.rw, BlockHeadersMsg, headers)
|
|
|
+}
|
|
|
+
|
|
|
+// SendNodeData sends a batch of arbitrary internal data, corresponding to the
|
|
|
+// hashes requested.
|
|
|
+func (p *peer) SendNodeData(data [][]byte) error {
|
|
|
+ return p2p.Send(p.rw, NodeDataMsg, data)
|
|
|
+}
|
|
|
+
|
|
|
// RequestHashes fetches a batch of hashes from a peer, starting at from, going
|
|
|
// towards the genesis block.
|
|
|
func (p *peer) RequestHashes(from common.Hash) error {
|
|
|
- glog.V(logger.Debug).Infof("Peer [%s] fetching hashes (%d) from %x...\n", p.id, downloader.MaxHashFetch, from[:4])
|
|
|
+ glog.V(logger.Debug).Infof("%v fetching hashes (%d) from %x...\n", p, downloader.MaxHashFetch, from[:4])
|
|
|
return p2p.Send(p.rw, GetBlockHashesMsg, getBlockHashesData{from, uint64(downloader.MaxHashFetch)})
|
|
|
}
|
|
|
|
|
|
-// RequestHashesFromNumber fetches a batch of hashes from a peer, starting at the
|
|
|
-// requested block number, going upwards towards the genesis block.
|
|
|
+// RequestHashesFromNumber fetches a batch of hashes from a peer, starting at
|
|
|
+// the requested block number, going upwards towards the genesis block.
|
|
|
func (p *peer) RequestHashesFromNumber(from uint64, count int) error {
|
|
|
- glog.V(logger.Debug).Infof("Peer [%s] fetching hashes (%d) from #%d...\n", p.id, count, from)
|
|
|
+ glog.V(logger.Debug).Infof("%v fetching hashes (%d) from #%d...\n", p, count, from)
|
|
|
return p2p.Send(p.rw, GetBlockHashesFromNumberMsg, getBlockHashesFromNumberData{from, uint64(count)})
|
|
|
}
|
|
|
|
|
|
// RequestBlocks fetches a batch of blocks corresponding to the specified hashes.
|
|
|
func (p *peer) RequestBlocks(hashes []common.Hash) error {
|
|
|
- glog.V(logger.Debug).Infof("[%s] fetching %v blocks\n", p.id, len(hashes))
|
|
|
+ glog.V(logger.Debug).Infof("%v fetching %v blocks\n", p, len(hashes))
|
|
|
return p2p.Send(p.rw, GetBlocksMsg, hashes)
|
|
|
}
|
|
|
|
|
|
+// RequestHeaders fetches a batch of blocks' headers corresponding to the
|
|
|
+// specified hashes.
|
|
|
+func (p *peer) RequestHeaders(hashes []common.Hash) error {
|
|
|
+ glog.V(logger.Debug).Infof("%v fetching %v headers\n", p, len(hashes))
|
|
|
+ return p2p.Send(p.rw, GetBlockHeadersMsg, hashes)
|
|
|
+}
|
|
|
+
|
|
|
+// RequestNodeData fetches a batch of arbitrary data from a node's known state
|
|
|
+// data, corresponding to the specified hashes.
|
|
|
+func (p *peer) RequestNodeData(hashes []common.Hash) error {
|
|
|
+ glog.V(logger.Debug).Infof("%v fetching %v state data\n", p, len(hashes))
|
|
|
+ return p2p.Send(p.rw, GetNodeDataMsg, hashes)
|
|
|
+}
|
|
|
+
|
|
|
// Handshake executes the eth protocol handshake, negotiating version number,
|
|
|
// network IDs, difficulties, head and genesis blocks.
|
|
|
func (p *peer) Handshake(td *big.Int, head common.Hash, genesis common.Hash) error {
|