Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/protolambda/mergemock
Merge Mock - testing tool for the Ethereum Merge
https://github.com/protolambda/mergemock
Last synced: about 7 hours ago
JSON representation
Merge Mock - testing tool for the Ethereum Merge
- Host: GitHub
- URL: https://github.com/protolambda/mergemock
- Owner: protolambda
- License: mit
- Created: 2021-09-23T17:07:00.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2022-08-19T17:19:27.000Z (about 2 years ago)
- Last Synced: 2024-06-20T16:34:12.025Z (4 months ago)
- Language: Go
- Size: 381 KB
- Stars: 40
- Watchers: 5
- Forks: 17
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# MergeMock
Experimental debug tooling, mocking the execution engine and consensus node for testing.
## Quick Start
To get started, build `mergemock` and download the `genesis.json`.
```bash
$ wget https://gist.githubusercontent.com/lightclient/799c727e826483a2804fc5013d0d3e3d/raw/2e8824fa8d9d9b040f351b86b75c66868fb9b115/genesis.json
$ openssl rand -hex 32 | tr -d "\n" > jwt.hex# Build
$ go build . mergemock# Run mergemock with engine and consensus
$ ./mergemock engine
$ ./mergemock consensus --slot-time=4s# Run mergemock with builder relay (which also starts the engine)
$ ./mergemock relay
$ ./mergemock consensus --slot-time=4s --builder=http://localhost:28545
```## Usage
### `engine`
```console
$ mergemock engine --helpRun a mock Execution Engine.
--slots-per-epoch Slots per epoch (default: 0) (type: uint64)
--datadir Directory to store execution chain data (empty for in-memory data) (type: string)
--genesis Genesis execution-config file (default: genesis.json) (type: string)
--listen-addr Address to bind RPC HTTP server to (default: 127.0.0.1:8551) (type: string)
--ws-addr Address to serve /ws endpoint on for websocket JSON-RPC (default: 127.0.0.1:8552) (type: string)
--cors List of allowable origins (CORS http header) (default: *) (type: stringSlice)# log
Change logger configuration--log.level Log level: trace, debug, info, warn/warning, error, fatal, panic. Capitals are accepted too. (default: info) (type: string)
--log.color Color the log output. Defaults to true if terminal is detected. (default: true) (type: bool)
--log.format Format the log output. Supported formats: 'text', 'json' (default: text) (type: string)
--log.timestamps Timestamp format in logging. Empty disables timestamps. (default: 2006-01-02T15:04:05Z07:00) (type: string)# trace
Tracing options--trace.enable enable tracing (default: false) (type: bool)
--trace.enable-memory enable memory capture (default: false) (type: bool)
--trace.disable-stack disable stack capture (default: false) (type: bool)
--trace.disable-storage disable storage capture (default: false) (type: bool)
--trace.enable-return-data enable return data capture (default: false) (type: bool)
--trace.debug print output during capture end (default: false) (type: bool)
--trace.limit maximum length of output, but zero means unlimited (default: 0) (type: int)# timeout
Configure timeouts of the HTTP servers--timeout.read Timeout for body reads. None if 0. (default: 30s) (type: duration)
--timeout.read-header Timeout for header reads. None if 0. (default: 10s) (type: duration)
--timeout.write Timeout for writes. None if 0. (default: 30s) (type: duration)
--timeout.idle Timeout to disconnect idle client connections. None if 0. (default: 5m0s) (type: duration)
```### `consensus`
```console
$ mergemock consensus --helpRun a mock Consensus client.
--beacon-genesis-time Beacon genesis time (default: 1636595652) (type: uint64)
--slot-time Time per slot (default: 12s) (type: duration)
--slots-per-epoch Slots per epoch (default: 32) (type: uint64)
--engine Address of Engine JSON-RPC endpoint to use (default: http://127.0.0.1:8550) (type: string)
--datadir Directory to store execution chain data (empty for in-memory data) (type: string)
--ethashdir Directory to store ethash data (type: string)
--genesis Genesis execution-config file (default: genesis.json) (type: string)
--node Enode of execution client, required to insert pre-merge blocks. (type: string)
--ttd The terminal total difficulty for the merge (default: 0) (type: uint64)
--rng seed the RNG with an integer number (default: 1234) (type: RNG)
--reorg-max-depth Max depth of a chain reorg (default: 64) (type: uint64)# freq
Modify frequencies of certain behavior--freq.gap How often an execution block is missing (default: 0.05) (type: float64)
--freq.proposal How often the engine gets to propose a block (default: 0.5) (type: float64)
--freq.ignore How often the payload produced by the engine does not become canonical (default: 0.1) (type: float64)
--freq.finality How often an epoch succeeds to finalize (default: 0.1) (type: float64)
--freq.reorg Frequency of chain reorgs (default: 0.05) (type: float64)# log
Change logger configuration--log.level Log level: trace, debug, info, warn/warning, error, fatal, panic. Capitals are accepted too. (default: info) (type: string)
--log.color Color the log output. Defaults to true if terminal is detected. (default: true) (type: bool)
--log.format Format the log output. Supported formats: 'text', 'json' (default: text) (type: string)
--log.timestamps Timestamp format in logging. Empty disables timestamps. (default: 2006-01-02T15:04:05Z07:00) (type: string)# trace
Tracing options--trace.enable enable tracing (default: false) (type: bool)
--trace.enable-memory enable memory capture (default: false) (type: bool)
--trace.disable-stack disable stack capture (default: false) (type: bool)
--trace.disable-storage disable storage capture (default: false) (type: bool)
--trace.enable-return-data enable return data capture (default: false) (type: bool)
--trace.debug print output during capture end (default: false) (type: bool)
--trace.limit maximum length of output, but zero means unlimited (default: 0) (type: int)
```### `relay`
```console
$ mergemock relay --helpRun a mock builder relay.
--listen-addr Address to bind relay HTTP server to (default: 127.0.0.1:28545) (type: string)
--engine-listen-addr Address to bind engine JSON-RPC server to (default: 127.0.0.1:8551) (type: string)
--engine-listen-addr-ws Address to bind engine JSON-RPC WebSocket server to (default: 127.0.0.1:8552) (type: string)# timeout
Configure timeouts of the HTTP servers--timeout.read Timeout for body reads. None if 0. (default: 30s) (type: duration)
--timeout.read-header Timeout for header reads. None if 0. (default: 10s) (type: duration)
--timeout.write Timeout for writes. None if 0. (default: 30s) (type: duration)
--timeout.idle Timeout to disconnect idle client connections. None if 0. (default: 5m0s) (type: duration)# log
Change logger configuration--log.level Log level: trace, debug, info, warn/warning, error, fatal, panic. Capitals are accepted too. (default: info) (type: string)
--log.color Color the log output. Defaults to true if terminal is detected. (default: true) (type: bool)
--log.format Format the log output. Supported formats: 'text', 'json' (default: text) (type: string)
--log.timestamps Timestamp format in logging. Empty disables timestamps. (default: 2006-01-02T15:04:05Z07:00) (type: string)
```## Development
For development, install the following tools:
```bash
go install honnef.co/go/tools/cmd/[email protected]
go install github.com/ferranbt/fastssz/sszgen@latest
```## License
MIT, see [`LICENSE`](./LICENSE) file.