[server]
  host = "127.0.0.1"
  port = {{port}}
  kind = "{{watcherKind}}"
  gqlPath = "/graphql"

  # Checkpointing state.
  checkpointing = true

  # Checkpoint interval in number of blocks.
  checkpointInterval = 2000

  # Enable state creation
  # CAUTION: Disable only if state creation is not desired or can be filled subsequently
  enableState = true

  {{#if (subgraphPath)}}
  subgraphPath = "./subgraph-build"

  # Interval to restart wasm instance periodically
  wasmRestartBlocksInterval = 20

  # Interval in number of blocks at which to clear entities cache.
  clearEntitiesCacheInterval = 1000

  {{/if}}
  # Max block range for which to return events in eventsInRange GQL query.
  # Use -1 for skipping check on block range.
  maxEventsBlockRange = 1000

  # Flag to specify whether RPC endpoint supports block hash as block tag parameter
  rpcSupportsBlockHashParam = true

  # GQL cache settings
  [server.gqlCache]
    enabled = true

    # Max in-memory cache size (in bytes) (default 8 MB)
    # maxCacheSize

    # GQL cache-control max-age settings (in seconds)
    maxAge = 15
    {{#if (subgraphPath)}}
    timeTravelMaxAge = 86400 # 1 day
    {{/if}}

[metrics]
  host = "127.0.0.1"
  port = 9000
  [metrics.gql]
    port = 9001

[database]
  type = "postgres"
  host = "localhost"
  port = 5432
  database = "{{folderName}}"
  username = "postgres"
  password = "postgres"
  synchronize = true
  logging = false

[upstream]
  [upstream.ethServer]
    gqlApiEndpoint = "http://127.0.0.1:8082/graphql"
    rpcProviderEndpoints = [
      "http://127.0.0.1:8081"
    ]

    # Boolean flag to specify if rpc-eth-client should be used for RPC endpoint instead of ipld-eth-client (ipld-eth-server GQL client)
    rpcClient = false

    # Boolean flag to specify if rpcProviderEndpoint is an FEVM RPC endpoint
    isFEVM = false

    # Boolean flag to filter event logs by contracts
    filterLogsByAddresses = true
    # Boolean flag to filter event logs by topics
    filterLogsByTopics = true

  [upstream.cache]
    name = "requests"
    enabled = false
    deleteOnStart = false

[jobQueue]
  dbConnectionString = "postgres://postgres:postgres@localhost/{{folderName}}-job-queue"
  maxCompletionLagInSecs = 300
  jobDelayInMilliSecs = 100
  eventsInBatch = 50
  subgraphEventsOrder = true
  blockDelayInMilliSecs = 2000

  # Boolean to switch between modes of processing events when starting the server.
  # Setting to true will fetch filtered events and required blocks in a range of blocks and then process them.
  # Setting to false will fetch blocks consecutively with its events and then process them (Behaviour is followed in realtime processing near head).
  useBlockRanges = true

  # Block range in which logs are fetched during historical blocks processing
  historicalLogsBlockRange = 2000

  # Max block range of historical processing after which it waits for completion of events processing
  # If set to -1 historical processing does not wait for events processing and completes till latest canonical block
  historicalMaxFetchAhead = 10000

  # Max number of retries to fetch new block after which watcher will failover to other RPC endpoints
  maxNewBlockRetries = 3
