Skip to content

Commit

Permalink
Merge branch 'manav/e2e-test-fraudproof-prototype' into manav/fraudpr…
Browse files Browse the repository at this point in the history
…oof_with_isrs
  • Loading branch information
Manav-Aggarwal committed Aug 20, 2022
2 parents 5c89e85 + 483c7d9 commit aa56ce4
Show file tree
Hide file tree
Showing 4 changed files with 2 additions and 28 deletions.
4 changes: 1 addition & 3 deletions baseapp/baseapp.go
Original file line number Diff line number Diff line change
Expand Up @@ -824,6 +824,7 @@ func (app *BaseApp) generateFraudProof(storeKeyToSubstoreTraceBuf map[string]*by
fraudProof.stateWitness = make(map[string]StateWitness)
fraudProof.blockHeight = blockHeight
cms := app.cms.(*multi.Store)

appHash, err := cms.GetAppHash()
if err != nil {
return FraudProof{}, err
Expand All @@ -832,10 +833,8 @@ func (app *BaseApp) generateFraudProof(storeKeyToSubstoreTraceBuf map[string]*by
storeKeys := cms.GetStoreKeys()
for _, storeKey := range storeKeys {
if subStoreTraceBuf, exists := storeKeyToSubstoreTraceBuf[storeKey.Name()]; exists {
//do something here
keys := cms.GetKVStore(storeKey).(*tracekv.Store).GetAllKeysUsedInTrace(*subStoreTraceBuf)

// This should be the deep subtree
smt := cms.GetSubstoreSMT(storeKey.Name())
if smt.Root() == nil {
continue
Expand All @@ -852,7 +851,6 @@ func (app *BaseApp) generateFraudProof(storeKeyToSubstoreTraceBuf map[string]*by
for key := range keys {
bKey := []byte(key)
has := smt.Has(bKey)
// The error returned here is sometimes `invalid key` but the boolean is false
if has {
value := smt.Get([]byte(key))
proof, err := smt.GetSMTProof([]byte(key))
Expand Down
2 changes: 1 addition & 1 deletion baseapp/baseapp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2426,7 +2426,7 @@ func TestFraudProofGenerationMode(t *testing.T) {
}

txs1 := executeBlockWithArbitraryTxs(t, appB2, numTransactions, 1)

for _, storeKey := range cmsB2.GetStoreKeys() {
subStoreBuf := storeKeyToSubstoreTraceBuf[storeKey.Name()]
tracedKeys := appB2.cms.GetKVStore(storeKey).(*tracekv.Store).GetAllKeysUsedInTrace(*subStoreBuf).Values()
Expand Down
2 changes: 0 additions & 2 deletions baseapp/fraudproof.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ type FraudProof struct {
blockHeight int64

appHash []byte

// A map from module name to state witness
stateWitness map[string]StateWitness
}
Expand Down Expand Up @@ -77,7 +76,6 @@ func (fraudProof *FraudProof) verifyFraudProof() (bool, error) {
if !bytes.Equal(appHash[0], fraudProof.appHash) {
return false, fmt.Errorf("got appHash: %s, expected: %s", string(fraudProof.appHash), string(fraudProof.appHash))
}

// Fraudproof verification on a substore level
for _, witness := range stateWitness.WitnessData {
smtProof, key, value := witness.proof, witness.Key, witness.Value
Expand Down
22 changes: 0 additions & 22 deletions store/v2alpha1/multi/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -1090,25 +1090,3 @@ func (s *Store) GetStoreProof(storeKeyName string) (*tmcrypto.ProofOp, error) {
proofOp, err := types.ProofOpFromMap(storeHashes, storeKeyName)
return &proofOp, err
}

// Constructs a deep sparse merkle tree using the given subKeys for the given storekeyName at the last version
func (s *Store) GetSubstoreSMTWithKeys(storekeyName string, subKeys []string) (*smtlib.DeepSparseMerkleSubTree, error) {
sub, err := s.getSubstore(storekeyName)
if err != nil {
return nil, err
}
smt := s.GetSubstoreSMT(storekeyName)
dsmt := smtlib.NewDeepSparseMerkleSubTree(smtlib.NewSimpleMap(), smtlib.NewSimpleMap(), sha256.New(), smt.Root())
for _, subKey := range subKeys {
bKey := []byte(subKey)
if sub.Has(bKey) {
bValue := smt.Get(bKey)
proof, err := smt.GetSMTProof([]byte(subKey))
if err != nil {
return nil, err
}
dsmt.AddBranch(proof, bKey, bValue)
}
}
return dsmt, nil
}

0 comments on commit aa56ce4

Please sign in to comment.