Currently, when a new baseapp is set from the contents of a fraudproof, when setting key/value pairs in the store of the baseapp, we start with an empty SMT with no predefined root. However, we must start with a deep SMT with a predefined root taken from the given fraudproof. This lets the new app's substore hashes to be the same.
Right now, since we load the key/value pairs on an empty SMT we don't get the same root as the pre-state root of a challenged transaction.
Currently, when a new baseapp is set from the contents of a fraudproof, when setting key/value pairs in the store of the baseapp, we start with an empty SMT with no predefined root. However, we must start with a deep SMT with a predefined root taken from the given fraudproof. This lets the new app's substore hashes to be the same.
Right now, since we load the key/value pairs on an empty SMT we don't get the same root as the pre-state root of a challenged transaction.
Starting point: https://github.com/celestiaorg/cosmos-sdk/blob/aa56ce45725fc0fc3d6e62d9e537e3a2265c5c0c/baseapp/baseapp.go#L873