Commit 85d93281 authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

Merge pull request #8029 from ethereum-optimism/ctb/simplify-merkle-test

contracts-bedrock: simplify merkle trie setup
parents 9575b73f 0ea77555
This diff is collapsed.
This diff is collapsed.
......@@ -329,81 +329,81 @@ LivenessModule_RemoveOwners_TestFail:test_removeOwners_ownerHasShownLivenessRece
LivenessModule_RemoveOwners_TestFail:test_removeOwners_ownerHasSignedRecently_reverts() (gas: 615047)
LivenessModule_RemoveOwners_TestFail:test_removeOwners_swapToFallbackOwner_reverts() (gas: 1278252)
LivenessModule_RemoveOwners_TestFail:test_removeOwners_wrongPreviousOwner_reverts() (gas: 73954)
MIPS_Test:test_add_succeeds() (gas: 122932)
MIPS_Test:test_addiSign_succeeds() (gas: 122923)
MIPS_Test:test_addi_succeeds() (gas: 123120)
MIPS_Test:test_addu_succeeds() (gas: 122974)
MIPS_Test:test_addui_succeeds() (gas: 123182)
MIPS_Test:test_and_succeeds() (gas: 122993)
MIPS_Test:test_andi_succeeds() (gas: 122926)
MIPS_Test:test_beq_succeeds() (gas: 203359)
MIPS_Test:test_bgez_succeeds() (gas: 122219)
MIPS_Test:test_bgtz_succeeds() (gas: 122140)
MIPS_Test:test_blez_succeeds() (gas: 122096)
MIPS_Test:test_bltz_succeeds() (gas: 122239)
MIPS_Test:test_bne_succeeds() (gas: 122305)
MIPS_Test:test_branch_inDelaySlot_fails() (gas: 86514)
MIPS_Test:test_brk_succeeds() (gas: 122609)
MIPS_Test:test_clo_succeeds() (gas: 122661)
MIPS_Test:test_clone_succeeds() (gas: 122562)
MIPS_Test:test_clz_succeeds() (gas: 123132)
MIPS_Test:test_div_succeeds() (gas: 123111)
MIPS_Test:test_divu_succeeds() (gas: 123096)
MIPS_Test:test_exit_succeeds() (gas: 122611)
MIPS_Test:test_fcntl_succeeds() (gas: 204841)
MIPS_Test:test_illegal_instruction_fails() (gas: 91977)
MIPS_Test:test_invalid_root_fails() (gas: 436151)
MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 121249)
MIPS_Test:test_jal_succeeds() (gas: 121238)
MIPS_Test:test_jalr_succeeds() (gas: 122357)
MIPS_Test:test_jr_succeeds() (gas: 122051)
MIPS_Test:test_jump_inDelaySlot_fails() (gas: 85882)
MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120993)
MIPS_Test:test_jump_succeeds() (gas: 120923)
MIPS_Test:test_lb_succeeds() (gas: 128164)
MIPS_Test:test_lbu_succeeds() (gas: 128062)
MIPS_Test:test_lh_succeeds() (gas: 128185)
MIPS_Test:test_lhu_succeeds() (gas: 128102)
MIPS_Test:test_ll_succeeds() (gas: 128324)
MIPS_Test:test_lui_succeeds() (gas: 122205)
MIPS_Test:test_lw_succeeds() (gas: 127953)
MIPS_Test:test_lwl_succeeds() (gas: 243070)
MIPS_Test:test_lwr_succeeds() (gas: 243358)
MIPS_Test:test_mfhi_succeeds() (gas: 122566)
MIPS_Test:test_mflo_succeeds() (gas: 122695)
MIPS_Test:test_mmap_succeeds() (gas: 119529)
MIPS_Test:test_movn_succeeds() (gas: 204031)
MIPS_Test:test_movz_succeeds() (gas: 203899)
MIPS_Test:test_mthi_succeeds() (gas: 122610)
MIPS_Test:test_mtlo_succeeds() (gas: 122718)
MIPS_Test:test_mul_succeeds() (gas: 122210)
MIPS_Test:test_mult_succeeds() (gas: 122914)
MIPS_Test:test_multu_succeeds() (gas: 122951)
MIPS_Test:test_nor_succeeds() (gas: 123043)
MIPS_Test:test_or_succeeds() (gas: 123000)
MIPS_Test:test_ori_succeeds() (gas: 123003)
MIPS_Test:test_preimage_read_succeeds() (gas: 235481)
MIPS_Test:test_preimage_write_succeeds() (gas: 127551)
MIPS_Test:test_prestate_exited_succeeds() (gas: 113792)
MIPS_Test:test_sb_succeeds() (gas: 161501)
MIPS_Test:test_sc_succeeds() (gas: 161684)
MIPS_Test:test_sh_succeeds() (gas: 161538)
MIPS_Test:test_sll_succeeds() (gas: 122171)
MIPS_Test:test_sllv_succeeds() (gas: 122400)
MIPS_Test:test_slt_succeeds() (gas: 205226)
MIPS_Test:test_sltu_succeeds() (gas: 123217)
MIPS_Test:test_sra_succeeds() (gas: 122422)
MIPS_Test:test_srav_succeeds() (gas: 122690)
MIPS_Test:test_srl_succeeds() (gas: 122253)
MIPS_Test:test_srlv_succeeds() (gas: 122418)
MIPS_Test:test_add_succeeds() (gas: 122866)
MIPS_Test:test_addiSign_succeeds() (gas: 122857)
MIPS_Test:test_addi_succeeds() (gas: 123054)
MIPS_Test:test_addu_succeeds() (gas: 122908)
MIPS_Test:test_addui_succeeds() (gas: 123116)
MIPS_Test:test_and_succeeds() (gas: 122927)
MIPS_Test:test_andi_succeeds() (gas: 122860)
MIPS_Test:test_beq_succeeds() (gas: 203293)
MIPS_Test:test_bgez_succeeds() (gas: 122153)
MIPS_Test:test_bgtz_succeeds() (gas: 122074)
MIPS_Test:test_blez_succeeds() (gas: 122030)
MIPS_Test:test_bltz_succeeds() (gas: 122173)
MIPS_Test:test_bne_succeeds() (gas: 122239)
MIPS_Test:test_branch_inDelaySlot_fails() (gas: 86448)
MIPS_Test:test_brk_succeeds() (gas: 122543)
MIPS_Test:test_clo_succeeds() (gas: 122595)
MIPS_Test:test_clone_succeeds() (gas: 122496)
MIPS_Test:test_clz_succeeds() (gas: 123066)
MIPS_Test:test_div_succeeds() (gas: 123045)
MIPS_Test:test_divu_succeeds() (gas: 123030)
MIPS_Test:test_exit_succeeds() (gas: 122545)
MIPS_Test:test_fcntl_succeeds() (gas: 204775)
MIPS_Test:test_illegal_instruction_fails() (gas: 91911)
MIPS_Test:test_invalid_root_fails() (gas: 436085)
MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 121183)
MIPS_Test:test_jal_succeeds() (gas: 121172)
MIPS_Test:test_jalr_succeeds() (gas: 122291)
MIPS_Test:test_jr_succeeds() (gas: 121985)
MIPS_Test:test_jump_inDelaySlot_fails() (gas: 85816)
MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120927)
MIPS_Test:test_jump_succeeds() (gas: 120857)
MIPS_Test:test_lb_succeeds() (gas: 128098)
MIPS_Test:test_lbu_succeeds() (gas: 127996)
MIPS_Test:test_lh_succeeds() (gas: 128119)
MIPS_Test:test_lhu_succeeds() (gas: 128036)
MIPS_Test:test_ll_succeeds() (gas: 128258)
MIPS_Test:test_lui_succeeds() (gas: 122139)
MIPS_Test:test_lw_succeeds() (gas: 127887)
MIPS_Test:test_lwl_succeeds() (gas: 242938)
MIPS_Test:test_lwr_succeeds() (gas: 243226)
MIPS_Test:test_mfhi_succeeds() (gas: 122500)
MIPS_Test:test_mflo_succeeds() (gas: 122629)
MIPS_Test:test_mmap_succeeds() (gas: 119528)
MIPS_Test:test_movn_succeeds() (gas: 203965)
MIPS_Test:test_movz_succeeds() (gas: 203833)
MIPS_Test:test_mthi_succeeds() (gas: 122544)
MIPS_Test:test_mtlo_succeeds() (gas: 122652)
MIPS_Test:test_mul_succeeds() (gas: 122144)
MIPS_Test:test_mult_succeeds() (gas: 122848)
MIPS_Test:test_multu_succeeds() (gas: 122885)
MIPS_Test:test_nor_succeeds() (gas: 122977)
MIPS_Test:test_or_succeeds() (gas: 122934)
MIPS_Test:test_ori_succeeds() (gas: 122937)
MIPS_Test:test_preimage_read_succeeds() (gas: 235349)
MIPS_Test:test_preimage_write_succeeds() (gas: 127485)
MIPS_Test:test_prestate_exited_succeeds() (gas: 113726)
MIPS_Test:test_sb_succeeds() (gas: 161369)
MIPS_Test:test_sc_succeeds() (gas: 161552)
MIPS_Test:test_sh_succeeds() (gas: 161406)
MIPS_Test:test_sll_succeeds() (gas: 122105)
MIPS_Test:test_sllv_succeeds() (gas: 122334)
MIPS_Test:test_slt_succeeds() (gas: 205160)
MIPS_Test:test_sltu_succeeds() (gas: 123151)
MIPS_Test:test_sra_succeeds() (gas: 122356)
MIPS_Test:test_srav_succeeds() (gas: 122624)
MIPS_Test:test_srl_succeeds() (gas: 122187)
MIPS_Test:test_srlv_succeeds() (gas: 122352)
MIPS_Test:test_step_abi_succeeds() (gas: 58467)
MIPS_Test:test_sub_succeeds() (gas: 123027)
MIPS_Test:test_subu_succeeds() (gas: 123024)
MIPS_Test:test_sw_succeeds() (gas: 161513)
MIPS_Test:test_swl_succeeds() (gas: 161574)
MIPS_Test:test_swr_succeeds() (gas: 161649)
MIPS_Test:test_xor_succeeds() (gas: 123028)
MIPS_Test:test_xori_succeeds() (gas: 123080)
MIPS_Test:test_sub_succeeds() (gas: 122961)
MIPS_Test:test_subu_succeeds() (gas: 122958)
MIPS_Test:test_sw_succeeds() (gas: 161381)
MIPS_Test:test_swl_succeeds() (gas: 161442)
MIPS_Test:test_swr_succeeds() (gas: 161517)
MIPS_Test:test_xor_succeeds() (gas: 122962)
MIPS_Test:test_xori_succeeds() (gas: 123014)
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)
......@@ -469,9 +469,9 @@ OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutp
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 182306)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 41780)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 173953)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 181188)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 181161)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 154740)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 219235)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 219208)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 220983)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_paused_reverts() (gas: 38706)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() (gas: 209679)
......
......@@ -36,6 +36,7 @@ import { LegacyMintableERC20 } from "src/legacy/LegacyMintableERC20.sol";
import { SystemConfig } from "src/L1/SystemConfig.sol";
import { ResourceMetering } from "src/L1/ResourceMetering.sol";
import { Constants } from "src/libraries/Constants.sol";
import { FFIInterface } from "test/setup/FFIInterface.sol";
contract CommonTest is Test {
address alice = address(128);
......@@ -497,237 +498,3 @@ contract FeeVault_Initializer is Bridge_Initializer {
event Withdrawal(uint256 value, address to, address from, FeeVault.WithdrawalNetwork withdrawalNetwork);
}
contract FFIInterface is Test {
function getProveWithdrawalTransactionInputs(Types.WithdrawalTransaction memory _tx)
external
returns (bytes32, bytes32, bytes32, bytes32, bytes[] memory)
{
string[] memory cmds = new string[](9);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "getProveWithdrawalTransactionInputs";
cmds[3] = vm.toString(_tx.nonce);
cmds[4] = vm.toString(_tx.sender);
cmds[5] = vm.toString(_tx.target);
cmds[6] = vm.toString(_tx.value);
cmds[7] = vm.toString(_tx.gasLimit);
cmds[8] = vm.toString(_tx.data);
bytes memory result = vm.ffi(cmds);
(
bytes32 stateRoot,
bytes32 storageRoot,
bytes32 outputRoot,
bytes32 withdrawalHash,
bytes[] memory withdrawalProof
) = abi.decode(result, (bytes32, bytes32, bytes32, bytes32, bytes[]));
return (stateRoot, storageRoot, outputRoot, withdrawalHash, withdrawalProof);
}
function hashCrossDomainMessage(
uint256 _nonce,
address _sender,
address _target,
uint256 _value,
uint256 _gasLimit,
bytes memory _data
)
external
returns (bytes32)
{
string[] memory cmds = new string[](9);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "hashCrossDomainMessage";
cmds[3] = vm.toString(_nonce);
cmds[4] = vm.toString(_sender);
cmds[5] = vm.toString(_target);
cmds[6] = vm.toString(_value);
cmds[7] = vm.toString(_gasLimit);
cmds[8] = vm.toString(_data);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes32));
}
function hashWithdrawal(
uint256 _nonce,
address _sender,
address _target,
uint256 _value,
uint256 _gasLimit,
bytes memory _data
)
external
returns (bytes32)
{
string[] memory cmds = new string[](9);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "hashWithdrawal";
cmds[3] = vm.toString(_nonce);
cmds[4] = vm.toString(_sender);
cmds[5] = vm.toString(_target);
cmds[6] = vm.toString(_value);
cmds[7] = vm.toString(_gasLimit);
cmds[8] = vm.toString(_data);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes32));
}
function hashOutputRootProof(
bytes32 _version,
bytes32 _stateRoot,
bytes32 _messagePasserStorageRoot,
bytes32 _latestBlockhash
)
external
returns (bytes32)
{
string[] memory cmds = new string[](7);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "hashOutputRootProof";
cmds[3] = Strings.toHexString(uint256(_version));
cmds[4] = Strings.toHexString(uint256(_stateRoot));
cmds[5] = Strings.toHexString(uint256(_messagePasserStorageRoot));
cmds[6] = Strings.toHexString(uint256(_latestBlockhash));
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes32));
}
function hashDepositTransaction(
address _from,
address _to,
uint256 _mint,
uint256 _value,
uint64 _gas,
bytes memory _data,
uint64 _logIndex
)
external
returns (bytes32)
{
string[] memory cmds = new string[](11);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "hashDepositTransaction";
cmds[3] = "0x0000000000000000000000000000000000000000000000000000000000000000";
cmds[4] = vm.toString(_logIndex);
cmds[5] = vm.toString(_from);
cmds[6] = vm.toString(_to);
cmds[7] = vm.toString(_mint);
cmds[8] = vm.toString(_value);
cmds[9] = vm.toString(_gas);
cmds[10] = vm.toString(_data);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes32));
}
function encodeDepositTransaction(Types.UserDepositTransaction calldata txn) external returns (bytes memory) {
string[] memory cmds = new string[](12);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "encodeDepositTransaction";
cmds[3] = vm.toString(txn.from);
cmds[4] = vm.toString(txn.to);
cmds[5] = vm.toString(txn.value);
cmds[6] = vm.toString(txn.mint);
cmds[7] = vm.toString(txn.gasLimit);
cmds[8] = vm.toString(txn.isCreation);
cmds[9] = vm.toString(txn.data);
cmds[10] = vm.toString(txn.l1BlockHash);
cmds[11] = vm.toString(txn.logIndex);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes));
}
function encodeCrossDomainMessage(
uint256 _nonce,
address _sender,
address _target,
uint256 _value,
uint256 _gasLimit,
bytes memory _data
)
external
returns (bytes memory)
{
string[] memory cmds = new string[](9);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "encodeCrossDomainMessage";
cmds[3] = vm.toString(_nonce);
cmds[4] = vm.toString(_sender);
cmds[5] = vm.toString(_target);
cmds[6] = vm.toString(_value);
cmds[7] = vm.toString(_gasLimit);
cmds[8] = vm.toString(_data);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes));
}
function decodeVersionedNonce(uint256 nonce) external returns (uint256, uint256) {
string[] memory cmds = new string[](4);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "decodeVersionedNonce";
cmds[3] = vm.toString(nonce);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (uint256, uint256));
}
function getMerkleTrieFuzzCase(string memory variant)
external
returns (bytes32, bytes memory, bytes memory, bytes[] memory)
{
string[] memory cmds = new string[](6);
cmds[0] = "./scripts/go-ffi/go-ffi";
cmds[1] = "trie";
cmds[2] = variant;
return abi.decode(vm.ffi(cmds), (bytes32, bytes, bytes, bytes[]));
}
function getCannonMemoryProof(uint32 pc, uint32 insn) external returns (bytes32, bytes memory) {
string[] memory cmds = new string[](5);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "cannonMemoryProof";
cmds[3] = vm.toString(pc);
cmds[4] = vm.toString(insn);
bytes memory result = vm.ffi(cmds);
(bytes32 memRoot, bytes memory proof) = abi.decode(result, (bytes32, bytes));
return (memRoot, proof);
}
function getCannonMemoryProof(
uint32 pc,
uint32 insn,
uint32 memAddr,
uint32 memVal
)
external
returns (bytes32, bytes memory)
{
string[] memory cmds = new string[](7);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "cannonMemoryProof";
cmds[3] = vm.toString(pc);
cmds[4] = vm.toString(insn);
cmds[5] = vm.toString(memAddr);
cmds[6] = vm.toString(memVal);
bytes memory result = vm.ffi(cmds);
(bytes32 memRoot, bytes memory proof) = abi.decode(result, (bytes32, bytes));
return (memRoot, proof);
}
}
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
import { CommonTest } from "test/CommonTest.t.sol";
import { Test } from "forge-std/Test.sol";
import { MerkleTrie } from "src/libraries/trie/MerkleTrie.sol";
import { FFIInterface } from "test/setup/FFIInterface.sol";
contract MerkleTrie_get_Test is Test {
FFIInterface ffi;
function setUp() public {
ffi = new FFIInterface();
}
contract MerkleTrie_get_Test is CommonTest {
function test_get_validProof1_succeeds() external {
bytes32 root = 0xd582f99275e227a1cf4284899e5ff06ee56da8859be71b553397c69151bc942f;
bytes memory key = hex"6b6579326262";
......
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { Types } from "src/libraries/Types.sol";
import { Vm } from "forge-std/Vm.sol";
import { Strings } from "@openzeppelin/contracts/utils/Strings.sol";
/// @title FFIInterface
contract FFIInterface {
Vm internal constant vm = Vm(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D);
function getProveWithdrawalTransactionInputs(Types.WithdrawalTransaction memory _tx)
external
returns (bytes32, bytes32, bytes32, bytes32, bytes[] memory)
{
string[] memory cmds = new string[](9);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "getProveWithdrawalTransactionInputs";
cmds[3] = vm.toString(_tx.nonce);
cmds[4] = vm.toString(_tx.sender);
cmds[5] = vm.toString(_tx.target);
cmds[6] = vm.toString(_tx.value);
cmds[7] = vm.toString(_tx.gasLimit);
cmds[8] = vm.toString(_tx.data);
bytes memory result = vm.ffi(cmds);
(
bytes32 stateRoot,
bytes32 storageRoot,
bytes32 outputRoot,
bytes32 withdrawalHash,
bytes[] memory withdrawalProof
) = abi.decode(result, (bytes32, bytes32, bytes32, bytes32, bytes[]));
return (stateRoot, storageRoot, outputRoot, withdrawalHash, withdrawalProof);
}
function hashCrossDomainMessage(
uint256 _nonce,
address _sender,
address _target,
uint256 _value,
uint256 _gasLimit,
bytes memory _data
)
external
returns (bytes32)
{
string[] memory cmds = new string[](9);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "hashCrossDomainMessage";
cmds[3] = vm.toString(_nonce);
cmds[4] = vm.toString(_sender);
cmds[5] = vm.toString(_target);
cmds[6] = vm.toString(_value);
cmds[7] = vm.toString(_gasLimit);
cmds[8] = vm.toString(_data);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes32));
}
function hashWithdrawal(
uint256 _nonce,
address _sender,
address _target,
uint256 _value,
uint256 _gasLimit,
bytes memory _data
)
external
returns (bytes32)
{
string[] memory cmds = new string[](9);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "hashWithdrawal";
cmds[3] = vm.toString(_nonce);
cmds[4] = vm.toString(_sender);
cmds[5] = vm.toString(_target);
cmds[6] = vm.toString(_value);
cmds[7] = vm.toString(_gasLimit);
cmds[8] = vm.toString(_data);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes32));
}
function hashOutputRootProof(
bytes32 _version,
bytes32 _stateRoot,
bytes32 _messagePasserStorageRoot,
bytes32 _latestBlockhash
)
external
returns (bytes32)
{
string[] memory cmds = new string[](7);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "hashOutputRootProof";
cmds[3] = Strings.toHexString(uint256(_version));
cmds[4] = Strings.toHexString(uint256(_stateRoot));
cmds[5] = Strings.toHexString(uint256(_messagePasserStorageRoot));
cmds[6] = Strings.toHexString(uint256(_latestBlockhash));
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes32));
}
function hashDepositTransaction(
address _from,
address _to,
uint256 _mint,
uint256 _value,
uint64 _gas,
bytes memory _data,
uint64 _logIndex
)
external
returns (bytes32)
{
string[] memory cmds = new string[](11);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "hashDepositTransaction";
cmds[3] = "0x0000000000000000000000000000000000000000000000000000000000000000";
cmds[4] = vm.toString(_logIndex);
cmds[5] = vm.toString(_from);
cmds[6] = vm.toString(_to);
cmds[7] = vm.toString(_mint);
cmds[8] = vm.toString(_value);
cmds[9] = vm.toString(_gas);
cmds[10] = vm.toString(_data);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes32));
}
function encodeDepositTransaction(Types.UserDepositTransaction calldata txn) external returns (bytes memory) {
string[] memory cmds = new string[](12);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "encodeDepositTransaction";
cmds[3] = vm.toString(txn.from);
cmds[4] = vm.toString(txn.to);
cmds[5] = vm.toString(txn.value);
cmds[6] = vm.toString(txn.mint);
cmds[7] = vm.toString(txn.gasLimit);
cmds[8] = vm.toString(txn.isCreation);
cmds[9] = vm.toString(txn.data);
cmds[10] = vm.toString(txn.l1BlockHash);
cmds[11] = vm.toString(txn.logIndex);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes));
}
function encodeCrossDomainMessage(
uint256 _nonce,
address _sender,
address _target,
uint256 _value,
uint256 _gasLimit,
bytes memory _data
)
external
returns (bytes memory)
{
string[] memory cmds = new string[](9);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "encodeCrossDomainMessage";
cmds[3] = vm.toString(_nonce);
cmds[4] = vm.toString(_sender);
cmds[5] = vm.toString(_target);
cmds[6] = vm.toString(_value);
cmds[7] = vm.toString(_gasLimit);
cmds[8] = vm.toString(_data);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (bytes));
}
function decodeVersionedNonce(uint256 nonce) external returns (uint256, uint256) {
string[] memory cmds = new string[](4);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "decodeVersionedNonce";
cmds[3] = vm.toString(nonce);
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (uint256, uint256));
}
function getMerkleTrieFuzzCase(string memory variant)
external
returns (bytes32, bytes memory, bytes memory, bytes[] memory)
{
string[] memory cmds = new string[](6);
cmds[0] = "./scripts/go-ffi/go-ffi";
cmds[1] = "trie";
cmds[2] = variant;
return abi.decode(vm.ffi(cmds), (bytes32, bytes, bytes, bytes[]));
}
function getCannonMemoryProof(uint32 pc, uint32 insn) external returns (bytes32, bytes memory) {
string[] memory cmds = new string[](5);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "cannonMemoryProof";
cmds[3] = vm.toString(pc);
cmds[4] = vm.toString(insn);
bytes memory result = vm.ffi(cmds);
(bytes32 memRoot, bytes memory proof) = abi.decode(result, (bytes32, bytes));
return (memRoot, proof);
}
function getCannonMemoryProof(
uint32 pc,
uint32 insn,
uint32 memAddr,
uint32 memVal
)
external
returns (bytes32, bytes memory)
{
string[] memory cmds = new string[](7);
cmds[0] = "scripts/go-ffi/go-ffi";
cmds[1] = "diff";
cmds[2] = "cannonMemoryProof";
cmds[3] = vm.toString(pc);
cmds[4] = vm.toString(insn);
cmds[5] = vm.toString(memAddr);
cmds[6] = vm.toString(memVal);
bytes memory result = vm.ffi(cmds);
(bytes32 memRoot, bytes memory proof) = abi.decode(result, (bytes32, bytes));
return (memRoot, proof);
}
}
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