Created
May 2, 2022 16:11
-
-
Save ilamanov/e13f3523fef7112238cd6ef62633cb56 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
contract OVM_FraudVerifier is Lib_AddressResolver, OVM_FraudContributor, iOVM_FraudVerifier { | |
/** | |
* Finalizes the fraud verification process. | |
* @param _preStateRoot State root before the fraudulent transaction. | |
* @param _preStateRootBatchHeader Batch header for the provided pre-state root. | |
* @param _preStateRootProof Inclusion proof for the provided pre-state root. | |
* @param _txHash The transaction for the state root | |
* @param _postStateRoot State root after the fraudulent transaction. | |
* @param _postStateRootBatchHeader Batch header for the provided post-state root. | |
* @param _postStateRootProof Inclusion proof for the provided post-state root. | |
*/ | |
function finalizeFraudVerification( | |
bytes32 _preStateRoot, | |
Lib_OVMCodec.ChainBatchHeader memory _preStateRootBatchHeader, | |
Lib_OVMCodec.ChainInclusionProof memory _preStateRootProof, | |
bytes32 _txHash, | |
bytes32 _postStateRoot, | |
Lib_OVMCodec.ChainBatchHeader memory _postStateRootBatchHeader, | |
Lib_OVMCodec.ChainInclusionProof memory _postStateRootProof | |
) | |
override | |
public | |
contributesToFraudProof(_preStateRoot, _txHash) | |
{ | |
iOVM_StateTransitioner transitioner = getStateTransitioner(_preStateRoot, _txHash); | |
// ... a bunch of require statements omitted | |
// If the post state root did not match, then there was fraud and we should delete the batch | |
require( | |
_postStateRoot != transitioner.getPostStateRoot(), | |
"State transition has not been proven fraudulent." | |
); | |
_cancelStateTransition(_postStateRootBatchHeader, _preStateRoot); | |
// TEMPORARY: Remove the transitioner; for minnet. | |
transitioners[keccak256(abi.encodePacked(_preStateRoot, _txHash))] = iOVM_StateTransitioner(0x0000000000000000000000000000000000000000); | |
emit FraudProofFinalized( | |
_preStateRoot, | |
_preStateRootProof.index, | |
_txHash, | |
msg.sender | |
); | |
} | |
/** | |
* Removes a state transition from the state commitment chain. | |
* @param _postStateRootBatchHeader Header for the post-state root. | |
* @param _preStateRoot Pre-state root hash. | |
*/ | |
function _cancelStateTransition( | |
Lib_OVMCodec.ChainBatchHeader memory _postStateRootBatchHeader, | |
bytes32 _preStateRoot | |
) | |
internal | |
{ | |
iOVM_StateCommitmentChain ovmStateCommitmentChain = iOVM_StateCommitmentChain(resolve("OVM_StateCommitmentChain")); | |
iOVM_BondManager ovmBondManager = iOVM_BondManager(resolve("OVM_BondManager")); | |
// Delete the state batch. | |
ovmStateCommitmentChain.deleteStateBatch( | |
_postStateRootBatchHeader | |
); | |
// Get the timestamp and publisher for that block. | |
(uint256 timestamp, address publisher) = abi.decode(_postStateRootBatchHeader.extraData, (uint256, address)); | |
// Slash the bonds at the bond manager. | |
ovmBondManager.finalize( | |
_preStateRoot, | |
publisher, | |
timestamp | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment