Skip to main content

Filtering JSON Arguments

Starting October 2025, we support filtering of JSON arguments in Solana instructions. This feature allows you to query blockchain data based on the parsed argument values within program instructions.

Overview

JSON filtering enables you to filter Solana instructions by the values contained in their program arguments. This is particularly useful when you need to:

  • Find specific method calls with particular parameter values
  • Track authority changes on token accounts
  • Monitor transactions with specific argument patterns
  • Filter instructions based on complex argument conditions

Example: Filtering setAuthority Instructions

The following query demonstrates how to filter setAuthority method calls where the authorityType argument is either "0" or "1":

{
Solana(network: solana) {
Instructions(
where: {
Instruction: {
Program: {
Method: {is: "setAuthority"}
Arguments: {
includes: {
Name: {is: "authorityType"}
Value: {Json: {in: ["0", "1"]}}
}
}
}
}
Transaction: {Result: {Success: true}}
}
limit: {count: 10}
orderBy: {descending: Block_Slot}
) {
Instruction {
Program {
Method
Arguments {
Name
Value {
... on Solana_ABI_Integer_Value_Arg {
integer
}
... on Solana_ABI_String_Value_Arg {
string
}
... on Solana_ABI_Address_Value_Arg {
address
}
... on Solana_ABI_Json_Value_Arg {
json
}
... on Solana_ABI_Float_Value_Arg {
float
}
... on Solana_ABI_Boolean_Value_Arg {
bool
}
... on Solana_ABI_Bytes_Value_Arg {
hex
}
... on Solana_ABI_BigInt_Value_Arg {
bigInteger
}
}
}
}
Accounts {
Address
}
}
Transaction {
Signature
}
}
}
}

Query Breakdown

Filtering Conditions:

  • Method: {is: "setAuthority"} - Only returns instructions calling the setAuthority method
  • Arguments: {includes: {...}} - Filters arguments array to include entries matching the specified criteria
  • Name: {is: "authorityType"} - Looks for an argument named "authorityType"
  • Value: {Json: {in: ["0", "1"]}} - Checks if the JSON value is either "0" or "1"
  • Transaction: {Result: {Success: true}} - Only includes successful transactions

Return Fields:

  • Method - The program method name
  • Arguments - Array of argument name-value pairs
  • Accounts - Array of account addresses involved in the instruction
  • Transaction.Signature - The transaction signature

Filtering Options

JSON Value Operators

When filtering JSON arguments, you can use various operators:

  • in: [value1, value2, ...] - Matches if the JSON value is in the provided array
  • is: "value" - Exact match
  • notIn: [value1, value2, ...] - Matches if the JSON value is not in the provided array

Argument Filtering

The includes operator checks if the arguments array contains an entry matching all specified conditions:

Arguments: {
includes: {
Name: {is: "parameterName"}
Value: {Json: {in: ["value1", "value2"]}}
}
}

Use Cases

1. Track Authority Revocations

Find all instances where token authorities are being revoked (set to null):

Arguments: {
includes: {
Name: {is: "newAuthority"}
Value: {Json: {is: "null"}}
}
}

2. Monitor Specific Authority Types

Filter by different authority types:

  • authorityType: "0" - Mint tokens authority
  • authorityType: "1" - Freeze account authority
  • authorityType: "2" - Account owner authority
  • authorityType: "3" - Close account authority

3. Combine Multiple Conditions

You can combine multiple argument filters to create complex queries:

Arguments: {
includes: [
{Name: {is: "authorityType"}, Value: {Json: {is: "0"}}}
{Name: {is: "newAuthority"}, Value: {Json: {is: "null"}}}
]
}