From ace0f6c611bc3438a24fc0d3adf05add8987e98a Mon Sep 17 00:00:00 2001 From: Manav Aggarwal Date: Mon, 22 Aug 2022 14:03:13 -0400 Subject: [PATCH] Use tmcrypto.proof instead of smt.SparseMerkleProof --- baseapp/baseapp.go | 6 +++++- baseapp/fraudproof.go | 15 ++++++++++----- store/v2alpha1/smt/proof.go | 4 ++++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 15d44894c678..9bffb209abee 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -907,5 +907,9 @@ func SetupBaseAppFromParams(appName string, logger log.Logger, db dbm.Connection // set up a new baseapp from a fraudproof func SetupBaseAppFromFraudProof(appName string, logger log.Logger, db dbm.Connection, txDecoder sdk.TxDecoder, fraudProof FraudProof, options ...AppOption) (*BaseApp, error) { - return SetupBaseAppFromParams(appName, logger, db, txDecoder, fraudProof.getModules(), fraudProof.getSubstoreSMTs(), fraudProof.blockHeight, fraudProof.extractStore(), options...) + storeKeyToSMT, err := fraudProof.getSubstoreSMTs() + if err != nil { + return nil, err + } + return SetupBaseAppFromParams(appName, logger, db, txDecoder, fraudProof.getModules(), storeKeyToSMT, fraudProof.blockHeight, fraudProof.extractStore(), options...) } diff --git a/baseapp/fraudproof.go b/baseapp/fraudproof.go index 9157ea1a877f..8b60d526ba41 100644 --- a/baseapp/fraudproof.go +++ b/baseapp/fraudproof.go @@ -8,7 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/store/mem" "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/store/v2alpha1/smt" - + smtlib "github.com/lazyledger/smt" tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" ) @@ -46,18 +46,23 @@ func (fraudProof *FraudProof) getModules() []string { return keys } -func (fraudProof *FraudProof) getSubstoreSMTs() map[string]*smtlib.SparseMerkleTree { +func (fraudProof *FraudProof) getSubstoreSMTs() (map[string]*smtlib.SparseMerkleTree, error) { storeKeyToSMT := make(map[string]*smtlib.SparseMerkleTree) for storeKey, stateWitness := range fraudProof.stateWitness { rootHash := stateWitness.rootHash substoreDeepSMT := smtlib.NewDeepSparseMerkleSubTree(smtlib.NewSimpleMap(), smtlib.NewSimpleMap(), sha256.New(), rootHash) for _, witnessData := range stateWitness.WitnessData { - proof, key, val := witnessData.proof, witnessData.Key, witnessData.Value - substoreDeepSMT.AddBranch(proof, key, val) + proofOp, key, val := witnessData.proof, witnessData.Key, witnessData.Value + proof, err := smt.ProofDecoder(proofOp) + if err != nil { + return nil, err + } + smtProof := proof.(*smt.ProofOp).GetProof() + substoreDeepSMT.AddBranch(smtProof, key, val) } storeKeyToSMT[storeKey] = substoreDeepSMT.SparseMerkleTree } - return storeKeyToSMT + return storeKeyToSMT, nil } func (fraudProof *FraudProof) extractStore() map[string]types.KVStore { diff --git a/store/v2alpha1/smt/proof.go b/store/v2alpha1/smt/proof.go index f013d1b2b995..90d3b93f8a6e 100644 --- a/store/v2alpha1/smt/proof.go +++ b/store/v2alpha1/smt/proof.go @@ -62,6 +62,10 @@ func (p *ProofOp) GetKey() []byte { return p.Key } +func (p *ProofOp) GetProof() smt.SparseMerkleProof { + return p.Proof +} + func (p *ProofOp) ProofOp() tmmerkle.ProofOp { var data bytes.Buffer enc := gob.NewEncoder(&data)