feat(store/v2): support queries via RootStore (#18169)
This commit is contained in:
+22
-4
@@ -7,7 +7,6 @@ import (
|
||||
"slices"
|
||||
|
||||
"github.com/cockroachdb/errors"
|
||||
ics23 "github.com/cosmos/ics23/go"
|
||||
|
||||
"cosmossdk.io/log"
|
||||
"cosmossdk.io/store/v2"
|
||||
@@ -150,9 +149,28 @@ func (s *Store) GetLatestVersion() (uint64, error) {
|
||||
return lastCommitID.Version, nil
|
||||
}
|
||||
|
||||
// GetProof delegates the GetProof to the store's underlying SC backend.
|
||||
func (s *Store) GetProof(_ string, version uint64, key []byte) (*ics23.CommitmentProof, error) {
|
||||
return s.stateCommitment.GetProof(version, key)
|
||||
func (s *Store) Query(storeKey string, version uint64, key []byte, prove bool) (store.QueryResult, error) {
|
||||
val, err := s.stateStore.Get(storeKey, version, key)
|
||||
if err != nil {
|
||||
return store.QueryResult{}, err
|
||||
}
|
||||
|
||||
result := store.QueryResult{
|
||||
Key: key,
|
||||
Value: val,
|
||||
Version: version,
|
||||
}
|
||||
|
||||
if prove {
|
||||
proof, err := s.stateCommitment.GetProof(version, key)
|
||||
if err != nil {
|
||||
return store.QueryResult{}, err
|
||||
}
|
||||
|
||||
result.Proof = proof
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// LoadVersion loads a specific version returning an error upon failure.
|
||||
|
||||
@@ -69,10 +69,9 @@ func (s *RootStoreTestSuite) TestGetBranchedKVStore() {
|
||||
s.Require().Empty(bs.GetChangeset().Pairs)
|
||||
}
|
||||
|
||||
func (s *RootStoreTestSuite) TestGetProof() {
|
||||
p, err := s.rootStore.GetProof("", 1, []byte("foo"))
|
||||
func (s *RootStoreTestSuite) TestQuery() {
|
||||
_, err := s.rootStore.Query("", 1, []byte("foo"), true)
|
||||
s.Require().Error(err)
|
||||
s.Require().Nil(p)
|
||||
|
||||
// write and commit a changeset
|
||||
bs := s.rootStore.GetBranchedKVStore("")
|
||||
@@ -88,11 +87,11 @@ func (s *RootStoreTestSuite) TestGetProof() {
|
||||
s.Require().Equal(workingHash, commitHash)
|
||||
|
||||
// ensure the proof is non-nil for the corresponding version
|
||||
p, err = s.rootStore.GetProof("", 1, []byte("foo"))
|
||||
result, err := s.rootStore.Query("", 1, []byte("foo"), true)
|
||||
s.Require().NoError(err)
|
||||
s.Require().NotNil(p)
|
||||
s.Require().Equal([]byte("foo"), p.GetExist().Key)
|
||||
s.Require().Equal([]byte("bar"), p.GetExist().Value)
|
||||
s.Require().NotNil(result.Proof)
|
||||
s.Require().Equal([]byte("foo"), result.Proof.GetExist().Key)
|
||||
s.Require().Equal([]byte("bar"), result.Proof.GetExist().Value)
|
||||
}
|
||||
|
||||
func (s *RootStoreTestSuite) TestBranch() {
|
||||
|
||||
Reference in New Issue
Block a user