Custom Subgraph Query

Requirements

Our examples are only for Rawrshak's Content and Exchange subgraphs. A developer can create custom queries for our subgraphs.

A developer can also retrofit this tutorial for any GraphQL source or any subgraph.

Tutorial

1. Create a folder for custom graphql queries

2. Inside that folder, create a "Resources" folder and a "Scripts" folder

3. In the Resources folder, create a text file that contains the GraphQL query

Filename: GetAssetName.txt

query GetAssetName {{
    asset ( id: "{0}-{1}" ) {{
        name
    }}
}}

Notes:

  • GraphQL query syntax "{" and "}" must be replaced with "{{" and "}}"

  • Query parameters are indexed. {0} and {1} indicate the first parameter and second parameter for the query.

4. Create Query Script

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Numerics;
using UnityEngine;
using UnityEngine.Networking;
using GraphQlClient.Core;
using Rawrshak;

public class GetAssetName: QueryBase
{
    public static async Task<ReturnData> Fetch(string contractAddress, string tokenId) {
        // Load query if this is the first Fetch
        string query = LoadQuery("GetAssetName"); // Where GetAssetName is the filename.
        
        // Load the query parameters
        string queryWithArgs = String.Format(query, contractAddress.ToLower(), tokenId);

        // Post query
        string returnData = await PostAsync(Subgraph.Instance.contentsSubgraphUri, queryWithArgs);

        // Parse data
        return JsonUtility.FromJson<ReturnData>(returnData);
    }

    [Serializable]
    public class ReturnData
    {
        public DataObject data;
    }

    [Serializable]
    public class DataObject 
    {
        public AssetData asset;
    }

    [Serializable]
    public class AssetData 
    {
        public string name;
    }
}

Notes:

  • This script should inherit from QueryBase

  • queryWithArgs format string should match the number of inputs in the GetAssetName.txt

  • Subgraph object is in the Rawrshak SDK. If pointing to a different subgraph, replace this with the correct subgraph source uri

  • The ReturnData object should match the serializable json object returned by the query

  • Please check out the Content and Exchange Pages for more info

5. Use the Custom Query

To use the query:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GetAssetInfoScript : MonoBehaviour
{
    // Input
    public string contentContractAddress;
    public int tokenId;

    // Return Value
    public GetAssetName.ReturnData data;

    // Start is called before the first frame update
    async void Start()
    {
        // Test Query
        data = await GetAssetName.Fetch(contentContractAddress, tokenId.ToString());
    }
}

Last updated