2014-12-05 15:14:55 -06:00
|
|
|
package eth
|
|
|
|
|
|
|
|
import (
|
|
|
|
"math/big"
|
|
|
|
|
2015-03-18 07:00:01 -05:00
|
|
|
"github.com/ethereum/go-ethereum/common"
|
2014-12-05 15:14:55 -06:00
|
|
|
"github.com/ethereum/go-ethereum/core/types"
|
|
|
|
)
|
|
|
|
|
2014-12-15 05:34:06 -06:00
|
|
|
const (
|
2015-04-01 04:50:19 -05:00
|
|
|
ProtocolVersion = 60
|
2015-04-01 10:36:56 -05:00
|
|
|
NetworkId = 0
|
2014-12-15 05:34:06 -06:00
|
|
|
ProtocolLength = uint64(8)
|
|
|
|
ProtocolMaxMsgSize = 10 * 1024 * 1024
|
|
|
|
)
|
|
|
|
|
|
|
|
// eth protocol message codes
|
|
|
|
const (
|
|
|
|
StatusMsg = iota
|
2015-06-04 10:46:07 -05:00
|
|
|
NewBlockHashesMsg
|
2014-12-15 05:34:06 -06:00
|
|
|
TxMsg
|
|
|
|
GetBlockHashesMsg
|
|
|
|
BlockHashesMsg
|
|
|
|
GetBlocksMsg
|
|
|
|
BlocksMsg
|
|
|
|
NewBlockMsg
|
|
|
|
)
|
|
|
|
|
2015-04-17 18:11:09 -05:00
|
|
|
type errCode int
|
|
|
|
|
2015-02-25 07:06:59 -06:00
|
|
|
const (
|
|
|
|
ErrMsgTooLarge = iota
|
|
|
|
ErrDecode
|
|
|
|
ErrInvalidMsgCode
|
|
|
|
ErrProtocolVersionMismatch
|
|
|
|
ErrNetworkIdMismatch
|
|
|
|
ErrGenesisBlockMismatch
|
|
|
|
ErrNoStatusMsg
|
|
|
|
ErrExtraStatusMsg
|
2015-03-19 17:46:54 -05:00
|
|
|
ErrSuspendedPeer
|
2015-02-25 07:06:59 -06:00
|
|
|
)
|
|
|
|
|
2015-04-17 18:11:09 -05:00
|
|
|
func (e errCode) String() string {
|
|
|
|
return errorToString[int(e)]
|
|
|
|
}
|
|
|
|
|
|
|
|
// XXX change once legacy code is out
|
2015-02-25 07:06:59 -06:00
|
|
|
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",
|
2015-03-19 17:46:54 -05:00
|
|
|
ErrSuspendedPeer: "Suspended peer",
|
2015-02-25 07:06:59 -06:00
|
|
|
}
|
|
|
|
|
2014-12-05 15:14:55 -06:00
|
|
|
// backend is the interface the ethereum protocol backend should implement
|
|
|
|
// used as an argument to EthProtocol
|
2014-12-14 12:04:50 -06:00
|
|
|
type txPool interface {
|
2014-12-09 17:55:50 -06:00
|
|
|
AddTransactions([]*types.Transaction)
|
2015-02-04 19:28:54 -06:00
|
|
|
GetTransactions() types.Transactions
|
2014-12-14 12:04:50 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
type chainManager interface {
|
2015-03-18 07:00:01 -05:00
|
|
|
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)
|
2014-12-05 15:14:55 -06:00
|
|
|
}
|
|
|
|
|
2015-03-19 09:18:31 -05:00
|
|
|
// message structs used for RLP serialization
|
2014-12-05 15:14:55 -06:00
|
|
|
type newBlockMsgData struct {
|
|
|
|
Block *types.Block
|
|
|
|
TD *big.Int
|
|
|
|
}
|