Skip to content

Commit

Permalink
Use tmcrypto.proof instead of smt.SparseMerkleProof
Browse files Browse the repository at this point in the history
  • Loading branch information
Manav-Aggarwal committed Aug 22, 2022
1 parent 677bdf4 commit ace0f6c
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 6 deletions.
6 changes: 5 additions & 1 deletion baseapp/baseapp.go
Original file line number Diff line number Diff line change
Expand Up @@ -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...)
}
15 changes: 10 additions & 5 deletions baseapp/fraudproof.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand Down Expand Up @@ -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 {
Expand Down
4 changes: 4 additions & 0 deletions store/v2alpha1/smt/proof.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit ace0f6c

Please sign in to comment.