You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Jae Kwon e50e14ddf5 switch events, node listens for new peers to ask for new addrs. 11 years ago
..
upnp package rename peer -> p2p 11 years ago
README.md package rename peer -> p2p 11 years ago
addrbook.go switch events, node listens for new peers to ask for new addrs. 11 years ago
addrbook_test.go addrbook cleanup 11 years ago
connection.go switch events, node listens for new peers to ask for new addrs. 11 years ago
listener.go switch events, node listens for new peers to ask for new addrs. 11 years ago
log.go replace logger with go-logging 11 years ago
msg.go package rename peer -> p2p 11 years ago
netaddress.go addrbook cleanup 11 years ago
peer.go switch events, node listens for new peers to ask for new addrs. 11 years ago
peer_manager.go switch events, node listens for new peers to ask for new addrs. 11 years ago
peer_set.go Don't dial dupes 11 years ago
switch.go switch events, node listens for new peers to ask for new addrs. 11 years ago
switch_test.go replace logger with go-logging 11 years ago
util.go cleanup 11 years ago

README.md

Channels

Each peer connection is multiplexed into channels.


PEX channel

The PEX channel is used to exchange peer addresses.

Channel "PEX"
Messages
  • pexRequestMsg
  • pexResponseMsg

Block channel

The block channel is used to propagate block or header information to new peers or peers catching up with the blockchain.

Channel "block"
Messages
  • RequestMsg
  • BlockMsg
  • HeaderMsg
Notes Nodes should only advertise having a header or block at height 'h' if it also has all the headers or blocks less than 'h'. Thus for each peer we need only keep track of two integers -- one for the most recent header height 'h_h' and one for the most recent block height 'h_b', where 'h_b' <= 'h_h'.

Mempool channel

The mempool channel is used for broadcasting new transactions that haven't yet entered the blockchain. It uses a lossy bloom filter on either end, but with sufficient fanout and filter nonce updates every new block, all transactions will eventually reach every node.

Channel "mempool"
Messages
  • MempoolTxMsg
Notes Instead of keeping a perfect inventory of what peers have, we use a lossy filter.
Bloom filter (n:10k, p:0.02 -> k:6, m:10KB)
Each peer's filter has a random nonce that scrambles the message hashes.
The filter & nonce refreshes every new block.

Consensus channel

The consensus channel broadcasts all information used in the rounds of the Tendermint consensus mechanism.

Channel "consensus"
Messages
  • ProposalMsg
  • VoteMsg
  • NewBlockMsg
Notes How do optimize/balance propagation speed & bandwidth utilization?

Resources