---

services:
  alephzero-mainnet-archive:
    image: ${ALEPHZERO_NITRO_IMAGE:-offchainlabs/nitro-node}:${ALEPHZERO_MAINNET_NITRO_VERSION:-v3.5.3-0a9c975}
    sysctls:
      # TCP Performance
      net.ipv4.tcp_slow_start_after_idle: 0       # Disable slow start after idle
      net.ipv4.tcp_no_metrics_save: 1             # Disable metrics cache
      net.ipv4.tcp_rmem: 4096 87380 16777216      # Increase TCP read buffers
      net.ipv4.tcp_wmem: 4096 87380 16777216      # Increase TCP write buffers
      net.core.somaxconn: 32768                   # Higher connection queue
      # Memory/Connection Management
      # net.core.netdev_max_backlog: 50000          # Increase network buffer
      net.ipv4.tcp_max_syn_backlog: 30000         # More SYN requests
      net.ipv4.tcp_max_tw_buckets: 2000000        # Allow more TIME_WAIT sockets
    ulimits:
      nofile: 1048576    # Max open files (for RPC/WS connections)
    user: root
    expose:
      - 8545
    command:
      - --conf.file=/config/baseConfig.json
      - --execution.caching.archive=true
      - --execution.caching.state-scheme=hash
      - --execution.forwarding-target=https://rpc.alephzero.raas.gelato.cloud
      - --execution.rpc.gas-cap=600000000
      - --execution.sequencer.enable=false
      - --http.addr=0.0.0.0
      - --http.api=eth,net,web3,arb,txpool,debug
      - --http.corsdomain=*
      - --http.port=8545
      - --http.vhosts=*
      - --node.batch-poster.enable=false
      - --node.data-availability.enable=true
      - --node.data-availability.parent-chain-node-url=${ETHEREUM_MAINNET_EXECUTION_RPC}
      - --node.data-availability.rest-aggregator.enable=true
      - --node.data-availability.rest-aggregator.urls=https://das.alephzero.raas.gelato.cloud
      - --node.data-availability.sequencer-inbox-address=0x1411949971076304187394088912578077660717096867958
      - --node.feed.input.url=wss://feed.alephzero.raas.gelato.cloud
      - --node.sequencer=false
      - --node.staker.enable=false
      - --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
      - --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
      - --persistent.chain=/root/.arbitrum/alephzero-mainnet-archive
      - --persistent.db-engine=leveldb
      - --ws.addr=0.0.0.0
      - --ws.origins=*
      - --ws.port=8545
    restart: unless-stopped
    stop_grace_period: 5m
    networks:
      - chains
    volumes:
      - ${ALEPHZERO_MAINNET_NITRO_ARCHIVE_LEVELDB_HASH_DATA:-alephzero-mainnet-nitro-archive-leveldb-hash}:/root/.arbitrum
      - ./arb/alephzero/mainnet:/config
      - /slowdisk:/slowdisk
    labels:
      - traefik.enable=true
      - traefik.http.middlewares.alephzero-mainnet-nitro-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/alephzero-mainnet-archive
      - traefik.http.services.alephzero-mainnet-nitro-archive-leveldb-hash.loadbalancer.server.port=8545
      - ${NO_SSL:-traefik.http.routers.alephzero-mainnet-nitro-archive-leveldb-hash.entrypoints=websecure}
      - ${NO_SSL:-traefik.http.routers.alephzero-mainnet-nitro-archive-leveldb-hash.tls.certresolver=myresolver}
      - ${NO_SSL:-traefik.http.routers.alephzero-mainnet-nitro-archive-leveldb-hash.rule=Host(`$DOMAIN`) && PathPrefix(`/alephzero-mainnet-archive`)}
      - ${NO_SSL:+traefik.http.routers.alephzero-mainnet-nitro-archive-leveldb-hash.rule=PathPrefix(`/alephzero-mainnet-archive`)}
      - traefik.http.routers.alephzero-mainnet-nitro-archive-leveldb-hash.middlewares=alephzero-mainnet-nitro-archive-leveldb-hash-stripprefix, ipwhitelist

volumes:
  alephzero-mainnet-nitro-archive-leveldb-hash:

x-upstreams:
  - id: $${ID}
    labels:
      provider: $${PROVIDER}
    chain: alephzero
    method-groups:
      enabled:
        - debug
        - filter
    methods:
      disabled:
      enabled:
        - name: txpool_content # TODO: should be disabled for rollup nodes
        # standard geth only
        - name: debug_getRawBlock
        - name: debug_getRawTransaction
        - name: debug_getRawReceipts
        - name: debug_getRawHeader
        - name: debug_getBadBlocks
        # non standard geth only slightly dangerous
        - name: debug_intermediateRoots
        - name: debug_dumpBlock
        # standard geth and erigon
        - name: debug_accountRange
        - name: debug_getModifiedAccountsByNumber
        - name: debug_getModifiedAccountsByHash
        # non standard geth and erigon
        - name: eth_getRawTransactionByHash
        - name: eth_getRawTransactionByBlockHashAndIndex
...