Commit 01ec03a8 authored by clabby's avatar clabby

Cleanup ctb's ffi utils

parent 6911bdc7
...@@ -307,81 +307,81 @@ LegacyERC20ETH_Test:test_transferFrom_doesNotExist_reverts() (gas: 12957) ...@@ -307,81 +307,81 @@ LegacyERC20ETH_Test:test_transferFrom_doesNotExist_reverts() (gas: 12957)
LegacyERC20ETH_Test:test_transfer_doesNotExist_reverts() (gas: 10755) LegacyERC20ETH_Test:test_transfer_doesNotExist_reverts() (gas: 10755)
LegacyMessagePasser_Test:test_passMessageToL1_succeeds() (gas: 34524) LegacyMessagePasser_Test:test_passMessageToL1_succeeds() (gas: 34524)
LibPosition_Test:test_pos_correctness_succeeds() (gas: 38689) LibPosition_Test:test_pos_correctness_succeeds() (gas: 38689)
MIPS_Test:test_add_succeeds() (gas: 122466) MIPS_Test:test_add_succeeds() (gas: 122932)
MIPS_Test:test_addiSign_succeeds() (gas: 122457) MIPS_Test:test_addiSign_succeeds() (gas: 122923)
MIPS_Test:test_addi_succeeds() (gas: 122654) MIPS_Test:test_addi_succeeds() (gas: 123120)
MIPS_Test:test_addu_succeeds() (gas: 122508) MIPS_Test:test_addu_succeeds() (gas: 122974)
MIPS_Test:test_addui_succeeds() (gas: 122716) MIPS_Test:test_addui_succeeds() (gas: 123182)
MIPS_Test:test_and_succeeds() (gas: 122527) MIPS_Test:test_and_succeeds() (gas: 122993)
MIPS_Test:test_andi_succeeds() (gas: 122460) MIPS_Test:test_andi_succeeds() (gas: 122926)
MIPS_Test:test_beq_succeeds() (gas: 202893) MIPS_Test:test_beq_succeeds() (gas: 203359)
MIPS_Test:test_bgez_succeeds() (gas: 121753) MIPS_Test:test_bgez_succeeds() (gas: 122219)
MIPS_Test:test_bgtz_succeeds() (gas: 121674) MIPS_Test:test_bgtz_succeeds() (gas: 122140)
MIPS_Test:test_blez_succeeds() (gas: 121630) MIPS_Test:test_blez_succeeds() (gas: 122096)
MIPS_Test:test_bltz_succeeds() (gas: 121773) MIPS_Test:test_bltz_succeeds() (gas: 122239)
MIPS_Test:test_bne_succeeds() (gas: 121839) MIPS_Test:test_bne_succeeds() (gas: 122305)
MIPS_Test:test_branch_inDelaySlot_fails() (gas: 86048) MIPS_Test:test_branch_inDelaySlot_fails() (gas: 86514)
MIPS_Test:test_brk_succeeds() (gas: 122143) MIPS_Test:test_brk_succeeds() (gas: 122609)
MIPS_Test:test_clo_succeeds() (gas: 122195) MIPS_Test:test_clo_succeeds() (gas: 122661)
MIPS_Test:test_clone_succeeds() (gas: 122096) MIPS_Test:test_clone_succeeds() (gas: 122562)
MIPS_Test:test_clz_succeeds() (gas: 122666) MIPS_Test:test_clz_succeeds() (gas: 123132)
MIPS_Test:test_div_succeeds() (gas: 122645) MIPS_Test:test_div_succeeds() (gas: 123111)
MIPS_Test:test_divu_succeeds() (gas: 122630) MIPS_Test:test_divu_succeeds() (gas: 123096)
MIPS_Test:test_exit_succeeds() (gas: 122145) MIPS_Test:test_exit_succeeds() (gas: 122611)
MIPS_Test:test_fcntl_succeeds() (gas: 204375) MIPS_Test:test_fcntl_succeeds() (gas: 204841)
MIPS_Test:test_illegal_instruction_fails() (gas: 91511) MIPS_Test:test_illegal_instruction_fails() (gas: 91977)
MIPS_Test:test_invalid_root_fails() (gas: 435685) MIPS_Test:test_invalid_root_fails() (gas: 436151)
MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 120783) MIPS_Test:test_jal_nonzeroRegion_succeeds() (gas: 121249)
MIPS_Test:test_jal_succeeds() (gas: 120772) MIPS_Test:test_jal_succeeds() (gas: 121238)
MIPS_Test:test_jalr_succeeds() (gas: 121891) MIPS_Test:test_jalr_succeeds() (gas: 122357)
MIPS_Test:test_jr_succeeds() (gas: 121585) MIPS_Test:test_jr_succeeds() (gas: 122051)
MIPS_Test:test_jump_inDelaySlot_fails() (gas: 85416) MIPS_Test:test_jump_inDelaySlot_fails() (gas: 85882)
MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120527) MIPS_Test:test_jump_nonzeroRegion_succeeds() (gas: 120993)
MIPS_Test:test_jump_succeeds() (gas: 120457) MIPS_Test:test_jump_succeeds() (gas: 120923)
MIPS_Test:test_lb_succeeds() (gas: 127698) MIPS_Test:test_lb_succeeds() (gas: 128164)
MIPS_Test:test_lbu_succeeds() (gas: 127596) MIPS_Test:test_lbu_succeeds() (gas: 128062)
MIPS_Test:test_lh_succeeds() (gas: 127719) MIPS_Test:test_lh_succeeds() (gas: 128185)
MIPS_Test:test_lhu_succeeds() (gas: 127636) MIPS_Test:test_lhu_succeeds() (gas: 128102)
MIPS_Test:test_ll_succeeds() (gas: 127858) MIPS_Test:test_ll_succeeds() (gas: 128324)
MIPS_Test:test_lui_succeeds() (gas: 121739) MIPS_Test:test_lui_succeeds() (gas: 122205)
MIPS_Test:test_lw_succeeds() (gas: 127487) MIPS_Test:test_lw_succeeds() (gas: 127953)
MIPS_Test:test_lwl_succeeds() (gas: 242138) MIPS_Test:test_lwl_succeeds() (gas: 243070)
MIPS_Test:test_lwr_succeeds() (gas: 242426) MIPS_Test:test_lwr_succeeds() (gas: 243358)
MIPS_Test:test_mfhi_succeeds() (gas: 122100) MIPS_Test:test_mfhi_succeeds() (gas: 122566)
MIPS_Test:test_mflo_succeeds() (gas: 122229) MIPS_Test:test_mflo_succeeds() (gas: 122695)
MIPS_Test:test_mmap_succeeds() (gas: 119063) MIPS_Test:test_mmap_succeeds() (gas: 119529)
MIPS_Test:test_movn_succeeds() (gas: 203565) MIPS_Test:test_movn_succeeds() (gas: 204031)
MIPS_Test:test_movz_succeeds() (gas: 203433) MIPS_Test:test_movz_succeeds() (gas: 203899)
MIPS_Test:test_mthi_succeeds() (gas: 122144) MIPS_Test:test_mthi_succeeds() (gas: 122610)
MIPS_Test:test_mtlo_succeeds() (gas: 122252) MIPS_Test:test_mtlo_succeeds() (gas: 122718)
MIPS_Test:test_mul_succeeds() (gas: 121744) MIPS_Test:test_mul_succeeds() (gas: 122210)
MIPS_Test:test_mult_succeeds() (gas: 122448) MIPS_Test:test_mult_succeeds() (gas: 122914)
MIPS_Test:test_multu_succeeds() (gas: 122485) MIPS_Test:test_multu_succeeds() (gas: 122951)
MIPS_Test:test_nor_succeeds() (gas: 122577) MIPS_Test:test_nor_succeeds() (gas: 123043)
MIPS_Test:test_or_succeeds() (gas: 122534) MIPS_Test:test_or_succeeds() (gas: 123000)
MIPS_Test:test_ori_succeeds() (gas: 122537) MIPS_Test:test_ori_succeeds() (gas: 123003)
MIPS_Test:test_preimage_read_succeeds() (gas: 234549) MIPS_Test:test_preimage_read_succeeds() (gas: 235481)
MIPS_Test:test_preimage_write_succeeds() (gas: 127085) MIPS_Test:test_preimage_write_succeeds() (gas: 127551)
MIPS_Test:test_prestate_exited_succeeds() (gas: 113326) MIPS_Test:test_prestate_exited_succeeds() (gas: 113792)
MIPS_Test:test_sb_succeeds() (gas: 160569) MIPS_Test:test_sb_succeeds() (gas: 161501)
MIPS_Test:test_sc_succeeds() (gas: 160752) MIPS_Test:test_sc_succeeds() (gas: 161684)
MIPS_Test:test_sh_succeeds() (gas: 160606) MIPS_Test:test_sh_succeeds() (gas: 161538)
MIPS_Test:test_sll_succeeds() (gas: 121705) MIPS_Test:test_sll_succeeds() (gas: 122171)
MIPS_Test:test_sllv_succeeds() (gas: 121934) MIPS_Test:test_sllv_succeeds() (gas: 122400)
MIPS_Test:test_slt_succeeds() (gas: 204760) MIPS_Test:test_slt_succeeds() (gas: 205226)
MIPS_Test:test_sltu_succeeds() (gas: 122751) MIPS_Test:test_sltu_succeeds() (gas: 123217)
MIPS_Test:test_sra_succeeds() (gas: 121956) MIPS_Test:test_sra_succeeds() (gas: 122422)
MIPS_Test:test_srav_succeeds() (gas: 122224) MIPS_Test:test_srav_succeeds() (gas: 122690)
MIPS_Test:test_srl_succeeds() (gas: 121787) MIPS_Test:test_srl_succeeds() (gas: 122253)
MIPS_Test:test_srlv_succeeds() (gas: 121952) MIPS_Test:test_srlv_succeeds() (gas: 122418)
MIPS_Test:test_step_abi_succeeds() (gas: 58467) MIPS_Test:test_step_abi_succeeds() (gas: 58467)
MIPS_Test:test_sub_succeeds() (gas: 122561) MIPS_Test:test_sub_succeeds() (gas: 123027)
MIPS_Test:test_subu_succeeds() (gas: 122558) MIPS_Test:test_subu_succeeds() (gas: 123024)
MIPS_Test:test_sw_succeeds() (gas: 160581) MIPS_Test:test_sw_succeeds() (gas: 161513)
MIPS_Test:test_swl_succeeds() (gas: 160642) MIPS_Test:test_swl_succeeds() (gas: 161574)
MIPS_Test:test_swr_succeeds() (gas: 160717) MIPS_Test:test_swr_succeeds() (gas: 161649)
MIPS_Test:test_xor_succeeds() (gas: 122562) MIPS_Test:test_xor_succeeds() (gas: 123028)
MIPS_Test:test_xori_succeeds() (gas: 122614) MIPS_Test:test_xori_succeeds() (gas: 123080)
MerkleTrie_get_Test:test_get_corruptedProof_reverts() (gas: 5733) MerkleTrie_get_Test:test_get_corruptedProof_reverts() (gas: 5733)
MerkleTrie_get_Test:test_get_extraProofElements_reverts() (gas: 58889) MerkleTrie_get_Test:test_get_extraProofElements_reverts() (gas: 58889)
MerkleTrie_get_Test:test_get_invalidDataRemainder_reverts() (gas: 35845) MerkleTrie_get_Test:test_get_invalidDataRemainder_reverts() (gas: 35845)
...@@ -447,9 +447,9 @@ OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutp ...@@ -447,9 +447,9 @@ OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutp
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 182306) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 182306)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 41780) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 41780)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 173953) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 173953)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 180724) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 181188)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 154740) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 154740)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 218770) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 219235)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 220983) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 220983)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_paused_reverts() (gas: 38706) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_paused_reverts() (gas: 38706)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() (gas: 209679) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() (gas: 209679)
...@@ -660,9 +660,9 @@ SequencerFeeVault_Test:test_withdraw_toL1_succeeds() (gas: 171675) ...@@ -660,9 +660,9 @@ SequencerFeeVault_Test:test_withdraw_toL1_succeeds() (gas: 171675)
SetPrevBaseFee_Test:test_setPrevBaseFee_succeeds() (gas: 11549) SetPrevBaseFee_Test:test_setPrevBaseFee_succeeds() (gas: 11549)
StandardBridge_Stateless_Test:test_isCorrectTokenPair_succeeds() (gas: 49936) StandardBridge_Stateless_Test:test_isCorrectTokenPair_succeeds() (gas: 49936)
StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 33072) StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 33072)
Storage_Roundtrip_Test:test_setGetAddress_succeeds(bytes32,address) (runs: 64, μ: 31821, ~: 31821) Storage_Roundtrip_Test:test_setGetAddress_succeeds(bytes32,address) (runs: 64, μ: 31510, ~: 31821)
Storage_Roundtrip_Test:test_setGetBytes32_succeeds(bytes32,bytes32) (runs: 64, μ: 31598, ~: 31598) Storage_Roundtrip_Test:test_setGetBytes32_succeeds(bytes32,bytes32) (runs: 64, μ: 31598, ~: 31598)
Storage_Roundtrip_Test:test_setGetUint_succeeds(bytes32,uint256) (runs: 64, μ: 30731, ~: 31664) Storage_Roundtrip_Test:test_setGetUint_succeeds(bytes32,uint256) (runs: 64, μ: 30420, ~: 31664)
SystemConfig_Initialize_Test:test_initialize_events_succeeds() (gas: 71972) SystemConfig_Initialize_Test:test_initialize_events_succeeds() (gas: 71972)
SystemConfig_Initialize_Test:test_initialize_startBlockNoop_reverts() (gas: 81247) SystemConfig_Initialize_Test:test_initialize_startBlockNoop_reverts() (gas: 81247)
SystemConfig_Initialize_Test:test_initialize_startBlockOverride_succeeds() (gas: 65143) SystemConfig_Initialize_Test:test_initialize_startBlockOverride_succeeds() (gas: 65143)
......
...@@ -9,11 +9,8 @@ typechain ...@@ -9,11 +9,8 @@ typechain
coverage.out coverage.out
.resource-metering.csv .resource-metering.csv
# Tests
test-case-generator/fuzz
# Scripts # Scripts
scripts/differential-testing/differential-testing scripts/go-ffi/go-ffi
# Environment Variables # Environment Variables
.envrc .envrc
......
...@@ -15,14 +15,13 @@ ...@@ -15,14 +15,13 @@
"bindings:go": "pnpm clean && pnpm build && pnpm bindings:go:no-build", "bindings:go": "pnpm clean && pnpm build && pnpm bindings:go:no-build",
"prebuild": "./scripts/verify-foundry-install.sh", "prebuild": "./scripts/verify-foundry-install.sh",
"build": "forge build", "build": "forge build",
"build:differential": "go build -o ./scripts/differential-testing/differential-testing ./scripts/differential-testing", "build:go-ffi": "(cd scripts/go-ffi && go build)",
"build:fuzz": "(cd test-case-generator && go build ./cmd/fuzz.go)",
"autogen:invariant-docs": "npx tsx scripts/invariant-doc-gen.ts", "autogen:invariant-docs": "npx tsx scripts/invariant-doc-gen.ts",
"test": "pnpm build:differential && pnpm build:fuzz && forge test", "test": "pnpm build:go-ffi && forge test",
"coverage": "pnpm build:differential && pnpm build:fuzz && forge coverage", "coverage": "pnpm build:go-ffi && forge coverage",
"coverage:lcov": "pnpm build:differential && pnpm build:fuzz && forge coverage --report lcov", "coverage:lcov": "pnpm build:go-ffi && forge coverage --report lcov",
"gas-snapshot:no-build": "forge snapshot --no-match-test 'testDiff|testFuzz|invariant|generateArtifact'", "gas-snapshot:no-build": "forge snapshot --no-match-test 'testDiff|testFuzz|invariant|generateArtifact'",
"gas-snapshot": "pnpm build:differential && pnpm build:fuzz && pnpm gas-snapshot:no-build", "gas-snapshot": "pnpm build:go-ffi && pnpm gas-snapshot:no-build",
"storage-snapshot": "./scripts/storage-snapshot.sh", "storage-snapshot": "./scripts/storage-snapshot.sh",
"semver-lock": "forge script scripts/SemverLock.s.sol", "semver-lock": "forge script scripts/SemverLock.s.sol",
"validate-deploy-configs": "./scripts/check-deploy-configs.sh", "validate-deploy-configs": "./scripts/check-deploy-configs.sh",
...@@ -30,10 +29,10 @@ ...@@ -30,10 +29,10 @@
"validate-spacers": "pnpm build && pnpm validate-spacers:no-build", "validate-spacers": "pnpm build && pnpm validate-spacers:no-build",
"slither": "./scripts/slither.sh", "slither": "./scripts/slither.sh",
"slither:triage": "TRIAGE_MODE=1 ./scripts/slither.sh", "slither:triage": "TRIAGE_MODE=1 ./scripts/slither.sh",
"clean": "rm -rf ./artifacts ./forge-artifacts ./cache ./tsconfig.tsbuildinfo ./tsconfig.build.tsbuildinfo ./test-case-generator/fuzz ./scripts/differential-testing/differential-testing", "clean": "rm -rf ./artifacts ./forge-artifacts ./cache ./tsconfig.tsbuildinfo ./tsconfig.build.tsbuildinfo ./scripts/go-ffi/go-ffi",
"preinstall": "npx only-allow pnpm", "preinstall": "npx only-allow pnpm",
"pre-pr:no-build": "pnpm gas-snapshot:no-build && pnpm storage-snapshot && pnpm semver-lock && pnpm autogen:invariant-docs && pnpm lint && pnpm bindings:go", "pre-pr:no-build": "pnpm gas-snapshot:no-build && pnpm storage-snapshot && pnpm semver-lock && pnpm autogen:invariant-docs && pnpm lint && pnpm bindings:go",
"pre-pr": "pnpm clean && pnpm build:differential && pnpm build:fuzz && pnpm build && pnpm pre-pr:no-build", "pre-pr": "pnpm clean && pnpm build:go-ffi && pnpm build && pnpm pre-pr:no-build",
"pre-pr:full": "pnpm test && pnpm slither && pnpm validate-deploy-configs && pnpm validate-spacers && pnpm pre-pr", "pre-pr:full": "pnpm test && pnpm slither && pnpm validate-deploy-configs && pnpm validate-spacers && pnpm pre-pr",
"lint:ts:check": "eslint . --max-warnings=0", "lint:ts:check": "eslint . --max-warnings=0",
"lint:forge-tests:check": "npx tsx scripts/forge-test-names.ts", "lint:forge-tests:check": "npx tsx scripts/forge-test-names.ts",
......
# `ctb-test-case-generator` # `ctb-go-ffi`
A lightweight input fuzzing utility used for testing various Bedrock contracts. A lightweight binary for utilities accessed via `forge`'s `ffi` cheatcode in the `contracts-bedrock` test suite.
<pre> <pre>
├── test-case-generator ├── go-ffi
│ ├── <a href="./cmd">cmd</a>: `ctb-test-case-genertor`'s binary │ ├── <a href="./bin.go">bin</a>: `go-ffi`'s binary
│ └── <a href="./trie">trie</a>: Utility for generating random merkle trie roots / inclusion proofs │ ├── <a href="./trie.go">trie</a>: Utility for generating random merkle trie roots / inclusion proofs
│ └── <a href="./differential-testing.go">diff-testing</a>: Utility for differential testing Solidity implementations against their respective Go implementations.
</pre> </pre>
## Usage ## Usage
To build, run `pnpm build:fuzz` from this directory or the `contract-bedrock` package. To build, run `pnpm build:go-ffi` from this directory or the `contract-bedrock` package.
To generate an abi-encoded fuzz case, pass in a mode via the `-m` flag as well as an optional variant via the `-v` flag.
### Available Modes ### Available Modes
#### `diff`
> **Note**
> Variant required for diff mode.
| Variant | Description |
| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------
| `decodeVersionedNonce` | Decodes a versioned nonce and prints the decoded arguments |
| `encodeCrossDomainMessage` | Encodes a cross domain message and prints the encoded message |
| `hashCrossDomainMessage` | Encodes and hashes a cross domain message and prints the digest |
| `hashDepositTransaction` | Encodes and hashes a deposit transaction and prints the digest |
| `encodeDepositTransaction` | RLP encodes a deposit transaction |
| `hashWithdrawal` | Hashes a withdrawal message and prints the digest |
| `hashOutputRootProof` | Hashes an output root proof and prints the digest |
| `getProveWithdrawalTransactionInputs` | Generates the inputs for a `getProveWithdrawalTransaction` call to the `OptimismPortal` given a withdrawal message |
| `cannonMemoryProof` | Computes a merkle proof of Cannon's memory |
#### `trie` #### `trie`
> **Note** > **Note**
......
package main
import "os"
func main() {
switch os.Args[1] {
case "diff":
DiffTestUtils()
case "trie":
FuzzTrie()
}
}
...@@ -74,8 +74,8 @@ var ( ...@@ -74,8 +74,8 @@ var (
} }
) )
func main() { func DiffTestUtils() {
args := os.Args[1:] args := os.Args[2:]
// This command requires arguments // This command requires arguments
if len(args) == 0 { if len(args) == 0 {
......
package trie package main
import ( import (
"crypto/rand" "crypto/rand"
"fmt" "fmt"
"log" "log"
"math/big" "math/big"
"os"
"github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/ethdb/memorydb" "github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie"
) )
...@@ -39,7 +40,8 @@ const ( ...@@ -39,7 +40,8 @@ const (
) )
// Generate an abi-encoded `trieTestCase` of a specified variant // Generate an abi-encoded `trieTestCase` of a specified variant
func FuzzTrie(variant string) { func FuzzTrie() {
variant := os.Args[2]
if len(variant) < 1 { if len(variant) < 1 {
log.Fatal("Must pass a variant to the trie fuzzer!") log.Fatal("Must pass a variant to the trie fuzzer!")
} }
...@@ -132,8 +134,8 @@ func FuzzTrie(variant string) { ...@@ -132,8 +134,8 @@ func FuzzTrie(variant string) {
// Generate a random test case for Bedrock's MerkleTrie verifier. // Generate a random test case for Bedrock's MerkleTrie verifier.
func genTrieTestCase(selectEmptyKey bool) trieTestCase { func genTrieTestCase(selectEmptyKey bool) trieTestCase {
// Create an empty merkle trie // Create an empty merkle trie
memdb := memorydb.New() memdb := rawdb.NewMemoryDatabase()
randTrie := trie.NewEmpty(trie.NewDatabase(memdb)) randTrie := trie.NewEmpty(trie.NewDatabase(memdb, nil))
// Get a random number of elements to put into the trie // Get a random number of elements to put into the trie
randN := randRange(2, 1024) randN := randRange(2, 1024)
...@@ -161,7 +163,7 @@ func genTrieTestCase(selectEmptyKey bool) trieTestCase { ...@@ -161,7 +163,7 @@ func genTrieTestCase(selectEmptyKey bool) trieTestCase {
} }
// Insert the random k/v pair into the trie // Insert the random k/v pair into the trie
if err := randTrie.TryUpdate(randKey, randValue); err != nil { if err := randTrie.Update(randKey, randValue); err != nil {
log.Fatal("Error adding key-value pair to trie") log.Fatal("Error adding key-value pair to trie")
} }
...@@ -174,7 +176,7 @@ func genTrieTestCase(selectEmptyKey bool) trieTestCase { ...@@ -174,7 +176,7 @@ func genTrieTestCase(selectEmptyKey bool) trieTestCase {
// Generate proof for `key`'s inclusion in our trie // Generate proof for `key`'s inclusion in our trie
var proof proofList var proof proofList
if err := randTrie.Prove(key, 0, &proof); err != nil { if err := randTrie.Prove(key, &proof); err != nil {
log.Fatal("Error creating proof for randomly selected key's inclusion in generated trie") log.Fatal("Error creating proof for randomly selected key's inclusion in generated trie")
} }
...@@ -233,15 +235,3 @@ func randRange(min int64, max int64) int64 { ...@@ -233,15 +235,3 @@ func randRange(min int64, max int64) int64 {
return (new(big.Int).Add(r, new(big.Int).SetInt64(min))).Int64() return (new(big.Int).Add(r, new(big.Int).SetInt64(min))).Int64()
} }
// Custom type to write the generated proof to
type proofList [][]byte
func (n *proofList) Put(key []byte, value []byte) error {
*n = append(*n, value)
return nil
}
func (n *proofList) Delete(key []byte) error {
panic("not supported")
}
package main
import (
"flag"
"log"
t "github.com/ethereum-optimism/optimism/packages/contracts-bedrock/ctb-test-case-generator/trie"
)
// Mode enum
const (
// Enables the `trie` fuzzer
trie string = "trie"
)
func main() {
mode := flag.String("m", "", "Fuzzer mode")
variant := flag.String("v", "", "Mode variant")
flag.Parse()
if len(*mode) < 1 {
log.Fatal("Must pass a mode for the fuzzer!")
}
switch *mode {
case trie:
t.FuzzTrie(*variant)
default:
log.Fatal("Invalid mode!")
}
}
module github.com/ethereum-optimism/optimism/packages/contracts-bedrock/ctb-test-case-generator
go 1.20
require github.com/ethereum/go-ethereum v1.10.26
require (
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect
github.com/VictoriaMetrics/fastcache v1.6.0 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
github.com/cespare/xxhash/v2 v2.1.1 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
github.com/go-ole/go-ole v1.2.1 // indirect
github.com/go-stack/stack v1.8.0 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/tsdb v0.7.1 // indirect
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect
github.com/tklauser/go-sysconf v0.3.5 // indirect
github.com/tklauser/numcpus v0.2.2 // indirect
golang.org/x/crypto v0.1.0 // indirect
golang.org/x/sys v0.1.0 // indirect
)
This diff is collapsed.
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