Skip to content

host contracts in contender repo #252

@zeroXbrock

Description

@zeroXbrock

Is your feature request related to a problem? Please describe.

Firstly, contender scenario files use raw bytecode, which is hard to reason about. Additionally, if bytecode is specified without a comment linking to the source, then it's practically impossible to know the exact source code, making debugging difficult.

Most of the scenarios I've written so far have used high-volume-contract at their core (it contains the SpamMe contract). The fill-block spam subcommand relies on it as well. We also frequently use include TestToken and Unicheat.

It would be nice to have that contract be tightly coupled with contender as we add more subcommands and iterate on the contract.

Describe the solution you'd like

We still need our scenarios to use specific bytecode, but we could also use relative file paths, which are easy to read.

We should start by adding support for .hex files, but we should also support json files, so the user doesn't have to manually parse the bytecode from their json file into hex.

for .hex files:

  • we only need the path.
  • the contents should be utf8-encoded hex (like these)
  • support contents with or without the 0x prefix

for .json files:

  • we need the path and a filter string to tell us where in the JSON our bytecode is

  • filter strings should be interpreted jq-style

    • example: the filter string (jq-style) for bytecode from forge builds is .bytecode.object
    • hardhat's is just .bytecode
  • make bytecode optional in scenario files, add file (and filter for json)

add contracts to the contender repo

  • add high-volume-contracts, testToken, unicheater to this repo as submodules
  • add a shell script under scripts/ that checks for the submodules, downloads them if needed, runs forge build and writes bytecode from forge artifacts to crates/cli/src/default_scenarios/contracts/*.hex

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions