diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml deleted file mode 100644 index cdd37ab00c..0000000000 --- a/.github/workflows/build-and-deploy.yml +++ /dev/null @@ -1,166 +0,0 @@ -name: Docker Build, Publish and Deploy - -on: - push: - branches: [main] - tags: ['v*'] - workflow_dispatch: - -permissions: - id-token: write - contents: write - -jobs: - docker_build_and_publish: - runs-on: ubuntu-latest - outputs: - IMAGE_TAG: ${{ steps.image_tag.outputs.IMAGE_TAG }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Define_docker_image_tag - id: image_tag - run: | - echo "DOCKER_IMAGE_TAG=$(git describe --tags)" >> $GITHUB_ENV - echo "IMAGE_TAG=$(git describe --tags)" >> "$GITHUB_OUTPUT" - - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build and Push - uses: docker/build-push-action@v5 - with: - context: . - platforms: 'linux/amd64' - push: true - tags: nethermindeth/juno:${{ env.DOCKER_IMAGE_TAG }} - - deploy_to_dev: - permissions: - id-token: write - contents: write - needs: [docker_build_and_publish] - runs-on: ubuntu-latest - environment: - name: Development - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Repository Dispatch Dev - env: - EVENT_NAME: juno-dev - IMAGE_TAG: ${{ needs.docker_build_and_publish.outputs.IMAGE_TAG }} - SEPOLIA: apps/juno-dev/overlays/dev-sepolia/config.yaml - run: | - curl -L \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: token ${{ secrets.ACCESS_TOKEN }}" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/NethermindEth/argo/dispatches \ - -d '{"event_type": "${{ env.EVENT_NAME }}", "client_payload":{"name": "${{ env.EVENT_NAME }}", "sepolia_config": "${{ env.SEPOLIA }}", "tag": "${{ env.IMAGE_TAG }}"}}' - - - name: Verify Deployment Version (Dev) - run: bash .github/workflow-scripts/verify_deployment.sh ${{ secrets.DEV_SEPOLIA_URL }} ${{ needs.docker_build_and_publish.outputs.IMAGE_TAG }} - - dev-starknet-rs-tests: - needs: [deploy_to_dev] - uses: ./.github/workflows/starknet-rs-tests.yml - secrets: - STARKNET_RPC: ${{ secrets.DEV_SEPOLIA_URL }}/v0_6 - - dev-starknet-js-tests: - needs: [deploy_to_dev] - uses: ./.github/workflows/starknet-js-tests.yml - secrets: - TEST_RPC_URL: ${{ secrets.DEV_SEPOLIA_URL }}/v0_7 - TEST_ACCOUNT_ADDRESS: ${{ secrets.TEST_ACCOUNT_ADDRESS }} - TEST_ACCOUNT_PRIVATE_KEY: ${{ secrets.TEST_ACCOUNT_PRIVATE_KEY }} - - deploy_to_staging: - needs: [docker_build_and_publish, deploy_to_dev] - runs-on: ubuntu-latest - environment: - name: Staging - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Repository Dispatch Staging - env: - EVENT_NAME: juno-staging - IMAGE_TAG: ${{ needs.docker_build_and_publish.outputs.IMAGE_TAG }} - MAINNET: apps/juno-staging/overlays/staging-mainnet/config.yaml - SEPOLIA: apps/juno-staging/overlays/staging-sepolia/config.yaml - SEPOLIA_INTEGRATION: apps/juno-staging/overlays/staging-sepolia-integration/config.yaml - run: | - curl -L \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: token ${{ secrets.ACCESS_TOKEN }}" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/NethermindEth/argo/dispatches \ - -d '{"event_type": "${{ env.EVENT_NAME }}", "client_payload":{"name": "${{ env.EVENT_NAME }}", "mainnet_config": "${{ env.MAINNET }}", "sepolia_config": "${{ env.SEPOLIA }}", "sepolia_integration_config": "${{ env.SEPOLIA_INTEGRATION}}", "tag": "${{ env.IMAGE_TAG }}"}}' - - - name: Verify Deployment Version (Staging) - run: bash .github/workflow-scripts/verify_deployment.sh ${{ secrets.STAGING_SEPOLIA_URL }} ${{ needs.docker_build_and_publish.outputs.IMAGE_TAG }} - - staging-starknet-rs-tests: - needs: [deploy_to_staging] - uses: ./.github/workflows/starknet-rs-tests.yml - secrets: - STARKNET_RPC: ${{ secrets.STAGING_SEPOLIA_URL }}/v0_6 - - staging-starknet-js-tests: - needs: [deploy_to_staging] - uses: ./.github/workflows/starknet-js-tests.yml - secrets: - TEST_RPC_URL: ${{ secrets.STAGING_SEPOLIA_URL }}/v0_7 - TEST_ACCOUNT_ADDRESS: ${{ secrets.TEST_ACCOUNT_ADDRESS }} - TEST_ACCOUNT_PRIVATE_KEY: ${{ secrets.TEST_ACCOUNT_PRIVATE_KEY }} - - deploy_to_production: - needs: [docker_build_and_publish, deploy_to_staging] - runs-on: ubuntu-latest - environment: - name: Production - steps: - - name: Repository Dispatch Prod - env: - EVENT_NAME: juno-prod - IMAGE_TAG: ${{ needs.docker_build_and_publish.outputs.IMAGE_TAG }} - MAINNET: apps/juno-prod/overlays/prod-mainnet/config.yaml - SEPOLIA: apps/juno-prod/overlays/prod-sepolia/config.yaml - SEPOLIA_INTEGRATION: apps/juno-prod/overlays/prod-sepolia-integration/config.yaml - run: | - curl -L \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: token ${{ secrets.ACCESS_TOKEN }}" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/NethermindEth/argo/dispatches \ - -d '{"event_type": "${{ env.EVENT_NAME }}", "client_payload":{"name": "${{ env.EVENT_NAME }}", "mainnet_config": "${{ env.MAINNET }}", "sepolia_config": "${{ env.SEPOLIA }}", "sepolia_integration_config": "${{ env.SEPOLIA_INTEGRATION }}", "tag": "${{ env.IMAGE_TAG }}"}}' - - prod-starknet-rs-tests: - needs: [deploy_to_production] - uses: ./.github/workflows/starknet-rs-tests.yml - secrets: - STARKNET_RPC: ${{ secrets.PROD_SEPOLIA_URL }}/v0_6 - - prod-starknet-js-tests: - needs: [deploy_to_production] - uses: ./.github/workflows/starknet-js-tests.yml - secrets: - TEST_RPC_URL: ${{ secrets.PROD_SEPOLIA_URL }}/v0_7 - TEST_ACCOUNT_ADDRESS: ${{ secrets.TEST_ACCOUNT_ADDRESS }} - TEST_ACCOUNT_PRIVATE_KEY: ${{ secrets.TEST_ACCOUNT_PRIVATE_KEY }} \ No newline at end of file diff --git a/.github/workflows/docker-image-build-push.yml b/.github/workflows/docker-image-build-push.yml deleted file mode 100644 index 153770f583..0000000000 --- a/.github/workflows/docker-image-build-push.yml +++ /dev/null @@ -1,99 +0,0 @@ -name: 'Build and publish Docker image' - -on: - workflow_dispatch: - inputs: - tag: - description: 'Enter an image tag e.g v0.1.0' - required: true - repo_type: - description: 'Choose repository type' - type: choice - required: false - default: 'non-official' - options: - - official - - non-official - -jobs: - build_and_push_docker_image_amd: - if: github.repository_owner == 'NethermindEth' - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build and push - uses: docker/build-push-action@v4 - with: - context: . - platforms: 'linux/amd64' - push: true - tags: nethermindeth/juno:${{ github.event.inputs.tag }} - - build_and_push_docker_image_arm: - if: github.repository_owner == 'NethermindEth' - runs-on: self-hosted - steps: - - name: Checkout code - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build and push ARM - uses: docker/build-push-action@v4 - with: - context: . - platforms: 'linux/arm64' - push: true - tags: nethermindeth/juno:${{ github.event.inputs.tag }}-arm64 - - - name: Cleanup self-hosted - run: | - docker system prune -af - - create_and_push_official_image: - if: github.repository_owner == 'NethermindEth' && github.event.inputs.repo_type == 'official' - needs: [build_and_push_docker_image_amd, build_and_push_docker_image_arm] - runs-on: ubuntu-latest - steps: - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Create and push manifest using buildx - run: | - docker buildx imagetools create nethermindeth/juno:${{ github.event.inputs.tag }} \ - nethermindeth/juno:${{ github.event.inputs.tag }}-arm64 \ - --tag nethermind/juno:${{ github.event.inputs.tag }} - - - name: Clean up environment - if: always() - run: | - rm -f ${HOME}/.docker/config.json - diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000000..297d338452 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,195 @@ +name: "Build multi-arch images" + +on: + push: + tags: + - "v*.*.*" + +jobs: + start-runner: + name: "Start self-hosted EC2 runner" + runs-on: "ubuntu-latest" + outputs: + label: ${{ steps.start-ec2-runner.outputs.label }} + ec2-instance-id: ${{ steps.start-ec2-runner.outputs.ec2-instance-id }} + + steps: + - name: "Configure AWS credentials" + uses: "aws-actions/configure-aws-credentials@v1" + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ secrets.AWS_REGION }} + + - name: "Start EC2 runner" + id: "start-ec2-runner" + uses: "xJonathanLEI/ec2-github-runner@main" + with: + mode: "start" + github-token: ${{ secrets.GH_PAT }} + ec2-image-id: "ami-01a786eb497a27d2a" + ec2-instance-type: "c6g.8xlarge" + subnet-id: "subnet-0f178a06b3c5e09dd" + security-group-id: "sg-0db4b2850585ebe80" + storage-size: 256 + + image-info: + name: "Extract crate info" + runs-on: "ubuntu-latest" + outputs: + repo: ${{ steps.derive.outputs.repo }} + tag: ${{ steps.derive.outputs.tag }} + + env: + DOCKER_REPOSITORY: "starknet/juno-firehose" + + steps: + - id: "derive" + name: "Derive image info from Git tag" + run: | + echo "repo=${DOCKER_REPOSITORY}" >> $GITHUB_OUTPUT + + FULL_REF="${{ github.ref }}" + REGEX="^refs\/tags\/v(.*)$" + [[ $FULL_REF =~ $REGEX ]]; + + echo "tag=${DOCKER_REPOSITORY}:${BASH_REMATCH[1]}" >> $GITHUB_OUTPUT + + build-amd64: + name: "Build for linux/amd64" + runs-on: "ubuntu-larger" + needs: + - "image-info" + + steps: + - name: "Checkout" + uses: "actions/checkout@v3" + + - name: "Build Docker image" + run: | + docker build \ + -t ${{ needs.image-info.outputs.tag }}-amd64 -f ./Dockerfile . + + - name: "Export Docker image" + run: | + docker save ${{ needs.image-info.outputs.tag }}-amd64 | gzip > /tmp/amd64.tar.gz + + - name: "Upload Docker image artifact" + uses: "actions/upload-artifact@v3" + with: + name: "amd64.tar.gz" + path: "/tmp/amd64.tar.gz" + + build-arm64: + name: "Build for linux/arm64" + runs-on: "${{ needs.start-runner.outputs.label }}" + needs: + - "image-info" + - "start-runner" + + steps: + - name: "Checkout" + uses: "actions/checkout@v3" + + - name: "Install Docker" + run: | + # Add Docker's official GPG key: + sudo apt-get update + sudo apt-get install -y ca-certificates curl gnupg + sudo install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + sudo chmod a+r /etc/apt/keyrings/docker.gpg + + # Add the repository to Apt sources: + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt-get update + + # Install the latest version + sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + + - name: "Build Docker image" + run: | + docker build \ + -t ${{ needs.image-info.outputs.tag }}-arm64 -f ./Dockerfile . + + - name: "Export Docker image" + run: | + docker save ${{ needs.image-info.outputs.tag }}-arm64 | gzip > /tmp/arm64.tar.gz + + - name: "Upload Docker image artifact" + uses: "actions/upload-artifact@v3" + with: + name: "arm64.tar.gz" + path: "/tmp/arm64.tar.gz" + + push: + name: "Push multi-arch manifest" + runs-on: "ubuntu-latest" + needs: + - "image-info" + - "build-amd64" + - "build-arm64" + + steps: + - name: "Download linux/amd64 image" + uses: "actions/download-artifact@v3" + with: + name: "amd64.tar.gz" + path: "/tmp/" + + - name: "Download linux/arm64/v8 image" + uses: "actions/download-artifact@v3" + with: + name: "arm64.tar.gz" + path: "/tmp/" + + - name: "Load Docker images" + run: | + docker load < /tmp/amd64.tar.gz + docker load < /tmp/arm64.tar.gz + + - name: "Login to Docker Hub" + uses: "docker/login-action@v1.6.0" + with: + username: "${{ secrets.DOCKER_HUB_USERNAME }}" + password: "${{ secrets.DOCKER_HUB_PASSWORD }}" + + - name: "Push Docker image" + run: | + docker push ${{ needs.image-info.outputs.tag }}-amd64 + docker push ${{ needs.image-info.outputs.tag }}-arm64 + docker manifest create ${{ needs.image-info.outputs.tag }} \ + ${{ needs.image-info.outputs.tag }}-amd64 \ + ${{ needs.image-info.outputs.tag }}-arm64 + docker manifest create ${{ needs.image-info.outputs.repo }}:latest \ + ${{ needs.image-info.outputs.tag }}-amd64 \ + ${{ needs.image-info.outputs.tag }}-arm64 + docker manifest push ${{ needs.image-info.outputs.tag }} + docker manifest push ${{ needs.image-info.outputs.repo }}:latest + + stop-runner: + name: "Stop self-hosted EC2 runner" + runs-on: "ubuntu-latest" + needs: + - "start-runner" + - "build-arm64" + if: ${{ always() }} + + steps: + - name: "Configure AWS credentials" + uses: "aws-actions/configure-aws-credentials@v1" + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ secrets.AWS_REGION }} + + - name: "Stop EC2 runner" + uses: "xJonathanLEI/ec2-github-runner@main" + with: + mode: "stop" + github-token: ${{ secrets.GH_PAT }} + label: "${{ needs.start-runner.outputs.label }}" + ec2-instance-id: "${{ needs.start-runner.outputs.ec2-instance-id }}" diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml new file mode 100644 index 0000000000..2f2f804d84 --- /dev/null +++ b/.github/workflows/sync.yml @@ -0,0 +1,88 @@ +on: + schedule: + # 1:05 past midnight UTC + - cron: "5 1 * * *" + +name: "Sync with upstream" +jobs: + sync: + name: "Sync" + runs-on: "ubuntu-latest" + + env: + DEFAULT_BRANCH: "main" + + steps: + # https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 + - name: "Free up disk space" + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + + - name: "Checkout source code" + uses: "actions/checkout@v3" + with: + # Subsequent actions are not triggered unless using PAT + token: "${{ secrets.GH_PAT }}" + fetch-depth: 0 + submodules: true + + - name: "Setup Rust toolchain" + uses: "actions-rs/toolchain@v1" + with: + toolchain: "stable" + profile: "minimal" + + - name: "Setup Golang toolchain" + uses: "actions/setup-go@v4" + with: + go-version: "1.21" + + - name: "Config Git" + run: | + git config user.name "Jonathan LEI" + git config user.email "me@xjonathan.dev" + + - name: "Update branch" + run: | + git fetch origin + git remote add upstream https://github.com/NethermindEth/juno + git fetch upstream --no-tags + + MERGE_BASE=$(git merge-base origin/$DEFAULT_BRANCH upstream/$DEFAULT_BRANCH) + + # Don't force push unnecessarily unless changes are detected + if [[ $(git rev-list $MERGE_BASE..upstream/$DEFAULT_BRANCH | wc -l) -ne 0 ]]; then + # Brings files from `home` to default branch + git checkout $DEFAULT_BRANCH + git reset --hard upstream/$DEFAULT_BRANCH + git checkout origin/home . + + # Remove unwanted workflows + rm ./.github/workflows/docker-image-build-push.yml + rm ./.github/workflows/build-and-deploy.yml + rm ./.github/workflows/sync_first_100_blocks_smoke_test.yml + + git add . + git commit -m "chore: README and CI changes" + + # Here, we pick commits on the default branch except the first one. We do this instead + # of a naive rebase because the `home` branch might have changed, causing merge + # conflicts. + COMMIT_COUNT=$(git rev-list $MERGE_BASE..origin/$DEFAULT_BRANCH | wc -l) + git cherry-pick origin/$DEFAULT_BRANCH~$(($COMMIT_COUNT-1))..origin/$DEFAULT_BRANCH + + # Install build dependency + sudo apt-get update + sudo apt-get install -y libjemalloc-dev + + # Makes sure the updated local branch builds + make juno + + # Push updated branch + git push --force-with-lease + else + echo "No changes detected on upstream $DEFAULT_BRANCH" + fi diff --git a/.github/workflows/sync_first_100_blocks_smoke_test.yml b/.github/workflows/sync_first_100_blocks_smoke_test.yml deleted file mode 100644 index 7e603043c3..0000000000 --- a/.github/workflows/sync_first_100_blocks_smoke_test.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Sync First 100 Blocks Smoke Test - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - run_smoke_tests: - runs-on: ubuntu-latest - if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository - steps: - - name: Generate a token - id: generate-token - uses: actions/create-github-app-token@v1 - with: - app-id: ${{ vars.APP_ID }} - private-key: ${{ secrets.APP_PRIVATE_KEY }} - owner: ${{ github.repository_owner }} - repositories: "juno,juno-smoke-tests" - - - name: Checkout code - uses: actions/checkout@v3 - - - name: Set up Go - uses: actions/setup-go@v4.1.0 - with: - go-version-file: go.mod - cache: true - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Build docker image - run: docker build --build-arg VM_DEBUG=true -t nethermindeth/juno . - - - name: Checkout Juno Smoke Tests - uses: actions/checkout@v4.1.7 - with: - repository: NethermindEth/juno-smoke-tests - token: ${{ steps.generate-token.outputs.token }} - - - name: Run smoke tests - run: | - cd smoke-tests/node_tests - go test -v -run TestMonitorNodeSync -args -targetBlock=$TARGET_BLOCK -timeout=$TIMEOUT - env: - TARGET_BLOCK: 100 - TIMEOUT: 10m - JUNO_PARAMETERS: "--network mainnet --eth-node ${{ secrets.ETH_NODE_MAINNET }}" diff --git a/README.md b/README.md index 1fdd6e6323..a9614a3193 100644 --- a/README.md +++ b/README.md @@ -1,324 +1,11 @@ -
-
-
-
-
-
- - - - - - - - - - - - +This is a [`juno`](https://github.com/NethermindEth/juno) fork with support for the [Firehose protocol](https://firehose.streamingfast.io/), which in turn enables StarkNet support in [The Graph](https://thegraph.com/). It's created and maintained by the [zkLend](https://zklend.com/) team. -
- +Powered by a [GitHub Actions workflow](https://github.com/starknet-graph/juno/actions/workflows/sync.yml), this fork syncs the `main` branch with the upstream continuously: +- First, a commit is made on top of the upstream `main` branch to bring files from the [`home`](https://github.com/starknet-graph/juno/tree/home) branch to `main`. This is necessary for making changes to CI workflows and the README file you're reading right now. -- Juno is a golang Starknet node implementation by Nethermind with the aim of decentralising Starknet. -
+- Then, actual patch commits living on the fork `main` branch gets rebased. Before pushing, the branch is compiled to make sure it still builds, and the team gets notified if it doesn't. -> **📌 Looking for a Starknet RPC Provider?** -> -> Access Nethermind's Starknet RPC service for free at https://data.voyager.online. - -## ⚙️ Installation - -### Prerequisites - -- Golang 1.22 or higher is required to build and run the project. You can find the installer on - the official Golang [download](https://go.dev/doc/install) page. -- [Rust](https://www.rust-lang.org/tools/install). -- A C compiler: `gcc` or `clang`. -- Install `jemalloc` on your system: - - - macOS - - ```bash - brew install jemalloc - ``` - - - Ubuntu - - ```bash - sudo apt-get install -y libjemalloc-dev - ``` - -- To ensure a successful build, you either need to synchronize the tags from the upstream repository or create a new tag. - -### Build and Run - -```shell -make juno -./build/juno -``` -Use the `--help` flag for configuration information. -Flags and their values can also be placed in a `.yaml` file that is passed in through `--config`. - -### Run with Docker - -To run Juno with Docker, use the following command. Make sure to create the `$HOME/juno` directory on your local machine before running the command. - -```shell -docker run -d \ - --name juno \ - -p 6060:6060 \ - -v $HOME/juno:/var/lib/juno \ - nethermind/juno \ - --http \ - --http-port 6060 \ - --http-host 0.0.0.0 \ - --db-path /var/lib/juno \ - --eth-node