Documentation
¶
Index ¶
- Variables
- type Block
- func (b *Block) Accept(ctx context.Context) error
- func (b *Block) Bytes() []byte
- func (b *Block) Height() uint64
- func (b *Block) ID() ids.ID
- func (b *Block) Parent() ids.ID
- func (b *Block) ParentID() ids.ID
- func (b *Block) Reject(ctx context.Context) error
- func (b *Block) Status() uint8
- func (b *Block) Timestamp() time.Time
- func (b *Block) Verify(ctx context.Context) error
- type BridgeConfig
- type BridgeMessage
- type BridgeMessageValidator
- type BridgeRegistry
- type BridgeRequest
- type BridgeSigner
- func (s *BridgeSigner) CreateSignatureShare(ctx context.Context, message *BridgeMessage) ([]byte, []byte, error)
- func (s *BridgeSigner) GetSignature(ctx context.Context, sessionID string) ([]byte, error)
- func (s *BridgeSigner) RequestSignature(ctx context.Context, message *BridgeMessage, signerIndices []int) (string, error)
- func (s *BridgeSigner) SignBridgeMessage(ctx context.Context, message *BridgeMessage, activeSigners []int) error
- func (s *BridgeSigner) VerifyBridgeMessage(message *BridgeMessage) error
- type BridgeValidator
- type ChainClient
- type CompletedBridge
- type DeliveryConfirmation
- type DeliveryConfirmationSigner
- type Factory
- type Genesis
- type GetCurrentEpochArgs
- type GetCurrentEpochReply
- type GetSignerSetInfoArgs
- type GetSignerSetInfoReply
- type GetWaitlistArgs
- type GetWaitlistReply
- type HasSignerArgs
- type HasSignerReply
- type MPCCoordinator
- type MPCKeyManager
- func (m *MPCKeyManager) AggregateSignature(ctx context.Context, message []byte, shares []threshold.SignatureShare) ([]byte, error)
- func (m *MPCKeyManager) GenerateKeys(ctx context.Context, t, totalParties int) error
- func (m *MPCKeyManager) GetGroupPublicKey() []byte
- func (m *MPCKeyManager) GetKeyShareBytes() []byte
- func (m *MPCKeyManager) SetKeyShare(share threshold.KeyShare) error
- func (m *MPCKeyManager) SignShare(ctx context.Context, message []byte) (threshold.SignatureShare, error)
- func (m *MPCKeyManager) VerifyShare(message []byte, share threshold.SignatureShare, publicShare []byte) error
- func (m *MPCKeyManager) VerifySignature(message, signature []byte) bool
- type RegisterValidatorArgs
- type RegisterValidatorInput
- type RegisterValidatorReply
- type RegisterValidatorResult
- type ReplaceSignerArgs
- type ReplaceSignerReply
- type Service
- func (s *Service) GetCurrentEpoch(_ *http.Request, _ *GetCurrentEpochArgs, reply *GetCurrentEpochReply) error
- func (s *Service) GetSignerSetInfo(_ *http.Request, _ *GetSignerSetInfoArgs, reply *GetSignerSetInfoReply) error
- func (s *Service) GetWaitlist(_ *http.Request, _ *GetWaitlistArgs, reply *GetWaitlistReply) error
- func (s *Service) HasSigner(_ *http.Request, args *HasSignerArgs, reply *HasSignerReply) error
- func (s *Service) RegisterValidator(_ *http.Request, args *RegisterValidatorArgs, reply *RegisterValidatorReply) error
- func (s *Service) ReplaceSigner(_ *http.Request, args *ReplaceSignerArgs, reply *ReplaceSignerReply) error
- func (s *Service) SlashSigner(_ *http.Request, args *SlashSignerArgs, reply *SlashSignerReply) error
- type SignerInfo
- type SignerInfoReply
- type SignerReplacementResult
- type SignerSet
- type SignerSetInfo
- type SigningSession
- func (s *SigningSession) AddShare(signerIndex int, share threshold.SignatureShare, publicShare []byte) error
- func (s *SigningSession) GetShares() []threshold.SignatureShare
- func (s *SigningSession) IsComplete(threshold int) bool
- func (s *SigningSession) NumShares() int
- func (s *SigningSession) SetResult(signature []byte, err error)
- func (s *SigningSession) Wait(ctx context.Context) ([]byte, error)
- type SlashSignerArgs
- type SlashSignerInput
- type SlashSignerReply
- type SlashSignerResult
- type VM
- func (vm *VM) AppGossip(ctx context.Context, nodeID ids.NodeID, msg []byte) error
- func (vm *VM) AppRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, deadline time.Time, ...) error
- func (vm *VM) AppRequestFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32, appErr *warp.Error) error
- func (vm *VM) AppResponse(ctx context.Context, nodeID ids.NodeID, requestID uint32, response []byte) error
- func (vm *VM) BuildBlock(ctx context.Context) (block.Block, error)
- func (vm *VM) ConfirmDelivery(ctx context.Context, message *BridgeMessage, ...) error
- func (vm *VM) Connected(ctx context.Context, nodeID ids.NodeID, nodeVersion interface{}) error
- func (vm *VM) CreateHandlers(ctx context.Context) (map[string]http.Handler, error)
- func (vm *VM) CreateRPCHandlers() (map[string]http.Handler, error)
- func (vm *VM) CreateStaticHandlers(ctx context.Context) (map[string]http.Handler, error)
- func (vm *VM) CrossChainAppRequest(ctx context.Context, chainID ids.ID, requestID uint32, deadline time.Time, ...) error
- func (vm *VM) CrossChainAppRequestFailed(ctx context.Context, chainID ids.ID, requestID uint32, appErr *warp.Error) error
- func (vm *VM) CrossChainAppResponse(ctx context.Context, chainID ids.ID, requestID uint32, response []byte) error
- func (vm *VM) Disconnected(ctx context.Context, nodeID ids.NodeID) error
- func (vm *VM) GetBlock(ctx context.Context, id ids.ID) (block.Block, error)
- func (vm *VM) GetBlockIDAtHeight(ctx context.Context, height uint64) (ids.ID, error)
- func (vm *VM) GetMPCStatus() map[string]interface{}
- func (vm *VM) GetSignerSetInfo() *SignerSetInfo
- func (vm *VM) HandleSignatureShare(ctx context.Context, sessionID string, signerIndex int, ...) error
- func (vm *VM) HasSigner(nodeID ids.NodeID) bool
- func (vm *VM) HealthCheck(ctx context.Context) (interface{}, error)
- func (vm *VM) Initialize(ctx context.Context, chainCtx interface{}, db interface{}, genesisBytes []byte, ...) error
- func (vm *VM) InitializeMPCKeys(ctx context.Context) error
- func (vm *VM) InitiateBridgeTransfer(ctx context.Context, message *BridgeMessage) error
- func (vm *VM) LastAccepted(ctx context.Context) (ids.ID, error)
- func (vm *VM) NewHTTPHandler(ctx context.Context) (interface{}, error)
- func (vm *VM) ParseBlock(ctx context.Context, bytes []byte) (block.Block, error)
- func (vm *VM) ProcessBridgeMessage(ctx context.Context, message *BridgeMessage) error
- func (vm *VM) RegisterService(server *rpc.Server) error
- func (vm *VM) RegisterValidator(input *RegisterValidatorInput) (*RegisterValidatorResult, error)
- func (vm *VM) RemoveSigner(nodeID ids.NodeID, replacementNodeID *ids.NodeID) (*SignerReplacementResult, error)
- func (vm *VM) SetPreference(ctx context.Context, id ids.ID) error
- func (vm *VM) SetState(ctx context.Context, state uint32) error
- func (vm *VM) Shutdown(ctx context.Context) error
- func (vm *VM) SlashSigner(input *SlashSignerInput) (*SlashSignerResult, error)
- func (vm *VM) TriggerKeygen(ctx context.Context) error
- func (vm *VM) Version(ctx context.Context) (string, error)
- func (vm *VM) WaitForEvent(ctx context.Context) (interface{}, error)
Constants ¶
This section is empty.
Variables ¶
var ( // ErrMessageNotSigned is returned when a bridge message lacks required signatures ErrMessageNotSigned = errors.New("bridge message not signed") // ErrInvalidBridgeSignature is returned when signature verification fails ErrInvalidBridgeSignature = errors.New("invalid bridge signature") // ErrDeliveryNotConfirmed is returned when message delivery is not confirmed ErrDeliveryNotConfirmed = errors.New("delivery not confirmed") )
var ( // ErrInsufficientSigners is returned when there aren't enough active signers ErrInsufficientSigners = errors.New("insufficient active signers for threshold") // ErrSigningTimeout is returned when signing times out ErrSigningTimeout = errors.New("signing timeout") ErrInvalidShare = errors.New("invalid signature share") ErrNoKeyShare = errors.New("no key share available") )
var Codec codec.Manager
var VMID = ids.ID{'b', 'r', 'i', 'd', 'g', 'e', 'v', 'm', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
VMID is the unique identifier for BridgeVM (B-Chain)
var (
Version = &version.Semantic{
Major: 1,
Minor: 0,
Patch: 0,
}
)
Functions ¶
This section is empty.
Types ¶
type Block ¶
type Block struct {
ParentID_ ids.ID `json:"parentId"` // Field renamed to avoid method collision
BlockHeight uint64 `json:"height"`
BlockTimestamp int64 `json:"timestamp"`
BridgeRequests []*BridgeRequest `json:"bridgeRequests"`
// MPC signatures for this block (NodeID -> signature bytes)
MPCSignatures map[ids.NodeID][]byte `json:"mpcSignatures"`
// Cached values
ID_ ids.ID
// contains filtered or unexported fields
}
Block represents a block in the Bridge chain
type BridgeConfig ¶ added in v1.16.56
type BridgeConfig struct {
// MPC configuration for secure cross-chain operations
MPCThreshold int `json:"mpcThreshold"` // t: Threshold (t+1 parties needed)
MPCTotalParties int `json:"mpcTotalParties"` // n: Total number of MPC nodes
// Bridge parameters
MinConfirmations uint32 `json:"minConfirmations"` // Confirmations required before bridging
BridgeFee uint64 `json:"bridgeFee"` // Fee in LUX for bridge operations
// Supported chains
SupportedChains []string `json:"supportedChains"` // Chain IDs that can be bridged
// Security settings
MaxBridgeAmount uint64 `json:"maxBridgeAmount"` // Maximum amount per bridge transaction
DailyBridgeLimit uint64 `json:"dailyBridgeLimit"` // Daily limit for bridge operations
RequireValidatorBond uint64 `json:"requireValidatorBond"` // 100M LUX bond required (slashable, NOT staked)
// LP-333: Opt-in Signer Set Management
MaxSigners int `json:"maxSigners"` // Maximum signers before set is frozen (default: 100)
ThresholdRatio float64 `json:"thresholdRatio"` // Threshold as ratio of signers (default: 0.67 = 2/3)
}
BridgeConfig contains VM configuration
type BridgeMessage ¶ added in v1.22.76
type BridgeMessage struct {
// Message identification
ID ids.ID `json:"id"`
Nonce uint64 `json:"nonce"`
Timestamp time.Time `json:"timestamp"`
// Chain routing
SourceChain string `json:"sourceChain"`
DestChain string `json:"destChain"`
// Asset transfer
Asset ids.ID `json:"asset"`
Amount uint64 `json:"amount"`
Recipient []byte `json:"recipient"`
Sender []byte `json:"sender"`
// Source transaction proof
SourceTxID ids.ID `json:"sourceTxId"`
Confirmations uint32 `json:"confirmations"`
// Threshold signature
Signature []byte `json:"signature"`
SignedBy []int `json:"signedBy"` // Indices of signers who participated
// Delivery confirmation
DeliveryConfirmation *DeliveryConfirmation `json:"deliveryConfirmation,omitempty"`
}
BridgeMessage represents a signed cross-chain message
func (*BridgeMessage) SigningMessage ¶ added in v1.22.76
func (m *BridgeMessage) SigningMessage() []byte
SigningMessage returns the canonical bytes to sign for a bridge message
type BridgeMessageValidator ¶ added in v1.22.76
type BridgeMessageValidator struct {
// contains filtered or unexported fields
}
BridgeMessageValidator validates bridge messages and their delivery confirmations
func NewBridgeMessageValidator ¶ added in v1.22.76
func NewBridgeMessageValidator( bridgeSigner *BridgeSigner, deliverySigner *DeliveryConfirmationSigner, minConfirmations uint32, requireDeliveryConfirm bool, logger log.Logger, ) *BridgeMessageValidator
NewBridgeMessageValidator creates a new validator
func (*BridgeMessageValidator) ValidateAfterRelay ¶ added in v1.22.76
func (v *BridgeMessageValidator) ValidateAfterRelay(message *BridgeMessage) error
ValidateAfterRelay validates delivery confirmation after message is relayed
func (*BridgeMessageValidator) ValidateBeforeRelay ¶ added in v1.22.76
func (v *BridgeMessageValidator) ValidateBeforeRelay(message *BridgeMessage) error
ValidateBeforeRelay validates a message before relaying to destination chain
func (*BridgeMessageValidator) ValidateMessage ¶ added in v1.22.76
func (v *BridgeMessageValidator) ValidateMessage(message *BridgeMessage) error
ValidateMessage performs full validation of a bridge message
type BridgeRegistry ¶ added in v1.16.56
type BridgeRegistry struct {
Validators map[ids.NodeID]*BridgeValidator
CompletedBridges map[ids.ID]*CompletedBridge
DailyVolume map[string]uint64 // chainID -> volume
// contains filtered or unexported fields
}
BridgeRegistry tracks bridge operations and validators
type BridgeRequest ¶ added in v1.16.56
type BridgeRequest struct {
ID ids.ID `json:"id"`
SourceChain string `json:"sourceChain"`
DestChain string `json:"destChain"`
Asset ids.ID `json:"asset"`
Amount uint64 `json:"amount"`
Recipient []byte `json:"recipient"`
SourceTxID ids.ID `json:"sourceTxId"`
Confirmations uint32 `json:"confirmations"`
Status string `json:"status"` // pending, signing, completed, failed
MPCSignatures [][]byte `json:"mpcSignatures"`
CreatedAt time.Time `json:"createdAt"`
}
BridgeRequest represents a cross-chain bridge request
type BridgeSigner ¶ added in v1.22.76
type BridgeSigner struct {
// contains filtered or unexported fields
}
BridgeSigner handles signing of bridge messages using MPC
func NewBridgeSigner ¶ added in v1.22.76
func NewBridgeSigner(keyManager *MPCKeyManager, coordinator *MPCCoordinator, logger log.Logger) *BridgeSigner
NewBridgeSigner creates a new bridge signer
func (*BridgeSigner) CreateSignatureShare ¶ added in v1.22.76
func (s *BridgeSigner) CreateSignatureShare(ctx context.Context, message *BridgeMessage) ([]byte, []byte, error)
CreateSignatureShare creates this node's signature share for a bridge message
func (*BridgeSigner) GetSignature ¶ added in v1.22.76
GetSignature retrieves the completed signature for a session
func (*BridgeSigner) RequestSignature ¶ added in v1.22.76
func (s *BridgeSigner) RequestSignature(ctx context.Context, message *BridgeMessage, signerIndices []int) (string, error)
RequestSignature initiates threshold signing for a bridge message
func (*BridgeSigner) SignBridgeMessage ¶ added in v1.22.76
func (s *BridgeSigner) SignBridgeMessage(ctx context.Context, message *BridgeMessage, activeSigners []int) error
SignBridgeMessage coordinates complete signing of a bridge message This is used by the coordinator node to orchestrate the signing
func (*BridgeSigner) VerifyBridgeMessage ¶ added in v1.22.76
func (s *BridgeSigner) VerifyBridgeMessage(message *BridgeMessage) error
VerifyBridgeMessage verifies a bridge message signature
type BridgeValidator ¶ added in v1.16.56
type BridgeValidator struct {
NodeID ids.NodeID
StakeAmount uint64
MPCPublicKey []byte
Active bool
TotalBridged uint64
SuccessRate float64
}
BridgeValidator represents a bridge validator node
type ChainClient ¶ added in v1.16.56
type ChainClient interface {
GetTransaction(ctx context.Context, txID ids.ID) (interface{}, error)
GetConfirmations(ctx context.Context, txID ids.ID) (uint32, error)
SendTransaction(ctx context.Context, tx interface{}) (ids.ID, error)
ValidateAddress(address []byte) error
}
ChainClient interface for interacting with different chains
type CompletedBridge ¶ added in v1.16.56
type CompletedBridge struct {
RequestID ids.ID
SourceTxID ids.ID
DestTxID ids.ID
CompletedAt time.Time
MPCSignature []byte
}
CompletedBridge represents a completed bridge operation
type DeliveryConfirmation ¶ added in v1.22.76
type DeliveryConfirmation struct {
DestTxID ids.ID `json:"destTxId"`
DestBlockHeight uint64 `json:"destBlockHeight"`
DestConfirms uint32 `json:"destConfirms"`
ConfirmedAt time.Time `json:"confirmedAt"`
ConfirmSignature []byte `json:"confirmSignature"` // Threshold signature on delivery
}
DeliveryConfirmation proves message was delivered on destination chain
func (*DeliveryConfirmation) SigningMessage ¶ added in v1.22.76
func (dc *DeliveryConfirmation) SigningMessage(messageID ids.ID) []byte
SigningMessage returns the canonical bytes to sign for a delivery confirmation
type DeliveryConfirmationSigner ¶ added in v1.22.76
type DeliveryConfirmationSigner struct {
// contains filtered or unexported fields
}
DeliveryConfirmationSigner handles signing of delivery confirmations
func NewDeliveryConfirmationSigner ¶ added in v1.22.76
func NewDeliveryConfirmationSigner(keyManager *MPCKeyManager, coordinator *MPCCoordinator, logger log.Logger) *DeliveryConfirmationSigner
NewDeliveryConfirmationSigner creates a new delivery confirmation signer
func (*DeliveryConfirmationSigner) SignDeliveryConfirmation ¶ added in v1.22.76
func (s *DeliveryConfirmationSigner) SignDeliveryConfirmation(ctx context.Context, messageID ids.ID, confirmation *DeliveryConfirmation, activeSigners []int) error
SignDeliveryConfirmation creates a threshold signature for delivery confirmation
func (*DeliveryConfirmationSigner) VerifyDeliveryConfirmation ¶ added in v1.22.76
func (s *DeliveryConfirmationSigner) VerifyDeliveryConfirmation(messageID ids.ID, confirmation *DeliveryConfirmation) error
VerifyDeliveryConfirmation verifies a delivery confirmation signature
type Genesis ¶ added in v1.16.56
type Genesis struct {
Timestamp int64 `json:"timestamp"`
}
Genesis represents the genesis state
type GetCurrentEpochArgs ¶ added in v1.16.56
type GetCurrentEpochArgs struct{}
GetCurrentEpochArgs are the arguments for bridge_getCurrentEpoch (empty)
type GetCurrentEpochReply ¶ added in v1.16.56
type GetCurrentEpochReply struct {
Epoch uint64 `json:"epoch"`
TotalSigners int `json:"totalSigners"`
Threshold int `json:"threshold"`
SetFrozen bool `json:"setFrozen"`
}
GetCurrentEpochReply is the reply for bridge_getCurrentEpoch
type GetSignerSetInfoArgs ¶ added in v1.16.56
type GetSignerSetInfoArgs struct{}
GetSignerSetInfoArgs are the arguments for bridge_getSignerSetInfo (empty)
type GetSignerSetInfoReply ¶ added in v1.16.56
type GetSignerSetInfoReply struct {
TotalSigners int `json:"totalSigners"`
Threshold int `json:"threshold"`
MaxSigners int `json:"maxSigners"`
CurrentEpoch uint64 `json:"currentEpoch"`
SetFrozen bool `json:"setFrozen"`
RemainingSlots int `json:"remainingSlots"`
WaitlistSize int `json:"waitlistSize"`
Signers []SignerInfoReply `json:"signers"`
PublicKey string `json:"publicKey,omitempty"`
}
GetSignerSetInfoReply is the reply for bridge_getSignerSetInfo
type GetWaitlistArgs ¶ added in v1.16.56
type GetWaitlistArgs struct{}
GetWaitlistArgs are the arguments for bridge_getWaitlist (empty)
type GetWaitlistReply ¶ added in v1.16.56
type GetWaitlistReply struct {
WaitlistSize int `json:"waitlistSize"`
NodeIDs []string `json:"nodeIds"`
}
GetWaitlistReply is the reply for bridge_getWaitlist
type HasSignerArgs ¶ added in v1.16.56
type HasSignerArgs struct {
NodeID string `json:"nodeId"`
}
HasSignerArgs are the arguments for bridge_hasSigner
type HasSignerReply ¶ added in v1.16.56
type HasSignerReply struct {
IsSigner bool `json:"isSigner"`
}
HasSignerReply is the reply for bridge_hasSigner
type MPCCoordinator ¶ added in v1.22.76
type MPCCoordinator struct {
// contains filtered or unexported fields
}
MPCCoordinator coordinates threshold signing across multiple parties
func NewMPCCoordinator ¶ added in v1.22.76
func NewMPCCoordinator(keyManager *MPCKeyManager, logger log.Logger) *MPCCoordinator
NewMPCCoordinator creates a new MPC coordinator
func (*MPCCoordinator) GetSession ¶ added in v1.22.76
func (c *MPCCoordinator) GetSession(sessionID string) (*SigningSession, bool)
GetSession returns an active signing session
func (*MPCCoordinator) StartSigning ¶ added in v1.22.76
func (c *MPCCoordinator) StartSigning(ctx context.Context, sessionID string, message []byte, signers []int, timeout time.Duration) (*SigningSession, error)
StartSigning initiates a new signing session
type MPCKeyManager ¶ added in v1.22.76
type MPCKeyManager struct {
// contains filtered or unexported fields
}
MPCKeyManager manages threshold key generation and shares
func NewMPCKeyManager ¶ added in v1.22.76
func NewMPCKeyManager(logger log.Logger) (*MPCKeyManager, error)
NewMPCKeyManager creates a new MPC key manager
func (*MPCKeyManager) AggregateSignature ¶ added in v1.22.76
func (m *MPCKeyManager) AggregateSignature(ctx context.Context, message []byte, shares []threshold.SignatureShare) ([]byte, error)
AggregateSignature combines signature shares into a final signature
func (*MPCKeyManager) GenerateKeys ¶ added in v1.22.76
func (m *MPCKeyManager) GenerateKeys(ctx context.Context, t, totalParties int) error
GenerateKeys performs distributed key generation using trusted dealer model In production, this would use proper DKG, but for initial implementation we use trusted dealer for simplicity
func (*MPCKeyManager) GetGroupPublicKey ¶ added in v1.22.76
func (m *MPCKeyManager) GetGroupPublicKey() []byte
GetGroupPublicKey returns the threshold group public key
func (*MPCKeyManager) GetKeyShareBytes ¶ added in v1.22.76
func (m *MPCKeyManager) GetKeyShareBytes() []byte
GetKeyShareBytes returns the serialized key share
func (*MPCKeyManager) SetKeyShare ¶ added in v1.22.76
func (m *MPCKeyManager) SetKeyShare(share threshold.KeyShare) error
SetKeyShare sets this node's key share (used when importing or receiving via DKG)
func (*MPCKeyManager) SignShare ¶ added in v1.22.76
func (m *MPCKeyManager) SignShare(ctx context.Context, message []byte) (threshold.SignatureShare, error)
SignShare creates a signature share for a message
func (*MPCKeyManager) VerifyShare ¶ added in v1.22.76
func (m *MPCKeyManager) VerifyShare(message []byte, share threshold.SignatureShare, publicShare []byte) error
VerifyShare verifies a signature share from another signer
func (*MPCKeyManager) VerifySignature ¶ added in v1.22.76
func (m *MPCKeyManager) VerifySignature(message, signature []byte) bool
VerifySignature verifies a final threshold signature
type RegisterValidatorArgs ¶ added in v1.16.56
type RegisterValidatorArgs struct {
NodeID string `json:"nodeId"`
BondAmount string `json:"bondAmount,omitempty"` // 100M LUX bond (slashable)
MPCPubKey string `json:"mpcPubKey,omitempty"`
}
RegisterValidatorArgs are the arguments for bridge_registerValidator
type RegisterValidatorInput ¶ added in v1.16.56
type RegisterValidatorInput struct {
NodeID string `json:"nodeId"`
BondAmount string `json:"bondAmount,omitempty"` // 100M LUX bond (slashable)
MPCPubKey string `json:"mpcPubKey,omitempty"`
}
RegisterValidatorInput is the input for registering as a bridge signer
type RegisterValidatorReply ¶ added in v1.16.56
type RegisterValidatorReply struct {
Success bool `json:"success"`
NodeID string `json:"nodeId"`
Registered bool `json:"registered"`
Waitlisted bool `json:"waitlisted"`
SignerIndex int `json:"signerIndex"`
WaitlistIndex int `json:"waitlistIndex,omitempty"`
TotalSigners int `json:"totalSigners"`
Threshold int `json:"threshold"`
CurrentEpoch uint64 `json:"currentEpoch"`
SetFrozen bool `json:"setFrozen"`
RemainingSlots int `json:"remainingSlots"`
Message string `json:"message"`
}
RegisterValidatorReply is the reply for bridge_registerValidator
type RegisterValidatorResult ¶ added in v1.16.56
type RegisterValidatorResult struct {
Success bool `json:"success"`
NodeID string `json:"nodeId"`
Registered bool `json:"registered"`
Waitlisted bool `json:"waitlisted"`
SignerIndex int `json:"signerIndex"`
WaitlistIndex int `json:"waitlistIndex,omitempty"`
TotalSigners int `json:"totalSigners"`
Threshold int `json:"threshold"`
CurrentEpoch uint64 `json:"currentEpoch"`
SetFrozen bool `json:"setFrozen"`
RemainingSlots int `json:"remainingSlots"`
Message string `json:"message"`
}
RegisterValidatorResult is the result of registering as a bridge signer
type ReplaceSignerArgs ¶ added in v1.16.56
type ReplaceSignerArgs struct {
NodeID string `json:"nodeId"` // Signer to remove
ReplacementNodeID string `json:"replacementNodeId"` // Explicit replacement (optional, uses waitlist if empty)
}
ReplaceSignerArgs are the arguments for bridge_replaceSigner
type ReplaceSignerReply ¶ added in v1.16.56
type ReplaceSignerReply struct {
Success bool `json:"success"`
RemovedNodeID string `json:"removedNodeId,omitempty"`
ReplacementNodeID string `json:"replacementNodeId,omitempty"`
NewEpoch uint64 `json:"newEpoch"`
ActiveSigners int `json:"activeSigners"`
Threshold int `json:"threshold"`
Message string `json:"message"`
}
ReplaceSignerReply is the reply for bridge_replaceSigner
type Service ¶ added in v1.16.56
type Service struct {
// contains filtered or unexported fields
}
Service provides JSON-RPC endpoints for BridgeVM LP-333 signer management
func NewService ¶ added in v1.16.56
NewService returns a new Service instance
func (*Service) GetCurrentEpoch ¶ added in v1.16.56
func (s *Service) GetCurrentEpoch(_ *http.Request, _ *GetCurrentEpochArgs, reply *GetCurrentEpochReply) error
GetCurrentEpoch returns the current epoch (incremented only on reshare)
func (*Service) GetSignerSetInfo ¶ added in v1.16.56
func (s *Service) GetSignerSetInfo(_ *http.Request, _ *GetSignerSetInfoArgs, reply *GetSignerSetInfoReply) error
GetSignerSetInfo returns information about the current signer set (LP-333)
func (*Service) GetWaitlist ¶ added in v1.16.56
func (s *Service) GetWaitlist(_ *http.Request, _ *GetWaitlistArgs, reply *GetWaitlistReply) error
GetWaitlist returns the current waitlist of validators waiting for signer slots
func (*Service) HasSigner ¶ added in v1.16.56
func (s *Service) HasSigner(_ *http.Request, args *HasSignerArgs, reply *HasSignerReply) error
HasSigner checks if a node is in the active signer set
func (*Service) RegisterValidator ¶ added in v1.16.56
func (s *Service) RegisterValidator(_ *http.Request, args *RegisterValidatorArgs, reply *RegisterValidatorReply) error
RegisterValidator registers a validator as a bridge signer (LP-333 opt-in model) First 100 validators are accepted directly without reshare. After 100 signers, new validators go to waitlist.
func (*Service) ReplaceSigner ¶ added in v1.16.56
func (s *Service) ReplaceSigner(_ *http.Request, args *ReplaceSignerArgs, reply *ReplaceSignerReply) error
ReplaceSigner removes a failed signer and triggers reshare (LP-333) This is the ONLY operation that triggers a reshare.
func (*Service) SlashSigner ¶ added in v1.16.56
func (s *Service) SlashSigner(_ *http.Request, args *SlashSignerArgs, reply *SlashSignerReply) error
SlashSigner slashes a misbehaving bridge signer's bond The bond is NOT stake - it's a slashable deposit that can be partially or fully seized
type SignerInfo ¶ added in v1.16.56
type SignerInfo struct {
NodeID ids.NodeID `json:"nodeId"`
PartyID party.ID `json:"partyId"`
BondAmount uint64 `json:"bondAmount"` // 100M LUX bond (slashable, NOT staked)
MPCPubKey []byte `json:"mpcPubKey"`
Active bool `json:"active"`
JoinedAt time.Time `json:"joinedAt"`
SlotIndex int `json:"slotIndex"`
Slashed bool `json:"slashed"` // True if this signer has been slashed
SlashCount int `json:"slashCount"` // Number of times slashed
}
SignerInfo contains information about a signer in the set
type SignerInfoReply ¶ added in v1.16.56
type SignerInfoReply struct {
NodeID string `json:"nodeId"`
PartyID string `json:"partyId"`
BondAmount uint64 `json:"bondAmount"` // 100M LUX bond (slashable)
Active bool `json:"active"`
JoinedAt string `json:"joinedAt"`
SlotIndex int `json:"slotIndex"`
Slashed bool `json:"slashed"`
SlashCount int `json:"slashCount"`
}
SignerInfoReply contains signer information for RPC replies
type SignerReplacementResult ¶ added in v1.16.56
type SignerReplacementResult struct {
Success bool `json:"success"`
RemovedNodeID string `json:"removedNodeId,omitempty"`
ReplacementNodeID string `json:"replacementNodeId,omitempty"`
NewEpoch uint64 `json:"newEpoch"`
ActiveSigners int `json:"activeSigners"`
Threshold int `json:"threshold"`
Message string `json:"message"`
}
SignerReplacementResult is the result of replacing a failed signer
type SignerSet ¶ added in v1.16.56
type SignerSet struct {
Signers []*SignerInfo `json:"signers"` // Active signers (max 100)
Waitlist []ids.NodeID `json:"waitlist"` // Validators waiting for a slot
CurrentEpoch uint64 `json:"currentEpoch"` // Increments ONLY on reshare (slot replacement)
SetFrozen bool `json:"setFrozen"` // True when len(Signers) >= MaxSigners
ThresholdT int `json:"thresholdT"` // Current t value (T+1 required to sign)
PublicKey []byte `json:"publicKey"` // Combined threshold public key
}
SignerSet tracks the current MPC signer set (LP-333) First 100 validators opt-in without reshare. Reshare ONLY on slot replacement.
type SignerSetInfo ¶ added in v1.16.56
type SignerSetInfo struct {
TotalSigners int `json:"totalSigners"`
Threshold int `json:"threshold"`
MaxSigners int `json:"maxSigners"`
CurrentEpoch uint64 `json:"currentEpoch"`
SetFrozen bool `json:"setFrozen"`
RemainingSlots int `json:"remainingSlots"`
WaitlistSize int `json:"waitlistSize"`
Signers []*SignerInfo `json:"signers"`
PublicKey string `json:"publicKey,omitempty"`
}
SignerSetInfo is the result of getting signer set information
type SigningSession ¶ added in v1.22.76
type SigningSession struct {
// contains filtered or unexported fields
}
SigningSession manages a distributed signing session
func NewSigningSession ¶ added in v1.22.76
func NewSigningSession(sessionID string, message []byte, signers []int, timeout time.Duration, logger log.Logger) *SigningSession
NewSigningSession creates a new signing session
func (*SigningSession) AddShare ¶ added in v1.22.76
func (s *SigningSession) AddShare(signerIndex int, share threshold.SignatureShare, publicShare []byte) error
AddShare adds a signature share to the session
func (*SigningSession) GetShares ¶ added in v1.22.76
func (s *SigningSession) GetShares() []threshold.SignatureShare
GetShares returns all collected shares
func (*SigningSession) IsComplete ¶ added in v1.22.76
func (s *SigningSession) IsComplete(threshold int) bool
IsComplete checks if we have enough shares
func (*SigningSession) NumShares ¶ added in v1.22.76
func (s *SigningSession) NumShares() int
NumShares returns the number of collected shares
func (*SigningSession) SetResult ¶ added in v1.22.76
func (s *SigningSession) SetResult(signature []byte, err error)
SetResult sets the final signature or error
type SlashSignerArgs ¶ added in v1.16.56
type SlashSignerArgs struct {
NodeID string `json:"nodeId"`
Reason string `json:"reason"`
SlashPercent int `json:"slashPercent"` // Percentage of bond to slash (1-100)
Evidence string `json:"evidence"` // Hex-encoded proof of misbehavior
}
SlashSignerArgs are the arguments for bridge_slashSigner
type SlashSignerInput ¶ added in v1.16.56
type SlashSignerInput struct {
NodeID ids.NodeID `json:"nodeId"`
Reason string `json:"reason"`
SlashPercent int `json:"slashPercent"` // Percentage of bond to slash (1-100)
Evidence []byte `json:"evidence"` // Proof of misbehavior
}
SlashSignerInput is the input for slashing a bridge signer
type SlashSignerReply ¶ added in v1.16.56
type SlashSignerReply struct {
Success bool `json:"success"`
NodeID string `json:"nodeId"`
SlashedAmount uint64 `json:"slashedAmount"`
RemainingBond uint64 `json:"remainingBond"`
TotalSlashCount int `json:"totalSlashCount"`
RemovedFromSet bool `json:"removedFromSet"`
Message string `json:"message"`
}
SlashSignerReply is the reply for bridge_slashSigner
type SlashSignerResult ¶ added in v1.16.56
type SlashSignerResult struct {
Success bool `json:"success"`
NodeID string `json:"nodeId"`
SlashedAmount uint64 `json:"slashedAmount"`
RemainingBond uint64 `json:"remainingBond"`
TotalSlashCount int `json:"totalSlashCount"`
RemovedFromSet bool `json:"removedFromSet"`
Message string `json:"message"`
}
SlashSignerResult is the result of slashing a bridge signer
type VM ¶
type VM struct {
// contains filtered or unexported fields
}
VM implements the Bridge VM for cross-chain interoperability
func (*VM) AppRequest ¶
func (vm *VM) AppRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, deadline time.Time, request []byte) error
AppRequest implements the common.VM interface
func (*VM) AppRequestFailed ¶
func (vm *VM) AppRequestFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32, appErr *warp.Error) error
AppRequestFailed implements the common.VM interface
func (*VM) AppResponse ¶
func (vm *VM) AppResponse(ctx context.Context, nodeID ids.NodeID, requestID uint32, response []byte) error
AppResponse implements the common.VM interface
func (*VM) BuildBlock ¶
BuildBlock implements the block.ChainVM interface
func (*VM) ConfirmDelivery ¶ added in v1.22.76
func (vm *VM) ConfirmDelivery(ctx context.Context, message *BridgeMessage, confirmation *DeliveryConfirmation) error
ConfirmDelivery confirms delivery of a bridge message on the destination chain
func (*VM) CreateHandlers ¶
CreateHandlers implements the common.VM interface
func (*VM) CreateRPCHandlers ¶ added in v1.16.56
CreateRPCHandlers creates HTTP handlers for JSON-RPC endpoints
func (*VM) CreateStaticHandlers ¶
CreateStaticHandlers implements the common.VM interface
func (*VM) CrossChainAppRequest ¶
func (vm *VM) CrossChainAppRequest(ctx context.Context, chainID ids.ID, requestID uint32, deadline time.Time, request []byte) error
CrossChainAppRequest implements the common.VM interface
func (*VM) CrossChainAppRequestFailed ¶
func (vm *VM) CrossChainAppRequestFailed(ctx context.Context, chainID ids.ID, requestID uint32, appErr *warp.Error) error
CrossChainAppRequestFailed implements the common.VM interface
func (*VM) CrossChainAppResponse ¶
func (vm *VM) CrossChainAppResponse(ctx context.Context, chainID ids.ID, requestID uint32, response []byte) error
CrossChainAppResponse implements the common.VM interface
func (*VM) Disconnected ¶
Disconnected implements the common.VM interface
func (*VM) GetBlockIDAtHeight ¶
GetBlockIDAtHeight implements the consensusman.HeightIndexedChainVM interface
func (*VM) GetMPCStatus ¶ added in v1.22.76
GetMPCStatus returns the current MPC status
func (*VM) GetSignerSetInfo ¶ added in v1.16.56
func (vm *VM) GetSignerSetInfo() *SignerSetInfo
GetSignerSetInfo returns information about the current signer set
func (*VM) HandleSignatureShare ¶ added in v1.22.76
func (vm *VM) HandleSignatureShare(ctx context.Context, sessionID string, signerIndex int, shareBytes, publicShare []byte) error
AddShareToVM adds a VM method to handle incoming signature shares
func (*VM) HealthCheck ¶
HealthCheck implements the common.VM interface
func (*VM) Initialize ¶
func (vm *VM) Initialize( ctx context.Context, chainCtx interface{}, db interface{}, genesisBytes []byte, upgradeBytes []byte, configBytes []byte, msgChan interface{}, fxs []interface{}, appSender interface{}, ) error
Initialize implements the block.ChainVM interface
func (*VM) InitializeMPCKeys ¶ added in v1.22.76
InitializeMPCKeys performs threshold key generation when signer set is ready This should be called when the signer set reaches the threshold or is frozen
func (*VM) InitiateBridgeTransfer ¶ added in v1.22.76
func (vm *VM) InitiateBridgeTransfer(ctx context.Context, message *BridgeMessage) error
InitiateBridgeTransfer initiates a new bridge transfer with MPC signing
func (*VM) LastAccepted ¶
LastAccepted implements the chain.ChainVM interface
func (*VM) NewHTTPHandler ¶ added in v1.16.56
NewHTTPHandler returns HTTP handlers for the VM
func (*VM) ParseBlock ¶
ParseBlock implements the block.ChainVM interface
func (*VM) ProcessBridgeMessage ¶ added in v1.22.76
func (vm *VM) ProcessBridgeMessage(ctx context.Context, message *BridgeMessage) error
ProcessBridgeMessage handles an incoming bridge message
func (*VM) RegisterService ¶ added in v1.16.56
RegisterService registers the BridgeVM RPC handlers
func (*VM) RegisterValidator ¶ added in v1.16.56
func (vm *VM) RegisterValidator(input *RegisterValidatorInput) (*RegisterValidatorResult, error)
RegisterValidator registers a new validator as a bridge signer (opt-in model) LP-333: First 100 validators are accepted directly - NO reshare on join. After 100 signers, new validators go to waitlist until a slot opens.
func (*VM) RemoveSigner ¶ added in v1.16.56
func (vm *VM) RemoveSigner(nodeID ids.NodeID, replacementNodeID *ids.NodeID) (*SignerReplacementResult, error)
RemoveSigner removes a failed/stopped signer and triggers replacement LP-333: This is the ONLY operation that triggers a reshare. Epoch increments only when a signer is replaced.
func (*VM) SetPreference ¶
SetPreference implements the chain.ChainVM interface
func (*VM) SlashSigner ¶ added in v1.16.56
func (vm *VM) SlashSigner(input *SlashSignerInput) (*SlashSignerResult, error)
SlashSigner slashes a misbehaving bridge signer's bond The bond is NOT stake - it's a slashable deposit that can be partially or fully seized
func (*VM) TriggerKeygen ¶ added in v1.22.76
TriggerKeygen should be called when signer set changes