Skip to content

Commit

Permalink
Merge pull request #189 from tellor-io/add-validator
Browse files Browse the repository at this point in the history
bridge updates
  • Loading branch information
themandalore authored Jul 2, 2024
2 parents b122644 + ff0fddb commit ae9b9b2
Show file tree
Hide file tree
Showing 17 changed files with 545 additions and 144 deletions.
42 changes: 30 additions & 12 deletions app/extend_vote.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ import (
)

type OracleKeeper interface {
// GetQueryIdAndTimestampPairsByBlockHeight(ctx context.Context, height uint64) oracletypes.QueryIdTimestampPairsArray
// GetAggregateReport(ctx context.Context, queryId []byte, timestamp time.Time) (*oracletypes.Aggregate, error)
GetTimestampBefore(ctx context.Context, queryId []byte, timestamp time.Time) (time.Time, error)
GetTimestampAfter(ctx context.Context, queryId []byte, timestamp time.Time) (time.Time, error)
GetAggregatedReportsByHeight(ctx context.Context, height int64) []oracletypes.Aggregate
Expand Down Expand Up @@ -102,14 +100,15 @@ func (h *VoteExtHandler) ExtendVoteHandler(ctx sdk.Context, req *abci.RequestExt
voteExt := BridgeVoteExtension{}
operatorAddress, err := h.GetOperatorAddress()
if err != nil {
h.logger.Error("ExtendVoteHandler: failed to get operator address", "error", err)
return &abci.ResponseExtendVote{}, nil
}
_, err = h.bridgeKeeper.GetEVMAddressByOperator(ctx, operatorAddress)
if err != nil {
h.logger.Info("EVM address not found for operator address, registering evm address", "operatorAddress", operatorAddress)
h.logger.Info("ExtendVoteHandler: EVM address not found for operator address, registering evm address", "operatorAddress", operatorAddress)
initialSigA, initialSigB, err := h.SignInitialMessage()
if err != nil {
h.logger.Info("Failed to sign initial message", "error", err)
h.logger.Info("ExtendVoteHandler: failed to sign initial message", "error", err)
return &abci.ResponseExtendVote{}, nil
}
// include the initial sig in the vote extension
Expand All @@ -124,7 +123,13 @@ func (h *VoteExtHandler) ExtendVoteHandler(ctx sdk.Context, req *abci.RequestExt
attestationRequests, err := h.bridgeKeeper.GetAttestationRequestsByHeight(ctx, uint64(blockHeight))
if err != nil {
if !errors.Is(err, collections.ErrNotFound) {
return nil, err
h.logger.Error("ExtendVoteHandler: failed to get attestation requests", "error", err)
bz, err := json.Marshal(voteExt)
if err != nil {
h.logger.Error("ExtendVoteHandler: failed to marshal vote extension", "error", err)
return &abci.ResponseExtendVote{}, err
}
return &abci.ResponseExtendVote{VoteExtension: bz}, nil
}
} else {
snapshots := attestationRequests.Requests
Expand All @@ -133,7 +138,13 @@ func (h *VoteExtHandler) ExtendVoteHandler(ctx sdk.Context, req *abci.RequestExt
for _, snapshot := range snapshots {
sig, err := h.SignMessage(snapshot.Snapshot)
if err != nil {
return nil, err
h.logger.Error("ExtendVoteHandler: failed to sign message", "error", err)
bz, err := json.Marshal(voteExt)
if err != nil {
h.logger.Error("ExtendVoteHandler: failed to marshal vote extension", "error", err)
return &abci.ResponseExtendVote{}, err
}
return &abci.ResponseExtendVote{VoteExtension: bz}, nil
}
oracleAttestation := OracleAttestation{
Snapshot: snapshot.Snapshot,
Expand All @@ -146,10 +157,11 @@ func (h *VoteExtHandler) ExtendVoteHandler(ctx sdk.Context, req *abci.RequestExt
// include the valset sig in the vote extension
sig, timestamp, err := h.CheckAndSignValidatorCheckpoint(ctx)
if err != nil {
h.logger.Error("Failed to sign validator checkpoint", "error", err)
h.logger.Error("ExtendVoteHandler: failed to sign validator checkpoint", "error", err)
bz, err := json.Marshal(voteExt)
if err != nil {
return nil, fmt.Errorf("failed to marshal vote extension: %w", err)
h.logger.Error("ExtendVoteHandler: failed to marshal vote extension", "error", err)
return &abci.ResponseExtendVote{}, fmt.Errorf("failed to marshal vote extension: %w", err)
}
return &abci.ResponseExtendVote{VoteExtension: bz}, nil
}
Expand All @@ -158,10 +170,10 @@ func (h *VoteExtHandler) ExtendVoteHandler(ctx sdk.Context, req *abci.RequestExt
Timestamp: timestamp,
}
voteExt.ValsetSignature = valsetSignature

bz, err := json.Marshal(voteExt)
if err != nil {
return nil, fmt.Errorf("failed to marshal vote extension: %w", err)
h.logger.Error("ExtendVoteHandler: failed to marshal vote extension", "error", err)
return &abci.ResponseExtendVote{}, fmt.Errorf("failed to marshal vote extension: %w", err)
}
return &abci.ResponseExtendVote{VoteExtension: bz}, nil
}
Expand All @@ -170,28 +182,35 @@ func (h *VoteExtHandler) VerifyVoteExtensionHandler(ctx sdk.Context, req *abci.R
var voteExt BridgeVoteExtension
err := json.Unmarshal(req.VoteExtension, &voteExt)
if err != nil {
return nil, fmt.Errorf("failed to unmarshal vote extension: %w", err)
h.logger.Error("VerifyVoteExtensionHandler: failed to unmarshal vote extension", "error", err)
return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_REJECT}, nil
}
// ensure oracle attestations length is less than or equal to the number of attestation requests
attestationRequests, err := h.bridgeKeeper.GetAttestationRequestsByHeight(ctx, uint64(ctx.BlockHeight()-1))
if err != nil {
if !errors.Is(err, collections.ErrNotFound) {
h.logger.Error("VerifyVoteExtensionHandler: failed to get attestation requests", "error", err)
return nil, err
} else if len(voteExt.OracleAttestations) > 0 {
h.logger.Error("VerifyVoteExtensionHandler: oracle attestations length is greater than 0, should be 0", "voteExt", voteExt)
return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_REJECT}, nil
}
} else if len(voteExt.OracleAttestations) > len(attestationRequests.Requests) {
h.logger.Error("VerifyVoteExtensionHandler: oracle attestations length is greater than attestation requests length", "voteExt", voteExt)
return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_REJECT}, nil
}
// verify the initial signature size
if len(voteExt.InitialSignature.SignatureA) > 65 || len(voteExt.InitialSignature.SignatureB) > 65 {
h.logger.Error("VerifyVoteExtensionHandler: initial signature size is greater than 65", "voteExt", voteExt)
return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_REJECT}, nil
}
// verify the valset signature size
if len(voteExt.ValsetSignature.Signature) > 65 {
h.logger.Error("VerifyVoteExtensionHandler: valset signature size is greater than 65", "voteExt", voteExt)
return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_REJECT}, nil
}

h.logger.Info("VerifyVoteExtensionHandler: vote extension verified", "voteExt", voteExt)
return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_ACCEPT}, nil
}

Expand Down Expand Up @@ -342,7 +361,6 @@ func (h *VoteExtHandler) SignInitialMessage() ([]byte, []byte, error) {
if err != nil {
return nil, nil, err
}
// sigA = append(sigA, 0)

sigB, err := h.SignMessage(msgHashBBytes)
if err != nil {
Expand Down
Loading

0 comments on commit ae9b9b2

Please sign in to comment.