diff --git a/.github/SANITY_DEPS_ISSUE_TEMPLATE.md b/.github/SANITY_DEPS_ISSUE_TEMPLATE.md deleted file mode 100644 index 016b010f4be77..0000000000000 --- a/.github/SANITY_DEPS_ISSUE_TEMPLATE.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "bug: deps sanity check failed" -labels: P-high, C-bug, A-dependencies ---- - -Something broke our version constraints in a `Cargo.toml`. - -Check the [dependencies sanity check]({{env.WORKFLOW_URL}}) workflow for details. - -This issue was raised by the workflow at `.github/workflows/sanity.yml` - diff --git a/.github/scripts/compare_iai.sh b/.github/scripts/compare_iai.sh index 733453d73f110..42696757df163 100755 --- a/.github/scripts/compare_iai.sh +++ b/.github/scripts/compare_iai.sh @@ -1,6 +1,11 @@ -#!/bin/bash +#!/usr/bin/env bash # This script should be run on the main branch, after running the iai benchmarks on the target branch. +# If the main branch has a better iai performance, exits in error. +# It ignores L2 differences, since they seem hard to stabilize across runs. -# If the main branch has a better iai performance, exits in error. It ignores L2 differences, since they seem hard to stabilize across runs. -cargo bench --package reth-db --bench iai --manifest-path pr/Cargo.toml | tee /dev/tty | awk '/((L1)|(Ins)|(RAM)|(Est))+.*\(\+[1-9]+[0-9]*\..*%\)/{f=1} END{exit f}' \ No newline at end of file +set -eo pipefail + +cargo bench -p reth-db --bench iai -F test-utils \ + | tee /dev/tty \ + | awk '/((L1)|(Ins)|(RAM)|(Est))+.*\(\+[1-9]+[0-9]*\..*%\)/{f=1} END{exit f}' diff --git a/.github/scripts/fuzz.sh b/.github/scripts/fuzz.sh deleted file mode 100755 index a53095652569c..0000000000000 --- a/.github/scripts/fuzz.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -set -e -# Runs fuzz tests using `cargo test-fuzz`. - -PACKAGE=$1 -TEST_TIME=${2:-5} - -echo Building corpus. -cargo test -p $PACKAGE - -# Gets the list of tests present in the package. -TESTS=$(cargo test-fuzz --list -p $PACKAGE | head -n -3 | tail -n+9 | cat - <(echo \"--list\"]) | cat - | jq -r ".[]") - -for test in $TESTS -do - echo Running test: $test - set -x - cargo test-fuzz --no-ui --exact -p "$PACKAGE" $test -- -V $TEST_TIME - set +x -done; \ No newline at end of file diff --git a/.github/scripts/install_geth.sh b/.github/scripts/install_geth.sh new file mode 100755 index 0000000000000..8469f5a73f8e2 --- /dev/null +++ b/.github/scripts/install_geth.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# Installs Geth (https://geth.ethereum.org) in $HOME/bin for x86_64 Linux. + +set -eo pipefail + +GETH_BUILD=${GETH_BUILD:-"1.13.4-3f907d6a"} + +name="geth-linux-amd64-$GETH_BUILD" + +mkdir -p "$HOME/bin" +wget "https://gethstore.blob.core.windows.net/builds/$name.tar.gz" +tar -xvf "$name.tar.gz" +rm "$name.tar.gz" +mv "$name/geth" "$HOME/bin/geth" +rm -rf "$name" +chmod +x "$HOME/bin/geth" + +# Add $HOME/bin to $PATH +[[ "$PATH" != *$HOME/bin* ]] && export PATH=$HOME/bin:$PATH +[ -n "$CI" ] && echo "$HOME/bin" >> "$GITHUB_PATH" + +geth version diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index ddad7d5781b0a..97d5d13f5231f 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -1,3 +1,5 @@ +# Runs benchmarks. + on: pull_request: merge_group: @@ -20,49 +22,32 @@ jobs: if: github.event_name != 'pull_request' steps: - name: Checkout main sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: main path: main - - name: Checkout PR sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: clean: false path: pr - - name: Install Valgrind - run: | - sudo apt update && sudo apt install valgrind - - - name: Install toolchain - uses: dtolnay/rust-toolchain@stable - + run: sudo apt update && sudo apt install valgrind + - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: workspaces: | main -> target pr -> target cache-on-failure: true - - name: Generate test vectors run: | cargo run --bin reth --manifest-path main/Cargo.toml -- test-vectors tables cp -r testdata main mv testdata pr - - name: Set main baseline run: cargo bench --package reth-db --bench iai --features test-utils --manifest-path main/Cargo.toml - - name: Compare PR benchmark shell: 'script -q -e -c "bash {0}"' # required to workaround /dev/tty not being available - run: | - ./pr/.github/scripts/compare_iai.sh - - bench-success: - if: always() - name: bench success - runs-on: ubuntu-latest - steps: - # Note: This check is a dummy because we don't have any bench checks enabled. - - run: echo OK. + run: .github/scripts/compare_iai.sh + working-directory: pr diff --git a/.github/workflows/book.yml b/.github/workflows/book.yml index 4ff06ec7b34c7..d38b41fcf1c1e 100644 --- a/.github/workflows/book.yml +++ b/.github/workflows/book.yml @@ -1,4 +1,7 @@ +# Documentation and mdbook related jobs. + name: book + on: push: branches: [main] @@ -13,7 +16,7 @@ jobs: timeout-minutes: 60 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install mdbook run: | @@ -36,7 +39,7 @@ jobs: timeout-minutes: 60 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install mdbook-linkcheck run: | @@ -53,10 +56,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 60 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@nightly - with: - toolchain: nightly-2023-10-29 - name: Install mdbook run: | mkdir mdbook diff --git a/.github/workflows/deny.yml b/.github/workflows/deny.yml index f4ee00981068c..519b1bf38abe0 100644 --- a/.github/workflows/deny.yml +++ b/.github/workflows/deny.yml @@ -1,3 +1,5 @@ +# Runs `cargo-deny` when modifying `Cargo.lock`. + name: deny on: @@ -10,7 +12,6 @@ on: merge_group: env: - RUSTFLAGS: -D warnings CARGO_TERM_COLOR: always concurrency: deny-${{ github.head_ref || github.run_id }} @@ -20,7 +21,7 @@ jobs: name: deny runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: EmbarkStudios/cargo-deny-action@v1 with: command: check all diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index e731a7a56923f..6471e33546b9e 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -1,4 +1,4 @@ -# Automatically run `cargo update` periodically +# Runs `cargo update` periodically. name: Update Dependencies @@ -31,7 +31,7 @@ jobs: name: Update runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@nightly - name: cargo update diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 476d9c8210052..05cba3e211bc9 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,3 +1,5 @@ +# Publishes the Docker image. + name: docker on: @@ -21,24 +23,18 @@ jobs: packages: write contents: read steps: - - name: Checkout sources - uses: actions/checkout@v3 - - name: Get latest version of stable Rust - run: rustup update stable + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true - + - uses: taiki-e/install-action@cross - name: Log in to Docker run: | echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username ${DOCKER_USERNAME} --password-stdin - - name: Set up Docker builder run: | docker run --privileged --rm tonistiigi/binfmt --install arm64,amd64 docker buildx create --use --name cross-builder - - name: Build and push image - run: | - cargo install cross - env PROFILE=maxperf make docker-build-latest + run: make PROFILE=maxperf docker-build-latest diff --git a/.github/workflows/fuzz.yml b/.github/workflows/fuzz.yml deleted file mode 100644 index 5bb9088b984ee..0000000000000 --- a/.github/workflows/fuzz.yml +++ /dev/null @@ -1,61 +0,0 @@ -on: - pull_request: - merge_group: - push: - branches: [main] - -env: - CARGO_TERM_COLOR: always - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -name: fuzz -jobs: - all: - # Skip the Fuzzing Jobs until we make them run fast and reliably. Currently they will - # always recompile the codebase for each test and that takes way too long. - if: false - runs-on: - group: Reth - strategy: - matrix: - target: - - reth-primitives - - reth-db - - reth-eth-wire - - reth-codecs - steps: - - name: Checkout sources - uses: actions/checkout@v3 - - name: Install toolchain - uses: dtolnay/rust-toolchain@stable - - uses: Swatinem/rust-cache@v2 - with: - cache-on-failure: true - - - name: Install fuzzer - uses: actions-rs/cargo@v1 - with: - command: install - args: cargo-test-fuzz cargo-afl - - - name: Run fuzz tests - run: | - ./.github/scripts/fuzz.sh ${{ matrix.target }} - env: - AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES: 1 - - fuzz-success: - if: always() - name: fuzz success - runs-on: ubuntu-latest - needs: all - steps: - # Note: This check is a dummy because we currently have fuzz tests disabled. - - run: echo OK. - #- name: Decide whether the needed jobs succeeded or failed - # uses: re-actors/alls-green@release/v1 - # with: - # jobs: ${{ toJSON(needs) }} diff --git a/.github/workflows/hive.yml b/.github/workflows/hive.yml index 1abe4ed46d73f..4404c0c2eb8c2 100644 --- a/.github/workflows/hive.yml +++ b/.github/workflows/hive.yml @@ -1,7 +1,11 @@ +# Runs `ethereum/hive` tests. + +name: hive + on: schedule: # every day - - cron: '0 0 * * *' + - cron: "0 0 * * *" env: CARGO_TERM_COLOR: always @@ -10,16 +14,13 @@ concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true -name: hive jobs: prepare: runs-on: group: Reth steps: - - name: Checkout sources - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: mkdir artifacts - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build and export reth image @@ -33,7 +34,7 @@ jobs: cache-to: type=gha,mode=max - name: Checkout hive tests - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ethereum/hive ref: master @@ -41,7 +42,7 @@ jobs: - uses: actions/setup-go@v3 with: - go-version: '^1.13.1' + go-version: "^1.13.1" - run: go version - name: Build hive tool run: | @@ -55,7 +56,6 @@ jobs: name: artifacts path: ./artifacts - test: continue-on-error: ${{ matrix.experimental }} strategy: @@ -71,7 +71,17 @@ jobs: # we have excluded these tests because we do not support block # announcements # exclude: [TestLargeAnnounce, TestBroadcast, TestBlockHashAnnounce] - include: [TestStatus, TestGetBlockHeaders, TestSimultaneousRequests, TestSameRequestID, TestZeroRequestID, TestGetBlockBodies, TestMaliciousHandshake, TestMaliciousStatus, TestTransaction, TestMaliciousTx] + include: + - TestStatus + - TestGetBlockHeaders + - TestSimultaneousRequests + - TestSameRequestID + - TestZeroRequestID + - TestGetBlockBodies + - TestMaliciousHandshake + - TestMaliciousStatus + - TestTransaction + - TestMaliciousTx experimental: true - sim: ethereum/engine limit: engine-exchange-capabilities @@ -93,7 +103,23 @@ jobs: experimental: true # eth_ rpc methods - sim: ethereum/rpc-compat - include: [eth_blockNumber, eth_call, eth_chainId, eth_createAccessList, eth_estimateGas, eth_feeHistory, eth_getBalance, eth_getBlockBy, eth_getBlockTransactionCountBy, eth_getCode, eth_getStorage, eth_getTransactionBy, eth_getTransactionCount, eth_getTransactionReceipt, eth_sendRawTransaction, eth_syncing] + include: + - eth_blockNumber + - eth_call + - eth_chainId + - eth_createAccessList + - eth_estimateGas + - eth_feeHistory + - eth_getBalance + - eth_getBlockBy + - eth_getBlockTransactionCountBy + - eth_getCode + - eth_getStorage + - eth_getTransactionBy + - eth_getTransactionCount + - eth_getTransactionReceipt + - eth_sendRawTransaction + - eth_syncing experimental: true # not running eth_getProof tests because we do not support # eth_getProof yet @@ -175,7 +201,7 @@ jobs: chmod +x /usr/local/bin/hive - name: Checkout hive tests - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ethereum/hive ref: master diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 63eee472b367e..2a7063826e779 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -1,3 +1,7 @@ +# Runs integration tests. + +name: integration + on: pull_request: merge_group: @@ -6,17 +10,15 @@ on: env: CARGO_TERM_COLOR: always - GETH_BUILD: 1.13.4-3f907d6a SEED: rustethereumethereumrust concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true -name: integration jobs: test: - name: test (partition ${{ matrix.partition }}/${{ strategy.job-total }}) + name: test (${{ matrix.partition }}/${{ strategy.job-total }}) runs-on: group: Reth strategy: @@ -24,29 +26,14 @@ jobs: partition: [1, 2] timeout-minutes: 60 steps: - - name: Checkout sources - uses: actions/checkout@v3 - - name: Install toolchain - uses: dtolnay/rust-toolchain@stable + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - name: Install Geth + run: .github/scripts/install_geth.sh + - uses: taiki-e/install-action@nextest - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true - - - name: Install geth - run: | - mkdir -p "$HOME/bin" - wget -q https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-$GETH_BUILD.tar.gz - tar -xvf geth-linux-amd64-$GETH_BUILD.tar.gz - rm geth-linux-amd64-$GETH_BUILD.tar.gz - mv geth-linux-amd64-$GETH_BUILD/geth $HOME/bin/geth - chmod u+x "$HOME/bin/geth" - export PATH=$HOME/bin:$PATH - echo $HOME/bin >> $GITHUB_PATH - geth version - - - name: Install latest nextest release - uses: taiki-e/install-action@nextest - - name: Run tests run: | cargo nextest run \ @@ -64,39 +51,30 @@ jobs: RUST_LOG: info,sync=error timeout-minutes: 60 steps: - - name: Checkout sources - uses: actions/checkout@v3 - - - name: Install toolchain - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - profile: minimal - + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true - - - name: Run sync (${{ matrix.profile }}) + - name: Run sync run: | cargo run --profile release --features jemalloc,min-error-logs \ --bin reth -- node \ --debug.tip 0x91c90676cab257a59cd956d7cb0bceb9b1a71d79755c23c7277a0697ccfaf8c4 \ --debug.max-block 100000 \ --debug.terminate - - name: Verify the target block hash run: | - cargo run --profile release \ - db get CanonicalHeaders 100000 | grep 0x91c90676cab257a59cd956d7cb0bceb9b1a71d79755c23c7277a0697ccfaf8c4 + cargo run --profile release -- \ + db get CanonicalHeaders 100000 \ + | grep 0x91c90676cab257a59cd956d7cb0bceb9b1a71d79755c23c7277a0697ccfaf8c4 integration-success: - if: always() name: integration success - runs-on: - group: Reth + runs-on: ubuntu-latest + if: always() needs: [test] - timeout-minutes: 60 + timeout-minutes: 30 steps: - name: Decide whether the needed jobs succeeded or failed uses: re-actors/alls-green@release/v1 diff --git a/.github/workflows/ci.yml b/.github/workflows/lint.yml similarity index 84% rename from .github/workflows/ci.yml rename to .github/workflows/lint.yml index 3e109e6ee7800..458d95c52ad10 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/lint.yml @@ -1,3 +1,5 @@ +name: lint + on: pull_request: merge_group: @@ -7,14 +9,13 @@ on: env: CARGO_TERM_COLOR: always -name: ci jobs: clippy: name: clippy runs-on: ubuntu-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@clippy with: toolchain: nightly-2023-10-29 @@ -30,10 +31,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@nightly - with: - toolchain: nightly-2023-10-29 - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true @@ -50,29 +49,27 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@nightly with: - toolchain: nightly-2023-10-29 components: rustfmt - run: cargo fmt --all --check - grafana-lint: - name: grafana lint + grafana: runs-on: ubuntu-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Check dashboard JSON with jq uses: sergeysova/jq-action@v2 with: cmd: jq empty etc/grafana/dashboards/overview.json lint-success: - if: always() name: lint success runs-on: ubuntu-latest - needs: [clippy, docs, fmt, grafana-lint] + if: always() + needs: [clippy, docs, fmt, grafana] timeout-minutes: 30 steps: - name: Decide whether the needed jobs succeeded or failed diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4168c30a1ae3b..7dd8e1fbdbdac 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,5 @@ -# This workflow is borrowed from Lighthouse: https://github.com/sigp/lighthouse/blob/693886b94176faa4cb450f024696cb69cda2fe58/.github/workflows/release.yml +# This workflow is modified from Lighthouse: +# https://github.com/sigp/lighthouse/blob/441fc1691b69f9edc4bbdc6665f3efab16265c9b/.github/workflows/release.yml name: release @@ -25,80 +26,49 @@ jobs: build: name: build release + runs-on: ${{ matrix.os }} + needs: extract-version strategy: matrix: - arch: - [ - aarch64-unknown-linux-gnu, - x86_64-unknown-linux-gnu, - x86_64-apple-darwin, - aarch64-apple-darwin, - x86_64-pc-windows-gnu, - ] include: - - arch: aarch64-unknown-linux-gnu - platform: ubuntu-20.04 + - target: aarch64-unknown-linux-gnu + os: ubuntu-20.04 profile: maxperf - - arch: x86_64-unknown-linux-gnu - platform: ubuntu-20.04 + - target: x86_64-unknown-linux-gnu + os: ubuntu-20.04 profile: maxperf - - arch: x86_64-apple-darwin - platform: macos-latest + - target: x86_64-apple-darwin + os: macos-latest profile: maxperf - - arch: aarch64-apple-darwin - platform: macos-latest + - target: aarch64-apple-darwin + os: macos-latest profile: maxperf - - arch: x86_64-pc-windows-gnu - platform: ubuntu-20.04 + - target: x86_64-pc-windows-gnu + os: ubuntu-20.04 profile: maxperf - - runs-on: ${{ matrix.platform }} - needs: extract-version steps: - - name: Checkout sources - uses: actions/checkout@v3 - - name: Get latest version of stable Rust - run: rustup update stable - - name: Install target - run: rustup target add ${{ matrix.arch }} + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + target: ${{ matrix.target }} + - uses: taiki-e/install-action@cross - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true - # ============================== - # Apple M1 SDK setup - # ============================== - - name: Apple M1 setup - if: ${{ matrix.job.target == 'aarch64-apple-darwin' }} + if: matrix.target == 'aarch64-apple-darwin' run: | echo "SDKROOT=$(xcrun -sdk macosx --show-sdk-path)" >> $GITHUB_ENV - echo "MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx --show-sdk-platform-version)" >> $GITHUB_ENV - - # ============================== - # Builds - # ============================== - - - name: Build reth for ${{ matrix.arch }} - run: | - cargo install cross - env PROFILE=${{ matrix.profile }} make build-${{ matrix.arch }} + echo "MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx --show-sdk-os-version)" >> $GITHUB_ENV - - name: Move cross-compiled binary - if: matrix.arch != 'x86_64-pc-windows-gnu' + - name: Build Reth + run: make PROFILE=${{ matrix.profile }} build-${{ matrix.target }} + - name: Move binary run: | mkdir artifacts - mv target/${{ matrix.arch }}/${{ matrix.profile }}/reth ./artifacts - - - name: Move cross-compiled binary (Windows) - if: matrix.arch == 'x86_64-pc-windows-gnu' - run: | - mkdir artifacts - mv target/${{ matrix.arch }}/${{ matrix.profile }}/reth.exe ./artifacts - - # ============================== - # Signing - # ============================== + [[ "${{ matrix.target }}" == *windows* ]] && ext=".exe" + mv "target/${{ matrix.target }}/${{ matrix.profile }}/reth${ext}" ./artifacts - name: Configure GPG and create artifacts env: @@ -108,26 +78,22 @@ jobs: export GPG_TTY=$(tty) echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --batch --import cd artifacts - tar -czf reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz reth* - echo "$GPG_PASSPHRASE" | gpg --passphrase-fd 0 --pinentry-mode loopback --batch -ab reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz + tar -czf reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.target }}.tar.gz reth* + echo "$GPG_PASSPHRASE" | gpg --passphrase-fd 0 --pinentry-mode loopback --batch -ab reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.target }}.tar.gz mv *tar.gz* .. shell: bash - # ======================================================================= - # Upload artifacts - # This is required to share artifacts between different jobs - # ======================================================================= - name: Upload artifact uses: actions/upload-artifact@v3 with: - name: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz - path: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz + name: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.target }}.tar.gz + path: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.target }}.tar.gz - name: Upload signature uses: actions/upload-artifact@v3 with: - name: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz.asc - path: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz.asc + name: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.target }}.tar.gz.asc + path: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.target }}.tar.gz.asc draft-release: name: draft release @@ -139,35 +105,25 @@ jobs: # Required to post the release contents: write steps: - # This is necessary for generating the changelog. It has to come before "Download Artifacts" or else it deletes the artifacts. - - name: Checkout sources - uses: actions/checkout@v3 + # This is necessary for generating the changelog. + # It has to come before "Download Artifacts" or else it deletes the artifacts. + - uses: actions/checkout@v4 with: fetch-depth: 0 - - # ============================== - # Download artifacts - # ============================== - name: Download artifacts uses: actions/download-artifact@v3 - - # ============================== - # Create release draft - # ============================== - name: Generate full changelog id: changelog run: | echo "CHANGELOG<> $GITHUB_OUTPUT echo "$(git log --pretty=format:"- %s" $(git describe --tags --abbrev=0 ${{ env.VERSION }}^)..${{ env.VERSION }})" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - - name: Create release draft env: GITHUB_USER: ${{ github.repository_owner }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # The formatting here is borrowed from Lighthouse (which is borrowed from OpenEthereum): - # https://github.com/openethereum/openethereum/blob/main/.github/workflows/build.yml + # https://github.com/openethereum/openethereum/blob/6c2d392d867b058ff867c4373e40850ca3f96969/.github/workflows/build.yml run: | body=$(cat <<- "ENDBODY" diff --git a/.github/workflows/sanity.yml b/.github/workflows/sanity.yml index b2c4361a3a908..e2356af71cee8 100644 --- a/.github/workflows/sanity.yml +++ b/.github/workflows/sanity.yml @@ -1,88 +1,31 @@ # Runs a series of sanity checks for crate consumers. -# -# Currently the only check is that the version constraints in each `Cargo.toml` do not lead to a breaking dependency. + +name: sanity + on: workflow_dispatch: {} # Once per day at 00:00 UTC schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" env: - RUSTFLAGS: -D warnings CARGO_TERM_COLOR: always - GETH_BUILD: 1.13.4-3f907d6a -name: sanity jobs: - dep-version-constraints: + unused-dependencies: runs-on: ubuntu-latest - name: dep version constraints test (partition ${{ matrix.partition }}/${{ strategy.job-total }}) - strategy: - matrix: - partition: [1, 2, 3] steps: - - name: Checkout sources - uses: actions/checkout@v3 - - name: Install toolchain - uses: dtolnay/rust-toolchain@stable - - uses: Swatinem/rust-cache@v2 - with: - cache-on-failure: true - - - name: Install geth - run: | - mkdir -p "$HOME/bin" - wget -q https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-$GETH_BUILD.tar.gz - tar -xvf geth-linux-amd64-$GETH_BUILD.tar.gz - rm geth-linux-amd64-$GETH_BUILD.tar.gz - mv geth-linux-amd64-$GETH_BUILD/geth $HOME/bin/geth - chmod u+x "$HOME/bin/geth" - export PATH=$HOME/bin:$PATH - echo $HOME/bin >> $GITHUB_PATH - geth version - - - name: Install latest nextest release - uses: taiki-e/install-action@nextest - - - name: Update packages - run: cargo update - - - name: Run tests - run: | - cargo nextest run --locked --workspace --all-features \ - --partition hash:${{ matrix.partition }}/${{ strategy.job-total }} \ - -E 'kind(lib)' -E 'kind(bin)' -E 'kind(proc-macro)' - - - uses: JasonEtco/create-an-issue@v2 - if: ${{ failure() }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - WORKFLOW_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - with: - update_existing: true - filename: .github/SANITY_DEPS_ISSUE_TEMPLATE.md - - unused-deps: - runs-on: ubuntu-latest - name: unused dependencies - steps: - - name: Checkout sources - uses: actions/checkout@v3 - - name: Install toolchain - uses: dtolnay/rust-toolchain@nightly - - - name: Install cargo-udeps - run: cargo install cargo-udeps --locked - + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@nightly + - uses: taiki-e/install-action@cargo-udeps - name: Check for unused dependencies - run: cargo +nightly udeps --all-features --all-targets - + run: cargo udeps --all-features --all-targets - uses: JasonEtco/create-an-issue@v2 if: ${{ failure() }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - WORKFLOW_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + WORKFLOW_URL: + ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} with: update_existing: true filename: .github/SANITY_UNUSED_DEPS_ISSUE_TEMPLATE.md - diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 5328cc95e8fc6..700c7ea1efd8d 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,4 +1,7 @@ +# Marks issues as stale. + name: stale issues + on: workflow_dispatch: {} schedule: diff --git a/.github/workflows/unit.yml b/.github/workflows/unit.yml index 17ff5f9a66854..ca80c4e9a2910 100644 --- a/.github/workflows/unit.yml +++ b/.github/workflows/unit.yml @@ -1,3 +1,7 @@ +# Runs unit tests. + +name: unit + on: pull_request: merge_group: @@ -12,88 +16,71 @@ concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true -name: unit jobs: test: - name: test (partition ${{ matrix.partition }}/${{ strategy.job-total }}) + name: tests (${{ matrix.partition }}/${{ strategy.job-total }}) runs-on: group: Reth strategy: matrix: partition: [1, 2] - timeout-minutes: 60 + timeout-minutes: 30 steps: - - name: Checkout sources - uses: actions/checkout@v3 - - name: Install toolchain - uses: dtolnay/rust-toolchain@stable + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true - - - name: Install latest nextest release - uses: taiki-e/install-action@nextest - + - uses: taiki-e/install-action@nextest - name: Run tests run: | cargo nextest run \ --locked --all-features --workspace --exclude examples --exclude ef-tests \ --partition hash:${{ matrix.partition }}/${{ strategy.job-total }} \ - -E 'kind(lib)' -E 'kind(bin)' -E 'kind(proc-macro)' + -E "kind(lib) | kind(bin) | kind(proc-macro)" - eth-blockchain: - name: ethereum / state tests (stable) + state: + name: Ethereum state tests runs-on: group: Reth env: RUST_LOG: info,sync=error - timeout-minutes: 60 + timeout-minutes: 30 steps: - - name: Checkout sources - uses: actions/checkout@v3 - + - uses: actions/checkout@v4 - name: Checkout ethereum/tests - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ethereum/tests path: testing/ef-tests/ethereum-tests submodules: recursive fetch-depth: 1 - - - name: Install toolchain - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - profile: minimal - override: true + - uses: dtolnay/rust-toolchain@stable + - uses: taiki-e/install-action@nextest - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true - - name: Install latest nextest release - uses: taiki-e/install-action@nextest + - run: cargo nextest run --release -p ef-tests --features ef-tests - - name: Run Ethereum tests - run: cargo nextest run --release -p ef-tests --features ef-tests - - doc-test: - name: rustdoc + doc: + name: doc tests runs-on: group: Reth - timeout-minutes: 60 + timeout-minutes: 30 steps: - - uses: actions/checkout@v3 - - name: Install toolchain - uses: dtolnay/rust-toolchain@stable + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 - - name: Run doctests - run: cargo test --doc --all --all-features + with: + cache-on-failure: true + - run: cargo test --doc --workspace --all-features unit-success: - if: always() name: unit success runs-on: ubuntu-latest - needs: [test, eth-blockchain, doc-test] - timeout-minutes: 60 + if: always() + needs: [test, state, doc] + timeout-minutes: 30 steps: - name: Decide whether the needed jobs succeeded or failed uses: re-actors/alls-green@release/v1 diff --git a/CODEOWNERS b/CODEOWNERS index 12a0bcbf7db19..25d9613c2dcf0 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -17,4 +17,4 @@ crates/metrics @onbjerg crates/tracing @onbjerg crates/tasks @mattsse crates/prune @shekhirin @joshieDo -.github/ @onbjerg @gakonst \ No newline at end of file +.github/ @onbjerg @gakonst @DaniPopes diff --git a/Cargo.lock b/Cargo.lock index 9301fe0e6f035..d3dcd62df8c8a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1504,9 +1504,9 @@ dependencies = [ [[package]] name = "crc-catalog" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4939f9ed1444bd8c896d37f3090012fa6e7834fe84ef8c9daa166109515732f9" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" @@ -2097,9 +2097,9 @@ checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" [[package]] name = "dyn-clone" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" [[package]] name = "dyn_size_of" @@ -3996,6 +3996,17 @@ dependencies = [ "libc", ] +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + [[package]] name = "lifetimed-bytes" version = "0.1.0" @@ -4622,9 +4633,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.58" +version = "0.10.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9dfc0783362704e97ef3bd24261995a699468440099ef95d869b4d9732f829a" +checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33" dependencies = [ "bitflags 2.4.1", "cfg-if", @@ -4654,9 +4665,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.94" +version = "0.9.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f55da20b29f956fb01f0add8683eb26ee13ebe3ebd935e49898717c6b4b2830" +checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9" dependencies = [ "cc", "libc", @@ -5449,12 +5460,12 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ "getrandom 0.2.10", - "redox_syscall 0.2.16", + "libredox", "thiserror", ] @@ -8972,9 +8983,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.5.18" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176b6138793677221d420fd2f0aeeced263f197688b36484660da767bca2fa32" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" dependencies = [ "memchr", ] @@ -9085,18 +9096,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.23" +version = "0.7.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e50cbb27c30666a6108abd6bc7577556265b44f243e2be89a8bc4e07a528c107" +checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.23" +version = "0.7.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25f293fe55f0a48e7010d65552bb63704f6ceb55a1a385da10d41d8f78e4a3d" +checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" dependencies = [ "proc-macro2", "quote", diff --git a/bin/reth/src/cli/components.rs b/bin/reth/src/cli/components.rs index 7a810aa03f645..2f27eb5081452 100644 --- a/bin/reth/src/cli/components.rs +++ b/bin/reth/src/cli/components.rs @@ -153,11 +153,10 @@ where /// # Example /// /// ```rust -/// use reth::cli::components::RethRpcServerHandles; -/// use reth::rpc::api::EthApiClient; +/// use reth::{cli::components::RethRpcServerHandles, rpc::api::EthApiClient}; /// # async fn t(handles: RethRpcServerHandles) { -/// let client = handles.rpc.http_client().expect("http server not started"); -/// let block_number = client.block_number().await.unwrap(); +/// let client = handles.rpc.http_client().expect("http server not started"); +/// let block_number = client.block_number().await.unwrap(); /// # } /// ``` #[derive(Debug, Clone)] diff --git a/bin/reth/src/dirs.rs b/bin/reth/src/dirs.rs index c7bf9dc803987..7f3f142324ff8 100644 --- a/bin/reth/src/dirs.rs +++ b/bin/reth/src/dirs.rs @@ -94,7 +94,7 @@ pub trait XdgPath { /// # Example /// /// ``` -/// use reth::dirs::{PlatformPath, DataDirPath}; +/// use reth::dirs::{DataDirPath, PlatformPath}; /// use std::str::FromStr; /// /// // Resolves to the platform-specific database path diff --git a/crates/consensus/common/src/calc.rs b/crates/consensus/common/src/calc.rs index 10e1409895f86..26974d6fc5b62 100644 --- a/crates/consensus/common/src/calc.rs +++ b/crates/consensus/common/src/calc.rs @@ -56,13 +56,11 @@ pub fn base_block_reward( /// let total_difficulty = U256::from(2_235_668_675_900usize); /// let number_of_ommers = 1; /// -/// let reward = base_block_reward(&MAINNET, block_number, block_difficulty, total_difficulty).map(|reward| block_reward(reward, 1)); +/// let reward = base_block_reward(&MAINNET, block_number, block_difficulty, total_difficulty) +/// .map(|reward| block_reward(reward, 1)); /// /// // The base block reward is 5 ETH, and the ommer inclusion reward is 1/32th of 5 ETH. -/// assert_eq!( -/// reward.unwrap(), -/// ETH_TO_WEI * 5 + ((ETH_TO_WEI * 5) >> 5) -/// ); +/// assert_eq!(reward.unwrap(), ETH_TO_WEI * 5 + ((ETH_TO_WEI * 5) >> 5)); /// ``` /// /// # References diff --git a/crates/metrics/metrics-derive/src/lib.rs b/crates/metrics/metrics-derive/src/lib.rs index 085c0a1ad57f0..2c4e0f6a7a536 100644 --- a/crates/metrics/metrics-derive/src/lib.rs +++ b/crates/metrics/metrics-derive/src/lib.rs @@ -28,8 +28,8 @@ mod with_attrs; /// /// Sample usage: /// ``` -/// use reth_metrics_derive::Metrics; /// use metrics::{Counter, Gauge, Histogram}; +/// use reth_metrics_derive::Metrics; /// /// #[derive(Metrics)] /// #[metrics(scope = "metrics_custom")] @@ -43,7 +43,7 @@ mod with_attrs; /// counter: Counter, /// /// A renamed histogram. /// #[metric(rename = "histogram")] -/// histo: Histogram +/// histo: Histogram, /// } /// ``` /// @@ -56,7 +56,7 @@ mod with_attrs; /// /// Some doc comment /// counter: metrics::Counter, /// /// A renamed histogram. -/// histo: metrics::Histogram +/// histo: metrics::Histogram, /// } /// /// impl Default for CustomMetrics { @@ -73,9 +73,18 @@ mod with_attrs; /// impl CustomMetrics { /// /// Describe all exposed metrics /// pub fn describe() { -/// metrics::describe_gauge!("metrics_custom_gauge", "A gauge with doc comment description."); -/// metrics::describe_gauge!("metrics_custom_second_gauge", "A gauge with metric attribute description."); -/// metrics::describe_counter!("metrics_custom_counter", "Metric attribute description will be preferred over doc comment."); +/// metrics::describe_gauge!( +/// "metrics_custom_gauge", +/// "A gauge with doc comment description." +/// ); +/// metrics::describe_gauge!( +/// "metrics_custom_second_gauge", +/// "A gauge with metric attribute description." +/// ); +/// metrics::describe_counter!( +/// "metrics_custom_counter", +/// "Metric attribute description will be preferred over doc comment." +/// ); /// metrics::describe_histogram!("metrics_custom_histogram", "A renamed histogram."); /// } /// } @@ -110,13 +119,14 @@ mod with_attrs; /// /// impl DynamicScopeMetrics { /// pub fn new(scope: &str) -> Self { -/// Self { -/// gauge: metrics::register_gauge!(format!("{}{}{}", scope, "_", "gauge")) -/// } +/// Self { gauge: metrics::register_gauge!(format!("{}{}{}", scope, "_", "gauge")) } /// } /// /// pub fn describe(scope: &str) { -/// metrics::describe_gauge!(format!("{}{}{}", scope, "_", "gauge"), "A gauge with doc comment description."); +/// metrics::describe_gauge!( +/// format!("{}{}{}", scope, "_", "gauge"), +/// "A gauge with doc comment description." +/// ); /// } /// } /// diff --git a/crates/net/discv4/src/lib.rs b/crates/net/discv4/src/lib.rs index 823adedfbcef0..734bb2433a603 100644 --- a/crates/net/discv4/src/lib.rs +++ b/crates/net/discv4/src/lib.rs @@ -193,36 +193,31 @@ impl Discv4 { /// /// ``` /// # use std::io; - /// use std::net::SocketAddr; - /// use std::str::FromStr; /// use rand::thread_rng; - /// use secp256k1::SECP256K1; - /// use reth_primitives::{NodeRecord, PeerId}; /// use reth_discv4::{Discv4, Discv4Config}; + /// use reth_primitives::{NodeRecord, PeerId}; + /// use secp256k1::SECP256K1; + /// use std::{net::SocketAddr, str::FromStr}; /// # async fn t() -> io::Result<()> { /// // generate a (random) keypair - /// let mut rng = thread_rng(); - /// let (secret_key, pk) = SECP256K1.generate_keypair(&mut rng); - /// let id = PeerId::from_slice(&pk.serialize_uncompressed()[1..]); + /// let mut rng = thread_rng(); + /// let (secret_key, pk) = SECP256K1.generate_keypair(&mut rng); + /// let id = PeerId::from_slice(&pk.serialize_uncompressed()[1..]); /// - /// let socket = SocketAddr::from_str("0.0.0.0:0").unwrap(); - /// let local_enr = NodeRecord { - /// address: socket.ip(), - /// tcp_port: socket.port(), - /// udp_port: socket.port(), - /// id, - /// }; - /// let config = Discv4Config::default(); + /// let socket = SocketAddr::from_str("0.0.0.0:0").unwrap(); + /// let local_enr = + /// NodeRecord { address: socket.ip(), tcp_port: socket.port(), udp_port: socket.port(), id }; + /// let config = Discv4Config::default(); /// - /// let(discv4, mut service) = Discv4::bind(socket, local_enr, secret_key, config).await.unwrap(); + /// let (discv4, mut service) = Discv4::bind(socket, local_enr, secret_key, config).await.unwrap(); /// - /// // get an update strea - /// let updates = service.update_stream(); + /// // get an update strea + /// let updates = service.update_stream(); /// - /// let _handle = service.spawn(); + /// let _handle = service.spawn(); /// - /// // lookup the local node in the DHT - /// let _discovered = discv4.lookup_self().await.unwrap(); + /// // lookup the local node in the DHT + /// let _discovered = discv4.lookup_self().await.unwrap(); /// /// # Ok(()) /// # } diff --git a/crates/net/dns/src/lib.rs b/crates/net/dns/src/lib.rs index 195bf47553cd5..cc33e4d9f7696 100644 --- a/crates/net/dns/src/lib.rs +++ b/crates/net/dns/src/lib.rs @@ -118,11 +118,13 @@ impl DnsDiscoveryService { /// Creates a new instance of the [DnsDiscoveryService] using the given settings. /// /// ``` - /// use std::sync::Arc; /// use reth_dns_discovery::{DnsDiscoveryService, DnsResolver}; + /// use std::sync::Arc; /// # fn t() { - /// let service = - /// DnsDiscoveryService::new(Arc::new(DnsResolver::from_system_conf().unwrap()), Default::default()); + /// let service = DnsDiscoveryService::new( + /// Arc::new(DnsResolver::from_system_conf().unwrap()), + /// Default::default(), + /// ); /// # } /// ``` pub fn new(resolver: Arc, config: DnsDiscoveryConfig) -> Self { diff --git a/crates/net/dns/src/resolver.rs b/crates/net/dns/src/resolver.rs index e81fa9c60b033..34ff0d9383c32 100644 --- a/crates/net/dns/src/resolver.rs +++ b/crates/net/dns/src/resolver.rs @@ -40,8 +40,8 @@ impl Resolver for AsyncResolver

