Overview
The AgrospAI Data Space Portal integrates with multiple data sources to provide comprehensive asset discovery, blockchain data queries, and content moderation.
Aquarius
Aquarius is the metadata cache and search API for Ocean Protocol assets. It indexes asset metadata from the blockchain and provides Elasticsearch-based search capabilities.
Query assets using Elasticsearch-based search with filtering, sorting, and pagination.
Elasticsearch query object containing search criteria
Axios cancel token for request cancellation
Current page number (1-indexed)
Total number of pages available
Total number of matching assets
Elasticsearch aggregations data
import { queryMetadata, generateBaseQuery } from '@utils/aquarius'
import axios from 'axios'
const cancelToken = axios.CancelToken.source().token
const baseQueryParams = {
chainIds: [1, 137],
sortOptions: {
sortBy: 'metadata.created',
sortDirection: 'desc'
},
esPaginationOptions: {
from: 0,
size: 20
}
}
const query = generateBaseQuery(baseQueryParams)
const results = await queryMetadata(query, cancelToken)
getAsset
Retrieve a single asset by its DID (Decentralized Identifier).
Asset DID in format did:op:[64-char-hex]
Axios cancel token for request cancellation
Complete asset metadata object
import { getAsset } from '@utils/aquarius'
import axios from 'axios'
const did = 'did:op:1234567890abcdef...'
const cancelToken = axios.CancelToken.source().token
const asset = await getAsset(did, cancelToken)
getAssetsFromDids
Fetch multiple assets by their DIDs in a single query.
import { getAssetsFromDids } from '@utils/aquarius'
const dids = [
'did:op:abc123...',
'did:op:def456...'
]
const assets = await getAssetsFromDids(dids, [137], cancelToken)
Query Helper Functions
generateBaseQuery
Generate an Elasticsearch query from high-level parameters.
Query configuration object
interface BaseQueryParams {
chainIds: number[]
nestedQuery?: any
esPaginationOptions?: {
from?: number
size?: number
}
sortOptions?: {
sortBy: string
sortDirection: 'asc' | 'desc'
}
aggs?: any
filters?: FilterTerm[]
ignorePurgatory?: boolean
ignoreState?: boolean
showSaas?: boolean
}
getFilterTerm
Create an Elasticsearch filter term.
DDO field path (e.g., ‘metadata.type’, ‘nft.owner’)
value
string | number | boolean | string[] | number[]
required
Filter value
key
'term' | 'terms' | 'match' | 'match_phrase'
default:"term"
Elasticsearch query type
import { getFilterTerm } from '@utils/aquarius'
const typeFilter = getFilterTerm('metadata.type', 'dataset')
const multiFilter = getFilterTerm('chainId', [1, 137])
const matchFilter = getFilterTerm('nft.owner', '0x123...', 'match')
Subgraph
The Ocean Protocol Subgraph indexes on-chain events and provides GraphQL queries for blockchain data.
getUserTokenOrders
Fetch all token orders (purchases) for a user across multiple chains.
Array of chain IDs to query
Array of order objects with datatoken and transaction details
import { getUserTokenOrders } from '@utils/subgraph'
const orders = await getUserTokenOrders(
'0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
[1, 137]
)
// Order structure
interface OrdersData {
consumer: { id: string }
datatoken: {
id: string
address: string
symbol: string
}
consumerMarketToken: {
address: string
symbol: string
}
createdTimestamp: number
tx: string
}
getOpcFees
Retrieve Ocean Protocol Community (OPC) fee configuration for a chain.
Chain ID to query fees for
Fee percentage for OCEAN token swaps
Fee percentage for non-OCEAN token swaps
Fee percentage for orders
Fee percentage for provider operations
import { getOpcFees } from '@utils/subgraph'
const fees = await getOpcFees(137)
console.log(fees.orderFee) // '0.001'
getOpcsApprovedTokens
Get list of approved tokens for payments on a specific chain.
Array of approved token information
import { getOpcsApprovedTokens } from '@utils/subgraph'
const tokens = await getOpcsApprovedTokens(137)
// TokenInfo structure
interface TokenInfo {
address: string
symbol: string
name: string
decimals: number
}
Query Helpers
getSubgraphUri
Get the subgraph URI for a specific chain.
import { getSubgraphUri } from '@utils/subgraph'
const uri = getSubgraphUri(137)
// 'https://v4.subgraph.polygon.oceanprotocol.com'
getQueryContext
Create an operation context for urql queries.
import { getQueryContext } from '@utils/subgraph'
const context = getQueryContext(137)
// { url: '...', requestPolicy: 'network-only' }
fetchData
Execute a GraphQL query against the subgraph.
query
TypedDocumentNode
required
GraphQL query document
Query context with URL and options
import { fetchData, getQueryContext } from '@utils/subgraph'
import { gql } from 'urql'
const query = gql`
query GetAssets($owner: String!) {
nfts(where: { owner: $owner }) {
id
owner
tokenUri
}
}
`
const context = getQueryContext(137)
const result = await fetchData(query, { owner: '0x123...' }, context)
ENS (Ethereum Name Service)
ENS support is integrated through Ocean Protocol’s configuration system.
import { getOceanConfig } from '@utils/ocean'
const config = getOceanConfig(1) // Ethereum mainnet
// ENS names are automatically resolved by Ocean Protocol SDK
Purgatory
Purgatory is a content moderation system that flags problematic assets or accounts.
getAccountPurgatoryData
Check if an account address is in purgatory (flagged for moderation).
Ethereum address to check
Address if in purgatory, undefined otherwise
Reason for purgatory status
import { getAccountPurgatoryData } from '@utils/purgatory'
const result = await getAccountPurgatoryData('0x123...')
if (result.address) {
console.log(`Account flagged: ${result.reason}`)
}
Purgatory Filtering in Queries
Aquarius queries automatically filter out purgatory assets unless explicitly disabled:
const baseQueryParams = {
chainIds: [137],
ignorePurgatory: false // Default: filters purgatory assets
}
// To include purgatory assets
const queryAllParams = {
chainIds: [137],
ignorePurgatory: true // Include flagged assets
}
Error Handling
All data source functions include built-in error handling with logging:
import { LoggerInstance } from '@oceanprotocol/lib'
import { queryMetadata } from '@utils/aquarius'
try {
const results = await queryMetadata(query, cancelToken)
if (!results) {
console.error('No results returned')
}
} catch (error) {
LoggerInstance.error('Query failed:', error.message)
}
Type Definitions
// Asset returned from Aquarius
import { Asset } from '@oceanprotocol/lib'
// Paged results
interface PagedAssets {
results: Asset[]
page: number
totalPages: number
totalResults: number
aggregations: any
}
// Purgatory data
interface PurgatoryDataAccount {
address: string
reason: string
}