mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-11 02:35:18 +00:00
86 lines
1.9 KiB
Go
86 lines
1.9 KiB
Go
package ceremony
|
|
|
|
import (
|
|
"github.com/pkg/errors"
|
|
"go.uber.org/zap"
|
|
"google.golang.org/protobuf/types/known/anypb"
|
|
"source.quilibrium.com/quilibrium/monorepo/nekryptology/pkg/core/curves"
|
|
"source.quilibrium.com/quilibrium/monorepo/node/crypto"
|
|
"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
|
|
)
|
|
|
|
func (e *CeremonyDataClockConsensusEngine) handlePendingCommits(
|
|
workerId int64,
|
|
) {
|
|
for {
|
|
msg := <-e.pendingCommits
|
|
switch msg.TypeUrl {
|
|
case protobufs.KeyBundleAnnouncementType:
|
|
if err := e.includeKeyBundle(msg); err != nil {
|
|
e.logger.Error(
|
|
"failed to include key bundle",
|
|
zap.Error(errors.Wrap(err, "handle pending commits")),
|
|
zap.Int64("worker_id", workerId),
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func (e *CeremonyDataClockConsensusEngine) includeKeyBundle(
|
|
any *anypb.Any,
|
|
) error {
|
|
poly, err := e.prover.BytesToPolynomial(any.Value)
|
|
if err != nil {
|
|
e.logger.Error(
|
|
"error converting key bundle to polynomial",
|
|
zap.Error(err),
|
|
)
|
|
return errors.Wrap(err, "include key bundle")
|
|
}
|
|
|
|
for i := 0; i < 128-len(poly); i++ {
|
|
poly = append(
|
|
poly,
|
|
curves.BLS48581G1().Scalar.Zero().(curves.PairingScalar),
|
|
)
|
|
}
|
|
|
|
evalPoly, err := crypto.FFT(
|
|
poly,
|
|
*curves.BLS48581(
|
|
curves.BLS48581G1().NewGeneratorPoint(),
|
|
),
|
|
128,
|
|
false,
|
|
)
|
|
if err != nil {
|
|
e.logger.Error(
|
|
"error performing fast fourier transform on key bundle",
|
|
zap.Error(err),
|
|
)
|
|
return errors.Wrap(err, "include key bundle")
|
|
}
|
|
|
|
commitment, err := e.prover.Commit(evalPoly)
|
|
if err != nil {
|
|
e.logger.Error(
|
|
"error creating kzg commitment",
|
|
zap.Error(err),
|
|
)
|
|
return errors.Wrap(err, "include key bundle")
|
|
}
|
|
|
|
e.stagedKeyCommitsMx.Lock()
|
|
e.stagedKeyCommits[commitment] = &protobufs.InclusionCommitment{
|
|
Filter: e.filter,
|
|
TypeUrl: any.TypeUrl,
|
|
Data: any.Value,
|
|
Commitment: commitment.ToAffineCompressed(),
|
|
}
|
|
e.stagedKeyPolynomials[commitment] = evalPoly
|
|
e.stagedKeyCommitsMx.Unlock()
|
|
|
|
return nil
|
|
}
|