Commit 07a0d782 authored by clabby's avatar clabby

:broom: `MIPS.sol` switch for VM status

dedup
parent 20d41c4a
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -5,6 +5,7 @@ import (
"context"
"fmt"
"github.com/ethereum-optimism/optimism/cannon/mipsevm"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-challenger/config"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/responder"
......@@ -169,12 +170,13 @@ func ValidateAbsolutePrestate(ctx context.Context, trace types.TraceProvider, lo
return fmt.Errorf("failed to get the trace provider's absolute prestate: %w", err)
}
providerPrestateHash := crypto.Keccak256(providerPrestate)
providerPrestateHash[0] = mipsevm.VMStatusUnfinished
onchainPrestate, err := loader.FetchAbsolutePrestateHash(ctx)
if err != nil {
return fmt.Errorf("failed to get the onchain absolute prestate: %w", err)
}
if !bytes.Equal(providerPrestateHash, onchainPrestate[:]) {
return fmt.Errorf("trace provider's absolute prestate does not match onchain absolute prestate")
return fmt.Errorf("trace provider's absolute prestate does not match onchain absolute prestate: Provider: %s | Chain %s", common.Bytes2Hex(providerPrestateHash), onchainPrestate.Hex())
}
return nil
}
......@@ -6,6 +6,7 @@ import (
"fmt"
"testing"
"github.com/ethereum-optimism/optimism/cannon/mipsevm"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
"github.com/ethereum-optimism/optimism/op-node/testlog"
"github.com/ethereum/go-ethereum/common"
......@@ -119,6 +120,7 @@ func TestValidateAbsolutePrestate(t *testing.T) {
t.Run("ValidPrestates", func(t *testing.T) {
prestate := []byte{0x00, 0x01, 0x02, 0x03}
prestateHash := crypto.Keccak256(prestate)
prestateHash[0] = mipsevm.VMStatusUnfinished
mockTraceProvider := newMockTraceProvider(false, prestate)
mockLoader := newMockPrestateLoader(false, common.BytesToHash(prestateHash))
err := ValidateAbsolutePrestate(context.Background(), mockTraceProvider, mockLoader)
......
......@@ -6,6 +6,7 @@ import (
"math/big"
"strings"
"github.com/ethereum-optimism/optimism/cannon/mipsevm"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
......@@ -78,7 +79,7 @@ func BuildAlphabetPreimage(i uint64, letter string) []byte {
func alphabetStateHash(state []byte) common.Hash {
h := crypto.Keccak256Hash(state)
// In the alphabet game, we ignore the VM status code and always set it to 1.
h[0] = 1
h[0] = mipsevm.VMStatusInvalid
return h
}
......
......@@ -110,13 +110,6 @@ type TraceProvider interface {
StateHash(ctx context.Context, state []byte) (common.Hash, error)
}
const (
VMStatusValid = 0
VMStatusInvalid = 1
VMStatusPanic = 2
VMStatusUnfinished = 3
)
// ClaimData is the core of a claim. It must be unique inside a specific game.
type ClaimData struct {
Value common.Hash
......
......@@ -298,81 +298,81 @@ LegacyERC20ETH_Test:test_transferFrom_doesNotExist_reverts() (gas: 12957)
LegacyERC20ETH_Test:test_transfer_doesNotExist_reverts() (gas: 10755)
LegacyMessagePasser_Test:test_passMessageToL1_succeeds() (gas: 34524)
LibPosition_Test:test_pos_correctness_succeeds() (gas: 38689)
MIPS_Test:test_add_succeeds() (gas: 122488)
MIPS_Test:test_addiSign_succeeds() (gas: 122479)
MIPS_Test:test_addi_succeeds() (gas: 122676)
MIPS_Test:test_addu_succeeds() (gas: 122530)
MIPS_Test:test_addui_succeeds() (gas: 122738)
MIPS_Test:test_and_succeeds() (gas: 122549)
MIPS_Test:test_andi_succeeds() (gas: 122482)
MIPS_Test:test_beq_succeeds() (gas: 202937)
MIPS_Test:test_bgez_succeeds() (gas: 121775)
MIPS_Test:test_bgtz_succeeds() (gas: 121696)
MIPS_Test:test_blez_succeeds() (gas: 121652)
MIPS_Test:test_bltz_succeeds() (gas: 121795)
MIPS_Test:test_bne_succeeds() (gas: 121861)
MIPS_Test:test_add_succeeds() (gas: 122424)
MIPS_Test:test_addiSign_succeeds() (gas: 122415)
MIPS_Test:test_addi_succeeds() (gas: 122612)
MIPS_Test:test_addu_succeeds() (gas: 122466)
MIPS_Test:test_addui_succeeds() (gas: 122674)
MIPS_Test:test_and_succeeds() (gas: 122485)
MIPS_Test:test_andi_succeeds() (gas: 122418)
MIPS_Test:test_beq_succeeds() (gas: 202809)
MIPS_Test:test_bgez_succeeds() (gas: 121711)
MIPS_Test:test_bgtz_succeeds() (gas: 121632)
MIPS_Test:test_blez_succeeds() (gas: 121588)
MIPS_Test:test_bltz_succeeds() (gas: 121731)
MIPS_Test:test_bne_succeeds() (gas: 121797)
MIPS_Test:test_branch_inDelaySlot_fails() (gas: 85999)
MIPS_Test:test_brk_succeeds() (gas: 122160)
MIPS_Test:test_clo_succeeds() (gas: 122217)
MIPS_Test:test_clone_succeeds() (gas: 122113)
MIPS_Test:test_clz_succeeds() (gas: 122688)
MIPS_Test:test_div_succeeds() (gas: 122667)
MIPS_Test:test_divu_succeeds() (gas: 122652)
MIPS_Test:test_exit_succeeds() (gas: 122160)
MIPS_Test:test_fcntl_succeeds() (gas: 204409)
MIPS_Test:test_brk_succeeds() (gas: 122096)
MIPS_Test:test_clo_succeeds() (gas: 122153)
MIPS_Test:test_clone_succeeds() (gas: 122049)
MIPS_Test:test_clz_succeeds() (gas: 122624)
MIPS_Test:test_div_succeeds() (gas: 122603)
MIPS_Test:test_divu_succeeds() (gas: 122588)
MIPS_Test:test_exit_succeeds() (gas: 122096)
MIPS_Test:test_fcntl_succeeds() (gas: 204281)
MIPS_Test:test_illegal_instruction_fails() (gas: 91462)
MIPS_Test:test_invalid_root_fails() (gas: 435636)
MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 120805)
MIPS_Test:test_jal_succeeds() (gas: 120794)
MIPS_Test:test_jalr_succeeds() (gas: 121913)
MIPS_Test:test_jr_succeeds() (gas: 121607)
MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 120741)
MIPS_Test:test_jal_succeeds() (gas: 120730)
MIPS_Test:test_jalr_succeeds() (gas: 121849)
MIPS_Test:test_jr_succeeds() (gas: 121543)
MIPS_Test:test_jump_inDelaySlot_fails() (gas: 85367)
MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120549)
MIPS_Test:test_jump_succeeds() (gas: 120479)
MIPS_Test:test_lb_succeeds() (gas: 127720)
MIPS_Test:test_lbu_succeeds() (gas: 127618)
MIPS_Test:test_lh_succeeds() (gas: 127741)
MIPS_Test:test_lhu_succeeds() (gas: 127658)
MIPS_Test:test_ll_succeeds() (gas: 127880)
MIPS_Test:test_lui_succeeds() (gas: 121761)
MIPS_Test:test_lw_succeeds() (gas: 127509)
MIPS_Test:test_lwl_succeeds() (gas: 242182)
MIPS_Test:test_lwr_succeeds() (gas: 242470)
MIPS_Test:test_mfhi_succeeds() (gas: 122122)
MIPS_Test:test_mflo_succeeds() (gas: 122251)
MIPS_Test:test_mmap_succeeds() (gas: 119080)
MIPS_Test:test_movn_succeeds() (gas: 203609)
MIPS_Test:test_movz_succeeds() (gas: 203477)
MIPS_Test:test_mthi_succeeds() (gas: 122166)
MIPS_Test:test_mtlo_succeeds() (gas: 122274)
MIPS_Test:test_mul_succeeds() (gas: 121766)
MIPS_Test:test_mult_succeeds() (gas: 122470)
MIPS_Test:test_multu_succeeds() (gas: 122507)
MIPS_Test:test_nor_succeeds() (gas: 122599)
MIPS_Test:test_or_succeeds() (gas: 122556)
MIPS_Test:test_ori_succeeds() (gas: 122559)
MIPS_Test:test_preimage_read_succeeds() (gas: 234476)
MIPS_Test:test_preimage_write_succeeds() (gas: 127102)
MIPS_Test:test_prestate_exited_succeeds() (gas: 113346)
MIPS_Test:test_sb_succeeds() (gas: 160591)
MIPS_Test:test_sc_succeeds() (gas: 160785)
MIPS_Test:test_sh_succeeds() (gas: 160628)
MIPS_Test:test_sll_succeeds() (gas: 121727)
MIPS_Test:test_sllv_succeeds() (gas: 121956)
MIPS_Test:test_slt_succeeds() (gas: 204804)
MIPS_Test:test_sltu_succeeds() (gas: 122773)
MIPS_Test:test_sra_succeeds() (gas: 121978)
MIPS_Test:test_srav_succeeds() (gas: 122246)
MIPS_Test:test_srl_succeeds() (gas: 121809)
MIPS_Test:test_srlv_succeeds() (gas: 121974)
MIPS_Test:test_step_abi_succeeds() (gas: 58481)
MIPS_Test:test_sub_succeeds() (gas: 122583)
MIPS_Test:test_subu_succeeds() (gas: 122580)
MIPS_Test:test_sw_succeeds() (gas: 160603)
MIPS_Test:test_swl_succeeds() (gas: 160664)
MIPS_Test:test_swr_succeeds() (gas: 160739)
MIPS_Test:test_xor_succeeds() (gas: 122584)
MIPS_Test:test_xori_succeeds() (gas: 122636)
MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120485)
MIPS_Test:test_jump_succeeds() (gas: 120415)
MIPS_Test:test_lb_succeeds() (gas: 127656)
MIPS_Test:test_lbu_succeeds() (gas: 127554)
MIPS_Test:test_lh_succeeds() (gas: 127677)
MIPS_Test:test_lhu_succeeds() (gas: 127594)
MIPS_Test:test_ll_succeeds() (gas: 127816)
MIPS_Test:test_lui_succeeds() (gas: 121697)
MIPS_Test:test_lw_succeeds() (gas: 127445)
MIPS_Test:test_lwl_succeeds() (gas: 242054)
MIPS_Test:test_lwr_succeeds() (gas: 242342)
MIPS_Test:test_mfhi_succeeds() (gas: 122058)
MIPS_Test:test_mflo_succeeds() (gas: 122187)
MIPS_Test:test_mmap_succeeds() (gas: 119016)
MIPS_Test:test_movn_succeeds() (gas: 203481)
MIPS_Test:test_movz_succeeds() (gas: 203349)
MIPS_Test:test_mthi_succeeds() (gas: 122102)
MIPS_Test:test_mtlo_succeeds() (gas: 122210)
MIPS_Test:test_mul_succeeds() (gas: 121702)
MIPS_Test:test_mult_succeeds() (gas: 122406)
MIPS_Test:test_multu_succeeds() (gas: 122443)
MIPS_Test:test_nor_succeeds() (gas: 122535)
MIPS_Test:test_or_succeeds() (gas: 122492)
MIPS_Test:test_ori_succeeds() (gas: 122495)
MIPS_Test:test_preimage_read_succeeds() (gas: 234412)
MIPS_Test:test_preimage_write_succeeds() (gas: 127038)
MIPS_Test:test_prestate_exited_succeeds() (gas: 113282)
MIPS_Test:test_sb_succeeds() (gas: 160527)
MIPS_Test:test_sc_succeeds() (gas: 160721)
MIPS_Test:test_sh_succeeds() (gas: 160564)
MIPS_Test:test_sll_succeeds() (gas: 121663)
MIPS_Test:test_sllv_succeeds() (gas: 121892)
MIPS_Test:test_slt_succeeds() (gas: 204676)
MIPS_Test:test_sltu_succeeds() (gas: 122709)
MIPS_Test:test_sra_succeeds() (gas: 121914)
MIPS_Test:test_srav_succeeds() (gas: 122182)
MIPS_Test:test_srl_succeeds() (gas: 121745)
MIPS_Test:test_srlv_succeeds() (gas: 121910)
MIPS_Test:test_step_abi_succeeds() (gas: 58417)
MIPS_Test:test_sub_succeeds() (gas: 122519)
MIPS_Test:test_subu_succeeds() (gas: 122516)
MIPS_Test:test_sw_succeeds() (gas: 160539)
MIPS_Test:test_swl_succeeds() (gas: 160600)
MIPS_Test:test_swr_succeeds() (gas: 160675)
MIPS_Test:test_xor_succeeds() (gas: 122520)
MIPS_Test:test_xori_succeeds() (gas: 122572)
MerkleTrie_get_Test:test_get_corruptedProof_reverts() (gas: 5733)
MerkleTrie_get_Test:test_get_extraProofElements_reverts() (gas: 58889)
MerkleTrie_get_Test:test_get_invalidDataRemainder_reverts() (gas: 35845)
......
......@@ -16,7 +16,7 @@
"src/L2/L2StandardBridge.sol": "0xe025dcccbf21d48828ecf588941c9ba04c91b87bdd177a653d3f1b265b0b02a8",
"src/L2/L2ToL1MessagePasser.sol": "0xda56ba2e5b2c28fa8ca2df24077d49e96155a00ecc99cd0778d681be6ed166fe",
"src/L2/SequencerFeeVault.sol": "0x37816035c992d38cf7e3d5a1846b02d017dd7bdca46abe6e5c5171b9ee6225ab",
"src/dispute/FaultDisputeGame.sol": "0x1ee46e383f6017c8a381c54ff26958659d54995c97144879586a0d827f4a82c8",
"src/dispute/FaultDisputeGame.sol": "0xf990d243b117e7ba7e765e1aee433adcd01cf20dcc7088065691b09ae204ae47",
"src/legacy/DeployerWhitelist.sol": "0xf2129ec3da75307ba8e21bc943c332bb04704642e6e263149b5c8ee92dbcb7a8",
"src/legacy/L1BlockNumber.sol": "0x30aae1fc85103476af0226b6e98c71c01feebbdc35d93401390b1ad438a37be6",
"src/legacy/LegacyMessagePasser.sol": "0x5c08b0a663cc49d30e4e38540f6aefab19ef287c3ecd31c8d8c3decd5f5bd497",
......
......@@ -119,23 +119,22 @@ contract MIPS {
// Log the resulting MIPS state, for debugging
log0(start, sub(to, start))
function vmStatus(_exited, _exitCode) -> status_ {
switch _exited
// Determine the VM status
let status := 0
switch exited
case 1 {
switch _exitCode
switch exitCode
// VMStatusValid
case 0 { status_ := 0 }
case 0 { status := 0 }
// VMStatusInvalid
case 1 { status_ := 1 }
case 1 { status := 1 }
// VMStatusPanic
default { status_ := 2 }
default { status := 2 }
}
// VMStatusUnfinished
default { status_ := 3 }
}
let status := vmStatus(exited, exitCode)
default { status := 3 }
// Compute the hash of the resulting MIPS state
// Compute the hash of the resulting MIPS state and set the status byte
out_ := keccak256(start, sub(to, start))
out_ := or(and(not(shl(248, 0xFF)), out_), shl(248, status))
}
......
......@@ -85,7 +85,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver {
/// @param _blockOracle The block oracle, used for loading block hashes further back
/// than the `BLOCKHASH` opcode allows as well as their estimated
/// timestamps.
/// @custom:semver 0.0.8
/// @custom:semver 0.0.9
constructor(
GameType _gameType,
Claim _absolutePrestate,
......@@ -95,7 +95,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver {
L2OutputOracle _l2oo,
BlockOracle _blockOracle
)
Semver(0, 0, 8)
Semver(0, 0, 9)
{
GAME_TYPE = _gameType;
ABSOLUTE_PRESTATE = _absolutePrestate;
......@@ -150,7 +150,7 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver {
// INVARIANT: The prestate is always invalid if the passed `_stateData` is not the
// preimage of the prestate claim hash.
// We ignore the highest order byte of the digest because it is used to
// indicate the VM Status.
// indicate the VM Status and is added after the digest is computed.
if (cleanHighByte(keccak256(_stateData)) != cleanHighByte(Claim.unwrap(preStateClaim))) {
revert InvalidPrestate();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment