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
 | 
						|
)
 | 
						|
 | 
						|
// eth protocol message codes
 | 
						|
const (
 | 
						|
	StatusMsg = iota
 | 
						|
	NewBlockHashesMsg
 | 
						|
	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",
 | 
						|
}
 | 
						|
 | 
						|
type txPool interface {
 | 
						|
	// AddTransactions should add the given transactions to the pool.
 | 
						|
	AddTransactions([]*types.Transaction)
 | 
						|
 | 
						|
	// GetTransactions should return pending transactions.
 | 
						|
	// The slice should be modifiable by the caller.
 | 
						|
	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
 | 
						|
}
 |