Skip to content

Releases: graphprotocol/indexer

v0.21.3

28 Jun 22:56
Compare
Choose a tag to compare
v0.21.3 Pre-release
Pre-release

Changes and fixes

  • indexer-agent: if alias does not exist try the actual flag by @saihaj in #838
  • indexer-agent: Avoid race conditions when queuing actions (hopefully fixes #879) by @Jannis in #883
  • indexer-agent: broken comparison of indexing decisions by @Theodus in #870
  • indexer-agent,indexer-common: Cleanup migration 12 by @carlosvdr in #932
  • indexer-agent,indexer-common: Improve control of subgraph deployment health safety check by @fordN in #852
  • indexer-agent,indexer-common: feat: allow early allocation closure by @tmigone in #895
  • indexer-agent,indexer-common: lower the default parameters for query fee claiming by @chriswessels in #922
  • indexer-agent,indexer-common,indexer-cli: Allow cost models in single network mode by @aasseman in #899
  • indexer-agent,indexer-common: fix tsconfig, error-handling export by @dwerner in #935
  • indexer-agent,indexer-common,indexer-service: feat optionally override address book by @Theodus in #818
  • indexer-agent,indexer-common,indexer-service: use sepolia instead of goerli for tests by @saihaj in #871
  • indexer-common: Add support for BSC, Base, Linea, Scroll by @fordN in #934
  • indexer-common: Upgrade @graphprotocol/cost-model by @fordN in #829
  • indexer-common: Avoid using createdAt field for pagination by @fordN in #914
  • indexer-common: Add more tests into tap.tests by @carlosvdr in #892
  • indexer-integration-tests: start integration test package by @dwerner in #891
  • indexer-service: Use consistent authorization header formats by @fordN in #896
  • indexer-service: Support setting rate limits and body size limits at startup by @fordN in #900
  • indexer-service: Increase size of attestation signer cache by @fordN in #906
  • indexer-service: Server integration tests by @fordN in #901
  • indexer-service: fix paginate allocation queries by @Theodus in #862
  • *: Make tapSubgraph to be an optional value by @carlosvdr in #904
  • *: bump versions by @dwerner in #938
  • *: Collect tap ravs by @carlosvdr in #869
  • docker: increase memory limit for node-js by @DaMandal0rian in #865
  • workflows: Fix formatting of Setup Python step in image build workflows by @fordN in #850

Doc and config updates

  • Add Optimism to support matrix by @fordN in #849
  • Release graph-node v0.34.0 to mainnet by @incrypto32 in #848
  • Release graph-node v0.35.0-rc.0 to testnet by @fordN in #872
  • Docs: updated feature support matrix with Graph Node v0.34.1 by @PedroMD in #855
  • docs: added base, bsc, scroll and linea to the feature support matrix by @PedroMD in #898
  • chore: update network subgraph deployment hashes by @juanmardefago in #897
  • fix: arbitrum-sepolia.md signer address by @aasseman in #884
  • Update feature support (ens, arweave, 0.35.x) by @azf20 in #886
  • Update hosted service subgraph endpoints in /docs & /docs/config-examples by @alex-pakalniskis in #909
  • Add missing addresses and resolve table formatting issues in network docs by @alex-pakalniskis in #924

New Contributors

Full Changelog: v0.21.2...v0.21.3

v0.21.2

19 Jan 17:23
Compare
Choose a tag to compare
v0.21.2 Pre-release
Pre-release

What's Changed

Changes and fixes

  • indexer-agent: Fix bug in stake usage summary by @fordN in #801
  • indexer-agent: Support subgraphs syncing sepolia and arbitrum-sepolia by @fordN in #819
  • indexer-agent: Improve robustness of DAI contract contract calls by @fordN in #825
  • indexer-agent: add tests for allocation decision consolidation by @tilacog in #767
  • indexer-agent: Improve batch action preparation by @fordN in #817
  • indexer-service: fix allocation monitor query by @tilacog in #808
  • indexer-service: Various robustness improvements by @fordN in #821
  • indexer-service: Improve validation of operator wallet by @fordN in #826
  • indexer-service: Add graph-node version endpoint from status api by @abarmat in #841
  • indexer-common: Reduce stringency of action validation when adding to queue by @fordN in #833

Docs and config updates

  • Release graph-node v0.33.0-rc.0 to testnet by @incrypto32 in #804
  • Release graph-node v0.33.0 to mainnet by @incrypto32 in #812
  • Update feature-support-matrix.md w/ Graph Node v0.33.0 as minimum ver… by @PedroMD in #810
  • docs: fix gateway url for arbitrum-one by @chriswessels in #795
  • docs/networks: Add network config docs for Sepolia and Arbitrum Sepolia by @fordN in #820
  • docs/networks: Arbitrum and Arbitrum Goerli update by @tomasztrzos in #823

Chores

New Contributors

Full Changelog: v0.20.23...v0.21.2

v0.20.23

11 Oct 15:00
Compare
Choose a tag to compare

For the complete list of issues resolved by this release, check the v0.20.23 Milestone.

v0.20.22

29 Aug 17:10
Compare
Choose a tag to compare

Fixed

  • Fixed bug causing the network subgraph to be removed after syncing.
  • Addressed minor Typescript lints regarding asynchronous function calls.

v0.20.21

24 Aug 19:57
Compare
Choose a tag to compare

Fixed

  • Add missing fields when parsing network specification from CLI options

Changed

  • Upgraded common-ts dependency to v2.0.3

v0.20.20

21 Aug 23:18
Compare
Choose a tag to compare

Adds the capacity for the Agent to interact with multiple protocol networks (blockchains that host The Graph Protocol) by running a single instance of the indexer-agent program.

Table of Contents

Multi-Network Mode

Multinetwork Mode can be enabled by setting the environment variable INDEXER_AGENT_MULTINETWORK_MODE
to "true".

While in multinetwork mode, the Indexer Agent will perform all of its usual routines, but for each
specified network.

In that mode, each protocol network is represented by one YAML file under the same directory, which can
be decalred in the command line argument --network-specifications-directory, which must be a path
the Indexer Agent can access during its startup.

Example Network Specification Files

Goerli

This example network specification YAML file represents all possible configuration fields and their
default values.

networkIdentifier: goerli  # could also be named "eipp155:5"

gateway:
  url: https://gateway.testnet.thegraph.com

indexerOptions:
  address: "0x391042eC4ae8ab799Efdfd82021d059a19c6ED86"
  mnemonic: "aunt what review ordinary initial rocket wheel enter private chef tree surface"
  url: http://localhost:7600
  allocationManagementMode: auto
  restakeRewards: true
  rebateClaimThreshold: 200
  rebateClaimBatchThreshold: 200
  rebateClaimMaxBatchSize: 100
  poiDisputeMonitoring: false
  poiDisputableEpochs: 1
  defaultAllocationAmount: 0.1
  voucherRedemptionThreshold: 200
  voucherRedemptionBatchThreshold: 2000
  voucherRedemptionMaxBatchSize: 100
  autoAllocationMinBatchSize: 1
  allocateOnNetworkSubgraph: false
  register: true

transactionMonitoring:
  gasPriceMax: 100
  gasIncreaseTimeout: 240 # in seconds
  gasIncreaseFactor: 1.2
  gasPriceMax: 100 # in gwei
  baseFeePerGasMax: 100 # in gwei
  maxTransactionAttempts: 0 # zero retries indefinitely

subgraphs:
  networkSubgraph:
    url: https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-goerli
    deployment: QmRFMZT2rmdo558S8GWPNYJ61qchSUTEMHirYnm4MRqHEP
  epochSubgraph:
    url: https://api.thegraph.com/subgraphs/name/graphprotocol/goerli-epoch-block-oracle

networkProvider:
  url: "<insert the URL of your Goerli JSON-RPC provider here>"

dai:
  # Mind that the cost model feature is only enabled for Ethereum Mainnet (see notes below)
  contractAddress: "0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844"
  inject: true

Arbitrum Goerli

In turn, this YAML network specification file represents just the required fields.

networkIdentifier: arbitrum-goerli # could also be named "eipp155:421613"

gateway:
  url: https://gateway-testnet-arbitrum.network.thegraph.com

indexerOptions:
  address: "0x79EB6E112a00A4b99B8ABf0B983159d54A8be316"
  mnemonic: "juice zebra sister column fit praise behind trust merit slab place general"
  url: http://localhost:7600
  allocationManagementMode: oversight

subgraphs:
  networkSubgraph:
    url: https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-arbitrum-goerli
    deployment: QmW8YxdkQjFb7wHMDo9u4DodLga4YHdByfKsBxCCcUx6cQ
  epochSubgraph:
    url: https://api.thegraph.com/subgraphs/name/graphprotocol/arb-goerli-epoch-block-oracle

networkProvider:
  url: "<insert the URL of your Goerli JSON-RPC provider here>"

API Changes

The Indexer Agent GraphQL API was updated to accept (and in some cases require) a protocolNetwork
parameter to determine which network should be used for queries or mutations.

Likewise,the Indexer CLI was updated to accept the --network option as the context for most of its
commands.

GraphQL API Changes

# --------------------------------------------------------------------------------
# * inputs
# --------------------------------------------------------------------------------
input AllocationFilter {
  protocolNetwork: String # new optional filtering parameter
}

input ActionInput {
  protocolNetwork: String! # new required parameter
}

input ActionFilter {
  protocolNetwork: String # new optional filtering parameter
}

# New dedicated identifier type
input POIDisputeIdentifier {
  allocationID: String!
  protocolNetwork: String!
}

input POIDisputeInput {
  protocolNetwork: String! # new required parameter
}

input IndexingRuleInput {
  protocolNetwork: String! # new required parameter
}

# New dedicated identifier type
input IndexingRuleIdentifier {
  identifier: String!
  protocolNetwork: String!
}

# --------------------------------------------------------------------------------
# * types
# --------------------------------------------------------------------------------
type Allocation {
  protocolNetwork: String! # new non-nullable field
}

type CreateAllocationResult {
  protocolNetwork: String! # new non-nullable field
}

type CloseAllocationResult {
  protocolNetwork: String! # new non-nullable field
}

type ReallocateAllocationResult {
  protocolNetwork: String! # new non-nullable field
}

type Action {
  protocolNetwork: String! # new non-nullable field
}

type ActionResult {
  protocolNetwork: String! # new non-nullable field
}

type POIDispute {
  protocolNetwork: String! # new non-nullable field
}

type IndexingRule {
  protocolNetwork: String! # new non-nullable field
}

type IndexerRegistration {
  protocolNetwork: String # new non-nullable field
}

type IndexerEndpoint {
  protocolNetwork: String! # new optional filtering parameter
}

#--------------------------------------------------------------------------------
# * enums
# --------------------------------------------------------------------------------
enum ActionParams {
  protocolNetwork # new enum variant
}

# --------------------------------------------------------------------------------
# * queries
# --------------------------------------------------------------------------------

type Query {
  indexingRule(
    identifier: IndexingRuleIdentifier! # parameter type changed from String!
  ): IndexingRule

  indexingRules(
    protocolNetwork: String # new optional filtering parameter
  ): [IndexingRule!]!

  indexerRegistration(
    protocolNetwork: String! # new required parameter
  ): IndexerRegistration!

  indexerAllocations(
    protocolNetwork: String! # new required parameter
  ): [IndexerAllocation]!

  indexerEndpoints(
    protocolNetwork: String! # new required parameter
  ): [IndexerEndpoints!]!

  dispute(
    identifier: POIDisputeIdentifier! # parameter type changed from String!
  ): POIDispute

  disputes(
    protocolNetwork: String # new optional filtering parameter
  ): [POIDispute]!

  disputesClosedAfter(
    protocolNetwork: String # new optional filtering parameter
  ): [POIDispute]!
}

# --------------------------------------------------------------------------------
# * mutations
# --------------------------------------------------------------------------------
type Mutation {
  deleteIndexingRule(
    identifier: IndexingRuleIdentifier! # parameter type changed from String!
  ): Boolean!
  deleteIndexingRules(
    identifiers: [IndexingRuleIdentifier!]! # parameter changed from [String!]!
  ): Boolean!

  deleteDisputes(
    identifiers: [POIDisputeIdentifier!]! # parameter changed from [String!]!
  ): Int!

  createAllocation(
    protocolNetwork: String # new required parameter
  ): CreateAllocationResult!
  closeAllocation(
    protocolNetwork: String! # new required parameter
  ): CloseAllocationResult!
  reallocateAllocation(
    protocolNetwork: String! # new required parameter
  ): ReallocateAllocationResult!
}

Indexer CLI command changes

Most indexer-cli commands now accept or require a network argument, to bring the protocol network
into the command's context

  1. Commands that now accept the --network option to filter its results

    • indexer actions get
    • indexer allocations get
    • indexer disputes get
    • indexer rules get
  2. Commands that now require the --network option

    • indexer actions queue
    • indexer rules clear
    • indexer rules delete
    • indexer rules maybe
    • indexer rules offchain
    • indexer rules set
    • indexer rules start
    • indexer rules stop
    • indexer status
  3. Commands that now require a network positional argument

    • indexer allocations close
    • indexer allocations create
    • indexer allocations reallocate

The /network endopoint

The /network endpoint exposed by the Agent now requires an additional path segment to disambiguate
which protocol network it should target.

Assuming the Agent is configured with those networks, all the paths below are valid:

  • /network/mainnet
  • /network/eip155:1
  • /network/arbitrum-one
  • /network/eip155:42161
  • /network/goerli
  • /network/eip155:5
  • /network/arbitrum-goerli
  • /network/eip155:421613

Database Migrations

A new database migration will create a...

Read more

v0.20.18

11 Aug 19:18
Compare
Choose a tag to compare
v0.20.18 Pre-release
Pre-release

L2 Support for Indexer Agent

Adds the capacity for the Agent to interact with multiple protocol networks (blockchains that host The Graph Protocol) by running a single instance of the indexer-agent program.

Table of Contents

Multi-Network Mode

Multinetwork Mode can be enabled by setting the environment variable INDEXER_AGENT_MULTINETWORK_MODE
to "true".

While in multinetwork mode, the Indexer Agent will perform all of its usual routines, but for each
specified network.

In that mode, each protocol network is represented by one YAML file under the same directory, which can
be decalred in the command line argument --network-specifications-directory, which must be a path
the Indexer Agent can access during its startup.

Example Network Specification Files

Goerli

This example network specification YAML file represents all possible configuration fields and their
default values.

networkIdentifier: goerli  # could also be named "eipp155:5"

gateway:
  url: https://gateway.testnet.thegraph.com

indexerOptions:
  address: "0x391042eC4ae8ab799Efdfd82021d059a19c6ED86"
  mnemonic: "aunt what review ordinary initial rocket wheel enter private chef tree surface"
  url: http://localhost:7600
  allocationManagementMode: auto
  restakeRewards: true
  rebateClaimThreshold: 200
  rebateClaimBatchThreshold: 200
  rebateClaimMaxBatchSize: 100
  poiDisputeMonitoring: false
  poiDisputableEpochs: 1
  defaultAllocationAmount: 0.1
  voucherRedemptionThreshold: 200
  voucherRedemptionBatchThreshold: 2000
  voucherRedemptionMaxBatchSize: 100
  autoAllocationMinBatchSize: 1
  allocateOnNetworkSubgraph: false
  register: true

transactionMonitoring:
  gasPriceMax: 100
  gasIncreaseTimeout: 240 # in seconds
  gasIncreaseFactor: 1.2
  gasPriceMax: 100 # in gwei
  baseFeePerGasMax: 100 # in gwei
  maxTransactionAttempts: 0 # zero retries indefinitely

subgraphs:
  networkSubgraph:
    url: https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-goerli
    deployment: QmRFMZT2rmdo558S8GWPNYJ61qchSUTEMHirYnm4MRqHEP
  epochSubgraph:
    url: https://api.thegraph.com/subgraphs/name/graphprotocol/goerli-epoch-block-oracle

networkProvider:
  url: "<insert the URL of your Goerli JSON-RPC provider here>"

dai:
  # Mind that the cost model feature is only enabled for Ethereum Mainnet (see notes below)
  contractAddress: "0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844"
  inject: true

Arbitrum Goerli

In turn, this YAML network specification file represents just the required fields.

networkIdentifier: arbitrum-goerli # could also be named "eipp155:421613"

gateway:
  url: https://gateway-testnet-arbitrum.network.thegraph.com

indexerOptions:
  address: "0x79EB6E112a00A4b99B8ABf0B983159d54A8be316"
  mnemonic: "juice zebra sister column fit praise behind trust merit slab place general"
  url: http://localhost:7600
  allocationManagementMode: oversight

subgraphs:
  networkSubgraph:
    url: https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-arbitrum-goerli
    deployment: QmW8YxdkQjFb7wHMDo9u4DodLga4YHdByfKsBxCCcUx6cQ
  epochSubgraph:
    url: https://api.thegraph.com/subgraphs/name/graphprotocol/arb-goerli-epoch-block-oracle

networkProvider:
  url: "<insert the URL of your Goerli JSON-RPC provider here>"

API Changes

The Indexer Agent GraphQL API was updated to accept (and in some cases require) a protocolNetwork
parameter to determine which network should be used for queries or mutations.

Likewise,the Indexer CLI was updated to accept the --network option as the context for most of its
commands.

GraphQL API Changes

# --------------------------------------------------------------------------------
# * inputs
# --------------------------------------------------------------------------------
input AllocationFilter {
  protocolNetwork: String # new optional filtering parameter
}

input ActionInput {
  protocolNetwork: String! # new required parameter
}

input ActionFilter {
  protocolNetwork: String # new optional filtering parameter
}

# New dedicated identifier type
input POIDisputeIdentifier {
  allocationID: String!
  protocolNetwork: String!
}

input POIDisputeInput {
  protocolNetwork: String! # new required parameter
}

input IndexingRuleInput {
  protocolNetwork: String! # new required parameter
}

# New dedicated identifier type
input IndexingRuleIdentifier {
  identifier: String!
  protocolNetwork: String!
}

# --------------------------------------------------------------------------------
# * types
# --------------------------------------------------------------------------------
type Allocation {
  protocolNetwork: String! # new non-nullable field
}

type CreateAllocationResult {
  protocolNetwork: String! # new non-nullable field
}

type CloseAllocationResult {
  protocolNetwork: String! # new non-nullable field
}

type ReallocateAllocationResult {
  protocolNetwork: String! # new non-nullable field
}

type Action {
  protocolNetwork: String! # new non-nullable field
}

type ActionResult {
  protocolNetwork: String! # new non-nullable field
}

type POIDispute {
  protocolNetwork: String! # new non-nullable field
}

type IndexingRule {
  protocolNetwork: String! # new non-nullable field
}

type IndexerRegistration {
  protocolNetwork: String # new non-nullable field
}

type IndexerEndpoint {
  protocolNetwork: String! # new optional filtering parameter
}

#--------------------------------------------------------------------------------
# * enums
# --------------------------------------------------------------------------------
enum ActionParams {
  protocolNetwork # new enum variant
}

# --------------------------------------------------------------------------------
# * queries
# --------------------------------------------------------------------------------

type Query {
  indexingRule(
    identifier: IndexingRuleIdentifier! # parameter type changed from String!
  ): IndexingRule

  indexingRules(
    protocolNetwork: String # new optional filtering parameter
  ): [IndexingRule!]!

  indexerRegistration(
    protocolNetwork: String! # new required parameter
  ): IndexerRegistration!

  indexerAllocations(
    protocolNetwork: String! # new required parameter
  ): [IndexerAllocation]!

  indexerEndpoints(
    protocolNetwork: String! # new required parameter
  ): [IndexerEndpoints!]!

  dispute(
    identifier: POIDisputeIdentifier! # parameter type changed from String!
  ): POIDispute

  disputes(
    protocolNetwork: String # new optional filtering parameter
  ): [POIDispute]!

  disputesClosedAfter(
    protocolNetwork: String # new optional filtering parameter
  ): [POIDispute]!
}

# --------------------------------------------------------------------------------
# * mutations
# --------------------------------------------------------------------------------
type Mutation {
  deleteIndexingRule(
    identifier: IndexingRuleIdentifier! # parameter type changed from String!
  ): Boolean!
  deleteIndexingRules(
    identifiers: [IndexingRuleIdentifier!]! # parameter changed from [String!]!
  ): Boolean!

  deleteDisputes(
    identifiers: [POIDisputeIdentifier!]! # parameter changed from [String!]!
  ): Int!

  createAllocation(
    protocolNetwork: String # new required parameter
  ): CreateAllocationResult!
  closeAllocation(
    protocolNetwork: String! # new required parameter
  ): CloseAllocationResult!
  reallocateAllocation(
    protocolNetwork: String! # new required parameter
  ): ReallocateAllocationResult!
}

Indexer CLI command changes

Most indexer-cli commands now accept or require a network argument, to bring the protocol network
into the command's context

  1. Commands that now accept the --network option to filter its results

    • indexer actions get
    • indexer allocations get
    • indexer disputes get
    • indexer rules get
  2. Commands that now require the --network option

    • indexer actions queue
    • indexer rules clear
    • indexer rules delete
    • indexer rules maybe
    • indexer rules offchain
    • indexer rules set
    • indexer rules start
    • indexer rules stop
    • indexer status
  3. Commands that now require a network positional argument

    • indexer allocations close
    • indexer allocations create
    • indexer allocations reallocate

The /network endopoint

The /network endpoint exposed by the Agent now requires an additional path segment to disambiguate
which protocol network it should target.

Assuming the Agent is configured with those networks, all the paths below are valid:

  • /network/mainnet
  • /network/eip155:1
  • /network/arbitrum-one
  • /network/eip155:42161
  • /network/goerli
  • /network/eip155:5
  • /network/arbitrum-goerli
  • /network/eip155:421613

Database Migrations

A ne...

Read more

v0.20.16

19 Apr 15:45
Compare
Choose a tag to compare

Table of Contents

  1. Intro
  2. Network
  3. Introducing the Action Queue
    1. New Allocation Management modes
      1. Manual Mode
      2. Oversight Mode
    2. Batching Options in auto Mode
    3. CLI improvements
    4. Safety improvements
  4. Rules
  5. Cost model
  6. Vouchers and Receipts
  7. Configuration
  8. Subgraph Deployments Handling
  9. Observability & Monitoring
  10. Interfacing

Intro

The v0.20.3 mainnet release includes a wide range of new features and a significant overhaul of the internal code structure.

It's the first mainnet release since v0.18.6.

Check out the full changelog for the complete list of changes.

The following packages are part of this release:

  • indexer-agent v0.20.13
  • indexer-service v0.20.13
  • indexer-cli v0.20.13
  • indexer-common v0.20.13
  • indexer-native v0.20.13

Network

The latest release includes several Network updates:

Thanks to the Epoch Subgraph, indexers can now connect to any protocol network and claim rewards for indexing sugraphs form the new supported networks:

  • Gnosis (eip155:100)
  • Avalanche (eip155:43114)
  • Celo (eip155:42220)
  • Arbitrum One (eip155:42161)

Our testnet is also live on Goerli, where the following networks are also available for indexing:

  • Goerli (eip155:5)
  • Fantom (eip155:250)
  • Polygon (eip155:137)
  • Optimism (eip155:10)

We are also on L2! Arbitrum-One and Arbitrum-Goerli (testnet) are now live protocol chains.

For more details on the Networking improvements, check out the relevant PRs:

  • Integrate Epoch Block Oracle by @hopeyen in #479
  • Support connecting to any protocol network by @fordN in #513
  • Add support L2 protocol chains (i.e Arbitrum-Goerli and Arbitrum-One) by using EpochSubgraph to fetch block numbers instead of EpochManager by @tilacog in #573
  • Add support for Hardhat, Avalanche, Polygon, Celo, & Optimism to chain alias lookups by @fordN in #577
  • Add option to allocate on network subgraph by @Theodus in #339
  • Allow 0 staked allocations by @hopeyen in #471
  • Remove max signal check, towards deprecating max signal by @fordN in #482

Introducing the Action Queue

The Action Queue is a new sub-component responsible for managing a set of Actions (allocate, unallocate, and reallocate) for an Indexer in a predictable and efficient way. Those Actions can be generated both by the Indexer's rules and by direct input, and are sent to a dedicated worker process to be executed.

A new startup parameter, --allocation-management, has been introduced to let Indexers choose betweeen different allocation management modes:

  • The auto mode, which is similar to the agent's behavior in the past, continuously monitors the network and uses the indexing rules to determine and execute allocation management actions. Actions are added to the queue with the approved status.
  • In oversight mode, the indexer-agent runs its reconciliation loop to make allocation decisions and propose new Actions by adding them to the Action Queue with a status of queued. These actions will then require explicit approval before they will be executed.
  • In manual allocation management mode, the agent will not take any allocation management Actions on its own (meaning it doesn't use the Action Queue at all), and indexers can take all allocation management actions manually using the GraphQL or indexer-cli interfaces.

In summary:

Allocation Mode Propose Actions? Action initial state
auto Yes approved
oversight Yes queued
manual No (manual mode doesn't use the Action Queue)

New Allocation Management modes

Manual Mode

Indexers can now manage allocations manually via the GraphQL interface and indexer-cli, allowing indexers and external tools to have more granular and direct control over allocation strategy.

This feature allows for direct requests to be sent to create, close, or reallocate allocations, which will send a transaction to the Protocol Contracts and update the indexing rules at the same time. For example: when closing an allocation manually the agent will update existing rules for that deployment to be decisionBasis = offchain so the agent will not attempt to reopen that allocation.

For more, check out the original PRs:

Oversight Mode

The oversight mode is very similar to the auto mode, with the distinction of not auto-approving the Actions proposed in the reconciliation loop.

Here's a quick summary of how Actions flow through the Action Queue in oversight mode:

  1. A user initiates an action through either a manual interaction or via 3rd party tools integrated with the indexer-management server.
  2. The action is added to the Action Queue with the queued status.
  3. In the meantime, the indexer-agent runs its reconciliation loop to make allocation decisions and propose actions to the Action Queue, also with a status of queued.
  4. An approver (a human or automated system) reviews the proposed actions in the Action Queue and approves them for execution by changing their status to approved.
  5. The action-queue worker, which runs as a separate process, polls the Action Queue for items with a status of approved and executes them on-chain.
  6. The action status is updated to success in the Action Queue, and the process is complete.
    (Actions can also be finalized with failed and canceled status.)

Batching Options in auto Mode

With auto management mode, the agent automatically proposes and approves Actions for the worker to execute. But to give indexers more control over how these Actions are batched in transactions for execution, we've added two optional startup parameters:

  • --auto-min-batch-size: Specify a minimum batch size to wait for before singing a transaction with the batched Actions.
  • --auto-max-wait-time: Set a maximum time to wait after the first approved Action before executing the batched Actions transaction.

These parameters are particularly useful for indexers who want to save on gas costs by allowing the agent to perform automatic batched transactions, while still having the flexibility to modify actions if needed.

For more, check out the original PR:

CLI improvements

New Action query commands are available to inspect and manage the Action Queue using the indexer-cli:

  • Action commands:
  • Actions Query:
    • Ordering Actions #457
    • Display specific fields with --fields option #547

Safety improvements

  • Avoid recreating recently failed Actions #506
  • Implement a stake feasibility check before executing batched Actions transactions #579

Rules

Indexing rues can now be:

  • defined by subgraph ID (rather than deployment ID) #329
  • automatically renewed when the allocation expires (this is now the default behavior) #366
  • set to not skip allocations when the pre...
Read more

v0.20.12

20 Feb 07:46
Compare
Choose a tag to compare
v0.20.12 Pre-release
Pre-release

What's Changed

  • indexer-agent: remove input allocation-exchange-contract by @hopeyen in #598
  • indexer-common: network pauses exit message by @hopeyen in #472
  • indexer-agent: Remove networkCurrentEpoch() from critical path by @fordN in #602
  • common: split checks and refine error messages when querying the EBO by @tilacog in #601
  • indexer-agent: Fix bug in startup argument parser by @fordN in #603
  • common: refactor epoch sync check when resolving current epoch block by @tilacog in #604
  • indexer-common: Add misssing axios dependency by @tilacog in #605
  • indexer-agent,-common: query fee metrics for Prometheus by @hopeyen in #597
  • indexer-cli,-common: indexing rules safety by @hopeyen in #542

Full Changelog: v0.20.11...v0.20.12

v0.20.11

01 Feb 22:26
Compare
Choose a tag to compare
v0.20.11 Pre-release
Pre-release

What's Changed

  • indexer-common: Implement stake feasibility check by @tilacog in #579
  • github actions: Add node v17 and v18 support, remove v13 by @fordN in #578
  • indexer-service: Add 'yaml' dependency by @fordN in #587
  • Update publish build binaries action strategies matrix by @fordN in #588
  • Use configured provider for resolving protocol chain blocks by @tilacog in #591
  • Clean and validate Action.amount by @tilacog in #590
  • Remove unused code by @tilacog in #592

Full Changelog: v0.20.9...v0.20.11