go-pulse/eth/protocol.go

80 lines
1.8 KiB
Go
Raw Normal View History

2014-12-05 21:14:55 +00:00
package eth
import (
"math/big"
2015-03-18 12:00:01 +00:00
"github.com/ethereum/go-ethereum/common"
2014-12-05 21:14:55 +00:00
"github.com/ethereum/go-ethereum/core/types"
)
2014-12-15 11:34:06 +00:00
const (
2015-04-01 09:50:19 +00:00
ProtocolVersion = 60
2015-04-01 15:36:56 +00:00
NetworkId = 0
2014-12-15 11:34:06 +00:00
ProtocolLength = uint64(8)
ProtocolMaxMsgSize = 10 * 1024 * 1024
maxHashes = 512
maxBlocks = 128
2014-12-15 11:34:06 +00:00
)
// eth protocol message codes
const (
StatusMsg = iota
2015-01-06 12:39:01 +00:00
GetTxMsg // unused
2014-12-15 11:34:06 +00:00
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",
}
2014-12-05 21:14:55 +00:00
// 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 {
2015-03-18 12:00:01 +00: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 21:14:55 +00:00
}
// message structs used for RLP serialization
2014-12-05 21:14:55 +00:00
type newBlockMsgData struct {
Block *types.Block
TD *big.Int
}