github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/store/rootmulti/commit_info_ibc_adapter.go (about) 1 package rootmulti 2 3 import ( 4 "fmt" 5 6 ics23 "github.com/confio/ics23/go" 7 sdkmaps "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/internal/maps" 8 sdkproofs "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/internal/proofs" 9 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/types" 10 "github.com/fibonacci-chain/fbc/libs/tendermint/crypto/merkle" 11 ) 12 13 func (ci commitInfo) ProofOp(storeName string) merkle.ProofOp { 14 cmap := ci.toMap() 15 _, proofs, _ := sdkmaps.ProofsFromMap(cmap) 16 17 proof := proofs[storeName] 18 if proof == nil { 19 panic(fmt.Sprintf("ProofOp for %s but not registered store name", storeName)) 20 } 21 22 // convert merkle.SimpleProof to CommitmentProof 23 existProof, err := sdkproofs.ConvertExistenceProof(proof, []byte(storeName), cmap[storeName]) 24 if err != nil { 25 panic(fmt.Errorf("could not convert simple proof to existence proof: %w", err)) 26 } 27 28 commitmentProof := &ics23.CommitmentProof{ 29 Proof: &ics23.CommitmentProof_Exist{ 30 Exist: existProof, 31 }, 32 } 33 return types.NewSimpleMerkleCommitmentOp([]byte(storeName), commitmentProof).ProofOp() 34 } 35 36 func (ci commitInfo) toMap() map[string][]byte { 37 m := make(map[string][]byte, len(ci.StoreInfos)) 38 for _, storeInfo := range ci.StoreInfos { 39 m[storeInfo.Name] = storeInfo.GetHash() 40 } 41 42 return m 43 } 44 func (si storeInfo) GetHash() []byte { 45 return si.Core.CommitID.Hash 46 }