logger:
  level: debug  # logger level: one of "debug", "info" (default), "warn", "error", "dpanic", "panic", "fatal"

profiler:
  address: 127.0.0.1:6060  # endpoint for Node profiling
  shutdown_timeout: 15s  # timeout for profiling HTTP server graceful shutdown

metrics:
  address: 127.0.0.1:9090  # endpoint for Node metrics
  shutdown_timeout: 15s  # timeout for metrics HTTP server graceful shutdown

node:
  key: ./wallet.key  # path to a binary private key
  wallet:
    path: "./wallet.json"  # path to a NEO wallet; ignored if key is presented
    address: "NcpJzXcSDrh5CCizf4K9Ro6w4t59J5LKzz"  # address of a NEO account in the wallet; ignored if key is presented
    password: "password"  # password for a NEO account in the wallet; ignored if key is presented
  addresses:  # list of addresses announced by Storage node in the Network map
    - s01.neofs.devenv:8080
    - /dns4/s02.neofs.devenv/tcp/8081
    - grpc://127.0.0.1:8082
    - grpcs://localhost:8083
  attribute_0: "Price:11"
  attribute_1: UN-LOCODE:RU MSK
  relay: true  # start Storage node in relay mode without bootstrapping into the Network map
  persistent_state:  # path to persistent state file of Storage node
    path: /state
  subnet:
    exit_zero: true # toggle entrance to zero subnet (overrides corresponding attribute and occurrence in `entries`)
    entries: # list of IDs of subnets to enter in a text format of NeoFS API protocol (overrides corresponding attributes)
      - 123
      - 456
      - 789
  notification:
    enabled: true  # turn on object notification service
    endpoint: "tls://localhost:4222"  # notification server endpoint
    timeout: "6s"  # timeout for object notification client connection
    default_topic: "topic"  # default topic for object notifications if not found in object's meta
    certificate: "/cert/path"  # path to TLS certificate
    key: "/key/path"  # path to TLS key
    ca: "/ca/path"  # path to optional CA certificate

grpc:
  num: 2  # total number of listener endpoints
  0:
    endpoint: s01.neofs.devenv:8080  # endpoint for gRPC server
    tls:
      enabled: true  # use TLS for a gRPC connection (min version is TLS 1.2)
      certificate: /path/to/cert  # path to TLS certificate
      key: /path/to/key  # path to TLS key

  1:
    endpoint: s02.neofs.devenv:8080  # endpoint for gRPC server
    tls:
      enabled: false  # use TLS for a gRPC connection
  2:
    endpoint: s03.neofs.devenv:8080
    tls:
      enabled: true
      use_insecure_crypto: true # allow using insecure ciphers with TLS 1.2

control:
  authorized_keys:  # list of hex-encoded public keys that have rights to use the Control Service
    - 035839e45d472a3b7769a2a1bd7d54c4ccd4943c3b40f547870e83a8fcbfb3ce11
    - 028f42cfcb74499d7b15b35d9bff260a1c8d27de4f446a627406a382d8961486d6
  grpc:
    endpoint: 127.0.0.1:8090  # endpoint that is listened by the Control Service

contracts:  # side chain NEOFS contract script hashes; optional, override values retrieved from NNS contract
  balance: 5263abba1abedbf79bb57f3e40b50b4425d2d6cd
  container: 5d084790d7aa36cea7b53fe897380dab11d2cd3c
  netmap: 0cce9e948dca43a6b592efe59ddb4ecb89bdd9ca
  reputation: 441995f631c1da2b133462b71859494a5cd45e90
  proxy: ad7c6b55b737b696e5c82c85445040964a03e97f

