The Graph exposes a GraphQL endpoint to query the events and entities within the Synthetix system.
Synthetix has four bundled subgraps, all generated from this one repository:
- Synthetix: issuing (aka minting) sUSD, burning sUSD and transferring SNX & Synths: https://thegraph.com/explorer/subgraph/synthetixio-team/synthetix
- Exchanges: synth Exchange Volume and fees generated: https://thegraph.com/explorer/subgraph/synthetixio-team/synthetix-exchanges
- Rates: historical rates on-chain for the various synths to USD: https://thegraph.com/explorer/subgraph/synthetixio-team/synthetix-rates
- Depot: deposits, withdrawls and successful exchanges in the Depot: https://thegraph.com/explorer/subgraph/synthetixio-team/synthetix-depot
- Loans: loans created and closed using EtherCollateral: https://thegraph.com/explorer/subgraph/synthetixio-team/synthetix-loans
- Binary Options: Binary options data: https://thegraph.com/explorer/subgraph/synthetixio-team/synthetix-binary-options
For any of the four subgraphs: snx, exchanges, rates, depot, loans and binary-options as [subgraph]
- Run the
npm run codegen:[subgraph]task to prepare the TypeScript sources for the GraphQL (generated/schema) and the ABIs (generated/[ABI]/*) - [Optional] run the
npm run build:[subgraph]task for the subgraph - Deploy via
npm run deploy:[subgraph]. Note: requires env variable of$THEGRAPH_SNX_ACCESS_TOKENset in bash to work.
- First, you have to udpate the
--envflag totestinyaml:ratesoryaml:exchangerinpackage.jsonand then it will pick up any changes you make to the test start blocks inset-start-blocksfile in the relevant subgraph folder inside the./mustachefolder. If you leave a test block as null it will use the prod block instead.
IMPORTANT: if you just want to use a single start block for all contracts within the rates or exchanger subgraph, simply change the --universal-test-block flag in yaml:rates or yaml:exchanger in package.json from null to <number> and you don't need to make any changes to set-start-blocks in that case, it will pick up this number for every contract in the yaml file.
- Continue from step 2 in the section
To run and deploy locallyabove.
Please use our node & browser utility: synthetix-data.
In it's simplest version (on a modern browser assuming async await support and fetch):
// Fetch all Exchanges in the last 24hrs s
(async () => {
const ts = Math.floor(Date.now() / 1e3);
const oneDayAgo = ts - 3600 * 24;
const body = JSON.stringify({
query: `{
synthExchanges(
orderBy:timestamp,
orderDirection:desc,
where:{timestamp_gt: ${oneDayAgo}}
)
{
fromAmount
fromAmountInUSD
fromCurrencyKey
toCurrencyKey
block
timestamp
toAddress
toAmount
toAmountInUSD
feesInUSD
}
}`,
variables: null,
});
const response = await fetch('https://api.thegraph.com/subgraphs/name/synthetixio-team/synthetix-exchanges', {
method: 'POST',
body,
});
const json = await response.json();
const { synthExchanges } = json.data;
// ...
console.log(synthExchanges);
})();Note: due to The Graph limitation, only
100results will be returned (the maximum allowedfirstamount). The way around this is to use paging (using theskipoperator in GraphQL). See the functionpageResultsin synthetix-data for an example.
