GraphQL#
GraphQL queries allow flexible data fetching, reducing over-fetching and under-fetching. gql.ergoplatform.com is a GraphQL server on top of Ergo Platform's explorer database schema.
Instances#
Public community/partner-maintained explorer instances with GraphQL support:
Testnet Instances#
Resources#
Examples#
Play around with Apollo Studio on the GraphQL instance to explore the schema and make queries easily.
Here are some query categories based on the schema:
- Fetching Box Details
- Fetching Multiple Boxes with Specific Conditions
- Fetching Specific Tokens
- Fetching Tokens Associated with a Box
- Fetching Inputs by Transaction or Box ID
- Fetching Transactions with Specific Conditions
- Fetching Data Inputs by Transaction or Box ID
- Fetching Block Headers by Height or Header ID
- Fetching Addresses with Balance and Transaction Count
- Fetching the State of the Mempool
- Fetching Blocks by Height or Header ID
- Fetching the Current State of the Blockchain
- Fetching Information about the Blockchain
- Fetching the Balance for a List of Addresses
- Fetching Transactions for Specific Addresses
- Fetching Box Details with Assets
- Fetching Unconfirmed Transactions from the Mempool
- Fetching Unconfirmed Boxes from the Mempool
- Fetching Unconfirmed Inputs from the Mempool
- Fetching Unconfirmed Addresses from the Mempool
Let's start with basic queries and gradually move to more complex ones.
Fetching Box Details with Assets#
Query to fetch details about a particular box including its associated assets:
query {
boxes(boxId: "your_box_id") {
boxId
transactionId
value
address
assets {
tokenId
amount
}
}
}
Fetching Transactions for Specific Addresses#
Query to fetch transactions associated with a list of addresses:
query {
transactions(addresses: ["address1", "address2"]) {
transactionId
inclusionHeight
timestamp
}
}
Fetching Balance for a List of Addresses#
Query to fetch the balance for a list of addresses:
query {
addresses(addresses: ["address1", "address2"]) {
address
balance {
nanoErgs
assets(tokenId: "your_token_id") {
amount
tokenId
}
}
}
}
Fetching Details of Specific Tokens#
Query to fetch details of specific tokens:
query {
tokens(tokenIds: ["token_id1", "token_id2"]) {
tokenId
boxId
name
description
}
}
Fetching State of the Blockchain#
Query to fetch the current state of the blockchain:
query {
state {
blockId
height
boxGlobalIndex
transactionGlobalIndex
network
difficulty
}
}
Fetching Box Details with Assets#
Query to fetch details about a particular box including its associated assets:
query {
boxes(boxId: "your_box_id") {
boxId
transactionId
value
address
assets {
tokenId
amount
}
}
}
Transactions#
Query to fetch the first 10 transactions in the database:
query {
transactions(take: 10) {
transactionId
size
inclusionHeight
timestamp
inputs {
boxId
transactionId
}
outputs {
boxId
value
}
}
}
Advanced Query Example 1#
Query to fetch a list of boxes created between specific block heights:
query {
boxes(minHeight
: 1000, maxHeight: 2000) {
boxId
creationHeight
value
address
}
}
Advanced Query Example 2#
Query to fetch the first 5 transactions and the boxes linked to them:
query {
transactions(take: 5) {
transactionId
timestamp
outputs {
boxId
value
assets {
tokenId
amount
}
}
}
}
In this query, we're asking for the first 5 transactions (take: 5). For each transaction, we're requesting transactionId, timestamp, and the outputs (which are boxes). For each box in outputs, we also want to fetch the assets related to that box, including the tokenId and amount.
Mutation Example#
Mutations are used to modify data. Let's submit a transaction using a mutation:
mutation {
submitTransaction(signedTransaction: {
id: "your_transaction_id",
inputs: [
{
boxId: "your_box_id",
spendingProof: {
proofBytes: "your_proof_bytes",
extension: {}
}
}
],
dataInputs: [
{
boxId: "your_data_input_box_id"
}
],
outputs: [
{
value: "1000",
ergoTree: "your_ergo_tree",
creationHeight: 1000,
assets: [
{
tokenId: "your_token_id",
amount: "100"
}
],
additionalRegisters: {},
index: 0
}
],
size: 100
})
}
In this mutation, we're submitting a transaction with a single input, data input, and output. For each of these, we fill in the necessary data according to the SignedTransaction input type in the schema.