Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Communicator ¶
type Communicator interface {
Broadcast(msg *pb.Message, peerType pb.PeerEndpoint_Type) error
Unicast(msg *pb.Message, receiverHandle *pb.PeerID) error
}
Communicator is used to send messages to other validators
type Consenter ¶
type Consenter interface {
RecvMsg(msg *pb.Message, senderHandle *pb.PeerID) error // Called serially with incoming messages from gRPC
ExecutionConsumer
}
Consenter is used to receive messages from the network Every consensus plugin needs to implement this interface
type ExecutionConsumer ¶
type ExecutionConsumer interface {
Executed(tag interface{}) // Called whenever Execute completes
Committed(tag interface{}, target *pb.BlockchainInfo) // Called whenever Commit completes
RolledBack(tag interface{}) // Called whenever a Rollback completes
StateUpdated(tag interface{}, target *pb.BlockchainInfo) // Called when state transfer completes, if target is nil, this indicates a failure and a new target should be supplied
}
ExecutionConsumer allows callbacks from asycnhronous execution and statetransfer
type Executor ¶
type Executor interface {
Start() // Bring up the resources needed to use this interface
Halt() // Tear down the resources needed to use this interface
Execute(tag interface{}, txs []*pb.Transaction) // Executes a set of transactions, this may be called in succession
Commit(tag interface{}, metadata []byte) // Commits whatever transactions have been executed
Rollback(tag interface{}) // Rolls back whatever transactions have been executed
UpdateState(tag interface{}, target *pb.BlockchainInfo, peers []*pb.PeerID) // Attempts to synchronize state to a particular target, implicitly calls rollback if needed
}
Executor is intended to eventually supplant the old Executor interface The problem with invoking the calls directly above, is that they must be coordinated with state transfer, to eliminate possible races and ledger corruption
type Inquirer ¶
type Inquirer interface {
GetNetworkInfo() (self *pb.PeerEndpoint, network []*pb.PeerEndpoint, err error)
GetNetworkHandles() (self *pb.PeerID, network []*pb.PeerID, err error)
}
Inquirer is used to retrieve info about the validating network
type LedgerManager ¶
type LedgerManager interface {
InvalidateState() // Invalidate informs the ledger that it is out of date and should reject queries
ValidateState() // Validate informs the ledger that it is back up to date and should resume replying to queries
}
LedgerManager is used to manipulate the state of the ledger
type LegacyExecutor ¶
type LegacyExecutor interface {
BeginTxBatch(id interface{}) error
ExecTxs(id interface{}, txs []*pb.Transaction) ([]byte, error)
CommitTxBatch(id interface{}, metadata []byte) (*pb.Block, error)
RollbackTxBatch(id interface{}) error
PreviewCommitTxBatch(id interface{}, metadata []byte) ([]byte, error)
}
LegacyExecutor is used to invoke transactions, potentially modifying the backing ledger
type NetworkStack ¶
type NetworkStack interface {
Communicator
Inquirer
}
NetworkStack is used to retrieve network info and send messages
type ReadOnlyLedger ¶
type ReadOnlyLedger interface {
GetBlock(id uint64) (block *pb.Block, err error)
GetBlockchainSize() uint64
GetBlockchainInfo() *pb.BlockchainInfo
GetBlockchainInfoBlob() []byte
GetBlockHeadMetadata() ([]byte, error)
}
ReadOnlyLedger is used for interrogating the blockchain
type SecurityUtils ¶
type SecurityUtils interface {
Sign(msg []byte) ([]byte, error)
Verify(peerID *pb.PeerID, signature []byte, message []byte) error
}
SecurityUtils is used to access the sign/verify methods from the crypto package
type Stack ¶
type Stack interface {
NetworkStack
SecurityUtils
Executor
LegacyExecutor
LedgerManager
ReadOnlyLedger
StatePersistor
}
Stack is the set of stack-facing methods available to the consensus plugin