Versions in this module Expand all Collapse all v1 v1.13.6-lux Jul 31, 2025 v1.13.5-lux Jul 31, 2025 v1.13.4-lux Jul 31, 2025 v1.13.3-lux-latest Jul 30, 2025 v0 v0.1.1 Jul 30, 2025 Changes in this version + var DefaultParameters = Parameters + var ErrBLSAggregationFailed = errors.New("BLS aggregation failed") + var ErrDualCertMismatch = errors.New("BLS and Ringtail certificates do not match") + var ErrInsufficientSignatures = errors.New("insufficient signatures for finality") + var ErrNoPrecompAvailable = errors.New("no precomputed signatures available") + var ErrPrecompExhausted = errors.New("precomputation pool exhausted") + var ErrQuasarTimeout = errors.New("Quasar finality timeout") + var ErrRingtailAggregationFailed = errors.New("Ringtail aggregation failed") + func NewDAGEngine(ctx *core.Context, vm interface{}) dag.Engine + func NewLinearEngine(ctx *core.Context, vm interface{}) chain.Engine + func NewQChainEngine(ctx *core.Context, vm interface{}) chain.Engine + type Aggregator struct + func NewAggregator(nodeID ids.NodeID, threshold int, validators map[ids.NodeID]*ValidatorKeys) *Aggregator + func (a *Aggregator) AddBLSShare(height uint64, nodeID ids.NodeID, sig *bls.Signature) error + func (a *Aggregator) AddRingtailShare(height uint64, nodeID ids.NodeID, share ringtail.Share) error + func (a *Aggregator) GetMetrics() AggregatorMetrics + func (a *Aggregator) UpdateValidatorKeys(validators map[ids.NodeID]*ValidatorKeys) + func (a *Aggregator) WaitForCertificate(ctx context.Context, height uint64, timeout time.Duration) (*DualCertificate, error) + type AggregatorMetrics struct + AggregationLatency time.Duration + BLSAggregations uint64 + DualCertsCreated uint64 + RingtailAggregations uint64 + type Cert []byte + func Aggregate(shares []Share) (Cert, error) + type DoubleSignEvidence struct + BlockID1 ids.ID + BlockID2 ids.ID + Height uint64 + Signature1 []byte + Signature2 []byte + type DualCertificate struct + BLSSignature []byte + BlockHeight uint64 + BlockID ids.ID + Epoch uint32 + RingtailCert []byte + SignerIDs []ids.NodeID + Timestamp time.Time + type Engine struct + func NewEngine(params Parameters, nodeID NodeID) *Engine + func (e *Engine) ConsensusStatus() interface{} + func (e *Engine) Initialize(ctx interface{}) error + type EpochKeys struct + ActivationTime time.Time + Epoch uint32 + ExpirationTime time.Time + GroupPublicKey []byte + ValidatorKeys map[ids.NodeID]*ValidatorKeys + type InvalidSignatureEvidence struct + BlockID ids.ID + HasBLS bool + HasRT bool + Height uint64 + type KeyManager struct + func NewKeyManager(nodeID ids.NodeID, blsSigner bls.Signer, ringtailSK []byte) *KeyManager + func (km *KeyManager) GetBLSSigner() (bls.Signer, *bls.PublicKey) + func (km *KeyManager) GetCurrentEpoch() uint32 + func (km *KeyManager) GetGroupPublicKey(epoch uint32) []byte + func (km *KeyManager) GetRingtailKeyPair() ([]byte, []byte) + func (km *KeyManager) InitiateDKG(ctx context.Context, participants []ids.NodeID) error + func (km *KeyManager) ProcessDKGMessage(from ids.NodeID, msg []byte) error + func (km *KeyManager) SetRotationInterval(interval time.Duration) + func (km *KeyManager) Start(ctx context.Context) error + func (km *KeyManager) Stop() + type MissingRingtailEvidence struct + BLSSignature []byte + BlockID ids.ID + Height uint64 + type NebulaDAGEngine struct + func (n *NebulaDAGEngine) Accepted(ctx context.Context, nodeID ids.NodeID, requestID uint32, ...) error + func (n *NebulaDAGEngine) AcceptedFrontier(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID) error + func (n *NebulaDAGEngine) AcceptedStateSummary(ctx context.Context, nodeID ids.NodeID, requestID uint32, summaryIDs []ids.ID) error + func (n *NebulaDAGEngine) Ancestors(ctx context.Context, nodeID ids.NodeID, requestID uint32, containers [][]byte) error + func (n *NebulaDAGEngine) AppGossip(ctx context.Context, nodeID ids.NodeID, msg []byte) error + func (n *NebulaDAGEngine) AppRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, deadline time.Time, ...) error + func (n *NebulaDAGEngine) AppResponse(ctx context.Context, nodeID ids.NodeID, requestID uint32, msg []byte) error + func (n *NebulaDAGEngine) Chits(ctx context.Context, nodeID ids.NodeID, requestID uint32, preferredID ids.ID, ...) error + func (n *NebulaDAGEngine) Connected(ctx context.Context, nodeID ids.NodeID, nodeVersion *version.Application) error + func (n *NebulaDAGEngine) Context() *core.Context + func (n *NebulaDAGEngine) CrossChainAppRequest(ctx context.Context, chainID ids.ID, requestID uint32, deadline time.Time, ...) error + func (n *NebulaDAGEngine) CrossChainAppResponse(ctx context.Context, chainID ids.ID, requestID uint32, msg []byte) error + func (n *NebulaDAGEngine) Disconnected(ctx context.Context, nodeID ids.NodeID) error + func (n *NebulaDAGEngine) Get(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID) error + func (n *NebulaDAGEngine) GetAccepted(ctx context.Context, nodeID ids.NodeID, requestID uint32, ...) error + func (n *NebulaDAGEngine) GetAcceptedFrontier(ctx context.Context, nodeID ids.NodeID, requestID uint32) error + func (n *NebulaDAGEngine) GetAcceptedStateSummary(ctx context.Context, nodeID ids.NodeID, requestID uint32, heights []uint64) error + func (n *NebulaDAGEngine) GetAncestors(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID) error + func (n *NebulaDAGEngine) GetStateSummaryFrontier(ctx context.Context, nodeID ids.NodeID, requestID uint32) error + func (n *NebulaDAGEngine) GetVM() interface{} + func (n *NebulaDAGEngine) GetVertex(vtxID ids.ID) (dag.Vertex, error) + func (n *NebulaDAGEngine) GetVtx(vtxID ids.ID) (dag.Vertex, error) + func (n *NebulaDAGEngine) HealthCheck(ctx context.Context) (interface{}, error) + func (n *NebulaDAGEngine) Initialize(ctx context.Context, params dag.Parameters) error + func (n *NebulaDAGEngine) Issued(vtx dag.Vertex) bool + func (n *NebulaDAGEngine) Notify(ctx context.Context, msg core.Message) error + func (n *NebulaDAGEngine) PullQuery(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID, ...) error + func (n *NebulaDAGEngine) PushQuery(ctx context.Context, nodeID ids.NodeID, requestID uint32, container []byte, ...) error + func (n *NebulaDAGEngine) Put(ctx context.Context, nodeID ids.NodeID, requestID uint32, container []byte) error + func (n *NebulaDAGEngine) QueryFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32) error + func (n *NebulaDAGEngine) Shutdown(ctx context.Context) error + func (n *NebulaDAGEngine) Start(ctx context.Context, startReqID uint32) error + func (n *NebulaDAGEngine) StateSummaryFrontier(ctx context.Context, nodeID ids.NodeID, requestID uint32, summary []byte) error + func (n *NebulaDAGEngine) Stop(ctx context.Context) error + func (n *NebulaDAGEngine) StopVertexAccepted() bool + type NodeID string + type NovaDecision struct + BlockID ids.ID + Hash []byte + Height uint64 + Status choices.Status + Timestamp int64 + type NovaHook struct + func AttachQuasarToNova(novaEngine interface{}, quasarEngine *QuasarEngineWrapper) (*NovaHook, error) + func NewNovaHook(quasarEngine *QuasarEngineWrapper) *NovaHook + func (nh *NovaHook) Disable() + func (nh *NovaHook) Enable() + func (nh *NovaHook) GetPendingCount() int + func (nh *NovaHook) IsFinalized(blockID ids.ID) bool + func (nh *NovaHook) OnNovaDecided(ctx context.Context, blockID ids.ID, height uint64, blockHash []byte) error + func (nh *NovaHook) OnQuasarFinalized(blockID ids.ID, cert *DualCertificate) + func (nh *NovaHook) OnSlashingDetected(event *SlashingEvent) + func (nh *NovaHook) SetFinalizedCallback(cb func(ids.ID, *DualCertificate)) + func (nh *NovaHook) SetSlashingCallback(cb func(*SlashingEvent)) + func (nh *NovaHook) Start(ctx context.Context) + type Parameters struct + AlphaConfidence int + AlphaPreference int + Beta int + K int + MaxItemProcessingTime time.Duration + type PendingBlock struct + BlockID ids.ID + Hash []byte + Height uint64 + ID ids.ID + Timestamp time.Time + type Photon struct + Amplitude float64 + Data []byte + Frequency float64 + ID interface{} + Phase float64 + Timestamp time.Time + type Precomp interface + func Precompute(sk []byte) (Precomp, error) + type PrecomputePool struct + func NewPrecomputePool(targetSize int) *PrecomputePool + func (p *PrecomputePool) Get() (ringtail.Precomp, error) + func (p *PrecomputePool) Initialize(sk []byte) error + func (p *PrecomputePool) Metrics() map[string]uint64 + func (p *PrecomputePool) Size() int + func (p *PrecomputePool) Stop() + type QBlock struct + Height uint64 + QBlockID ids.ID + VertexIDs []ids.ID + type QuasarBlock struct + func (b *QuasarBlock) Accept() error + func (b *QuasarBlock) Bytes() []byte + func (b *QuasarBlock) Height() uint64 + func (b *QuasarBlock) ID() ids.ID + func (b *QuasarBlock) Parent() ids.ID + func (b *QuasarBlock) Reject() error + func (b *QuasarBlock) Status() choices.Status + func (b *QuasarBlock) Time() uint64 + func (b *QuasarBlock) Verify(context.Context) error + type QuasarEngineWrapper struct + func (w *QuasarEngineWrapper) Accepted(ctx context.Context, nodeID ids.NodeID, requestID uint32, ...) error + func (w *QuasarEngineWrapper) AcceptedFrontier(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID) error + func (w *QuasarEngineWrapper) AcceptedStateSummary(ctx context.Context, nodeID ids.NodeID, requestID uint32, summaryIDs []ids.ID) error + func (w *QuasarEngineWrapper) Ancestors(ctx context.Context, nodeID ids.NodeID, requestID uint32, containers [][]byte) error + func (w *QuasarEngineWrapper) AppGossip(ctx context.Context, nodeID ids.NodeID, msg []byte) error + func (w *QuasarEngineWrapper) AppRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, deadline time.Time, ...) error + func (w *QuasarEngineWrapper) AppResponse(ctx context.Context, nodeID ids.NodeID, requestID uint32, msg []byte) error + func (w *QuasarEngineWrapper) Chits(ctx context.Context, nodeID ids.NodeID, requestID uint32, preferredID ids.ID, ...) error + func (w *QuasarEngineWrapper) Connected(ctx context.Context, nodeID ids.NodeID, nodeVersion *version.Application) error + func (w *QuasarEngineWrapper) Context() *core.Context + func (w *QuasarEngineWrapper) CrossChainAppRequest(ctx context.Context, chainID ids.ID, requestID uint32, deadline time.Time, ...) error + func (w *QuasarEngineWrapper) CrossChainAppResponse(ctx context.Context, chainID ids.ID, requestID uint32, msg []byte) error + func (w *QuasarEngineWrapper) Disconnected(ctx context.Context, nodeID ids.NodeID) error + func (w *QuasarEngineWrapper) Get(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID) error + func (w *QuasarEngineWrapper) GetAccepted(ctx context.Context, nodeID ids.NodeID, requestID uint32, ...) error + func (w *QuasarEngineWrapper) GetAcceptedFrontier(ctx context.Context, nodeID ids.NodeID, requestID uint32) error + func (w *QuasarEngineWrapper) GetAcceptedStateSummary(ctx context.Context, nodeID ids.NodeID, requestID uint32, heights []uint64) error + func (w *QuasarEngineWrapper) GetAncestor(blkID ids.ID, height uint64) (ids.ID, error) + func (w *QuasarEngineWrapper) GetAncestors(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID) error + func (w *QuasarEngineWrapper) GetBlock(blkID ids.ID) (block.Block, error) + func (w *QuasarEngineWrapper) GetFinalityChannel() <-chan *DualCertificate + func (w *QuasarEngineWrapper) GetSlashingChannel() <-chan *SlashingEvent + func (w *QuasarEngineWrapper) GetStateSummaryFrontier(ctx context.Context, nodeID ids.NodeID, requestID uint32) error + func (w *QuasarEngineWrapper) GetVM() interface{} + func (w *QuasarEngineWrapper) GetVertex(vtxID ids.ID) (dag.Vertex, error) + func (w *QuasarEngineWrapper) GetVtx(vtxID ids.ID) (dag.Vertex, error) + func (w *QuasarEngineWrapper) HealthCheck(ctx context.Context) (interface{}, error) + func (w *QuasarEngineWrapper) Initialize(ctx context.Context, params dag.Parameters) error + func (w *QuasarEngineWrapper) IsFinalized(blockID ids.ID) bool + func (w *QuasarEngineWrapper) Issued(vtx dag.Vertex) bool + func (w *QuasarEngineWrapper) LastAccepted() (ids.ID, uint64) + func (w *QuasarEngineWrapper) Notify(ctx context.Context, msg core.Message) error + func (w *QuasarEngineWrapper) OnNovaDecided(ctx context.Context, blockID ids.ID, height uint64, blockHash []byte) error + func (w *QuasarEngineWrapper) PullQuery(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID, ...) error + func (w *QuasarEngineWrapper) PushQuery(ctx context.Context, nodeID ids.NodeID, requestID uint32, container []byte, ...) error + func (w *QuasarEngineWrapper) Put(ctx context.Context, nodeID ids.NodeID, requestID uint32, container []byte) error + func (w *QuasarEngineWrapper) QueryFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32) error + func (w *QuasarEngineWrapper) Shutdown(ctx context.Context) error + func (w *QuasarEngineWrapper) Start(ctx context.Context, startReqID uint32) error + func (w *QuasarEngineWrapper) StateSummaryFrontier(ctx context.Context, nodeID ids.NodeID, requestID uint32, summary []byte) error + func (w *QuasarEngineWrapper) Stop(ctx context.Context) error + func (w *QuasarEngineWrapper) StopVertexAccepted() bool + func (w *QuasarEngineWrapper) VerifyHeightIndex() error + type QuasarVertex struct + func (v *QuasarVertex) Accept() error + func (v *QuasarVertex) Bytes() []byte + func (v *QuasarVertex) Epoch() uint32 + func (v *QuasarVertex) Height() uint64 + func (v *QuasarVertex) ID() ids.ID + func (v *QuasarVertex) Parents() ([]ids.ID, error) + func (v *QuasarVertex) Reject() error + func (v *QuasarVertex) Status() choices.Status + func (v *QuasarVertex) Timestamp() int64 + func (v *QuasarVertex) Verify(context.Context) error + type Share []byte + func QuickSign(pre Precomp, msg []byte) (Share, error) + type SignatureRecord struct + BlockHash []byte + BlockID ids.ID + Signature []byte + Timestamp int64 + type SlashingDetector struct + func NewSlashingDetector(validators map[ids.NodeID]*ValidatorKeys) *SlashingDetector + func (sd *SlashingDetector) Analyze(block *PendingBlock, cert *DualCertificate) *SlashingEvent + func (sd *SlashingDetector) CheckDoubleSign(height uint64, nodeID ids.NodeID, blockID ids.ID) bool + func (sd *SlashingDetector) CleanupHeight(height uint64) + func (sd *SlashingDetector) RecordBLSSignature(height uint64, nodeID ids.NodeID, blockID ids.ID, blockHash []byte, sig []byte) *SlashingEvent + func (sd *SlashingDetector) RecordRingtailShare(height uint64, nodeID ids.NodeID, blockID ids.ID, share []byte) *SlashingEvent + type SlashingEvent struct + BlockID ids.ID + Evidence []byte + Height uint64 + NodeID ids.NodeID + Timestamp time.Time + Type string + type ValidatorKeys struct + BLSPublicKey *bls.PublicKey + Epoch uint32 + NodeID ids.NodeID + RingtailPubKey []byte