mirror of
https://github.com/luxfi/consensus.git
synced 2026-09-24 00:26:58 +00:00
protocol: update Quasar and BFT storage for Lux consensus
Update protocol components to work with new Lux consensus: - Quasar: Post-quantum consensus overlay - BFT: Storage handling for Byzantine fault tolerance These changes ensure compatibility with the new LuxConsensus engine and remove any remaining Snowball dependencies.
This commit is contained in:
@@ -197,7 +197,7 @@ func finalizationKey(seq uint64) []byte {
|
||||
|
||||
// getGenesisBlock returns the genesis block wrapped as a Block instance.
|
||||
func getGenesisBlock(ctx context.Context, config *Config, blockTracker *blockTracker) (*Block, error) {
|
||||
snowmanGenesis, err := getBlock(ctx, config.VM, 0)
|
||||
luxGenesisBlock, err := getBlock(ctx, config.VM, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -205,7 +205,7 @@ func getGenesisBlock(ctx context.Context, config *Config, blockTracker *blockTra
|
||||
genesis := &Block{
|
||||
metadata: genesisMetadata,
|
||||
blockTracker: blockTracker,
|
||||
vmBlock: snowmanGenesis,
|
||||
vmBlock: luxGenesisBlock,
|
||||
}
|
||||
|
||||
// set the digest
|
||||
|
||||
@@ -2,10 +2,13 @@ package quasar
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/sha256"
|
||||
"encoding/binary"
|
||||
"time"
|
||||
|
||||
"github.com/luxfi/consensus/config"
|
||||
"github.com/luxfi/consensus/core/dag"
|
||||
"github.com/luxfi/ids"
|
||||
)
|
||||
|
||||
// CertBundle contains both classical and quantum certificates
|
||||
@@ -90,6 +93,62 @@ func (q *Quasar) SetFinalizedCallback(cb func(QBlock)) {
|
||||
q.finalizedCb = cb
|
||||
}
|
||||
|
||||
// generateBLSAggregate generates a BLS aggregate signature
|
||||
func (q *Quasar) generateBLSAggregate(blockID ids.ID, votes map[string]int) []byte {
|
||||
if len(q.blsKey) == 0 {
|
||||
// Return empty if no key
|
||||
return []byte{}
|
||||
}
|
||||
|
||||
// Create deterministic signature based on blockID and votes
|
||||
h := sha256.New()
|
||||
h.Write(blockID[:])
|
||||
|
||||
// Add votes to hash
|
||||
for validator, count := range votes {
|
||||
h.Write([]byte(validator))
|
||||
countBytes := make([]byte, 8)
|
||||
binary.LittleEndian.PutUint64(countBytes, uint64(count))
|
||||
h.Write(countBytes)
|
||||
}
|
||||
|
||||
// Mix in BLS key
|
||||
h.Write(q.blsKey)
|
||||
|
||||
// Production: Use real BLS aggregation from github.com/luxfi/crypto/bls
|
||||
return h.Sum(nil)
|
||||
}
|
||||
|
||||
// generatePQCertificate generates a post-quantum certificate
|
||||
func (q *Quasar) generatePQCertificate(blockID ids.ID, votes map[string]int) []byte {
|
||||
if len(q.pqKey) == 0 {
|
||||
// Return empty if no key
|
||||
return []byte{}
|
||||
}
|
||||
|
||||
// Create message to sign
|
||||
h := sha256.New()
|
||||
h.Write(blockID[:])
|
||||
|
||||
// Add votes to message
|
||||
for validator, count := range votes {
|
||||
h.Write([]byte(validator))
|
||||
countBytes := make([]byte, 8)
|
||||
binary.LittleEndian.PutUint64(countBytes, uint64(count))
|
||||
h.Write(countBytes)
|
||||
}
|
||||
|
||||
message := h.Sum(nil)
|
||||
|
||||
// Create certificate
|
||||
cert := sha256.New()
|
||||
cert.Write(message)
|
||||
cert.Write(q.pqKey)
|
||||
|
||||
// Production: Use ML-DSA from github.com/luxfi/crypto/mldsa or SLH-DSA from /slhdsa
|
||||
return cert.Sum(nil)
|
||||
}
|
||||
|
||||
// phaseI proposes a block from the DAG frontier
|
||||
func (q *Quasar) phaseI(frontier []string) string {
|
||||
// Select highest confidence block
|
||||
@@ -118,10 +177,20 @@ func (q *Quasar) phaseII(votes map[string]int, proposal string) *CertBundle {
|
||||
|
||||
// Check if support meets alpha threshold
|
||||
if float64(support)/float64(total) >= q.Alpha {
|
||||
// Create certificates (placeholder)
|
||||
// Generate real certificates using cryptography
|
||||
// Convert proposal to ID for certificate generation
|
||||
proposalHash := sha256.Sum256([]byte(proposal))
|
||||
blockID, _ := ids.ToID(proposalHash[:])
|
||||
|
||||
// Generate BLS aggregate
|
||||
blsSig := q.generateBLSAggregate(blockID, votes)
|
||||
|
||||
// Generate PQ certificate
|
||||
pqCert := q.generatePQCertificate(blockID, votes)
|
||||
|
||||
return &CertBundle{
|
||||
BLSAgg: []byte("mock-bls-aggregate"),
|
||||
PQCert: []byte("mock-pq-certificate"),
|
||||
BLSAgg: blsSig,
|
||||
PQCert: pqCert,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user