{ /// /// ``` /// # fn t() { -/// use reth_dns_discovery::resolver::DnsResolver; -/// let resolver = DnsResolver::from_system_conf().unwrap(); +/// use reth_dns_discovery::resolver::DnsResolver; +/// let resolver = DnsResolver::from_system_conf().unwrap(); /// # } /// ``` /// diff --git a/crates/net/downloaders/src/bodies/task.rs b/crates/net/downloaders/src/bodies/task.rs index 354bd8e3f5044..97748f54f7e12 100644 --- a/crates/net/downloaders/src/bodies/task.rs +++ b/crates/net/downloaders/src/bodies/task.rs @@ -42,18 +42,16 @@ impl TaskDownloader { /// # Example /// /// ``` - /// use std::sync::Arc; - /// use reth_downloaders::bodies::bodies::BodiesDownloaderBuilder; - /// use reth_downloaders::bodies::task::TaskDownloader; - /// use reth_interfaces::consensus::Consensus; - /// use reth_interfaces::p2p::bodies::client::BodiesClient; /// use reth_db::database::Database; - /// fn t(client: Arc, consensus:Arc, db: Arc) { - /// let downloader = BodiesDownloaderBuilder::default().build( - /// client, - /// consensus, - /// db - /// ); + /// use reth_downloaders::bodies::{bodies::BodiesDownloaderBuilder, task::TaskDownloader}; + /// use reth_interfaces::{consensus::Consensus, p2p::bodies::client::BodiesClient}; + /// use std::sync::Arc; + /// fn t( + /// client: Arc, + /// consensus: Arc, + /// db: Arc, + /// ) { + /// let downloader = BodiesDownloaderBuilder::default().build(client, consensus, db); /// let downloader = TaskDownloader::spawn(downloader); /// } /// ``` diff --git a/crates/net/eth-wire/src/builder.rs b/crates/net/eth-wire/src/builder.rs index b4512a588ca47..ff348453306d6 100644 --- a/crates/net/eth-wire/src/builder.rs +++ b/crates/net/eth-wire/src/builder.rs @@ -10,9 +10,8 @@ use reth_primitives::{Chain, ForkId, PeerId, B256, U256}; /// /// # Example /// ``` -/// use reth_eth_wire::EthVersion; -/// use reth_primitives::{Chain, U256, B256, MAINNET_GENESIS_HASH, MAINNET, Hardfork}; -/// use reth_eth_wire::types::Status; +/// use reth_eth_wire::{types::Status, EthVersion}; +/// use reth_primitives::{Chain, Hardfork, B256, MAINNET, MAINNET_GENESIS_HASH, U256}; /// /// // this is just an example status message! /// let status = Status::builder() diff --git a/crates/net/eth-wire/src/hello.rs b/crates/net/eth-wire/src/hello.rs index b1acd2c7a26f0..6d8636685fdf2 100644 --- a/crates/net/eth-wire/src/hello.rs +++ b/crates/net/eth-wire/src/hello.rs @@ -33,11 +33,11 @@ impl HelloMessage { /// Starts a new `HelloMessageBuilder` /// /// ``` - /// use secp256k1::{SECP256K1, SecretKey}; /// use reth_ecies::util::pk2id; /// use reth_eth_wire::HelloMessage; + /// use secp256k1::{SecretKey, SECP256K1}; /// let secret_key = SecretKey::new(&mut rand::thread_rng()); - /// let id = pk2id(&secret_key.public_key(SECP256K1)); + /// let id = pk2id(&secret_key.public_key(SECP256K1)); /// let status = HelloMessage::builder(id).build(); /// ``` pub fn builder(id: PeerId) -> HelloMessageBuilder { diff --git a/crates/net/network/src/config.rs b/crates/net/network/src/config.rs index 641aefb625335..b104a9e8bb794 100644 --- a/crates/net/network/src/config.rs +++ b/crates/net/network/src/config.rs @@ -205,10 +205,8 @@ impl NetworkConfigBuilder { /// # use reth_eth_wire::HelloMessage; /// # use reth_network::NetworkConfigBuilder; /// # fn builder(builder: NetworkConfigBuilder) { - /// let peer_id = builder.get_peer_id(); - /// builder.hello_message( - /// HelloMessage::builder(peer_id).build() - /// ); + /// let peer_id = builder.get_peer_id(); + /// builder.hello_message(HelloMessage::builder(peer_id).build()); /// # } /// ``` pub fn hello_message(mut self, hello_message: HelloMessage) -> Self { diff --git a/crates/net/network/src/lib.rs b/crates/net/network/src/lib.rs index f4b7f8f117c71..18e0e5fd6e73b 100644 --- a/crates/net/network/src/lib.rs +++ b/crates/net/network/src/lib.rs @@ -46,10 +46,9 @@ //! //! ``` //! # async fn launch() { -//! use reth_network::config::rng_secret_key; -//! use reth_network::{NetworkConfig, NetworkManager}; -//! use reth_provider::test_utils::NoopProvider; +//! use reth_network::{config::rng_secret_key, NetworkConfig, NetworkManager}; //! use reth_primitives::mainnet_nodes; +//! use reth_provider::test_utils::NoopProvider; //! //! // This block provider implementation is used for testing purposes. //! let client = NoopProvider::default(); @@ -57,9 +56,7 @@ //! // The key that's used for encrypting sessions and to identify our node. //! let local_key = rng_secret_key(); //! -//! let config = NetworkConfig::builder(local_key).boot_nodes( -//! mainnet_nodes() -//! ).build(client); +//! let config = NetworkConfig::builder(local_key).boot_nodes(mainnet_nodes()).build(client); //! //! // create the network instance //! let network = NetworkManager::new(config).await.unwrap(); @@ -74,11 +71,10 @@ //! ### Configure all components of the Network with the [`NetworkBuilder`] //! //! ``` +//! use reth_network::{config::rng_secret_key, NetworkConfig, NetworkManager}; +//! use reth_primitives::mainnet_nodes; //! use reth_provider::test_utils::NoopProvider; //! use reth_transaction_pool::TransactionPool; -//! use reth_primitives::mainnet_nodes; -//! use reth_network::config::rng_secret_key; -//! use reth_network::{NetworkConfig, NetworkManager}; //! async fn launch(pool: Pool) { //! // This block provider implementation is used for testing purposes. //! let client = NoopProvider::default(); diff --git a/crates/net/network/src/manager.rs b/crates/net/network/src/manager.rs index 91e90d6226b7c..d8e8f55f720c2 100644 --- a/crates/net/network/src/manager.rs +++ b/crates/net/network/src/manager.rs @@ -260,11 +260,10 @@ where /// components of the network /// /// ``` + /// use reth_network::{config::rng_secret_key, NetworkConfig, NetworkManager}; + /// use reth_primitives::mainnet_nodes; /// use reth_provider::test_utils::NoopProvider; /// use reth_transaction_pool::TransactionPool; - /// use reth_primitives::mainnet_nodes; - /// use reth_network::config::rng_secret_key; - /// use reth_network::{NetworkConfig, NetworkManager}; /// async fn launch(pool: Pool) { /// // This block provider implementation is used for testing purposes. /// let client = NoopProvider::default(); diff --git a/crates/net/network/src/transactions.rs b/crates/net/network/src/transactions.rs index a67405b6d871d..240c10c32f26e 100644 --- a/crates/net/network/src/transactions.rs +++ b/crates/net/network/src/transactions.rs @@ -778,18 +778,17 @@ where this.update_request_metrics(); - let fetch_event = this.transaction_fetcher.poll(cx); - match fetch_event { - Poll::Ready(FetchEvent::TransactionsFetched { peer_id, transactions }) => { - if let Some(txns) = transactions { - this.import_transactions(peer_id, txns, TransactionSource::Response); + // drain fetching transaction events + while let Poll::Ready(fetch_event) = this.transaction_fetcher.poll(cx) { + match fetch_event { + FetchEvent::TransactionsFetched { peer_id, transactions } => { + if let Some(txns) = transactions { + this.import_transactions(peer_id, txns, TransactionSource::Response); + } + } + FetchEvent::FetchError { peer_id, error } => { + this.on_request_error(peer_id, error); } - } - Poll::Ready(FetchEvent::FetchError { peer_id, error }) => { - this.on_request_error(peer_id, error); - } - Poll::Pending => { - // No event ready at the moment, nothing to do here. } } diff --git a/crates/net/network/tests/it/clique/geth.rs b/crates/net/network/tests/it/clique/geth.rs index 6f9d028621181..f44770153ba65 100644 --- a/crates/net/network/tests/it/clique/geth.rs +++ b/crates/net/network/tests/it/clique/geth.rs @@ -22,9 +22,7 @@ use std::{ /// # let clique = async { /// /// // this creates a funded geth -/// let clique_geth = Geth::new() -/// .p2p_port(30303) -/// .chain_id(1337u64); +/// let clique_geth = Geth::new().p2p_port(30303).chain_id(1337u64); /// /// // build the funded geth, generating a random signing key and enabling clique /// let mut clique = CliqueGethInstance::new(clique_geth, None).await; diff --git a/crates/rpc/ipc/src/client.rs b/crates/rpc/ipc/src/client.rs index 640c0e3a34743..f440664fc1411 100644 --- a/crates/rpc/ipc/src/client.rs +++ b/crates/rpc/ipc/src/client.rs @@ -90,12 +90,11 @@ impl IpcTransportClientBuilder { /// Try to establish the connection. /// /// ``` - /// use jsonrpsee::rpc_params; + /// use jsonrpsee::{core::client::ClientT, rpc_params}; /// use reth_ipc::client::IpcClientBuilder; - /// use jsonrpsee::core::client::ClientT; /// # async fn run_client() -> Result<(), Box> { - /// let client = IpcClientBuilder::default().build("/tmp/my-uds").await?; - /// let response: String = client.request("say_hello", rpc_params![]).await?; + /// let client = IpcClientBuilder::default().build("/tmp/my-uds").await?; + /// let response: String = client.request("say_hello", rpc_params![]).await?; /// # Ok(()) /// # } /// ``` diff --git a/crates/rpc/ipc/src/server/mod.rs b/crates/rpc/ipc/src/server/mod.rs index 71d66af922a22..36b24f3b30f0e 100644 --- a/crates/rpc/ipc/src/server/mod.rs +++ b/crates/rpc/ipc/src/server/mod.rs @@ -530,7 +530,6 @@ impl Builder { /// # Examples /// /// ```rust - /// /// #[tokio::main] /// async fn main() { /// let builder = tower::ServiceBuilder::new(); diff --git a/crates/rpc/rpc-builder/src/lib.rs b/crates/rpc/rpc-builder/src/lib.rs index f97db9107a370..93f651a9f6ce6 100644 --- a/crates/rpc/rpc-builder/src/lib.rs +++ b/crates/rpc/rpc-builder/src/lib.rs @@ -18,16 +18,33 @@ //! //! ``` //! use reth_network_api::{NetworkInfo, Peers}; -//! use reth_provider::{AccountReader, BlockReaderIdExt, ChainSpecProvider, CanonStateSubscriptions, StateProviderFactory, EvmEnvProvider, ChangeSetReader}; -//! use reth_rpc_builder::{RethRpcModule, RpcModuleBuilder, RpcServerConfig, ServerBuilder, TransportRpcModuleConfig}; +//! use reth_provider::{ +//! AccountReader, BlockReaderIdExt, CanonStateSubscriptions, ChainSpecProvider, +//! ChangeSetReader, EvmEnvProvider, StateProviderFactory, +//! }; +//! use reth_rpc_builder::{ +//! RethRpcModule, RpcModuleBuilder, RpcServerConfig, ServerBuilder, TransportRpcModuleConfig, +//! }; //! use reth_tasks::TokioTaskExecutor; //! use reth_transaction_pool::TransactionPool; -//! pub async fn launch(provider: Provider, pool: Pool, network: Network, events: Events) -//! where -//! Provider: AccountReader + BlockReaderIdExt + ChainSpecProvider + ChangeSetReader + StateProviderFactory + EvmEnvProvider + Clone + Unpin + 'static, +//! pub async fn launch( +//! provider: Provider, +//! pool: Pool, +//! network: Network, +//! events: Events, +//! ) where +//! Provider: AccountReader +//! + BlockReaderIdExt +//! + ChainSpecProvider +//! + ChangeSetReader +//! + StateProviderFactory +//! + EvmEnvProvider +//! + Clone +//! + Unpin +//! + 'static, //! Pool: TransactionPool + Clone + 'static, //! Network: NetworkInfo + Peers + Clone + 'static, -//! Events: CanonStateSubscriptions + Clone + 'static, +//! Events: CanonStateSubscriptions + Clone + 'static, //! { //! // configure the rpc module per transport //! let transports = TransportRpcModuleConfig::default().with_http(vec![ @@ -36,7 +53,9 @@ //! RethRpcModule::Eth, //! RethRpcModule::Web3, //! ]); -//! let transport_modules = RpcModuleBuilder::new(provider, pool, network, TokioTaskExecutor::default(), events).build(transports); +//! let transport_modules = +//! RpcModuleBuilder::new(provider, pool, network, TokioTaskExecutor::default(), events) +//! .build(transports); //! let handle = RpcServerConfig::default() //! .with_http(ServerBuilder::default()) //! .start(transport_modules) @@ -49,22 +68,40 @@ //! //! //! ``` -//! use tokio::try_join; //! use reth_network_api::{NetworkInfo, Peers}; -//! use reth_provider::{AccountReader, BlockReaderIdExt, ChainSpecProvider, CanonStateSubscriptions, StateProviderFactory, EvmEnvProvider, ChangeSetReader}; +//! use reth_provider::{ +//! AccountReader, BlockReaderIdExt, CanonStateSubscriptions, ChainSpecProvider, +//! ChangeSetReader, EvmEnvProvider, StateProviderFactory, +//! }; //! use reth_rpc::JwtSecret; -//! use reth_rpc_builder::{RethRpcModule, RpcModuleBuilder, RpcServerConfig, TransportRpcModuleConfig}; +//! use reth_rpc_api::EngineApiServer; +//! use reth_rpc_builder::{ +//! auth::AuthServerConfig, RethRpcModule, RpcModuleBuilder, RpcServerConfig, +//! TransportRpcModuleConfig, +//! }; //! use reth_tasks::TokioTaskExecutor; //! use reth_transaction_pool::TransactionPool; -//! use reth_rpc_api::EngineApiServer; -//! use reth_rpc_builder::auth::AuthServerConfig; -//! pub async fn launch(provider: Provider, pool: Pool, network: Network, events: Events, engine_api: EngineApi) -//! where -//! Provider: AccountReader + BlockReaderIdExt + ChainSpecProvider + ChangeSetReader + StateProviderFactory + EvmEnvProvider + Clone + Unpin + 'static, +//! use tokio::try_join; +//! pub async fn launch( +//! provider: Provider, +//! pool: Pool, +//! network: Network, +//! events: Events, +//! engine_api: EngineApi, +//! ) where +//! Provider: AccountReader +//! + BlockReaderIdExt +//! + ChainSpecProvider +//! + ChangeSetReader +//! + StateProviderFactory +//! + EvmEnvProvider +//! + Clone +//! + Unpin +//! + 'static, //! Pool: TransactionPool + Clone + 'static, //! Network: NetworkInfo + Peers + Clone + 'static, -//! Events: CanonStateSubscriptions + Clone + 'static, -//! EngineApi: EngineApiServer +//! Events: CanonStateSubscriptions + Clone + 'static, +//! EngineApi: EngineApiServer, //! { //! // configure the rpc module per transport //! let transports = TransportRpcModuleConfig::default().with_http(vec![ @@ -73,20 +110,20 @@ //! RethRpcModule::Eth, //! RethRpcModule::Web3, //! ]); -//! let builder = RpcModuleBuilder::new(provider, pool, network, TokioTaskExecutor::default(), events); -//! -//! // configure the server modules -//! let (modules, auth_module, _registry) = builder.build_with_auth_server(transports, engine_api); +//! let builder = +//! RpcModuleBuilder::new(provider, pool, network, TokioTaskExecutor::default(), events); //! -//! // start the servers -//! let auth_config = AuthServerConfig::builder(JwtSecret::random()).build(); -//! let config = RpcServerConfig::default(); +//! // configure the server modules +//! let (modules, auth_module, _registry) = +//! builder.build_with_auth_server(transports, engine_api); //! -//! let (_rpc_handle, _auth_handle) = try_join!( -//! modules.start_server(config), -//! auth_module.start_server(auth_config), -//! ).unwrap(); +//! // start the servers +//! let auth_config = AuthServerConfig::builder(JwtSecret::random()).build(); +//! let config = RpcServerConfig::default(); //! +//! let (_rpc_handle, _auth_handle) = +//! try_join!(modules.start_server(config), auth_module.start_server(auth_config),) +//! .unwrap(); //! } //! ``` @@ -515,19 +552,25 @@ impl RpcModuleSelection { /// Create a selection from the [RethRpcModule] string identifiers /// /// ``` - /// use reth_rpc_builder::{RethRpcModule, RpcModuleSelection}; + /// use reth_rpc_builder::{RethRpcModule, RpcModuleSelection}; /// let selection = vec!["eth", "admin"]; /// let config = RpcModuleSelection::try_from_selection(selection).unwrap(); - /// assert_eq!(config, RpcModuleSelection::Selection(vec![RethRpcModule::Eth, RethRpcModule::Admin])); + /// assert_eq!( + /// config, + /// RpcModuleSelection::Selection(vec![RethRpcModule::Eth, RethRpcModule::Admin]) + /// ); /// ``` /// /// Create a unique selection from the [RethRpcModule] string identifiers /// /// ``` - /// use reth_rpc_builder::{RethRpcModule, RpcModuleSelection}; + /// use reth_rpc_builder::{RethRpcModule, RpcModuleSelection}; /// let selection = vec!["eth", "admin", "eth", "admin"]; /// let config = RpcModuleSelection::try_from_selection(selection).unwrap(); - /// assert_eq!(config, RpcModuleSelection::Selection(vec![RethRpcModule::Eth, RethRpcModule::Admin])); + /// assert_eq!( + /// config, + /// RpcModuleSelection::Selection(vec![RethRpcModule::Eth, RethRpcModule::Admin]) + /// ); /// ``` pub fn try_from_selection(selection: I) -> Result where @@ -1433,8 +1476,8 @@ impl RpcServerConfig { /// /// ``` /// use reth_rpc_builder::{RethRpcModule, TransportRpcModuleConfig}; -/// let config = TransportRpcModuleConfig::default() -/// .with_http([RethRpcModule::Eth, RethRpcModule::Admin]); +/// let config = +/// TransportRpcModuleConfig::default().with_http([RethRpcModule::Eth, RethRpcModule::Admin]); /// ``` #[derive(Debug, Clone, Default, Eq, PartialEq)] pub struct TransportRpcModuleConfig { diff --git a/crates/rpc/rpc-types/src/eth/filter.rs b/crates/rpc/rpc-types/src/eth/filter.rs index 6935feca54d0b..0a89e1b2091b5 100644 --- a/crates/rpc/rpc-types/src/eth/filter.rs +++ b/crates/rpc/rpc-types/src/eth/filter.rs @@ -366,7 +366,8 @@ impl Filter { /// # use alloy_primitives::Address; /// # use reth_rpc_types::Filter; /// # fn main() { - /// let filter = Filter::new().address("0xAc4b3DacB91461209Ae9d41EC517c2B9Cb1B7DAF".parse::

().unwrap()); + /// let filter = Filter::new() + /// .address("0xAc4b3DacB91461209Ae9d41EC517c2B9Cb1B7DAF".parse::
().unwrap()); /// # } /// ``` /// @@ -377,7 +378,10 @@ impl Filter { /// # use alloy_primitives::Address; /// # use reth_rpc_types::Filter; /// # fn main() { - /// let addresses = vec!["0xAc4b3DacB91461209Ae9d41EC517c2B9Cb1B7DAF".parse::
().unwrap(),"0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8".parse::
().unwrap()]; + /// let addresses = vec![ + /// "0xAc4b3DacB91461209Ae9d41EC517c2B9Cb1B7DAF".parse::
().unwrap(), + /// "0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8".parse::
().unwrap(), + /// ]; /// let filter = Filter::new().address(addresses); /// # } /// ``` diff --git a/crates/rpc/rpc-types/src/eth/trace/filter.rs b/crates/rpc/rpc-types/src/eth/trace/filter.rs index 0c27d4bf09a1d..55cc0fe9c7cc7 100644 --- a/crates/rpc/rpc-types/src/eth/trace/filter.rs +++ b/crates/rpc/rpc-types/src/eth/trace/filter.rs @@ -5,7 +5,7 @@ use serde::{Deserialize, Serialize}; use std::collections::HashSet; /// Trace filter. -#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Clone)] +#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Clone, Default)] #[serde(deny_unknown_fields)] #[serde(rename_all = "camelCase")] pub struct TraceFilter { diff --git a/crates/rpc/rpc/src/layers/auth_layer.rs b/crates/rpc/rpc/src/layers/auth_layer.rs index 0a3a529d19f2c..e012a9ed9a335 100644 --- a/crates/rpc/rpc/src/layers/auth_layer.rs +++ b/crates/rpc/rpc/src/layers/auth_layer.rs @@ -17,25 +17,26 @@ use tower::{Layer, Service}; /// # How to integrate /// ```rust /// async fn build_layered_rpc_server() { -/// use jsonrpsee::server::ServerBuilder; -/// use reth_rpc::{AuthLayer, JwtAuthValidator, JwtSecret}; -/// use std::net::SocketAddr; +/// use jsonrpsee::server::ServerBuilder; +/// use reth_rpc::{AuthLayer, JwtAuthValidator, JwtSecret}; +/// use std::net::SocketAddr; /// -/// const AUTH_PORT: u32 = 8551; -/// const AUTH_ADDR: &str = "0.0.0.0"; -/// const AUTH_SECRET: &str = "f79ae8046bc11c9927afe911db7143c51a806c4a537cc08e0d37140b0192f430"; +/// const AUTH_PORT: u32 = 8551; +/// const AUTH_ADDR: &str = "0.0.0.0"; +/// const AUTH_SECRET: &str = +/// "f79ae8046bc11c9927afe911db7143c51a806c4a537cc08e0d37140b0192f430"; /// -/// let addr = format!("{AUTH_ADDR}:{AUTH_PORT}"); -/// let secret = JwtSecret::from_hex(AUTH_SECRET).unwrap(); -/// let validator = JwtAuthValidator::new(secret); -/// let layer = AuthLayer::new(validator); -/// let middleware = tower::ServiceBuilder::default().layer(layer); +/// let addr = format!("{AUTH_ADDR}:{AUTH_PORT}"); +/// let secret = JwtSecret::from_hex(AUTH_SECRET).unwrap(); +/// let validator = JwtAuthValidator::new(secret); +/// let layer = AuthLayer::new(validator); +/// let middleware = tower::ServiceBuilder::default().layer(layer); /// -/// let _server = ServerBuilder::default() -/// .set_middleware(middleware) -/// .build(addr.parse::().unwrap()) -/// .await -/// .unwrap(); +/// let _server = ServerBuilder::default() +/// .set_middleware(middleware) +/// .build(addr.parse::().unwrap()) +/// .await +/// .unwrap(); /// } /// ``` #[allow(missing_debug_implementations)] diff --git a/crates/rpc/rpc/src/layers/jwt_secret.rs b/crates/rpc/rpc/src/layers/jwt_secret.rs index 61bb3149f10b2..53207fcc0c702 100644 --- a/crates/rpc/rpc/src/layers/jwt_secret.rs +++ b/crates/rpc/rpc/src/layers/jwt_secret.rs @@ -147,10 +147,7 @@ impl JwtSecret { /// ```rust /// use reth_rpc::{Claims, JwtSecret}; /// - /// let my_claims = Claims { - /// iat: 0, - /// exp: None - /// }; + /// let my_claims = Claims { iat: 0, exp: None }; /// let secret = JwtSecret::random(); /// let token = secret.encode(&my_claims).unwrap(); /// ``` diff --git a/crates/stages/src/lib.rs b/crates/stages/src/lib.rs index b718fa5ab1445..f30471182c8a6 100644 --- a/crates/stages/src/lib.rs +++ b/crates/stages/src/lib.rs @@ -41,9 +41,13 @@ //! # let pipeline = //! Pipeline::builder() //! .with_tip_sender(tip_tx) -//! .add_stages( -//! DefaultStages::new(HeaderSyncMode::Tip(tip_rx), consensus, headers_downloader, bodies_downloader, factory) -//! ) +//! .add_stages(DefaultStages::new( +//! HeaderSyncMode::Tip(tip_rx), +//! consensus, +//! headers_downloader, +//! bodies_downloader, +//! factory, +//! )) //! .build(db, MAINNET.clone()); //! ``` //! diff --git a/crates/storage/db/src/tables/mod.rs b/crates/storage/db/src/tables/mod.rs index b9502153dd0fb..275271f7bc393 100644 --- a/crates/storage/db/src/tables/mod.rs +++ b/crates/storage/db/src/tables/mod.rs @@ -59,7 +59,7 @@ pub const NUM_TABLES: usize = 26; /// # Example /// /// ``` -/// use reth_db::{ table::Table, TableViewer, Tables }; +/// use reth_db::{table::Table, TableViewer, Tables}; /// use std::str::FromStr; /// /// let headers = Tables::from_str("Headers").unwrap(); diff --git a/crates/storage/provider/src/bundle_state/bundle_state_with_receipts.rs b/crates/storage/provider/src/bundle_state/bundle_state_with_receipts.rs index ba98104d81a67..ed2556bc8c380 100644 --- a/crates/storage/provider/src/bundle_state/bundle_state_with_receipts.rs +++ b/crates/storage/provider/src/bundle_state/bundle_state_with_receipts.rs @@ -162,9 +162,9 @@ impl BundleStateWithReceipts { /// # Example /// /// ``` - /// use reth_primitives::{Account, U256, Receipts}; + /// use reth_db::{database::Database, test_utils::create_test_rw_db}; + /// use reth_primitives::{Account, Receipts, U256}; /// use reth_provider::BundleStateWithReceipts; - /// use reth_db::{test_utils::create_test_rw_db, database::Database}; /// use std::collections::HashMap; /// /// // Initialize the database @@ -173,7 +173,7 @@ impl BundleStateWithReceipts { /// // Initialize the bundle state /// let bundle = BundleStateWithReceipts::new_init( /// HashMap::from([( - /// [0x11;20].into(), + /// [0x11; 20].into(), /// ( /// None, /// Some(Account { nonce: 1, balance: U256::from(10), bytecode_hash: None }), diff --git a/crates/tasks/src/lib.rs b/crates/tasks/src/lib.rs index 220c6aea5d265..c3f1195f1f29e 100644 --- a/crates/tasks/src/lib.rs +++ b/crates/tasks/src/lib.rs @@ -47,7 +47,7 @@ pub mod shutdown; /// /// ``` /// # async fn t() { -/// use reth_tasks::{TaskSpawner, TokioTaskExecutor}; +/// use reth_tasks::{TaskSpawner, TokioTaskExecutor}; /// let executor = TokioTaskExecutor::default(); /// /// let task = executor.spawn(Box::pin(async { diff --git a/crates/transaction-pool/src/lib.rs b/crates/transaction-pool/src/lib.rs index 88fe82ead97f2..8b6cd919491e5 100644 --- a/crates/transaction-pool/src/lib.rs +++ b/crates/transaction-pool/src/lib.rs @@ -279,18 +279,24 @@ where /// # Example /// /// ``` - /// use reth_provider::StateProviderFactory; /// use reth_primitives::MAINNET; + /// use reth_provider::StateProviderFactory; /// use reth_tasks::TokioTaskExecutor; - /// use reth_transaction_pool::{TransactionValidationTaskExecutor, Pool}; - /// use reth_transaction_pool::blobstore::InMemoryBlobStore; + /// use reth_transaction_pool::{ + /// blobstore::InMemoryBlobStore, Pool, TransactionValidationTaskExecutor, + /// }; /// # fn t(client: C) where C: StateProviderFactory + Clone + 'static { - /// let blob_store = InMemoryBlobStore::default(); - /// let pool = Pool::eth_pool( - /// TransactionValidationTaskExecutor::eth(client, MAINNET.clone(), blob_store.clone(), TokioTaskExecutor::default()), - /// blob_store, - /// Default::default(), - /// ); + /// let blob_store = InMemoryBlobStore::default(); + /// let pool = Pool::eth_pool( + /// TransactionValidationTaskExecutor::eth( + /// client, + /// MAINNET.clone(), + /// blob_store.clone(), + /// TokioTaskExecutor::default(), + /// ), + /// blob_store, + /// Default::default(), + /// ); /// # } /// ``` pub fn eth_pool( diff --git a/rustfmt.toml b/rustfmt.toml index 8971d8abc0d4b..68c3c93033d4f 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -6,4 +6,6 @@ wrap_comments = true binop_separator = "Back" trailing_comma = "Vertical" trailing_semicolon = false -use_field_init_shorthand = true \ No newline at end of file +use_field_init_shorthand = true +format_code_in_doc_comments = true +doc_comment_code_block_width = 100