Documentation
¶
Overview ¶
Package api implements the random beacon and time keeping APIs.
Index ¶
- Constants
- Variables
- func RegisterService(server *grpc.Server, service Backend)
- type Backend
- type ConsensusParameters
- type EpochTime
- type EpochTimeState
- type Genesis
- type InsecureParameters
- type PVSSBackend
- type PVSSCommit
- type PVSSEvent
- type PVSSParameters
- type PVSSReveal
- type PVSSState
- type RoundState
- type SetableBackend
Constants ¶
const ( // ModuleName is a unique module name for the beacon module. ModuleName = "beacon" // BeaconSize is the size of the beacon in bytes. BeaconSize = 32 // EpochInvalid is the placeholder invalid epoch. EpochInvalid EpochTime = 0xffffffffffffffff // ~50 quadrillion years away. // BackendInsecure is the name of the insecure backend. BackendInsecure = "insecure" // BackendPVSS is the name of the PVSS backend. BackendPVSS = "pvss" )
Variables ¶
var ( // MethodPVSSCommit is the method name for a PVSS commitment. MethodPVSSCommit = transaction.NewMethodName(ModuleName, "PVSSCommit", PVSSCommit{}) // MethodPVSSReveal is the method name for a PVSS reveal. MethodPVSSReveal = transaction.NewMethodName(ModuleName, "PVSSReveal", PVSSReveal{}) )
var ErrBeaconNotAvailable = errors.New(ModuleName, 1, "beacon: random beacon not available")
ErrBeaconNotAvailable is the error returned when a beacon is not available for the requested height for any reason.
Functions ¶
func RegisterService ¶ added in v0.2100.0
RegisterService registers a new beacon service with the given gRPC server.
Types ¶
type Backend ¶
type Backend interface {
// GetBaseEpoch returns the base epoch.
GetBaseEpoch(context.Context) (EpochTime, error)
// GetEpoch returns the epoch number at the specified block height.
// Calling this method with height `consensus.HeightLatest`, should
// return the epoch of latest known block.
GetEpoch(context.Context, int64) (EpochTime, error)
// GetFutureEpoch returns any future epoch that is currently scheduled
// to occur at a specific height.
//
// Note that this may return a nil state in case no future epoch is
// currently scheduled.
GetFutureEpoch(context.Context, int64) (*EpochTimeState, error)
// GetEpochBlock returns the block height at the start of the said
// epoch.
GetEpochBlock(context.Context, EpochTime) (int64, error)
// WaitEpoch waits for a specific epoch.
//
// Note that an epoch is considered reached even if any epoch greater
// than the one specified is reached (e.g., that the current epoch
// is already in the future).
WaitEpoch(ctx context.Context, epoch EpochTime) error
// WatchEpochs returns a channel that produces a stream of messages
// on epoch transitions.
//
// Upon subscription the current epoch is sent immediately.
WatchEpochs(ctx context.Context) (<-chan EpochTime, pubsub.ClosableSubscription, error)
// WatchLatestEpoch returns a channel that produces a stream of
// messages on epoch transitions. If an epoch transition happens
// before the previous epoch is read from the channel, the old
// epochs are overwritten.
//
// Upon subscription the current epoch is sent immediately.
WatchLatestEpoch(ctx context.Context) (<-chan EpochTime, pubsub.ClosableSubscription, error)
// GetBeacon gets the beacon for the provided block height.
// Calling this method with height `consensus.HeightLatest` should
// return the beacon for the latest finalized block.
GetBeacon(context.Context, int64) ([]byte, error)
// StateToGenesis returns the genesis state at specified block height.
StateToGenesis(context.Context, int64) (*Genesis, error)
// ConsensusParameters returns the beacon consensus parameters.
ConsensusParameters(ctx context.Context, height int64) (*ConsensusParameters, error)
}
Backend is a random beacon/time keeping implementation.
func NewBeaconClient ¶ added in v0.2100.0
func NewBeaconClient(c *grpc.ClientConn) Backend
NewBeaconClient creates a new gRPC scheduler client service.
type ConsensusParameters ¶
type ConsensusParameters struct {
// Backend is the beacon backend.
Backend string `json:"backend"`
// DebugMockBackend is flag for enabling the mock epochtime backend.
DebugMockBackend bool `json:"debug_mock_backend,omitempty"`
// DebugDeterministic is true iff the output should be deterministic.
DebugDeterministic bool `json:"debug_deterministic,omitempty"`
// InsecureParameters are the beacon parameters for the insecure backend.
InsecureParameters *InsecureParameters `json:"insecure_parameters,omitempty"`
// PVSSParameters are the beacon parameters for the PVSS backend.
PVSSParameters *PVSSParameters `json:"pvss_parameters,omitempty"`
}
ConsensusParameters are the beacon consensus parameters.
type EpochTime ¶ added in v0.2100.0
type EpochTime uint64
EpochTime is the number of intervals (epochs) since a fixed instant in time/block height (epoch date/height).
type EpochTimeState ¶ added in v0.2100.0
EpochTimeState is the epoch state.
type Genesis ¶
type Genesis struct {
// Base is the starting epoch.
Base EpochTime `json:"base"`
// Parameters are the beacon consensus parameters.
Parameters ConsensusParameters `json:"params"`
}
Genesis is the genesis state.
func (*Genesis) SanityCheck ¶
SanityCheck does basic sanity checking on the genesis state.
type InsecureParameters ¶ added in v0.2100.0
type InsecureParameters struct {
// Interval is the epoch interval (in blocks).
Interval int64 `json:"interval,omitempty"`
}
InsecureParameters are the beacon parameters for the insecure backend.
type PVSSBackend ¶ added in v0.2100.0
type PVSSBackend interface {
Backend
// GetPVSSState gets the PVSS beacon round state for the
// provided block height. Calling this method with height
// `consensus.HeightLatest` should return the beacon for
// the latest finalized block.
GetPVSSState(context.Context, int64) (*PVSSState, error)
// WatchLatestPVSSEvent returns a channel that produces a
// stream of mesages on PVSS round events. If a round
// transition happens before the previous round event is read
// from the channel, old events are overwritten.
//
// Upon subscription the current round event is sent immediately.
WatchLatestPVSSEvent(ctx context.Context) (<-chan *PVSSEvent, *pubsub.Subscription, error)
}
PVSSBackend is a Backend that is backed by PVSS.
type PVSSCommit ¶ added in v0.2100.0
type PVSSCommit struct {
Epoch EpochTime `json:"epoch"`
Round uint64 `json:"round"`
Commit *pvss.Commit `json:"commit,omitempty"`
}
PVSSCommit is a PVSS commitment transaction payload.
func (PVSSCommit) MethodMetadata ¶ added in v0.2100.0
func (pc PVSSCommit) MethodMetadata() transaction.MethodMetadata
Implements transaction.MethodMetadataProvider.
type PVSSEvent ¶ added in v0.2100.0
type PVSSEvent struct {
Height int64 `json:"height,omitempty"`
Epoch EpochTime `json:"epoch,omitempty"`
Round uint64 `json:"round,omitempty"`
State RoundState `json:"state,omitempty"`
Participants []signature.PublicKey `json:"participants,omitempty"`
}
PVSSEvent is a PVSS backend event.
type PVSSParameters ¶ added in v0.2100.0
type PVSSParameters struct {
Participants uint32 `json:"participants"`
Threshold uint32 `json:"threshold"`
CommitInterval int64 `json:"commit_interval"`
RevealInterval int64 `json:"reveal_interval"`
TransitionDelay int64 `json:"transition_delay"`
DebugForcedParticipants []signature.PublicKey `json:"debug_forced_participants,omitempty"`
}
PVSSParameters are the beacon parameters for the PVSS backend.
type PVSSReveal ¶ added in v0.2100.0
type PVSSReveal struct {
Epoch EpochTime `json:"epoch"`
Round uint64 `json:"round"`
Reveal *pvss.Reveal `json:"reveal,omitempty"`
}
PVSSReveal is a PVSS reveal transaction payload.
func (PVSSReveal) MethodMetadata ¶ added in v0.2100.0
func (pr PVSSReveal) MethodMetadata() transaction.MethodMetadata
Implements transaction.MethodMetadataProvider.
type PVSSState ¶ added in v0.2100.0
type PVSSState struct {
Height int64 `json:"height,omitempty"`
Epoch EpochTime `json:"epoch,omitempty"`
Round uint64 `json:"round,omitempty"`
State RoundState `json:"state,omitempty"`
Instance *pvss.Instance `json:"instance,omitempty"`
Participants []signature.PublicKey `json:"participants,omitempty"`
Entropy []byte `json:"entropy,omitempty"`
BadParticipants map[signature.PublicKey]bool `json:"bad_participants,omitempty"`
CommitDeadline int64 `json:"commit_deadline,omitempty"`
RevealDeadline int64 `json:"reveal_deadline,omitempty"`
TransitionHeight int64 `json:"transition_height,omitempty"`
RuntimeDisableHeight int64 `json:"runtime_disable_height,omitempty"`
}
PVSSState is the PVSS backend state.
type RoundState ¶ added in v0.2100.0
type RoundState uint8
RoundState is a PVSS round state.
const ( StateInvalid RoundState = 0 StateCommit RoundState = 1 StateReveal RoundState = 2 StateComplete RoundState = 3 )
func (RoundState) String ¶ added in v0.2100.0
func (s RoundState) String() string