From d2c6088654420095e38f212d0048e52c957fd157 Mon Sep 17 00:00:00 2001 From: Oleg Kovalov Date: Tue, 6 Aug 2024 15:05:57 +0200 Subject: [PATCH] feat(store): add readTail method --- store/keys.go | 5 ++++- store/store.go | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/store/keys.go b/store/keys.go index 7e92c46..3a6a3dd 100644 --- a/store/keys.go +++ b/store/keys.go @@ -8,7 +8,10 @@ import ( "github.com/celestiaorg/go-header" ) -var headKey = datastore.NewKey("head") +var ( + headKey = datastore.NewKey("head") + tailKey = datastore.NewKey("tail") +) func heightKey(h uint64) datastore.Key { return datastore.NewKey(strconv.Itoa(int(h))) diff --git a/store/store.go b/store/store.go index bd4cb3a..8e5f964 100644 --- a/store/store.go +++ b/store/store.go @@ -482,6 +482,22 @@ func (s *Store[H]) readHead(ctx context.Context) (H, error) { return s.Get(ctx, head) } +// readTail loads the tail from the datastore. +func (s *Store[H]) readTail(ctx context.Context) (H, error) { + var zero H + b, err := s.ds.Get(ctx, tailKey) + if err != nil { + return zero, err + } + + var tail header.Hash + if err := tail.UnmarshalJSON(b); err != nil { + return zero, err + } + + return s.Get(ctx, tail) +} + func (s *Store[H]) get(ctx context.Context, hash header.Hash) ([]byte, error) { startTime := time.Now() data, err := s.ds.Get(ctx, datastore.NewKey(hash.String()))