Skip to content

GQL

GQL simplifies the Arwave GraphQL operations to query blocks and transactions.

Instantiate

You can instantiate the GQL class with an endpoint url.

import { GQL } from "wao"
const gql = new GQL({ url: "https://arweave.net/graphql" }) // the default url

AR class auto-instantiates GQL internally.

import { AO } from "wao"
const ao = new AO()
const gql = ao.ar.gql
import { AR } from "wao"
const ar = new AR()
const gql = ar.gql

Txs

Get latest transactions.

const txs = await gql.txs()
asc

Get transactions in ascending order.

const txs = await gql.txs({ asc: true })
first

Get the firxt X transactions.

const txs = await gql.txs({ first: 3 })
after

Get transactions after a specific one to paginate. Pass a cursor.

const txs = await gql.txs({ first: 3 })
const txs2 = await gql.txs({ first: 3, after: txs[2].cursor })
next

Easier pagination with next.

const { next, data: txs0_2 } = await gql.txs({ first: 3, next: true })
const { next: next2, data: txs3_5 } = await next()
const { next: next3, data: txs6_8 } = await next2()

res.next will be null if there's no more transactions to paginate.

block

Get transactions within a block height range.

const txs = await gql.txs({ block: { min: 0, max: 10 } })

or

const txs = await gql.txs({ block: [0, 10] })

You can also specify only min or max.

by Transaction IDs

Get transactions by transaction ids.

const txs = await gql.txs({ id: TXID })

or

const txs = await gql.txs({ ids: [ TXID1, TXID2, TXID3 ] })
by Recipients

Get transactions by recipients.

const txs = await gql.txs({ recipient: ADDR })

or

const txs = await gql.txs({ recipients: [ ADDR1, ADDR2, ADDR3 ] })
by Owners

Get transactions by owners.

const txs = await gql.txs({ owner: ADDR })

or

const txs = await gql.txs({ owners: [ ADDR1, ADDR2, ADDR3 ] })
by Tags

Get transactions that match tags.

const txs = await gql.txs({ tags: { Name: "Bob", Age: "30" } })
fields

Choose fields to be returned.

const txs = await gql.txs({ fields: ["id", "recipient"] })

For nested objects,

const txs = await gql.txs({ fields: ["id", { owner: ["address", "key"] }] })

You can use a hashmap to specify fields too.

const txs = await gql.txs({ 
  fields: { id: true, { owner: { address: true, key: true } } } 
})

If you assign false, the other fields will be returned.

const txs = await gql.txs({ 
  fields: { id: true, { block: { previous: false } } } 
})

For example, the above will exclude previous from block and return id, timestamp and height.

The entire available fields for transactions as in a graphql query are as follows.

const tx_fields = `{
  id 
  anchor 
  signature 
  recipient 
  owner { address key } 
  fee { winston ar } 
  quantity { winston ar } 
  data { size type } 
  tags { name value } 
  block { id timestamp height previous } 
  parent { id }
  bundledIn { id }
}`

Blocks

Get latest blocks.

const blocks = await gql.blocks()
asc

Get blocks in ascending order.

const blocks = await gql.blocks({ asc: true })
first

Get the firxt X blocks.

const blocks = await gql.blocks({ first: 3 })
after

Get blocks after a specific one to paginate. Pass a cursor.

const blocks = await gql.blocks({ first: 3 })
const blocks2 = await gql.blocks({ first: 3, after: blocks[2].cursor })
by Block IDs

Get blocks by block ids.

const blocks = await gql.blocks({ id: BLCID })

or

const blocks = await gql.blocks({ ids: [ BLKID1, BLKID2, BLKID3 ] })
height

Get blocks within a block height range.

const blocks = await gql.blocks({ height: { min: 0, max: 10 } })

or

const blocks = await gql.blocks({ height: [0, 10] })
next

Easier pagination with next.

const { next, data: blocks0_2 } = await gql.blocks({ first: 3, next: true })
const { next: next2, data: blocks3_5 } = await next() 
const { next: next3, data: blocks6_8 } = await next2()

res.next will be null if there's no more blocks to paginate.

fields
const blocks = await gql.blocks({ 
  fields: ["id", "timestamp", "height", "previous"]
})

The entire available fields for blocks as in a graphql query are as follows.

const block_fields = `{ id timestamp height previous }`