Documentation
¶
Index ¶
- Constants
- Variables
- func Handshake(p *p2p.Peer, rw p2p.MsgReadWriter, mac string, sig []byte, term uint64, ...) (address common.Address, err error)
- func IsDporMsg(msg p2p.Msg) bool
- func IsSyncMsg(msg p2p.Msg) bool
- func ReadValidatorStatus(p *p2p.Peer, rw p2p.MsgReadWriter, signerStatusData *SignerStatusData, ...) (address common.Address, err error)
- func RecoverBlockFromMsg(msg p2p.Msg, p interface{}) (*types.Block, error)
- func RecoverHeaderFromMsg(msg p2p.Msg, p interface{}) (*types.Header, error)
- func ValidMacSig(mac string, sig []byte) (valid bool, signer common.Address, err error)
- type Action
- type BlockSigItem
- type ChainBackend
- type ClientBackend
- type ContractBackend
- type ContractCaller
- type DataType
- type Dialer
- func (d *Dialer) AddPeer(version int, p *p2p.Peer, rw p2p.MsgReadWriter, mac string, sig []byte, ...) (string, bool, bool, error)
- func (d *Dialer) DialAllRemoteProposers(term uint64) error
- func (d *Dialer) DialAllRemoteValidators(term uint64) error
- func (d *Dialer) Disconnect(term uint64)
- func (d *Dialer) ProposersOfTerm(term uint64) map[common.Address]*RemoteProposer
- func (d *Dialer) SetClient(client ClientBackend) error
- func (d *Dialer) SetDporService(dpor DporService)
- func (d *Dialer) SetNodeID(nodeID string)
- func (d *Dialer) SetServer(server *p2p.Server) error
- func (d *Dialer) UpdateRemoteProposers(term uint64, proposers []common.Address) error
- func (d *Dialer) UpdateRemoteValidators(term uint64, validators []common.Address) error
- func (d *Dialer) ValidatorsOfTerm(term uint64) map[common.Address]*RemoteValidator
- type DporService
- type DporStateMachine
- type Handler
- func (h *Handler) AddPeer(version int, p *p2p.Peer, rw p2p.MsgReadWriter) (string, bool, bool, error)
- func (h *Handler) Available() bool
- func (h *Handler) BroadcastCommitHeader(header *types.Header)
- func (h *Handler) BroadcastCommitImpeachHeader(header *types.Header)
- func (h *Handler) BroadcastPrepareHeader(header *types.Header)
- func (h *Handler) BroadcastPrepareImpeachHeader(header *types.Header)
- func (h *Handler) BroadcastPreprepareBlock(block *types.Block)
- func (h *Handler) BroadcastPreprepareImpeachBlock(block *types.Block)
- func (h *Handler) Coinbase() common.Address
- func (ph *Handler) DialAllRemoteValidators(term uint64) error
- func (h *Handler) GetProtocol() consensus.Protocol
- func (h *Handler) HandleMsg(addr string, msg p2p.Msg) error
- func (h *Handler) Length() uint64
- func (h *Handler) Name() string
- func (h *Handler) NodeInfo() interface{}
- func (h *Handler) PendingBlockBroadcastLoop()
- func (vh *Handler) ReadyToImpeach() bool
- func (ph *Handler) ReceiveMinedPendingBlock(block *types.Block) error
- func (h *Handler) RemovePeer(addr string)
- func (h *Handler) SetAvailable()
- func (h *Handler) SetClient(client ClientBackend) error
- func (h *Handler) SetCoinbase(coinbase common.Address)
- func (h *Handler) SetDporService(dpor DporService) error
- func (h *Handler) SetDporStateMachine(fsm *DporStateMachine) error
- func (h *Handler) SetServer(server *p2p.Server) error
- func (h *Handler) Start()
- func (h *Handler) Stop()
- func (ph *Handler) UpdateRemoteValidators(term uint64, validators []common.Address) error
- func (h *Handler) Version() uint
- type HandlerMode
- type MsgCode
- type RecentBlocks
- func (rb *RecentBlocks) AddBlock(block *types.Block) error
- func (rb *RecentBlocks) AddFutureBlock(block *types.Block) error
- func (rb *RecentBlocks) AddUnknownAncestor(block *types.Block) error
- func (rb *RecentBlocks) GetBlock(number uint64) (*types.Block, error)
- func (rb *RecentBlocks) GetFutureBlock(number uint64) (*types.Block, error)
- func (rb *RecentBlocks) GetFutureBlockNumbers() []interface{}
- func (rb *RecentBlocks) GetUnknownAncestor(number uint64) (*types.Block, error)
- func (rb *RecentBlocks) GetUnknownAncestorBlockNumbers() []interface{}
- type RemoteProposer
- type RemoteSigner
- type RemoteValidator
- func (s *RemoteValidator) AsyncSendCommitHeader(header *types.Header)
- func (s *RemoteValidator) AsyncSendCommitImpeachHeader(header *types.Header)
- func (s *RemoteValidator) AsyncSendPrepareHeader(header *types.Header)
- func (s *RemoteValidator) AsyncSendPrepareImpeachHeader(header *types.Header)
- func (s *RemoteValidator) AsyncSendPreprepareBlock(block *types.Block)
- func (s *RemoteValidator) AsyncSendPreprepareImpeachBlock(block *types.Block)
- func (s *RemoteValidator) SendCommitHeader(header *types.Header) error
- func (s *RemoteValidator) SendCommitImpeachHeader(header *types.Header) error
- func (s *RemoteValidator) SendNewSignerMsg(eb common.Address) error
- func (s *RemoteValidator) SendPrepareHeader(header *types.Header) error
- func (s *RemoteValidator) SendPrepareImpeachHeader(header *types.Header) error
- func (s *RemoteValidator) SendPreprepareBlock(block *types.Block) error
- func (s *RemoteValidator) SendPreprepareImpeachBlock(block *types.Block) error
- func (s *RemoteValidator) UploadNodeInfo(term uint64, nodeID string, auth *bind.TransactOpts, ...) (bool, error)
- type RsaReader
- type SigState
- type SignFn
- type SignerStatusData
- type VerifySignerFn
Constants ¶
const ( // ProtocolName protocol name ProtocolName = "dpor" // ProtocolVersion protocol verion ProtocolVersion = 65 // ProtocolLength protocol length, max msg code ProtocolLength = 70 )
const ( // NewSignerMsg is a msg code used for network building NewSignerMsg = 0x42 // PbftMsgOutset is not a msg code, just used for msg code comparing PbftMsgOutset = 0x42 // PreprepareBlockMsg is Preprepare phrase msg code PreprepareBlockMsg = 0x43 // PrepareHeaderMsg is Prepare phrase msg code PrepareHeaderMsg = 0x44 // CommitHeaderMsg is Commit phrase msg code CommitHeaderMsg = 0x45 // PreprepareImpeachBlockMsg is Preprepare phrase msg code for empty block PreprepareImpeachBlockMsg = 0x46 // PrepareImpeachHeaderMsg is Prepare phrase msg code for empty header PrepareImpeachHeaderMsg = 0x47 // CommitImpeachHeaderMsg is Commit phrase msg code for empty header CommitImpeachHeaderMsg = 0x48 )
const ( // ErrMsgTooLarge is returned if msg if too large ErrMsgTooLarge = iota // ErrDecode is returned if decode failed ErrDecode // ErrInvalidMsgCode is returned if msg code is invalid ErrInvalidMsgCode // ErrProtocolVersionMismatch is returned if protocol version is not matched when handshaking ErrProtocolVersionMismatch // ErrNetworkIdMismatch is returned if networkid is not matched when handshaking ErrNetworkIdMismatch // ErrGenesisBlockMismatch is returned if genesis block is different from remote signer ErrGenesisBlockMismatch // ErrNoStatusMsg is returned if failed when reading status msg ErrNoStatusMsg // ErrExtraStatusMsg is returned if failed when extracting status msg ErrExtraStatusMsg // ErrSuspendedPeer is returned if remote signer is dead ErrSuspendedPeer )
const CacheSize = 200
const ProtocolMaxMsgSize = 10 * 1024 * 1024
ProtocolMaxMsgSize Maximum cap on the size of a protocol message
Variables ¶
var ( // ErrUnknownHandlerMode is returnd if in an unknown mode ErrUnknownHandlerMode = errors.New("unknown dpor handler mode") // ErrFailToAddPendingBlock is returned if failed to add block to pending ErrFailToAddPendingBlock = errors.New("fail to add pending block") // ErrNotSigner is returned if i am not a signer when handshaking // with remote signer ErrNotSigner = errors.New("local peer is not in the PV committees") )
var ( ErrBlockTooOld = errors.New("the block is too old") ErrFsmWrongDataType = errors.New("an unexpected FSM input data type") ErrFsmFaultyBlock = errors.New("the newly proposed block is faulty") ErrFsmWrongIdleInput = errors.New("not a proper input for idle state") ErrFsmWrongPrepreparedInput = errors.New("not a proper input for pre-prepared state") ErrFsmWrongPreparedInput = errors.New("not a proper input for prepared state") ErrFsmWrongImpeachPrepreparedInput = errors.New("not a proper input for impeach pre-prepared state") ErrFsmWrongImpeachPreparedInput = errors.New("not a proper input for impeach prepared state") ErrBlockNotExist = errors.New("the block does not exist") ErrProposeImpeachBlockFails = errors.New("fails to propose impeach block") )
Functions ¶
func Handshake ¶
func Handshake(p *p2p.Peer, rw p2p.MsgReadWriter, mac string, sig []byte, term uint64, futureTerm uint64) (address common.Address, err error)
Handshake tries to handshake with remote validator
func ReadValidatorStatus ¶
func ReadValidatorStatus(p *p2p.Peer, rw p2p.MsgReadWriter, signerStatusData *SignerStatusData, term uint64, futureTerm uint64) (address common.Address, err error)
ReadValidatorStatus reads status of remote validator
func RecoverBlockFromMsg ¶
RecoverBlockFromMsg recovers a block from a p2p msg
func RecoverHeaderFromMsg ¶
RecoverHeaderFromMsg recovers a header from a p2p msg
Types ¶
type BlockSigItem ¶
type BlockSigItem struct {
// contains filtered or unexported fields
}
type ChainBackend ¶
type ChainBackend interface {
BalanceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (*big.Int, error)
BlockByNumber(ctx context.Context, number *big.Int) (*types.Block, error)
HeaderByNumber(ctx context.Context, number *big.Int) (*types.Header, error)
}
ChainBackend is the chain client operation interface
type ClientBackend ¶
type ClientBackend interface {
ChainBackend
ContractBackend
}
ClientBackend is the client operation interface
type ContractBackend ¶
type ContractBackend interface {
bind.ContractBackend
TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error)
}
ContractBackend is the contract client operation interface
type ContractCaller ¶
type ContractCaller struct {
Key *keystore.Key
Client ClientBackend
GasLimit uint64
}
ContractCaller is used to call the contract with given key and client.
func NewContractCaller ¶
func NewContractCaller(key *keystore.Key, client ClientBackend, gasLimit uint64) (*ContractCaller, error)
NewContractCaller returns a ContractCaller.
type Dialer ¶
type Dialer struct {
// contains filtered or unexported fields
}
Dialer dials a remote peer
func (*Dialer) AddPeer ¶
func (d *Dialer) AddPeer(version int, p *p2p.Peer, rw p2p.MsgReadWriter, mac string, sig []byte, term uint64, futureTerm uint64) (string, bool, bool, error)
AddPeer adds a peer to local dpor peer set: remote proposers or remote validators
func (*Dialer) DialAllRemoteProposers ¶
DialAllRemoteProposers dials all remote proposers
func (*Dialer) DialAllRemoteValidators ¶
func (*Dialer) Disconnect ¶
Disconnect disconnects all proposers.
func (*Dialer) ProposersOfTerm ¶
func (d *Dialer) ProposersOfTerm(term uint64) map[common.Address]*RemoteProposer
ProposersOfTerm returns all proposers of given term
func (*Dialer) SetClient ¶
func (d *Dialer) SetClient(client ClientBackend) error
SetClient sets contract calling related fields in dialer
func (*Dialer) SetDporService ¶
func (d *Dialer) SetDporService(dpor DporService)
SetDporService sets dpor service to dialer
func (*Dialer) UpdateRemoteProposers ¶
UpdateRemoteProposers updates dialer.remoteProposers.
func (*Dialer) UpdateRemoteValidators ¶
UpdateRemoteValidators updates dialer.remoteValidators.
func (*Dialer) ValidatorsOfTerm ¶
func (d *Dialer) ValidatorsOfTerm(term uint64) map[common.Address]*RemoteValidator
ValidatorsOfTerm returns all validators of given term
type DporService ¶
type DporService interface {
// TermOf returns the term number of given block number
TermOf(number uint64) uint64
// FutureTermOf returns the future term number of given block number
FutureTermOf(number uint64) uint64
// VerifyProposerOf verifies if an address is a proposer of given term
VerifyProposerOf(signer common.Address, term uint64) (bool, error)
// VerifyValidatorOf verifies if an address is a validator of given term
VerifyValidatorOf(signer common.Address, term uint64) (bool, error)
// ValidatorsOf returns the list of validators in committee for the specified block number
ValidatorsOf(number uint64) ([]common.Address, error)
// ProposersOf returns the list of proposers in committee for the specified block number
ProposersOf(number uint64) ([]common.Address, error)
// ValidatorsOfTerm returns the list of validators in committee for the specified term
ValidatorsOfTerm(term uint64) ([]common.Address, error)
// ProposersOfTerm returns the list of proposers in committee for the specified term
ProposersOfTerm(term uint64) ([]common.Address, error)
// VerifyHeaderWithState verifies the given header
// if in preprepared state, verify basic fields
// if in prepared state, verify if enough prepare sigs
// if in committed state, verify if enough commit sigs
VerifyHeaderWithState(header *types.Header, state consensus.State) error
// ValidateBlock verifies a block
ValidateBlock(block *types.Block, verifySigs bool, verifyProposers bool) error
// SignHeader signs the block if not signed it yet
SignHeader(header *types.Header, state consensus.State) error
// BroadcastBlock broadcasts a block to normal peers(not pbft replicas)
BroadcastBlock(block *types.Block, prop bool)
// InsertChain inserts a block to chain
InsertChain(block *types.Block) error
// Status returns a pbft replica's status
Status() *consensus.PbftStatus
// StatusUpdate updates status of dpor
StatusUpdate() error
// CreateImpeachBlock returns an impeachment block for view change
CreateImpeachBlock() (*types.Block, error)
// GetCurrentBlock returns current block
GetCurrentBlock() *types.Block
// HasBlockInChain returns if a block is in local chain
HasBlockInChain(hash common.Hash, number uint64) bool
// ImpeachTimeout returns the timeout for impeachment
ImpeachTimeout() time.Duration
// EcrecoverSigs recovers signer address and corresponding signature, it ignores empty signature and return empty
// addresses if one of the sigs are illegal
EcrecoverSigs(header *types.Header, state consensus.State) ([]common.Address, []types.DporSignature, error)
// Update the signature to prepare signature cache(two kinds of sigs, one for prepared, another for final)
UpdatePrepareSigsCache(validator common.Address, hash common.Hash, sig types.DporSignature)
// Update the signature to final signature cache(two kinds of sigs, one for prepared, another for final)
UpdateFinalSigsCache(validator common.Address, hash common.Hash, sig types.DporSignature)
// GetMac signs a Mac
GetMac() (string, []byte, error)
}
DporService provides functions used by dpor handler
type DporStateMachine ¶
type DporStateMachine struct {
// contains filtered or unexported fields
}
DporStateMachine is a struct containing variables used for state transition in FSM
func NewDporStateMachine ¶
func NewDporStateMachine(service DporService, f uint64) *DporStateMachine
func (*DporStateMachine) Fsm ¶
func (dsm *DporStateMachine) Fsm(input interface{}, inputType DataType, msg MsgCode) (interface{}, Action, DataType, MsgCode, error)
Fsm is the finite state machine for a validator, to output the correct state given on current state and inputs input is either a header or a block, referring to message or proposed (impeach) block inputType indicates the type of input msg indicates what type of message or block input is state is the current state of the validator the output interface is the message or block validator should handle the output action refers to what the validator should do with the output interface the output dataType indicates whether the output interface is block or header the output msgCode represents the type the output block or message the output consensus.State indicates the validator's next state
func (*DporStateMachine) SetState ¶
func (dsm *DporStateMachine) SetState(state consensus.State)
SetState sets dpor pbft state
func (*DporStateMachine) State ¶
func (dsm *DporStateMachine) State() consensus.State
State returns current dpor state
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
Handler implements PbftHandler
func NewHandler ¶
func NewHandler(config *configs.DporConfig, coinbase common.Address) *Handler
NewHandler creates a new Handler
func (*Handler) AddPeer ¶
func (h *Handler) AddPeer(version int, p *p2p.Peer, rw p2p.MsgReadWriter) (string, bool, bool, error)
AddPeer adds a p2p peer to local peer set
func (*Handler) BroadcastCommitHeader ¶
BroadcastCommitHeader broadcasts signed commit header to remote validators
func (*Handler) BroadcastCommitImpeachHeader ¶
BroadcastCommitImpeachHeader broadcasts signed impeach commit header to remote validators
func (*Handler) BroadcastPrepareHeader ¶
BroadcastPrepareHeader broadcasts signed prepare header to remote validators
func (*Handler) BroadcastPrepareImpeachHeader ¶
BroadcastPrepareImpeachHeader broadcasts signed impeach prepare header to remote validators
func (*Handler) BroadcastPreprepareBlock ¶
BroadcastPreprepareBlock broadcasts generated block to validators
func (*Handler) BroadcastPreprepareImpeachBlock ¶
BroadcastPreprepareImpeachBlock broadcasts generated impeach block to validators
func (*Handler) DialAllRemoteValidators ¶
DialAllRemoteValidators dials remote validators this is called if local peer is a future proposer
func (*Handler) GetProtocol ¶
GetProtocol returns handler protocol
func (*Handler) PendingBlockBroadcastLoop ¶
func (h *Handler) PendingBlockBroadcastLoop()
PendingBlockBroadcastLoop loops to broadcast blocks
func (*Handler) ReadyToImpeach ¶
ReadyToImpeach returns if its time to impeach leader
func (*Handler) ReceiveMinedPendingBlock ¶
ReceiveMinedPendingBlock receives a block to add to pending block channel
func (*Handler) RemovePeer ¶
RemovePeer removes a p2p peer with its addr
func (*Handler) SetClient ¶
func (h *Handler) SetClient(client ClientBackend) error
SetClient sets dialer.contractCaller
func (*Handler) SetCoinbase ¶
SetCoinbase sets coinbase of handler
func (*Handler) SetDporService ¶
func (h *Handler) SetDporService(dpor DporService) error
SetDporService sets dpor service to handler
func (*Handler) SetDporStateMachine ¶
func (h *Handler) SetDporStateMachine(fsm *DporStateMachine) error
SetDporStateMachine sets dpor state machine
func (*Handler) UpdateRemoteValidators ¶
UpdateRemoteValidators updates handler.dialer.remoteValidators this is called if local peer is a future proposer
type RecentBlocks ¶
type RecentBlocks struct {
// contains filtered or unexported fields
}
RecentBlocks caches recent received blocks
func (*RecentBlocks) AddBlock ¶
func (rb *RecentBlocks) AddBlock(block *types.Block) error
AddBlock adds a block to caches
func (*RecentBlocks) AddFutureBlock ¶
func (rb *RecentBlocks) AddFutureBlock(block *types.Block) error
AddFutureBlock adds a block to caches
func (*RecentBlocks) AddUnknownAncestor ¶
func (rb *RecentBlocks) AddUnknownAncestor(block *types.Block) error
AddUnknownAncestor adds a block to caches
func (*RecentBlocks) GetBlock ¶
func (rb *RecentBlocks) GetBlock(number uint64) (*types.Block, error)
GetBlock returns a block
func (*RecentBlocks) GetFutureBlock ¶
func (rb *RecentBlocks) GetFutureBlock(number uint64) (*types.Block, error)
GetFutureBlock returns a future block
func (*RecentBlocks) GetFutureBlockNumbers ¶
func (rb *RecentBlocks) GetFutureBlockNumbers() []interface{}
GetFutureBlockNumbers adds a block to caches
func (*RecentBlocks) GetUnknownAncestor ¶
func (rb *RecentBlocks) GetUnknownAncestor(number uint64) (*types.Block, error)
GetUnknownAncestor returns an unknown ancestor block
func (*RecentBlocks) GetUnknownAncestorBlockNumbers ¶
func (rb *RecentBlocks) GetUnknownAncestorBlockNumbers() []interface{}
GetUnknownAncestorBlockNumbers returns future block numbers
type RemoteProposer ¶
type RemoteProposer struct {
*RemoteSigner
// contains filtered or unexported fields
}
RemoteProposer represents a remote proposer waiting to be connected.
func NewRemoteProposer ¶
func NewRemoteProposer(address common.Address) *RemoteProposer
NewRemoteProposer creates a new remote proposer
func (*RemoteProposer) Dialed ¶
func (s *RemoteProposer) Dialed() bool
Dialed returns if already dialed the remote proposer
func (*RemoteProposer) FetchNodeInfoAndDial ¶
func (s *RemoteProposer) FetchNodeInfoAndDial( term uint64, validator common.Address, server *p2p.Server, rsaKey *rsakey.RsaKey, contractInstance *dpor.ProposerRegister, ) (bool, error)
FetchNodeInfoAndDial fetches remote proposer's nodeID from contract and dial with it
func (*RemoteProposer) ToggleDialed ¶
func (s *RemoteProposer) ToggleDialed()
ToggleDialed toggles dialed
type RemoteSigner ¶
RemoteSigner represents a remote peer, ether proposer or validator
func NewRemoteSigner ¶
func NewRemoteSigner(address common.Address) *RemoteSigner
NewRemoteSigner creates a new remote signer
func (*RemoteSigner) AddStatic ¶
func (s *RemoteSigner) AddStatic(srv *p2p.Server) error
AddStatic adds remote validator as a static peer
func (*RemoteSigner) Coinbase ¶
func (s *RemoteSigner) Coinbase() common.Address
Coinbase returns remote peer's addr
func (*RemoteSigner) SetPeer ¶
func (s *RemoteSigner) SetPeer(version int, p *p2p.Peer, rw p2p.MsgReadWriter) error
SetPeer sets a p2p peer
type RemoteValidator ¶
type RemoteValidator struct {
*RemoteSigner
// contains filtered or unexported fields
}
RemoteValidator represents a remote signer waiting to be connected and communicate with.
func NewRemoteValidator ¶
func NewRemoteValidator(term uint64, address common.Address) *RemoteValidator
NewRemoteValidator creates a new NewRemoteValidator with given view idx and address.
func (*RemoteValidator) AsyncSendCommitHeader ¶
func (s *RemoteValidator) AsyncSendCommitHeader(header *types.Header)
AsyncSendCommitHeader sends new signed block header.
func (*RemoteValidator) AsyncSendCommitImpeachHeader ¶
func (s *RemoteValidator) AsyncSendCommitImpeachHeader(header *types.Header)
AsyncSendCommitImpeachHeader sends new signed block header.
func (*RemoteValidator) AsyncSendPrepareHeader ¶
func (s *RemoteValidator) AsyncSendPrepareHeader(header *types.Header)
AsyncSendPrepareHeader adds a msg to broadcast channel
func (*RemoteValidator) AsyncSendPrepareImpeachHeader ¶
func (s *RemoteValidator) AsyncSendPrepareImpeachHeader(header *types.Header)
AsyncSendPrepareImpeachHeader adds a msg to broadcast channel
func (*RemoteValidator) AsyncSendPreprepareBlock ¶
func (s *RemoteValidator) AsyncSendPreprepareBlock(block *types.Block)
AsyncSendPreprepareBlock queues an entire block for propagation to a remote peer. If the peer's broadcast queue is full, the event is silently dropped.
func (*RemoteValidator) AsyncSendPreprepareImpeachBlock ¶
func (s *RemoteValidator) AsyncSendPreprepareImpeachBlock(block *types.Block)
AsyncSendPreprepareImpeachBlock queues an entire block for propagation to a remote peer. If the peer's broadcast queue is full, the event is silently dropped.
func (*RemoteValidator) SendCommitHeader ¶
func (s *RemoteValidator) SendCommitHeader(header *types.Header) error
SendCommitHeader sends new signed block header.
func (*RemoteValidator) SendCommitImpeachHeader ¶
func (s *RemoteValidator) SendCommitImpeachHeader(header *types.Header) error
SendCommitImpeachHeader sends new signed block header.
func (*RemoteValidator) SendNewSignerMsg ¶
func (s *RemoteValidator) SendNewSignerMsg(eb common.Address) error
SendNewSignerMsg sends a
func (*RemoteValidator) SendPrepareHeader ¶
func (s *RemoteValidator) SendPrepareHeader(header *types.Header) error
SendPrepareHeader sends new signed block header.
func (*RemoteValidator) SendPrepareImpeachHeader ¶
func (s *RemoteValidator) SendPrepareImpeachHeader(header *types.Header) error
SendPrepareImpeachHeader sends new signed block header.
func (*RemoteValidator) SendPreprepareBlock ¶
func (s *RemoteValidator) SendPreprepareBlock(block *types.Block) error
SendPreprepareBlock propagates an entire block to a remote peer.
func (*RemoteValidator) SendPreprepareImpeachBlock ¶
func (s *RemoteValidator) SendPreprepareImpeachBlock(block *types.Block) error
SendPreprepareImpeachBlock propagates an entire block to a remote peer.
func (*RemoteValidator) UploadNodeInfo ¶
func (s *RemoteValidator) UploadNodeInfo( term uint64, nodeID string, auth *bind.TransactOpts, contractInstance *dpor.ProposerRegister, client ClientBackend, ) (bool, error)
UploadNodeInfo upload my nodeID the signer.
type SigState ¶
type SigState map[common.Address]*BlockSigItem
address -> blockSigItem -> (hash, sig)
type SignFn ¶
SignFn is a signer callback function to request a hash to be signed by a backing account.