Skip to content

Latest commit

 

History

History

README.md

@iota/graphql-transport

@iota/graphql-transport is part of the IOTA Rebased SDK, designed specifically for interacting with the IOTA Rebased protocol.

This package provides a IotaTransport that enables IotaClient to make requests using the RPC 2.0 (GraphQL) API instead of the JSON RPC API.

Install

npm install --save @iota/graphql-transport

Setup

import { IotaClientGraphQLTransport } from '@iota/graphql-transport';
import { getFullnodeUrl, getGraphQLUrl, IotaClient } from '@iota/iota-sdk/client';

const client = new IotaClient({
    transport: new IotaClientGraphQLTransport({
        url: getGraphQLUrl('testnet'),
        // When specified, the transport will fallback to JSON RPC for unsupported method and parameters
        fallbackFullNodeUrl: getFullnodeUrl('testnet'),
    }),
});

Limitations

Unsupported methods

The following methods are currently unsupported in IotaClientGraphQLTransport, and will either error, or fallback to the JSON RPC API if a fallbackFullNodeUrl is provided:

  • subscribeTransaction
  • subscribeEvents
  • call
  • getNetworkMetrics
  • getMoveCallMetrics
  • getAddressMetrics
  • getEpochs
  • dryRunTransactionBlock
  • devInspectTransactionBlock
  • executeTransactionBlock
  • getParticipationMetrics
  • getCirculatingSupply

Unsupported parameters

Some supported methods in IotaClientGraphQLTransport do not support the full set of parameters available in the JSON RPC API.

If an unsupported parameter is used, the request will error, or fallback to JSON RPC API if a fallbackFullNodeUrl is provided.

  • getOwnedObjects:
    • missing the MatchAll, MatchAny, MatchNone, and Version filters
  • queryEvents:
    • missing the MoveEventField, Module, TimeRange, All, Any, And, and Or filters

Unsupported fields

  • queryTransactionBlocks, getTransactionBlock, and multiGetTransactionBlocks
    • missing messageVersion, eventsDigest, sharedObjects, unwrapped, wrapped, and unwrappedThenDeleted in effects
    • missing id for events
  • getStakes and getStakesByIds
    • missing validatorAddress
  • getLatestIotaSystemState and getLatestIotaSystemStateV2
    • missing stakingPoolMappingsId, inactivePoolsId, pendingActiveValidatorsId, validatorCandidatesId
    • missing reportRecords on validators
  • getCurrentEpoch
    • missing reportRecords on validators
  • queryEvents
    • missing id for events
  • getCheckpoint and getCheckpoints
    • missing checkpointCommitments
  • getCurrentEpoch
    • missing epochTotalTransactions
  • getDynamicFields
    • missing objectId, digest and version available for DynamicObject but not DynamicField

Performance

Some may require multiple requests to properly resolve:

  • getDynamicFieldObject requires 2 requests
  • queryTransactionBlocks, getTransactionBlock, and multiGetTransactionBlocks
    • may require additional requests to load all objectChanges, balanceChanges, dependencies and events
  • getNormalizedMoveModule and getNormalizedMoveModulesByPage
    • may require additional requests to load all friends, functions, and structs
  • getCheckpoint and getCheckpoints,
    • may require additional requests to load all transactionBlocks and validators
  • getLatestIotaSystemState,getLatestIotaSystemStateV2, getCurrentEpoch, getValidatorsApy and getCommitteeInfo:
    • may require additional requests to load all validators

Pagination

Page sizes and limits for paginated methods are based on the defaults and limits of the GraphQL API, so page sizes and limits may be different than those returned by the JSON RPC API