openapi: 3.1.0
info:
  title: 'NEAR Protocol RPC: Get genesis config'
  description: Get initial state and parameters for the genesis block
  version: 1.0.0
servers:
  - url: https://rpc.mainnet.fastnear.com
    description: Mainnet
  - url: https://rpc.testnet.fastnear.com
    description: Testnet
paths:
  /:
    post:
      operationId: genesis_config
      summary: Get genesis config
      description: Get initial state and parameters for the genesis block
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - jsonrpc
                - id
                - method
                - params
              properties:
                jsonrpc:
                  type: string
                  enum:
                    - '2.0'
                id:
                  type: string
                  example: fastnear
                method:
                  type: string
                  enum:
                    - genesis_config
                params:
                  type: array
                  maxItems: 0
                  description: Empty array as this method takes no parameters
                  example: []
            examples:
              mainnet:
                summary: Get genesis config (Mainnet)
                value:
                  jsonrpc: '2.0'
                  id: fastnear
                  method: genesis_config
                  params: []
              testnet:
                summary: Get genesis config (Testnet)
                value:
                  jsonrpc: '2.0'
                  id: fastnear
                  method: genesis_config
                  params: []
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonRpcResponse'
components:
  schemas:
    JsonRpcResponse:
      type: object
      required:
        - jsonrpc
        - id
      properties:
        jsonrpc:
          type: string
          enum:
            - '2.0'
        id:
          oneOf:
            - type: string
            - type: number
        result:
          type: object
          properties:
            avg_hidden_validator_seats_per_shard:
              type: array
              items:
                type: integer
                format: uint64
                minimum: 0
              description: Expected number of hidden validators per shard.
            block_producer_kickout_threshold:
              type: integer
              description: Threshold for kicking out block producers, between 0 and 100.
              format: uint8
              minimum: 0
            chain_id:
              type: string
              description: >-
                ID of the blockchain. This must be unique for every blockchain.

                If your testnet blockchains do not have unique chain IDs, you
                will have a bad time.
            chunk_producer_assignment_changes_limit:
              type: integer
              description: >-
                Limits the number of shard changes in chunk producer
                assignments,

                if algorithm is able to choose assignment with better balance of

                number of chunk producers for shards.
              format: uint64
              default: 5
              minimum: 0
            chunk_producer_kickout_threshold:
              type: integer
              description: Threshold for kicking out chunk producers, between 0 and 100.
              format: uint8
              minimum: 0
            chunk_validator_only_kickout_threshold:
              type: integer
              description: >-
                Threshold for kicking out nodes which are only chunk validators,
                between 0 and 100.
              format: uint8
              default: 80
              minimum: 0
            dynamic_resharding:
              type: boolean
              description: Enable dynamic re-sharding.
            epoch_length:
              type: integer
              description: Epoch length counted in block heights.
              format: uint64
              minimum: 0
            fishermen_threshold:
              type: string
              description: Amount in yoctoNEAR
            gas_limit:
              type: string
              description: Gas amount
            gas_price_adjustment_rate:
              type: array
              items:
                type: integer
                format: int32
              description: Gas price adjustment rate
            genesis_height:
              type: integer
              description: Height of genesis block.
              format: uint64
              minimum: 0
            genesis_time:
              type: string
              description: Official time of blockchain start.
              format: date-time
            max_gas_price:
              type: string
              description: Amount in yoctoNEAR
            max_inflation_rate:
              type: array
              items:
                type: integer
                format: int32
              description: Maximum inflation on the total supply every epoch.
            max_kickout_stake_perc:
              type: integer
              description: Max stake percentage of the validators we will kick out.
              format: uint8
              default: 100
              minimum: 0
            min_gas_price:
              type: string
              description: Amount in yoctoNEAR
            minimum_stake_divisor:
              type: integer
              description: >-
                The minimum stake required for staking is last seat price
                divided by this number.
              format: uint64
              default: 10
              minimum: 0
            minimum_stake_ratio:
              type: array
              items:
                type: integer
                format: int32
              description: |-
                The lowest ratio s/s_total any block producer can have.
                See <https://github.com/near/NEPs/pull/167> for details
            minimum_validators_per_shard:
              type: integer
              description: The minimum number of validators each shard must have
              format: uint64
              default: 1
              minimum: 0
            num_block_producer_seats:
              type: integer
              description: Number of block producer seats at genesis.
              format: uint64
              minimum: 0
            num_block_producer_seats_per_shard:
              type: array
              items:
                type: integer
                format: uint64
                minimum: 0
              description: >-
                Defines number of shards and number of block producer seats per
                each shard at genesis.

                Note: not used with protocol_feature_chunk_only_producers --
                replaced by minimum_validators_per_shard

                Note: not used before as all block producers produce chunks for
                all shards
            num_blocks_per_year:
              type: integer
              description: Expected number of blocks per year
              format: uint64
              minimum: 0
            num_chunk_only_producer_seats:
              type: integer
              description: Deprecated.
              format: uint64
              default: 300
              minimum: 0
            num_chunk_producer_seats:
              type: integer
              description: >-
                Number of chunk producers.

                Don't mess it up with chunk-only producers feature which is
                deprecated.
              format: uint64
              default: 100
              minimum: 0
            num_chunk_validator_seats:
              type: integer
              format: uint64
              default: 300
              minimum: 0
            online_max_threshold:
              type: array
              items:
                type: integer
                format: int32
              description: Online maximum threshold above which validator gets full reward.
            online_min_threshold:
              type: array
              items:
                type: integer
                format: int32
              description: >-
                Online minimum threshold below which validator doesn't receive
                reward.
            protocol_reward_rate:
              type: array
              items:
                type: integer
                format: int32
              description: Protocol treasury rate
            protocol_treasury_account:
              type: string
              description: NEAR account ID
            protocol_upgrade_stake_threshold:
              type: array
              items:
                type: integer
                format: int32
              description: >-
                Threshold of stake that needs to indicate that they ready for
                upgrade.
            protocol_version:
              type: integer
              description: Protocol version that this genesis works with.
              format: uint32
              minimum: 0
            shard_layout:
              type: object
              description: One of multiple possible types
              default:
                V2:
                  boundary_accounts: []
                  id_to_index_map:
                    '0': 0
                  index_to_id_map:
                    '0': 0
                  shard_ids:
                    - 0
                  version: 0
            shuffle_shard_assignment_for_chunk_producers:
              type: boolean
              description: >-
                If true, shuffle the chunk producers across shards. In other
                words, if

                the shard assignments were `[S_0, S_1, S_2, S_3]` where `S_i`
                represents

                the set of chunk producers for shard `i`, if this flag were
                true, the

                shard assignments might become, for example, `[S_2, S_0, S_3,
                S_1]`.
              default: false
            target_validator_mandates_per_shard:
              type: integer
              description: Number of target chunk validator mandates for each shard.
              format: uint64
              default: 68
              minimum: 0
            total_supply:
              type: string
              description: Amount in yoctoNEAR
            transaction_validity_period:
              type: integer
              description: Number of blocks for which a given transaction is valid
              format: uint64
              minimum: 0
            use_production_config:
              type: boolean
              description: >-
                This is only for test purposes. We hard code some configs for
                mainnet and testnet

                in AllEpochConfig, and we want to have a way to test that code
                path. This flag is for that.

                If set to true, the node will use the same config override path
                as mainnet and testnet.
              default: false
            validators:
              type: array
              items:
                type: object
                description: Account info for validators
              description: List of initial validators.
          required:
            - protocol_version
            - genesis_time
            - chain_id
            - genesis_height
            - num_block_producer_seats
            - num_block_producer_seats_per_shard
            - avg_hidden_validator_seats_per_shard
            - dynamic_resharding
            - epoch_length
            - gas_limit
            - min_gas_price
            - max_gas_price
            - block_producer_kickout_threshold
            - chunk_producer_kickout_threshold
            - gas_price_adjustment_rate
            - validators
            - transaction_validity_period
            - protocol_reward_rate
            - max_inflation_rate
            - total_supply
            - num_blocks_per_year
            - protocol_treasury_account
            - fishermen_threshold
        error:
          type: object
          properties:
            code:
              type: integer
            message:
              type: string
            data:
              type: object
