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  }