2024-02-06 16:00:45 -08:00
|
|
|
package txhash
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
gossipv1 "github.com/certusone/wormhole/node/pkg/proto/gossip/v1"
|
2024-04-22 10:26:07 -07:00
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/common/domain"
|
2024-02-06 16:00:45 -08:00
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/fly/deduplicator"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
)
|
|
|
|
|
|
|
|
type dedupTxHashStore struct {
|
|
|
|
txHashStore TxHashStore
|
|
|
|
deduplicator *deduplicator.Deduplicator
|
|
|
|
logger *zap.Logger
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewDedupTxHashStore(txHashStore TxHashStore, deduplicator *deduplicator.Deduplicator, logger *zap.Logger) *dedupTxHashStore {
|
|
|
|
return &dedupTxHashStore{
|
|
|
|
txHashStore: txHashStore,
|
|
|
|
deduplicator: deduplicator,
|
|
|
|
logger: logger,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-04-22 10:26:07 -07:00
|
|
|
func (d *dedupTxHashStore) Set(ctx context.Context, uniqueVaaID string, txHash TxHash) error {
|
|
|
|
key := fmt.Sprintf("observation:%s", uniqueVaaID)
|
2024-02-06 16:00:45 -08:00
|
|
|
return d.deduplicator.Apply(ctx, key, func() error {
|
2024-04-22 10:26:07 -07:00
|
|
|
return d.txHashStore.Set(ctx, uniqueVaaID, txHash)
|
2024-02-06 16:00:45 -08:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *dedupTxHashStore) SetObservation(ctx context.Context, o *gossipv1.SignedObservation) error {
|
|
|
|
txHash, err := CreateTxHash(d.logger, o)
|
|
|
|
if err != nil {
|
|
|
|
d.logger.Error("Error creating txHash", zap.Error(err))
|
|
|
|
return err
|
|
|
|
}
|
2024-04-22 10:26:07 -07:00
|
|
|
uniqueVaaID := domain.CreateUniqueVaaIDByObservation(o)
|
|
|
|
return d.Set(ctx, uniqueVaaID, *txHash)
|
2024-02-06 16:00:45 -08:00
|
|
|
}
|
|
|
|
|
2024-04-22 10:26:07 -07:00
|
|
|
func (d *dedupTxHashStore) Get(ctx context.Context, uniqueVaaID string) (*string, error) {
|
|
|
|
return d.txHashStore.Get(ctx, uniqueVaaID)
|
2024-02-06 16:00:45 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
func (r *dedupTxHashStore) GetName() string {
|
|
|
|
return "dedup"
|
|
|
|
}
|