🎛️Account Filters

All filter types that can be applied to account query 'filter' objects

Overview

Several of Carpool's account queries accept a filter object in the POST body. This is an abstraction on top of Elasticsearch and is made to help users perform powerful aggregations and searches. Below you can find all possible filters for account queries

Account Filters

💰 ACCOUNT_LAMPORTS

Description:

Filter for accounts within a specified lamport range or value

Schema fields:

  • type*

  • range*

Schema

"filter": {
    "type": "ACCOUNT_LAMPORTS",
    "range": NumericRange
}

NumericRange type

// Either an equality check, or GTE/LTE range, one of which must be set.
export type NumericRange = XOR<XOR<{
  gte: number;
  lte?: number;
}, {
  gte?: number;
  lte: number;
}>, { eq: number }>;

Example

"filter": {
    "type": "ACCOUNT_LAMPORTS",
    "range": {
        "gte": 1000000
    }
}
🎰 ACCOUNT_SLOTS

Description:

Filter for accounts within a specified slot range or value

Schema fields:

  • type*

  • range*

Schema

"filter": {
    "type": "ACCOUNT_SLOTS",
    "range": NumericRange
}

NumericRange type

// Either an equality check, or GTE/LTE range, one of which must be set.
export type NumericRange = XOR<XOR<{
  gte: number;
  lte?: number;
}, {
  gte?: number;
  lte: number;
}>, { eq: number }>;

Example

"filter": {
    "type": "ACCOUNT_SLOTS",
    "range": {
        "gte": 1000000
    }
}
1️⃣ ACCOUNT_DATA_NUMERIC

Description:

Filter for accounts with specific number ranges or values present in the data object

Schema fields:

  • type*

  • path*

  • range*

Schema

"filter": {
    "type": "ACCOUNT_DATA_NUMERIC",
    "path": "string" // Dot-delimited
    "range": NumericRange
}

NumericRange type

// Either an equality check, or GTE/LTE range, one of which must be set.
export type NumericRange = XOR<XOR<{
  gte: number;
  lte?: number;
}, {
  gte?: number;
  lte: number;
}>, { eq: number }>;

Example

"filter": {
    "type": "ACCOUNT_DATA_NUMERIC",
    "path": "data.creators.percentageShare",
    "range": {
        "eq": 100
    }
}
💭 ACCOUNT_DATA_KEYWORD

Description:

Filter for accounts with specific keywords present in the data object

Schema fields:

  • type*

  • path*

  • value*

Schema

"filter": {
    "type": "ACCOUNT_DATA_KEYWORD",
    "path": "string", // Dot-delimited for nested fields
    "value": "string"
}

Example

"filter": {
    "type": "ACCOUNT_DATA_KEYWORD",
    "path": "authority",
    "value": "BFB7td8D6f2qvg3cYgLmKSo75GcBFvn69JyjnNRyZuJb"
}
✅ ACCOUNT_DATA_EXISTS

Description:

Search for accounts where a specific key is present in the data

Schema fields:

  • type*

  • path*

Schema

"filter": {
    "type": "ACCOUNT_DATA_EXISTS",
    "path": "string" // Dot-delimited for nested fields
}

Example

"filter": {
    "type": "ACCOUNT_DATA_EXISTS",
    "path": "data.configLineSettings.nameLength"
}

Combining Filters

It is important to note that you can also combine any of the above filters within a single query. You can return results based on an AND or OR condition.

AND

Schema

"filter": {
    "and": [
        {
            "type": "FILTER_TYPE",
            ...
        },
        {
            "type": "FILTER_TYPE",
            ...
        },
        ...
    ]
}

Example

"filter": {
    "and": [
        {
            "type": "ACCOUNT_DATA_EXISTS",
            "path": "data.configLineSettings.nameLength"
        },
        {
            "type": "ACCOUNT_SLOTS",
            "path": "data.creators.percentageShare",
            "range": {
                "gte": 10000000
            }
        }
    ]
}

OR

Schema

"filter": {
    "or": [
        {
            "type": "FILTER_TYPE",
            ...
        },
        {
            "type": "FILTER_TYPE",
            ...
        },
        ...
    ]
}

Example

"filter": {
    "or": [
        {
            "type": "ACCOUNT_DATA_EXISTS",
            "path": "data.configLineSettings.nameLength"
        },
        {
            "type": "ACCOUNT_SLOTS",
            "path": "data.creators.percentageShare",
            "range": {
                "gte": 10000000
            }
        }
    ]
}

Negating Filters

You can also negate filters if you'd like to look for all accounts that do not match the filter criteria. To negate, simply add "negate": true to the top level of the filter.

Example

"filter": {
    "type": "ACCOUNT_DATA_EXISTS",
    "path": "data.configLineSettings.nameLength",
    "negate": true
}

Last updated