COUNT_INSTRUCTIONS
Aggregate and count instructions with a powerful filter built on top of Elasticsearch
Overview
This method allows you to aggregate and count instructions with a robust filter object. There are many types of filters you can apply and you can find information regarding those in the Filters section of the docs. The endpoint example here shows off one of the many filters.
Aggregate and count instructions with a powerful filter built on top of Elasticsearch
the API key
should be set to 'COUNT_INSTRUCTIONS' This is the type of query you want to perform.
COUNT_INSTRUCTIONS
POST /query/solana HTTP/1.1
Host: mainnet.carpool.dev
x-api-key: text
Content-Type: application/json
Accept: */*
Content-Length: 386
"{\n \"type\": \"COUNT_INSTRUCTIONS\",\n \"query\": {\n \"programId\": \"CYPH3o83JX6jY6NkbproSpdmQ5VWJtxjfJ5P8veyYVu3\",\n \"filter\": {\n \"type\": \"INSTRUCTION_ERROR_CODE\",\n \"errorCode\": 7\n },\n \"timeRange\": {\n \"before\": \"\",\n \"after\": \"\"\n },\n \"failures\": true\n }\n}"
Successful Response
{
"response": {
"value": 4092
}
}
Filters
As mentioned above, the api definition here illustrates one of Carpool's many filter types. All queries that accept a filter object in the POST body can make use of any of the potential filters. Please see the Instruction Filters section of the documentation to better understand how they are implemented for instruction queries.
πInstruction FiltersExample - Basic
Program - Cypher Protocol
Description - Count all failed instructions that have an error code of 7.
Javascript
var myHeaders = new Headers();
myHeaders.append("x-api-key", "<API_KEY>");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
"type": "COUNT_INSTRUCTIONS",
"query": {
"programId": "CYPH3o83JX6jY6NkbproSpdmQ5VWJtxjfJ5P8veyYVu3",
"filter": {
"type": "INSTRUCTION_ERROR_CODE",
"errorCode": 7
},
"failures": true
}
});
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("https://mainnet.carpool.dev/query/solana", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
cURL
curl --location 'https://mainnet.carpool.dev/query/solana' \
--header 'x-api-key: <API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"type": "COUNT_INSTRUCTIONS",
"query": {
"programId": "CYPH3o83JX6jY6NkbproSpdmQ5VWJtxjfJ5P8veyYVu3",
"filter": {
"type": "INSTRUCTION_ERROR_CODE",
"errorCode": 7
},
"failures": true
}
}'
Example - Advanced
Program - Candy Machine
Description - Count all instructions that satisfy both filter conditions: The instructions must have an argument at path data.creators.address and the percentage share should be set to 100.
Javascript
var myHeaders = new Headers();
myHeaders.append("x-api-key", "<API_KEY>");
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({
"type": "COUNT_INSTRUCTIONS",
"query": {
"programId": "CndyV3LdqHUfDLmE5naZjVN8rBZz4tqhdefbAnjHG3JR",
"filter": {
"and": [
{
"type": "INSTRUCTION_ARG_EXISTS",
"path": "data.creators.address"
},
{
"type": "INSTRUCTION_ARG_NUMERIC",
"path": "data.creators.percentageShare",
"range": {
"eq": 100
}
}
]
},
"timeRange": {
"before": "2023-07-12T22:53:09+0000",
"after": "2023-07-11T22:53:09+0000"
},
"failures": false
}
});
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("https://mainnet.carpool.dev/query/solana", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
cURL
curl --location 'https://mainnet.carpool.dev/query/solana' \
--header 'x-api-key: <API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"type": "COUNT_INSTRUCTIONS",
"query": {
"programId": "CndyV3LdqHUfDLmE5naZjVN8rBZz4tqhdefbAnjHG3JR",
"filter": {
"and": [
{
"type": "INSTRUCTION_ARG_EXISTS",
"path": "data.creators.address"
},
{
"type": "INSTRUCTION_ARG_NUMERIC",
"path": "data.creators.percentageShare",
"range": {
"eq": 100
}
}
]
},
"timeRange": {
"before": "2023-07-12T22:53:09+0000",
"after": "2023-07-11T22:53:09+0000"
},
"failures": false
}
}'
Last updated