123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // Quorum
- package consensus
- import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- )
- // Constants to match up protocol versions and messages
- // istanbul/99 was added to accommodate new eth/64 handshake status data with fork id
- // this is for backward compatibility which allows a mixed old/new istanbul node network
- // istanbul/64 will continue using old status data as eth/63
- const (
- eth63 = 63
- eth64 = 64
- eth65 = 65
- eth66 = 66
- Istanbul64 = 64
- Istanbul99 = 99
- // this istanbul subprotocol will be registered in addition to "eth"
- Istanbul100 = 100
- )
- var (
- IstanbulProtocol = Protocol{
- Name: "istanbul",
- Versions: []uint{Istanbul100, Istanbul99, Istanbul64},
- // istanbul/100 has to have 22 message to be backwards compatible although at the p2p layer it only has
- // 1 message with msg.Code 17
- Lengths: map[uint]uint64{Istanbul100: 22, Istanbul99: 18, Istanbul64: 18},
- }
- CliqueProtocol = Protocol{
- Name: "eth",
- Versions: []uint{eth66, eth65, eth64, eth63},
- Lengths: map[uint]uint64{eth65: 17, eth64: 17, eth63: 17},
- }
- // Default: Keep up-to-date with eth/protocol.go
- EthProtocol = Protocol{
- Name: "eth",
- Versions: []uint{eth66, eth65, eth64, eth63},
- Lengths: map[uint]uint64{eth65: 17, eth64: 17, eth63: 17},
- }
- NorewardsProtocol = Protocol{
- Name: "Norewards",
- Versions: []uint{0},
- Lengths: map[uint]uint64{0: 0},
- }
- )
- // Protocol defines the protocol of the consensus
- type Protocol struct {
- // Official short name of the protocol used during capability negotiation.
- Name string
- // Supported versions of the eth protocol (first is primary).
- Versions []uint
- // Number of implemented message corresponding to different protocol versions.
- Lengths map[uint]uint64
- }
- // Broadcaster defines the interface to enqueue blocks to fetcher and find peer
- type Broadcaster interface {
- // Enqueue add a block into fetcher queue
- Enqueue(id string, block *types.Block)
- // FindPeers retrives peers by addresses
- FindPeers(map[common.Address]bool) map[common.Address]Peer
- }
- // Peer defines the interface to communicate with peer
- type Peer interface {
- // Send sends the message to this peer
- Send(msgcode uint64, data interface{}) error
- // SendConsensus sends the message to this p2p peer using the consensus specific devp2p subprotocol
- SendConsensus(msgcode uint64, data interface{}) error
- // SendQBFTConsensus is used to send consensus subprotocol messages from an "eth" peer without encoding the payload
- SendQBFTConsensus(msgcode uint64, payload []byte) error
- }
|