aboutsummaryrefslogblamecommitdiffstats
path: root/eth/protocol.go
blob: 56409721b3dc17eb4b11d5bb58a0d54b00af9a4f (plain) (tree)
1
2
3
4
5
6
7
8
9


           

                  
                                                
                                                    

 





                                                                              
       
                              
                                                                                              




                             
                         





                         
                              

 

                








                                  
                        

 




                                     








                                                                
                                                     

 
                       
                                                                         
                                             


                                                              
                                            


                             


                                                                                      

 
                                             



                             
package eth

import (
    "math/big"

    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/core/types"
)

// Supported versions of the eth protocol (first is primary).
var ProtocolVersions = []uint{61, 60}

// Number of implemented message corresponding to different protocol versions.
var ProtocolLengths = []uint64{9, 8}

const (
    NetworkId          = 0
    ProtocolMaxMsgSize = 10 * 1024 * 1024 // Maximum cap on the size of a protocol message
)

// eth protocol message codes
const (
    StatusMsg = iota
    NewBlockHashesMsg
    TxMsg
    GetBlockHashesMsg
    BlockHashesMsg
    GetBlocksMsg
    BlocksMsg
    NewBlockMsg
    BlockHashesFromNumbers
)

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
}