morph:
  dial_timeout: 30s  # timeout for side chain NEO RPC client connection
  disable_cache: true  # do not use TTL cache for side chain GET operations
  rpc_endpoint:  # side chain NEO RPC endpoints; are shuffled and used one by one until the first success
    - https://rpc1.morph.fs.neo.org:40341
    - https://rpc2.morph.fs.neo.org:40341
  notification_endpoint:  # side chain NEO RPC notification endpoints; are shuffled and used only the first non-error one
    - wss://rpc1.morph.fs.neo.org:40341/ws
    - wss://rpc2.morph.fs.neo.org:40341/ws
  max_connections_per_host: 11  # maximum of open connections per one host

mainchain:  # DEPRECATED section, is not used and not read
  dial_timeout: 30s  # timeout for main chain NEO RPC client connection
  rpc_endpoint:  # main chain NEO RPC endpoints; are shuffled and used one by one until the first success
    - https://rpc1.n3.nspcc.ru:30341
    - https://rpc2.n3.nspcc.ru:30341

apiclient:
  dial_timeout: 15s  # timeout for NEOFS API client connection

policer:
  head_timeout: 15s  # timeout for the Policer HEAD remote operation

replicator:
  put_timeout: 15s  # timeout for the Replicator PUT remote operation

object:
  put:
    pool_size_remote: 100  # number of async workers for remote PUT operations

storage:
  # note: shard configuration can be omitted for relay node (see `node.relay`)
  shard_pool_size: 15 # size of per-shard worker pools used for PUT operations
  shard_num: 2  # total number of shards
  shard_ro_error_threshold: 100 # amount of errors to occur before shard is made read-only (default: 0, ignore errors)
  default: # section with the default shard parameters
    resync_metabase: true  # sync metabase with blobstor on start, expensive, leave false until complete understanding

    writecache:
      enabled: true
      memcache_capacity: 2147483648  # approximate RAM usage limit for "small" objects, bytes
      small_object_size: 16384  # size threshold for "small" objects which are cached in key-value DB, not in FS, bytes
      max_object_size: 134217728  # size threshold for "big" objects which bypass write-cache and go to the storage directly, bytes
      workers_number: 30  # number of write-cache flusher threads

    metabase:
      perm: 0644  # permissions for metabase files(directories: +x for current user and group)

    blobstor:
      compress: false  # turn on/off zstd(level 3) compression of stored objects
      perm: 0644  # permissions for blobstor files(directories: +x for current user and group)
      depth: 5  # max depth of object tree storage in FS
      small_object_size: 102400  # size threshold for "small" objects which are cached in key-value DB, not in FS, bytes

      blobovnicza:
        size: 4194304  # approximate size limit of single blobovnicza instance, total size will be: size*width^(depth+1), bytes
        depth: 1  # max depth of object tree storage in key-value DB
        width: 4   # max width of object tree storage in key-value DB
        opened_cache_capacity: 50  # maximum number of opened database files

    gc:
      remover_batch_size: 200  # number of objects to be removed by the garbage collector
      remover_sleep_interval: 5m  # frequency of the garbage collector invocation

  shard:
    0:
      mode: "read-only"  # mode of the shard, must be one of the: "read-write" (default), "read-only"
      resync_metabase: false  # sync metabase with blobstor on start, expensive, leave false until complete understanding

      writecache:
        enabled: false
        path: tmp/0/cache  # write-cache root directory
        capacity: 3221225472  # approximate write-cache total size, bytes

      metabase:
        path: tmp/0/meta  # metabase path

      blobstor:
        path: tmp/0/blob  # blobstor path
        compress: true  # turn on/off zstd(level 3) compression of stored objects
        compression_exclude_content_types:
          - audio/*
          - video/*

      gc:
        remover_batch_size: 150  # number of objects to be removed by the garbage collector
        remover_sleep_interval: 2m  # frequency of the garbage collector invocation

    1:
      writecache:
        path: tmp/1/cache  # write-cache root directory
        capacity: 4294967296  # approximate write-cache total size, bytes

      metabase:
        path: tmp/1/meta  # metabase path

      blobstor:
        path: tmp/1/blob  # blobstor path