80 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package eth
 | |
| 
 | |
| import (
 | |
| 	"math/big"
 | |
| 
 | |
| 	"github.com/ethereum/go-ethereum/common"
 | |
| 	"github.com/ethereum/go-ethereum/core/types"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	ProtocolVersion    = 60
 | |
| 	NetworkId          = 0
 | |
| 	ProtocolLength     = uint64(8)
 | |
| 	ProtocolMaxMsgSize = 10 * 1024 * 1024
 | |
| 	maxHashes          = 512
 | |
| 	maxBlocks          = 128
 | |
| )
 | |
| 
 | |
| // eth protocol message codes
 | |
| const (
 | |
| 	StatusMsg = iota
 | |
| 	GetTxMsg  // unused
 | |
| 	TxMsg
 | |
| 	GetBlockHashesMsg
 | |
| 	BlockHashesMsg
 | |
| 	GetBlocksMsg
 | |
| 	BlocksMsg
 | |
| 	NewBlockMsg
 | |
| )
 | |
| 
 | |
| type errCode int
 | |
| 
 | |
| const (
 | |
| 	ErrMsgTooLarge = iota
 | |
| 	ErrDecode
 | |
| 	ErrInvalidMsgCode
 | |
| 	ErrProtocolVersionMismatch
 | |
| 	ErrNetworkIdMismatch
 | |
| 	ErrGenesisBlockMismatch
 | |
| 	ErrNoStatusMsg
 | |
| 	ErrExtraStatusMsg
 | |
| 	ErrSuspendedPeer
 | |
| )
 | |
| 
 | |
| func (e errCode) String() string {
 | |
| 	return errorToString[int(e)]
 | |
| }
 | |
| 
 | |
| // XXX change once legacy code is out
 | |
| var errorToString = map[int]string{
 | |
| 	ErrMsgTooLarge:             "Message too long",
 | |
| 	ErrDecode:                  "Invalid message",
 | |
| 	ErrInvalidMsgCode:          "Invalid message code",
 | |
| 	ErrProtocolVersionMismatch: "Protocol version mismatch",
 | |
| 	ErrNetworkIdMismatch:       "NetworkId mismatch",
 | |
| 	ErrGenesisBlockMismatch:    "Genesis block mismatch",
 | |
| 	ErrNoStatusMsg:             "No status message",
 | |
| 	ErrExtraStatusMsg:          "Extra status message",
 | |
| 	ErrSuspendedPeer:           "Suspended peer",
 | |
| }
 | |
| 
 | |
| // backend is the interface the ethereum protocol backend should implement
 | |
| // used as an argument to EthProtocol
 | |
| type txPool interface {
 | |
| 	AddTransactions([]*types.Transaction)
 | |
| 	GetTransactions() types.Transactions
 | |
| }
 | |
| 
 | |
| type chainManager interface {
 | |
| 	GetBlockHashesFromHash(hash common.Hash, amount uint64) (hashes []common.Hash)
 | |
| 	GetBlock(hash common.Hash) (block *types.Block)
 | |
| 	Status() (td *big.Int, currentBlock common.Hash, genesisBlock common.Hash)
 | |
| }
 | |
| 
 | |
| // message structs used for RLP serialization
 | |
| type newBlockMsgData struct {
 | |
| 	Block *types.Block
 | |
| 	TD    *big.Int
 | |
| }
 |