From 8df8f61c877754f21414a219359baae1261032cf Mon Sep 17 00:00:00 2001 From: Gaurav agarwal Date: Fri, 24 Jul 2026 20:01:49 +0530 Subject: [PATCH 1/4] Docs deep audit implementation: infra, money pages, streams/migration, AEO Implements the July 2026 documentation audit (support-demand-driven). All facts founder-verified (rate limits, points, trial, retention windows, Kafka auth, API names). Build passes; check-links strict = 0 errors. Infra & config: - nginx: real 404s (was site-wide soft-404s), server-side 301s (old PumpFun casing, /blog); gzip for JS/CSS/SVG/JSON; removed dead Netlify _redirects/_headers - analytics: GA4 loads only via GTM (removed duplicate gtag.js double-counting) - real favicon.ico + apple-touch-icon; JetBrains Mono preloads; theme-color meta - fixed broken IDE links; navbar V2-first + V1 legacy; onBrokenMarkdownLinks: throw - scripts/check-links.mjs (build-first, slug-aware) wired into CI New pages (gaps mined from support channels): - Data Coverage & Retention matrix; Plans/Points/Limits; Rate Limits & Concurrency - Kafka Operations Cookbook; expanded errors/troubleshooting with real error strings - Recipes: wallet PnL, wallet provenance - Migrating-from guides: Moralis, Alchemy, Helius, Yellowstone/CoreCast, GoldSky - Chinese landing page (auto-translate guidance) AEO / structured data: - llms-full.txt now carries full page text + raw .md route twins - TechArticle + BreadcrumbList JSON-LD (with datePublished/description) - FAQ blocks (FAQPage schema) on new pages Editorial / IA: - Plans + Migration sidebar sections; 18 category-page descriptions - code-fence language tags (~548); alt text on all 28 images - contribution-guidelines: docs-first governance rules Co-Authored-By: Claude Fable 5 --- .github/workflows/docs-build.yml | 2 + README.md | 16 +- blog/2023-02-21-started-doc.md | 13 -- blog/2023-04-13-refactored-arguments-doc.md | 14 -- ...-18-added-conditional-metric-select-doc.md | 13 -- ...dded-dex-trades-by-tokens-intervals-doc.md | 13 -- ...30-added-arguments-events-array-filters.md | 13 -- blog/2023-10-20-token-holders.md | 17 -- blog/2024-02-05-array-intersect.md | 12 -- blog/2024-02-23-USDPrice.md | 51 ----- blog/2024-05-27-solana-dex.md | 67 ------ blog/authors.yml | 41 ---- docs/API-Blog/migrate-v1-v2.md | 10 +- docs/API-Blog/track-token-lock-unlock.md | 2 +- ...e-internal-transactions-how-to-get-them.md | 24 +-- docs/authorization/how-to-generate.md | 2 +- docs/authorization/how-to-use.md | 2 +- .../Arbitrum/Blocks_Transactions.md | 6 +- docs/blockchain/Arbitrum/DexTrades.mdx | 12 +- .../Arbitrum/Smart_Contract_Calls.md | 2 +- .../Arbitrum/Smart_Contract_Events.md | 2 +- docs/blockchain/BSC/binance-memerush-api.md | 10 +- docs/blockchain/BSC/bsc-balance-updates.md | 10 +- docs/blockchain/BSC/bsc-calls-api.mdx | 4 +- docs/blockchain/BSC/bsc-dextrades.mdx | 58 +++--- docs/blockchain/BSC/bsc-events-api.mdx | 2 +- docs/blockchain/BSC/bsc-nft.md | 2 +- docs/blockchain/BSC/bsc-transfers.md | 8 +- docs/blockchain/BSC/four-meme-api.mdx | 14 +- docs/blockchain/BSC/gra-fun-api.md | 4 +- docs/blockchain/Base/base-dextrades.mdx | 12 +- docs/blockchain/Base/base-nft.md | 2 +- docs/blockchain/Base/base-transfers.mdx | 10 +- docs/blockchain/Base/base-zora-api.md | 2 +- .../eth-mev-balance-tracker.md | 2 +- .../Ethereum/calls/contract-creation.md | 10 +- .../Ethereum/calls/smartcontract-filterby.md | 8 +- .../Ethereum/calls/smartcontract.md | 2 +- .../dextrades/DEXScreener/evm_dexscreener.mdx | 14 +- .../Ethereum/dextrades/crypto-coin-ticker.md | 2 +- docs/blockchain/Ethereum/dextrades/dex-api.md | 10 +- .../dextrades/ethereum-slippage-api.md | 2 +- .../Ethereum/dextrades/evm-bullx-api.md | 14 +- .../dextrades/evm-geckoterminal-api.md | 14 +- .../Ethereum/dextrades/evm-gmgn-api.md | 14 +- .../Ethereum/dextrades/evm-photon-api.md | 14 +- .../dextrades/get-trading-pairs-of-token.md | 2 +- .../Ethereum/dextrades/pancakeswap-api.mdx | 6 +- .../Ethereum/dextrades/token-trades-apis.mdx | 8 +- .../dextrades/trades-of-an-address-api.md | 2 +- .../Ethereum/dextrades/uniswap-api.mdx | 2 +- .../dextrades/uniswap-position-api.md | 2 +- .../ethers-library/eth_blockNumber.md | 2 +- .../Ethereum/ethers-library/eth_subscribe.md | 6 +- docs/blockchain/Ethereum/events/events-api.md | 14 +- .../Ethereum/mempool/mempool-api.md | 16 +- .../Ethereum/nft/nft-blur-marketplace-api.md | 36 ++-- .../Ethereum/nft/nft-ownership-api.md | 4 +- .../Ethereum/transactions/transaction-api.md | 10 +- .../transfers/nft-token-transfer-api.md | 2 +- docs/blockchain/Ethereum/transfers/rwa-api.md | 2 +- .../Ethereum/transfers/total-supply.mdx | 4 +- docs/blockchain/Matic/matic-dextrades.md | 14 +- docs/blockchain/Matic/matic-nft.md | 2 +- docs/blockchain/Matic/matic-transfers.md | 6 +- docs/blockchain/Optimism/index.mdx | 2 +- .../blockchain/Optimism/optimism-dextrades.md | 6 +- docs/blockchain/Optimism/optimism-nft.md | 2 +- .../blockchain/Optimism/optimism-transfers.md | 6 +- docs/blockchain/Solana/Believe-API.md | 6 +- docs/blockchain/Solana/BonkSwap-API.md | 8 +- docs/blockchain/Solana/Boop-Fun-API.md | 10 +- .../Solana/DEXScreener/solana_dexscreener.mdx | 8 +- docs/blockchain/Solana/Meteora-DAMM-v2-API.md | 14 +- docs/blockchain/Solana/Meteora-DLMM-API.md | 12 +- docs/blockchain/Solana/Meteora-DYN-API.md | 12 +- docs/blockchain/Solana/Moonshot-API.md | 8 +- docs/blockchain/Solana/Orbic-API.md | 10 +- .../Solana/Pumpfun/Pump-Fun-API.mdx | 10 +- .../Pump-Fun-Marketcap-Bonding-Curve-API.mdx | 2 +- docs/blockchain/Solana/SolFi-api.md | 10 +- .../blockchain/Solana/Solana-AldrinAmm-api.md | 8 +- .../Solana/Solana-DEX-Orders-API.md | 10 +- docs/blockchain/Solana/Solana-DexPools-API.md | 8 +- .../Solana/Solana-Lifinity-dex-api.mdx | 8 +- .../blockchain/Solana/Solana-OpenBook-api.mdx | 8 +- docs/blockchain/Solana/Solana-Phoenix-api.md | 10 +- .../Solana/Solana-Raydium-DEX-API.mdx | 4 +- .../Solana/ai-agent-solana-data.mdx | 2 +- docs/blockchain/Solana/goonfi-api.md | 12 +- docs/blockchain/Solana/heaven-dex-api.md | 6 +- .../Solana/historical-aggregate-data.mdx | 4 +- docs/blockchain/Solana/index.mdx | 7 + docs/blockchain/Solana/jupiter-studio-api.md | 2 +- docs/blockchain/Solana/launchpad-raydium.md | 6 +- docs/blockchain/Solana/letsbonk-api.md | 6 +- .../meteora-dynamic-bonding-curve-api.md | 16 +- docs/blockchain/Solana/raydium-clmm-API.md | 12 +- docs/blockchain/Solana/raydium-cpmm-API.md | 4 +- .../Solana/solana-balance-updates.mdx | 16 +- docs/blockchain/Solana/solana-dextrades.mdx | 62 +++--- .../Solana/solana-geckoterminal-api.md | 4 +- .../solana-instruction-balance-updates.md | 4 +- .../blockchain/Solana/solana-instructions.mdx | 6 +- docs/blockchain/Solana/solana-logs.md | 8 +- docs/blockchain/Solana/solana-nft.mdx | 6 +- docs/blockchain/Solana/solana-photon-api.md | 4 +- docs/blockchain/Solana/solana-rewards.mdx | 4 +- docs/blockchain/Solana/solana-trader-API.md | 12 +- docs/blockchain/Solana/solana-transactions.md | 4 +- docs/blockchain/Solana/solana-transfers.mdx | 12 +- docs/blockchain/Solana/solana_fees_api.md | 8 +- docs/blockchain/Solana/xstocks-api.md | 12 +- docs/blockchain/Tron/index.mdx | 2 +- docs/blockchain/Tron/sunswap-api.md | 6 +- docs/blockchain/Tron/tron-balance-updates.md | 6 +- docs/blockchain/Tron/tron-fees-api.md | 8 +- docs/blockchain/Tron/tron-mempool.md | 8 +- docs/blockchain/Tron/tron-nft.md | 2 +- docs/blockchain/Tron/tron-transactions-api.md | 2 +- docs/blockchain/Tron/tron-transfers.md | 12 +- docs/blockchain/Tron/usdt-trc20-api.md | 6 +- docs/chinese.md | 29 +++ docs/contribution-guidelines.md | 11 + docs/cubes/dextrades.mdx | 8 +- docs/cubes/dextradesbyTokens.md | 4 +- docs/examples/cross-chain/cross-chain-api.md | 2 +- .../polymarket-api/bitcoin-polymarket-api.md | 2 +- docs/graphql/capabilities/array-intersect.md | 6 +- docs/graphql/capabilities/joins.md | 4 +- docs/graphql/data-coverage-retention.mdx | 106 ++++++++++ docs/graphql/metrics/priceAsymmetry.md | 4 +- docs/graphql/metrics/sum.md | 2 +- docs/graphql/metrics/uniq.md | 4 +- docs/graphql/postman.md | 2 +- docs/graphql/sorting.md | 4 +- docs/ide/points.md | 2 +- docs/intro.md | 2 +- docs/migration/from-alchemy.mdx | 63 ++++++ docs/migration/from-goldsky.mdx | 64 ++++++ docs/migration/from-helius.mdx | 64 ++++++ docs/migration/from-moralis.mdx | 64 ++++++ docs/migration/from-yellowstone.mdx | 45 ++++ docs/plans/how-billing-works.mdx | 84 ++++++++ docs/plans/rate-limits.mdx | 69 +++++++ docs/schema/evm/arguments.md | 4 +- .../stablecoin-APIs/stablecoin-balance-api.md | 6 +- docs/stablecoin-APIs/stablecoin-price-api.md | 6 +- .../stablecoin-APIs/stablecoin-reserve-api.md | 6 +- docs/stablecoin-APIs/stablecoin-trades-api.md | 14 +- .../stablecoin-transfers-api.md | 12 +- docs/stablecoin-APIs/usdt-api.md | 20 +- docs/start/errors.md | 61 +++++- docs/start/first-query.md | 4 +- docs/start/mempool.md | 4 +- docs/start/starter-queries.md | 6 +- docs/start/starter-subscriptions.md | 2 +- docs/streams/kafka-operations.mdx | 75 +++++++ docs/subscriptions/aws/s3_tutorial.md | 2 +- docs/subscriptions/example-rust.md | 2 +- .../subscriptions/google-bigquery/bigquery.md | 2 +- docs/subscriptions/google-bigquery/intro.mdx | 2 +- docs/subscriptions/google-bigquery/pub-sub.md | 2 +- docs/subscriptions/mempool-subscriptions.md | 4 +- .../silent-disconnect-reconnect.md | 2 +- docs/subscriptions/subscription.md | 4 +- .../crypto-price-api/crypto-marketcap-api.md | 6 +- docs/trading/crypto-price-api/currency.md | 2 +- docs/trading/crypto-price-api/examples.md | 32 +-- docs/trading/crypto-price-api/pairs.md | 2 +- docs/trading/crypto-trades-api/wallet-pnl.mdx | 93 +++++++++ ...ated-trading-ethereum-volume-surge-bot.mdx | 2 +- docs/usecases/crypto-dashboard.md | 2 +- docs/usecases/discord-bot.md | 6 +- docs/usecases/mempool-transaction-fee.md | 8 +- docs/usecases/nft-creator/components.md | 2 +- docs/usecases/ohlcv-complete-guide.md | 4 +- .../real-time-balance-tracker/scripts.md | 4 +- docs/usecases/real-time-balance-tracker/ui.md | 2 +- ...cal-ethereum-price-excel-google-sheets.mdx | 4 +- docs/usecases/streaming-moonshot-prices.md | 4 +- docs/usecases/telegram-bot.md | 4 +- .../track-millions-of-solana-wallets.md | 28 +-- .../getting-started.md | 2 +- docs/usecases/wallet-provenance.mdx | 72 +++++++ docusaurus.config.js | 68 ++++-- nginx/default.conf | 45 +++- package.json | 1 + plugins/copy-md-plugin/index.js | 51 ----- plugins/llms-txt.js | 134 ++++++++++-- plugins/tech-article-jsonld.js | 68 ++++-- scripts/check-links.mjs | 193 ++++++++++++++++++ sidebars.js | 75 ++++++- static/_headers | 11 - static/_redirects | 11 - static/img/apple-touch-icon.png | Bin 0 -> 17446 bytes static/img/favicon.ico | Bin 9310 -> 15748 bytes 197 files changed, 2038 insertions(+), 974 deletions(-) delete mode 100644 blog/2023-02-21-started-doc.md delete mode 100644 blog/2023-04-13-refactored-arguments-doc.md delete mode 100644 blog/2023-05-18-added-conditional-metric-select-doc.md delete mode 100644 blog/2023-06-04-added-dex-trades-by-tokens-intervals-doc.md delete mode 100644 blog/2023-06-30-added-arguments-events-array-filters.md delete mode 100644 blog/2023-10-20-token-holders.md delete mode 100644 blog/2024-02-05-array-intersect.md delete mode 100644 blog/2024-02-23-USDPrice.md delete mode 100644 blog/2024-05-27-solana-dex.md delete mode 100644 blog/authors.yml create mode 100644 docs/chinese.md create mode 100644 docs/graphql/data-coverage-retention.mdx create mode 100644 docs/migration/from-alchemy.mdx create mode 100644 docs/migration/from-goldsky.mdx create mode 100644 docs/migration/from-helius.mdx create mode 100644 docs/migration/from-moralis.mdx create mode 100644 docs/migration/from-yellowstone.mdx create mode 100644 docs/plans/how-billing-works.mdx create mode 100644 docs/plans/rate-limits.mdx create mode 100644 docs/streams/kafka-operations.mdx create mode 100644 docs/trading/crypto-trades-api/wallet-pnl.mdx create mode 100644 docs/usecases/wallet-provenance.mdx delete mode 100644 plugins/copy-md-plugin/index.js create mode 100644 scripts/check-links.mjs delete mode 100644 static/_headers delete mode 100644 static/_redirects create mode 100644 static/img/apple-touch-icon.png diff --git a/.github/workflows/docs-build.yml b/.github/workflows/docs-build.yml index c57f9cca..f4910a6d 100644 --- a/.github/workflows/docs-build.yml +++ b/.github/workflows/docs-build.yml @@ -18,3 +18,5 @@ jobs: cache: npm - run: npm ci - run: npm run build + - name: Check internal links + run: node scripts/check-links.mjs diff --git a/README.md b/README.md index e768c77b..4d8efcfe 100644 --- a/README.md +++ b/README.md @@ -54,4 +54,18 @@ npx docusaurus-prince-pdf -u http://localhost:3000/docs/intro ### Contributing to Docs -Read contribution guidlines [here](https://docs.bitquery.io/docs/contribution-guidelines) \ No newline at end of file +Read contribution guidlines [here](https://docs.bitquery.io/docs/contribution-guidelines) + +### Link checking + +``` +$ yarn build # emit build/ so the checker can validate against real routes +$ yarn check-links # fails on broken internal links / dead URL schemes +``` + +`scripts/check-links.mjs` validates links against the routes Docusaurus actually emits (it reads `build/` when present), so it correctly resolves `slug:` front matter and extensionless relative links. It also runs in CI after the build. + +### Repo notes + +- `b5e8420ece5b4116b64bb3214828f286.txt` and `baidu_verify_codeva-*.html` are third-party search-engine site-verification files. Do not delete them. +- The site is served in production by nginx (`nginx/default.conf`, `Dockerfile`), not Netlify. Redirects and 404 handling live in that nginx config. diff --git a/blog/2023-02-21-started-doc.md b/blog/2023-02-21-started-doc.md deleted file mode 100644 index 22a6fcf3..00000000 --- a/blog/2023-02-21-started-doc.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -slug: documentation-started -title: Started documenting data platform -authors: [astudnev,gaurav,Divyasshree] -tags: [bitquery] ---- - - - -We are happy to start this project, documenting the new Bitquery data platform. - -The first authors will be Bitquery developers, and later all our users and clients are -welcome to participate. diff --git a/blog/2023-04-13-refactored-arguments-doc.md b/blog/2023-04-13-refactored-arguments-doc.md deleted file mode 100644 index c8bb4356..00000000 --- a/blog/2023-04-13-refactored-arguments-doc.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -slug: arguments-calls-events -title: Arguments for Calls and Events refactored -authors: [astudnev] -tags: [arguments] ---- - - - -There is the major modification in the today release of Graphql: - -1. Arguments and return value for Calls and Events are now represented as arrays of structures. Use union to read values of arguments. Refer to [arguments](/docs/schema/evm/arguments) for details on data structures. -2. Names of objects in GraphQL schema are simplified and no more contain UUID identifiers. It simplifies working with schema and allows to use fragments easier -3. Set of bug fixed for using arrays, fragments and others \ No newline at end of file diff --git a/blog/2023-05-18-added-conditional-metric-select-doc.md b/blog/2023-05-18-added-conditional-metric-select-doc.md deleted file mode 100644 index 336ee9f8..00000000 --- a/blog/2023-05-18-added-conditional-metric-select-doc.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -slug: added-conditional-metric -title: Added conditional select by metric -authors: [astudnev] -tags: [metrics] ---- - - - -There is the modification in the today release of Graphql: - -1. [selectWhere](/docs/graphql/metrics/selectWhere) for details -2. renamed ```where``` attribute on metrics to [if](/docs/graphql/metrics/if) \ No newline at end of file diff --git a/blog/2023-06-04-added-dex-trades-by-tokens-intervals-doc.md b/blog/2023-06-04-added-dex-trades-by-tokens-intervals-doc.md deleted file mode 100644 index 29619e56..00000000 --- a/blog/2023-06-04-added-dex-trades-by-tokens-intervals-doc.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -slug: added-dex-trades-by-tokens-intervals -title: OHLC DEX Graph Query, Time interval, DEX Trades By Token -authors: [astudnev] -tags: [metrics] ---- - - - -There is the additions in the today release of Graphql: - -1. [DEX Trades By Token](/docs/schema/evm/dextrades) introduced with OHLC example -2. [Time/Date interval](/docs/graphql/datetime) added diff --git a/blog/2023-06-30-added-arguments-events-array-filters.md b/blog/2023-06-30-added-arguments-events-array-filters.md deleted file mode 100644 index 02ef9c89..00000000 --- a/blog/2023-06-30-added-arguments-events-array-filters.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -slug: added-arguments-events-array-filters -title: Added filtering on event and call arguments and returns -authors: [astudnev] -tags: [metrics] ---- - - - -There is the additions in the today release of Graphql: - -1. [Filtering of arrays](/docs/graphql/filters/#array-filter-types) introduced filtering by arrays -2. [Arguments / Returns usage in filters](/docs/schema/evm/arguments/#filters-on-arguments) added diff --git a/blog/2023-10-20-token-holders.md b/blog/2023-10-20-token-holders.md deleted file mode 100644 index e979ab5e..00000000 --- a/blog/2023-10-20-token-holders.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -slug: added-token-holders-api-other-changes -title: Added Token Holders API and Other Changes -authors: [Divyasshree] -tags: [new api] ---- - - - -# Changes in APIs and Metrics - -In this update we have -- Added a new [Token Holder API](https://docs.bitquery.io/docs/schema/evm/token_holders/) for `archive` dataset -- Added new indexes Gini Coefficient, Nakamoto Index, Theil Index -- Removed `distinctBy` filter to avoid any confusions over its usage. -- Compulsorily require field in `sum` aggregation , for example: `sum(of: Balance_Amount)` -- Added Support for `aggregates` in ` descendingByField` \ No newline at end of file diff --git a/blog/2024-02-05-array-intersect.md b/blog/2024-02-05-array-intersect.md deleted file mode 100644 index b0fa4510..00000000 --- a/blog/2024-02-05-array-intersect.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -slug: added-array-intersect -title: Added Array Intersect Feature -authors: [Divyasshree] -tags: [new capability] ---- - - - -# Changes in APIs - -In this update we have added a new capability to identify relation between two addresses/contracts with the [array intersect feature](/docs/graphql/capabilities/array-intersect) \ No newline at end of file diff --git a/blog/2024-02-23-USDPrice.md b/blog/2024-02-23-USDPrice.md deleted file mode 100644 index 93aa0f24..00000000 --- a/blog/2024-02-23-USDPrice.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -slug: usd-price -title: Introducing USD Price and Price Asymmetry metric -authors: [Divyasshree] -tags: [new capability] ---- - - - -# New Features - -- We are excited to announce the introduction of USD pricing for V2 chains, a feature many of you have eagerly awaited. You can [query USD price](https://ide.bitquery.io/DEX-trades-on-Solana-wit-hUSD-Prie-on-both-sides) now as shown below. - -We have a 3-minute candle data based on token trading volume on centralized exchanges, so we refresh the USD price every 3 minutes. - -``` -subscription { - Solana { - DEXTrades(where: { - Trade: { - PriceAsymmetry: { - le: 0.5 - } - } - }) { - Block { - Time - } - Trade { - PriceAsymmetry - Buy { - Amount - AmountInUSD - PriceInUSD - Currency {Symbol} - } - Sell { - Amount - AmountInUSD - PriceInUSD - Currency {Symbol} - } - } - } - } -} -``` - -Check more examples in [Examples section](https://docs.bitquery.io/docs/category/examples/) - -- Taking insights from our V1 APIs, we've introduced an improved price asymmetry metric to filter outliers. Read more [here](https://docs.bitquery.io/docs/graphql/metrics/priceAsymmetry/) diff --git a/blog/2024-05-27-solana-dex.md b/blog/2024-05-27-solana-dex.md deleted file mode 100644 index 00fd7129..00000000 --- a/blog/2024-05-27-solana-dex.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -slug: solana-dex -title: Introducing new DEXs on Solana -authors: [Divyasshree] -tags: [new data] ---- - - - -# New Data - -We have now added data for several new Solana DEXes into our platform: Phoenix, Meteora, Lifi, and more! - -You can filter information on a particular DEX by mentioning them in the `ProtocolFamily` field. For example the below query retrieves all trades in real-time from the Phoenix DEX. - -``` -subscription { - Solana { - DEXTrades(where: {Trade: {Dex: {ProtocolFamily: {is: "Phoenix"}}}}) { - Trade { - Dex { - ProgramAddress - ProtocolFamily - ProtocolName - } - Buy { - Account { - Address - } - Amount - Currency { - MintAddress - Decimals - Symbol - ProgramAddress - Name - } - PriceAgainstSellCurrency: Price - } - Sell { - Account { - Address - } - Amount - Currency { - MintAddress - Decimals - Symbol - Name - } - PriceAgainstBuyCurrency: Price - } - } - Block { - Time - Height - } - Transaction { - Signature - FeePayer - Signer - } - } - } -} - -``` diff --git a/blog/authors.yml b/blog/authors.yml deleted file mode 100644 index 5f0a5a76..00000000 --- a/blog/authors.yml +++ /dev/null @@ -1,41 +0,0 @@ -astudnev: - name: Aleksey Studnev - title: Bitquery Technical Director - url: https://github.com/astudnev - image_url: https://github.com/astudnev.png - -gaurav: - name: Gaurav - title: Bitquery Business Developer - url: https://github.com/buddies2705 - image_url: https://github.com/buddies2705.png - -crox-safe: - name: Lucas - title: Bitquery Marketing Developer - url: https://github.com/crox-safe - image_url: https://github.com/crox-safe.png - -Divyasshree: - name: Divyasshree - title: Technical Writer - url: https://github.com/divyasshree-BQ - image_url: https://github.com/divyasshree-BQ.png - -Spendil: - name: Pavel - title: Frontend Developer - url: https://github.com/Spendil - image_url: https://github.com/Spendil.png - -dmitrybitquery: - name: Dmitry - title: Bitquery Development VP - url: https://github.com/dmitrybitquery - image_url: https://github.com/dmitrybitquery.png - -Olerinskaia: - name: Nadejda - title: Frontend VP - url: https://github.com/Olerinskaia - image_url: https://github.com/Olerinskaia.png diff --git a/docs/API-Blog/migrate-v1-v2.md b/docs/API-Blog/migrate-v1-v2.md index 9de6204a..5890039f 100644 --- a/docs/API-Blog/migrate-v1-v2.md +++ b/docs/API-Blog/migrate-v1-v2.md @@ -102,7 +102,7 @@ One of the major differences in v2 is how arguments and their values are handled Let's take this query in v1, where we get total number of unique currencies traded on Ethereum on a particular day. The `count` and `sum` aggregation is available in both v1 and v2. -``` +```graphql query MyQuery { ethereum(network: ethereum) { dexTrades(date: {is: "2024-01-01"}) { @@ -117,7 +117,7 @@ query MyQuery { - **Date Filtering**: Instead of a separate `date` field, v2 uses `Block.Date` for date filtering. - **Field Mapping**: The `buy_currency` and `sell_currency` fields in v1 are mapped to `Trade_Buy_Currency_SmartContract` and `Trade_Sell_Currency_SmartContract` respectively in v2. -``` +```graphql query MyQuery { EVM(network: eth, dataset: combined) { DEXTrades(where: {Block: {Date: {is: "2024-01-01"}}}) { @@ -139,7 +139,7 @@ To avoid this issue, in API v2, values are now represented as strings, allowing Let's take the below query which fetches the latest token details including USD values. -``` +```graphql { ethereum(network: ethereum) { dexTrades( @@ -195,7 +195,7 @@ There is no separate filter called `options` Next, we select the fields in the response -``` +```graphql { Block { Number @@ -254,4 +254,4 @@ To find your Bitquery API v1 key, log in to your [Bitquery account](https://acco ## V1 vs V2 : Data Points -![](/img/v1v2.png) +![Bitquery v1 to v2 API comparison](/img/v1v2.png) diff --git a/docs/API-Blog/track-token-lock-unlock.md b/docs/API-Blog/track-token-lock-unlock.md index fa98c075..3d80d062 100644 --- a/docs/API-Blog/track-token-lock-unlock.md +++ b/docs/API-Blog/track-token-lock-unlock.md @@ -235,7 +235,7 @@ This subscription query tracks transactions that signal token unlocks, providing In any query if you are not sure about the event name or signature, use the `includes` filter to filter the events. In the below example, let's track latest token lock and unlock events on Optimism by using `includes: "locked"` filter for Log Signatures. You can run the query [here](https://ide.bitquery.io/Optimism-token-unlocked) -``` +```graphql { EVM(dataset: archive, network: optimism) { Events( diff --git a/docs/API-Blog/what-are-internal-transactions-how-to-get-them.md b/docs/API-Blog/what-are-internal-transactions-how-to-get-them.md index 7c58ba81..d56ea78b 100644 --- a/docs/API-Blog/what-are-internal-transactions-how-to-get-them.md +++ b/docs/API-Blog/what-are-internal-transactions-how-to-get-them.md @@ -34,7 +34,7 @@ Internal transfers occur as part of the execution of smart contract functions ra In this example we are querying all transfers happening as a part of this `0x9c78b80a02c882db9d3d9add2d98243e4aeadb035fe9aacf82d04d51092db7fc` transaction by using the `Transfers` cube and setting `Call-> Index` to greater than 0. Run the query [here](https://ide.bitquery.io/Get-internal-transfers-of-tx) -``` +```graphql query MyQuery { EVM(dataset: archive, network: bsc) { Transfers( @@ -57,7 +57,7 @@ query MyQuery { ### Ethereum -``` +```graphql query MyQuery { EVM(dataset: archive, network: eth) { in: Calls( @@ -102,7 +102,7 @@ Explaining the query data ### BNB -``` +```graphql query MyQuery { EVM(dataset: archive, network: bsc) { in: Calls( @@ -139,7 +139,7 @@ Components ### BASE -``` +```graphql query MyQuery { EVM(dataset: archive, network: base) { in: Calls( @@ -189,11 +189,11 @@ Details: The internal transactions section provides details such as the sender and receiver addresses, the amount transferred, and the specific contract method called and gas used. -![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXd2u4PdpEvwZpwemeJ221AT2xGPrvHxjzzCuWdqbTQd64Mz_HJuX-O9ybhLjJmczfvuLkb9JwjBAVLB2lz7BO0b_VAPoeeXfOvIpSeA_uRQJg6Ya5W5oALK0hDPgLPq0uzxd4N_K4vcDUjLLR8rzF03t68g?key=5ttYeo2nskIw9kc9CkTdTA) +![Internal transactions example](https://lh7-rt.googleusercontent.com/docsz/AD_4nXd2u4PdpEvwZpwemeJ221AT2xGPrvHxjzzCuWdqbTQd64Mz_HJuX-O9ybhLjJmczfvuLkb9JwjBAVLB2lz7BO0b_VAPoeeXfOvIpSeA_uRQJg6Ya5W5oALK0hDPgLPq0uzxd4N_K4vcDUjLLR8rzF03t68g?key=5ttYeo2nskIw9kc9CkTdTA) There is also a graphical view that shows how funds flow between different addresses -![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXfpIcX5dHn8aERff9UJKN5qOzM7mFsuFmlP3b_zvMf2O4z27YRSnjDBUh4g0rXXha3xEaX_2U_cVHE2F6UQO_Da7VjyY5HPu6awAQ2TcofiixcuzMHuzDMs5KBJQ32TSwQU9a09RcOCNsZGOAS8ceMGZI5u?key=5ttYeo2nskIw9kc9CkTdTA) +![Internal transactions trace example](https://lh7-rt.googleusercontent.com/docsz/AD_4nXfpIcX5dHn8aERff9UJKN5qOzM7mFsuFmlP3b_zvMf2O4z27YRSnjDBUh4g0rXXha3xEaX_2U_cVHE2F6UQO_Da7VjyY5HPu6awAQ2TcofiixcuzMHuzDMs5KBJQ32TSwQU9a09RcOCNsZGOAS8ceMGZI5u?key=5ttYeo2nskIw9kc9CkTdTA) ### Tracing an Internal Transaction Example @@ -209,11 +209,11 @@ This is an example of an ETH transaction on the Bitquery Explorer using the trac [https://explorer.bitquery.io/ethereum/tx/0x26960e8c31dde5d76b69ba68201bfea5186555a7b44383f515d109ded74f3ac8/tracing](https://explorer.bitquery.io/ethereum/tx/0x26960e8c31dde5d76b69ba68201bfea5186555a7b44383f515d109ded74f3ac8/tracing) -![](/img/ApplicationExamples/eth_tree.png) +![Ethereum internal transaction call tree](/img/ApplicationExamples/eth_tree.png) Below is a graphical view that shows how funds flow between different addresses -![](/img/ApplicationExamples/eth_trace.png) +![Ethereum transaction trace](/img/ApplicationExamples/eth_trace.png) #### Binance (BNB) Smart Chain @@ -221,11 +221,11 @@ This is an example of a BSC transaction on the Bitquery Explorer using the traci [https://explorer.bitquery.io/bsc/tx/0x9c78b80a02c882db9d3d9add2d98243e4aeadb035fe9aacf82d04d51092db7fc/tracing](https://explorer.bitquery.io/bsc/tx/0x9c78b80a02c882db9d3d9add2d98243e4aeadb035fe9aacf82d04d51092db7fc/tracing) -![](/img/ApplicationExamples/bnb_tree.png) +![BNB Chain internal transaction call tree](/img/ApplicationExamples/bnb_tree.png) Below is a graphical view that shows how funds flow between different addresses -![](/img/ApplicationExamples/bnb_trace.png) +![BNB Chain transaction trace](/img/ApplicationExamples/bnb_trace.png) #### ARBITRUM @@ -233,11 +233,11 @@ This is an example of an Arbitrum transaction on the Bitquery Explorer using the [https://explorer.bitquery.io/arbitrum/tx/0x9346cd8afb33598d6ab57c3c83f5267ea96765e63e16b04e8dee7e599151c938/tracing](https://explorer.bitquery.io/arbitrum/tx/0x9346cd8afb33598d6ab57c3c83f5267ea96765e63e16b04e8dee7e599151c938/tracing) -![](/img/ApplicationExamples/arb_tree.png) +![Arbitrum internal transaction call tree](/img/ApplicationExamples/arb_tree.png) Below is a graphical view that shows how funds flow between different addresses -![](/img/ApplicationExamples/arb_trace.png) +![Arbitrum transaction trace](/img/ApplicationExamples/arb_trace.png) Here’s a practical example to help people understand the importance of tracing internal transactions: diff --git a/docs/authorization/how-to-generate.md b/docs/authorization/how-to-generate.md index a8c55a79..67fad1e8 100644 --- a/docs/authorization/how-to-generate.md +++ b/docs/authorization/how-to-generate.md @@ -105,7 +105,7 @@ Below is a code snippet in Python that shows you how to programmatically generat Ensure that `scope=api` is mentioned in the payload, -``` +```javascript import requests import json diff --git a/docs/authorization/how-to-use.md b/docs/authorization/how-to-use.md index 4ce2e063..9cd7d0f6 100644 --- a/docs/authorization/how-to-use.md +++ b/docs/authorization/how-to-use.md @@ -17,7 +17,7 @@ For the `wss` endpoint, the 2nd method is the only way, read more [here](/docs/a Below is an example in Python that mentions the token in the header. -``` +```javascript import requests import json diff --git a/docs/blockchain/Arbitrum/Blocks_Transactions.md b/docs/blockchain/Arbitrum/Blocks_Transactions.md index 29905a39..6939eeb6 100644 --- a/docs/blockchain/Arbitrum/Blocks_Transactions.md +++ b/docs/blockchain/Arbitrum/Blocks_Transactions.md @@ -12,7 +12,7 @@ In this section we'll have a look at some examples using the Arbitrum Transactio The query below retrieves the latest 10 transactions on the Arbitrum network. You can find the query [here](https://ide.bitquery.io/Latest-Transactions_3) -``` +```graphql { EVM(network: arbitrum, dataset: archive) { Transactions( @@ -47,7 +47,7 @@ You can find the query [here](https://ide.bitquery.io/Latest-Transactions_3) To retrieve the latest transactions from or to a specific wallet address we will be using the `any` filter which acts as the OR condition. This query fetches the 10 most recent transactions from/to the specified wallet address, ordered by the block time in descending order. -``` +```graphql { EVM(network: arbitrum, dataset: archive) { Transactions( @@ -84,7 +84,7 @@ To retrieve the latest transactions from or to a specific wallet address we will The query below retrieves the latest 10 blocks on the Arbitrum network. You can find the query [here](https://ide.bitquery.io/Latest-Arbitrum-blocks) -``` +```graphql query MyQuery { EVM(network: arbitrum) { Blocks(limit: {count: 10}, orderBy: {descending: Block_Time}) { diff --git a/docs/blockchain/Arbitrum/DexTrades.mdx b/docs/blockchain/Arbitrum/DexTrades.mdx index 00e28ff2..383057b5 100644 --- a/docs/blockchain/Arbitrum/DexTrades.mdx +++ b/docs/blockchain/Arbitrum/DexTrades.mdx @@ -202,7 +202,7 @@ Implementation of this data in a full scale project could be seen on [DEXRabbit] This query retrieves all DEX trades on the arbitrum where the Arbitrum currency is `ArbitrumCurrency` and the quote currency is `quoteCurrency` that occurred between the specified dates. You can find the query [here](https://ide.bitquery.io/Pair-last-trades_2) -``` +```graphql query ($network: evm_network!, $ArbitrumCurrency: String!, $limit: Int, $quoteCurrency: String!, $from: String, $till: String) { EVM(network: $network, dataset: archive) { sell: DEXTrades( @@ -309,7 +309,7 @@ This example uses the chain-specific **DEXTrades** cube via `EVM(network: arbitr You can find the query [here](https://ide.bitquery.io/Arbitrum-Dextrades-subscription) -``` +```graphql subscription { EVM(network: arbitrum) { DEXTrades { @@ -353,7 +353,7 @@ subscription { This query will give you top bought tokens on Arbitrum network in last 1 hour. Change the timestamp in `{Block: {Time: {since: "2024-12-24T08:20:00Z"}}}` accordingly. You can find the query [here](https://ide.bitquery.io/top-bought-tokens-on-Arbitrum#) -``` +```graphql query MyQuery { EVM(network: arbitrum) { DEXTradeByTokens( @@ -381,7 +381,7 @@ query MyQuery { Use below query to get price change 5min, 1h, 6h and 24h of a specific token. Change the `Currency{SmartContract}` and `Dex{SmartContract}` according to your needs. Test the query [here] (https://ide.bitquery.io/Price-change-5min-1hr-6hr-24hr-precentage-of-a-specific-token_1). -``` +```graphql query MyQuery { EVM(dataset: combined network:arbitrum) { DEXTradeByTokens( @@ -423,7 +423,7 @@ query MyQuery { Use below query to get top 10 Arbitrum Tokens by Price Change in last 1h. Test the query [here] (https://ide.bitquery.io/Top-10-arb-tokens-by-price-change-in-last-1-hr). -``` +```graphql query MyQuery { EVM(dataset: combined network:arbitrum) { DEXTradeByTokens( @@ -499,7 +499,7 @@ query MyQuery { This query will give you top sold tokens on Arbitrum network in last 1 hour. Change the timestamp in `{Block: {Time: {since: "2024-12-24T08:20:00Z"}}}` accordingly. You can find the query [here](https://ide.bitquery.io/Top-Sold-Tokens-on-Arbitrum#) -``` +```graphql query MyQuery { EVM(network: arbitrum) { DEXTradeByTokens( diff --git a/docs/blockchain/Arbitrum/Smart_Contract_Calls.md b/docs/blockchain/Arbitrum/Smart_Contract_Calls.md index 61d584ec..6a8d8fa7 100644 --- a/docs/blockchain/Arbitrum/Smart_Contract_Calls.md +++ b/docs/blockchain/Arbitrum/Smart_Contract_Calls.md @@ -12,7 +12,7 @@ In this section we will see how to get Arbitrum Smart contract calls information This query gets the transaction call trace for an Arbitrum transaction. The `Calls` API in the query returns a list of all calls made by the transaction. You can find the query [here](https://ide.bitquery.io/Transaction-Call-Trace-Arbitrum) -``` +```graphql query myquery($network: evm_network!, $hash: String!) { EVM(dataset: combined, network: $network) { Calls( diff --git a/docs/blockchain/Arbitrum/Smart_Contract_Events.md b/docs/blockchain/Arbitrum/Smart_Contract_Events.md index 6accf402..54509862 100644 --- a/docs/blockchain/Arbitrum/Smart_Contract_Events.md +++ b/docs/blockchain/Arbitrum/Smart_Contract_Events.md @@ -13,7 +13,7 @@ The query returns the 10 most recent `swap` events on the Arbitrum network. We g You can find the query [here](https://ide.bitquery.io/Swap-Events-Arbitrum) -``` +```graphql query ($network: evm_network, $limit: Int, $method: String) { EVM(dataset: archive, network: $network) { diff --git a/docs/blockchain/BSC/binance-memerush-api.md b/docs/blockchain/BSC/binance-memerush-api.md index 0fb273a7..e97f25db 100644 --- a/docs/blockchain/BSC/binance-memerush-api.md +++ b/docs/blockchain/BSC/binance-memerush-api.md @@ -630,7 +630,7 @@ Here's an example of [tracking Meme Rush token prices](https://ide.bitquery.io/l
Click to expand GraphQL query -``` +```graphql { Trading { Pairs( @@ -1180,7 +1180,7 @@ query MyQuery($token: String!) { } ``` -``` +```json { "token": "0x44442202ff27ee2297c128d0c1ae43a0fbb35701" } @@ -1196,7 +1196,7 @@ You can test the query [here](https://ide.bitquery.io/top-traders-of-a-meme-rush
Click to expand GraphQL query -``` +```graphql query topTraders($network: evm_network, $token: String) { EVM(network: $network, dataset: combined) { DEXTradeByTokens( @@ -1221,7 +1221,7 @@ query topTraders($network: evm_network, $token: String) { } ``` -``` +```json { "network": "bsc", "token": "0x44442202ff27ee2297c128d0c1ae43a0fbb35701" @@ -1237,7 +1237,7 @@ Using below API you can get the liquidity of a meme rush token. Subtract `200000
Click to expand GraphQL query -``` +```graphql query MyQuery { EVM(dataset: combined, network: bsc) { BalanceUpdates( diff --git a/docs/blockchain/BSC/bsc-balance-updates.md b/docs/blockchain/BSC/bsc-balance-updates.md index ed315597..d0d99cc6 100644 --- a/docs/blockchain/BSC/bsc-balance-updates.md +++ b/docs/blockchain/BSC/bsc-balance-updates.md @@ -31,7 +31,7 @@ Rebasing tokens (like Mountain Protocol's USDM) automatically adjust their total The query will subscribe you to real-time updates for balance changes on the BSC blockchain, providing a continuous stream of data as new transactions are processed and recorded. Here we have used address `0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c`. You can find the query [here](https://ide.bitquery.io/get-real-time-balance-updates-of-an-address_1) -``` +```graphql subscription { EVM(network: bsc) { BalanceUpdates( @@ -60,7 +60,7 @@ This query gets the top holders of a token filtered using `Currency: { SmartCont You can run the query [here](https://ide.bitquery.io/Top-10-holders-of-a-token-on-BSC) -``` +```graphql { EVM(network: bsc, aggregates: yes, dataset: combined) { @@ -87,7 +87,7 @@ We will aggregate balance update data for this API. [Run Query ➤](https://ide.bitquery.io/Top-10-holders-of-multiple-tokens-on-BSC) -``` +```graphql query { EVM(network: bsc, aggregates: yes, dataset: combined) { BalanceUpdates( @@ -121,7 +121,7 @@ query { Get the token holdings of an address and calculate the holding time using `first_buy_time` and `latest_balance_update_time`; test this query [here](https://ide.bitquery.io/holdings-holding-time-of-an-address-for-a-specific-token-on-EVM). -``` +```graphql query ($trader: String, $token: String) { EVM(network: bsc) { TransactionBalances( @@ -147,7 +147,7 @@ query ($trader: String, $token: String) { } ``` -``` +```json { "trader": "0xc5C2653d38E241D62F96A4fB8f8497b6126F21dC", "token": "0x49d870B1d21D00c775DD03110Ef4c8FeF4Fd4444" diff --git a/docs/blockchain/BSC/bsc-calls-api.mdx b/docs/blockchain/BSC/bsc-calls-api.mdx index b8389b58..ec9c74d4 100644 --- a/docs/blockchain/BSC/bsc-calls-api.mdx +++ b/docs/blockchain/BSC/bsc-calls-api.mdx @@ -15,7 +15,7 @@ The below query retrieves the latest successful smart contract calls on the BNB You can run it [here](https://ide.bitquery.io/Latest-Calls-on-BSC-network) -``` +```graphql { EVM(network: bsc) { Calls( @@ -69,7 +69,7 @@ You can run it [here](https://ide.bitquery.io/Latest-Calls-on-BSC-network) This subscription websocket lets you track the newly created tokens on BSC network. You will find the newly created token contract address in the response under `Receipt: ContractAddress` field. You can find the query [here](https://ide.bitquery.io/Newly-Created-Tokens-on-BSC-network_2#) -``` +```graphql subscription { EVM(network: bsc) { Calls( diff --git a/docs/blockchain/BSC/bsc-dextrades.mdx b/docs/blockchain/BSC/bsc-dextrades.mdx index 780038a5..d08f2a1d 100644 --- a/docs/blockchain/BSC/bsc-dextrades.mdx +++ b/docs/blockchain/BSC/bsc-dextrades.mdx @@ -121,7 +121,7 @@ This example uses the chain-specific **DEXTrades** cube via `EVM(network: bsc) { You can find the query [here](https://ide.bitquery.io/subscribe-to-bsc-dex-trades) -``` +```graphql subscription { EVM(network: bsc) { DEXTrades { @@ -174,7 +174,7 @@ subscription { This query will fetch you latest trades for a token for the BSC network. You can test the query [here](https://ide.bitquery.io/latest-trades-of-a-token-on-bsc). -``` +```graphql query LatestTrades($network: evm_network, $token: String) { EVM(network: $network) { DEXTradeByTokens( @@ -228,7 +228,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc/token/0x713 Get total bought, total sold, average sell price, and last active trade time for a specific token by a trader. Test the query [here](https://ide.bitquery.io/Total-buy-total-sell-avg-sell-last-active_1) -``` +```graphql query MyQuery($trader: String, $token: String) { EVM(dataset: realtime, network: bsc) { DEXTradeByTokens( @@ -263,7 +263,7 @@ query MyQuery($trader: String, $token: String) { ``` -``` +```json { "trader": "0xc5C2653d38E241D62F96A4fB8f8497b6126F21dC", "token": "0x49d870B1d21D00c775DD03110Ef4c8FeF4Fd4444" @@ -275,7 +275,7 @@ query MyQuery($trader: String, $token: String) { This query will fetch you top traders of a token for the BSC network. You can test the query [here](https://ide.bitquery.io/top-traders--token-bsc_3). -``` +```graphql query topTraders($network: evm_network, $token: String) { EVM(network: $network) { DEXTradeByTokens( @@ -313,7 +313,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc/token/0x713 This query will fetch you top traders by profit in the last 7 days for the BSC network. You can test the query [here](https://ide.bitquery.io/top-traders-in-last-7-days-by-profit_2). -``` +```graphql query TopTraders($network: evm_network) { EVM(network: $network) { DEXTradeByTokens( @@ -341,7 +341,7 @@ query TopTraders($network: evm_network) { This query will fetch you all the trading pairs of a token for the BSC network. You can test the query [here](https://ide.bitquery.io/trading-pairs-of-a-token). -``` +```graphql query tokenTrades($network: evm_network, $token: String, $time_10min_ago: DateTime, $time_1h_ago: DateTime, $time_3h_ago: DateTime) { EVM(network: $network) { DEXTradeByTokens( @@ -439,7 +439,7 @@ query MyQuery { This query will fetch you all the DEXs where a token is listed for the BSC network. You can test the query [here](https://ide.bitquery.io/get-all-dex-markets-for-a-token). -``` +```graphql query tokenDexMarkets($network: evm_network, $token: String) { EVM(network: $network) { DEXTradeByTokens( @@ -473,7 +473,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc/token/0x713 Use below query to get price change 5min, 1h, 6h and 24h of a specific token. Change the `Currency{SmartContract}` and `Dex{SmartContract}` according to your needs. Test the query [here] (https://ide.bitquery.io/Price-change-5min-1hr-6hr-precentage-of-a-specific-token_3). -``` +```graphql query MyQuery { EVM(dataset: combined network:bsc) { DEXTradeByTokens( @@ -515,7 +515,7 @@ query MyQuery { Use below query to get top 10 BSC Tokens by Price Change in last 1h. Test the query [here] (https://ide.bitquery.io/Top-10-bsc-tokens-by-price-change-in-last-1-hr). -``` +```graphql query MyQuery { EVM(dataset: combined network:bsc) { DEXTradeByTokens( @@ -590,7 +590,7 @@ query MyQuery { This query will fetch you the OHLC of a token for the BSC network. You can test the query [here](https://ide.bitquery.io/OHLC-for-a-token-on-bsc_1). -``` +```graphql query tradingView($network: evm_network, $token: String) { EVM(network: $network) { DEXTradeByTokens( @@ -625,7 +625,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc/token/0x713 This query will fetch you latest trades for a token pair for the BSC network. You can test the query [here](https://ide.bitquery.io/Latest-price-of-a-token-on-bsc). -``` +```graphql query LatestTrades($network: evm_network, $token: String, $base: String) { EVM(network: $network) { DEXTradeByTokens( @@ -680,7 +680,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc/pair/0x711b This query will fetch you the OHLC of a token pair for the BSC network. You can test the query [here](https://ide.bitquery.io/BSC-OHLC-API-For-Token-Pair). -``` +```graphql query tradingViewPairs { EVM(network: bsc, dataset: realtime) { DEXTradeByTokens( @@ -707,7 +707,7 @@ query tradingViewPairs { This query will fetch you top traders of a token pair for the BSC network. You can test the query [here](https://ide.bitquery.io/pair-top-traders_2). -``` +```graphql query pairTopTraders($network: evm_network, $token: String, $base: String) { EVM(network: $network) { DEXTradeByTokens( @@ -839,7 +839,7 @@ To stream **a token on that DEX**, keep the same **`Pair.Market`** filters and a This query will fetch you all the DEXs where a token pair is listed for the BSC network. You can test the query [here](https://ide.bitquery.io/pair-dex-list_5). -``` +```graphql query pairDexList($network: evm_network, $token: String, $base: String, $time_10min_ago: DateTime, $time_1h_ago: DateTime, $time_3h_ago: DateTime) { EVM(network: $network) { DEXTradeByTokens( @@ -887,7 +887,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc/pair/0x711b This query will fetch you top gainers for the BSC network. You can test the query [here](https://ide.bitquery.io/bsc-top-gainers). -``` +```graphql query ($network: evm_network) { EVM(network: $network) { DEXTradeByTokens(orderBy: {descendingByField: "usd"}, limit: {count: 100}) { @@ -930,7 +930,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc). This query will fetch you top bought tokens for the BSC network. Arranged in descending order of `bought - sold`. You can test the query [here](https://ide.bitquery.io/top-bought-bsc). -``` +```graphql query timeDiagram($network: evm_network) { EVM(network: $network) { DEXTradeByTokens(orderBy: {descendingByField: "buy"}, limit: {count: 100}) { @@ -960,7 +960,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc). This query will fetch you top sold tokens for the BSC network. Arranged in descending order of `sold - bought`. You can test the query [here](https://ide.bitquery.io/top-sold-bsc). -``` +```graphql query timeDiagram($network: evm_network) { EVM(network: $network) { DEXTradeByTokens(orderBy: {descendingByField: "sell"}, limit: {count: 100}) { @@ -990,7 +990,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc). This query retrieves all the DEXes operating on BSC network and gives info such as `ProtocolName` , `ProtocolVersion` and `ProtocolFamily`. Find the query [here](https://ide.bitquery.io/Get-all-the-DEXs-on-BSC-network). -``` +```graphql query MyQuery { EVM(network: bsc, dataset: realtime) { DEXTrades { @@ -1012,7 +1012,7 @@ query MyQuery { This query provides real-time updates on price of ETH `0x2170Ed0880ac9A755fd29B2688956BD959F933F8` in terms of WBNB `0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c`, including details about the DEX, market, and order specifics. Find the query [here](https://ide.bitquery.io/realtime-price-of-a-ETH-in-terms-of-WBNB) -``` +```graphql subscription { EVM(network: bsc) { DEXTrades( @@ -1065,7 +1065,7 @@ subscription { The below query retrieves the USD price of a token on BSC by setting `{Trade: {Buy: {Currency: {SmartContract: {is: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"}}}}}` . Check the field `PriceInUSD` for the USD value. You can access the query [here](https://ide.bitquery.io/realtime-usd-price-of-a-WBNB). -``` +```graphql subscription { EVM(network: bsc) { DEXTrades( @@ -1120,7 +1120,7 @@ Browse multi-chain stablecoin DEX prices on [DEXrabbit's Stablecoins category](h [Run in Bitquery IDE](https://ide.bitquery.io/evm-peg-health_1) -``` +```graphql { EVM(network: bsc) { DEXTradeByTokens( @@ -1170,7 +1170,7 @@ Browse multi-chain stablecoin DEX prices on [DEXrabbit's Stablecoins category](h This query will fetch you all the DEXs info for the BSC network. You can test the query [here](https://ide.bitquery.io/all-dexs-info-on-bsc). -``` +```graphql query DexMarkets($network: evm_network) { EVM(network: $network) { DEXTradeByTokens { @@ -1199,7 +1199,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc/dex_market) This query will fetch you a specific DEX stats for the BSC network. You can test the query [here](https://ide.bitquery.io/particular-dex-stats). -``` +```graphql query DexMarkets($network: evm_network, $market: String) { EVM(network: $network) { DEXTradeByTokens( @@ -1231,7 +1231,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc/dex_market/ This query will fetch you all trading pairs on a particular DEX for the BSC network. You can test the query [here](https://ide.bitquery.io/trading-pairs-on-a-specific-dex_1). -``` +```graphql query DexMarkets($network: evm_network, $market: String, $time_10min_ago: DateTime, $time_1h_ago: DateTime, $time_3h_ago: DateTime) { EVM(network: $network) { DEXTradeByTokens( @@ -1288,7 +1288,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc/dex_market/ This query will fetch you Top Traders on a particular DEX for the BSC network. You can test the query [here](https://ide.bitquery.io/top-traders-on-a-specific-dex_1). -``` +```graphql query DexMarkets($network: evm_network, $market: String) { EVM(network: $network) { DEXTradeByTokens( @@ -1335,7 +1335,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/bsc/dex_market/ This query will fetch you latest trades on a particular DEX for the BSC network. You can test the query [here](https://ide.bitquery.io/latest-trades-on-a-particular-dex). -``` +```graphql query LatestTrades($network: evm_network, $market: String) { EVM(network: $network) { DEXTradeByTokens( @@ -1393,7 +1393,7 @@ Get up to 100 tokens with aggregated USD volume and average price over the last ▶️ [Aggregated Token Data](https://ide.bitquery.io/aggregated-data) -``` +```graphql { Trading { Tokens( @@ -1448,7 +1448,7 @@ For **EVM chains** (Ethereum, BSC, etc.) in the Trading API, use **all lowercase [Run in Bitquery IDE](https://ide.bitquery.io/volume-of-a-token_1) -``` +```graphql query { TokenAsBase: Trading { Pairs( diff --git a/docs/blockchain/BSC/bsc-events-api.mdx b/docs/blockchain/BSC/bsc-events-api.mdx index 5f79d10f..3cbb9607 100644 --- a/docs/blockchain/BSC/bsc-events-api.mdx +++ b/docs/blockchain/BSC/bsc-events-api.mdx @@ -14,7 +14,7 @@ import VideoPlayer from "../../../src/components/videoplayer.js"; This subscription websocket lets you track the newly created pools on Uniswap V3 `0xdB1d10011AD0Ff90774D0C6Bb92e5C5c8b4461F7`. And we are listening for a particular event here named as `PoolCreated` because whenever a new pool is created on Uniswap V3 this event is fired. You can get the newly created pool address in the response in `arguments`. You can find the query [here](https://ide.bitquery.io/Newly-Created-Pools-on-Uniswap-v3-on-BSC-network_3#) -``` +```graphql subscription { EVM(network: bsc) { Events( diff --git a/docs/blockchain/BSC/bsc-nft.md b/docs/blockchain/BSC/bsc-nft.md index 576bf281..cb70a80a 100644 --- a/docs/blockchain/BSC/bsc-nft.md +++ b/docs/blockchain/BSC/bsc-nft.md @@ -11,7 +11,7 @@ In this section we'll have a look at some examples using the BSC NFT API. This query subscribes you to the real time non-fungible token (NFT) transfers of a specific nft contract on the BSC network. You can find the query [here](https://ide.bitquery.io/Track-realtime-NFT-Transfers-of-a-specific-NFT-on-BSC-chain) -``` +```graphql subscription { EVM(network: bsc) { Transfers( diff --git a/docs/blockchain/BSC/bsc-transfers.md b/docs/blockchain/BSC/bsc-transfers.md index c86526be..4c2aca2c 100644 --- a/docs/blockchain/BSC/bsc-transfers.md +++ b/docs/blockchain/BSC/bsc-transfers.md @@ -10,7 +10,7 @@ In this section we'll have a look at some examples using the BSC Transfers API. The subscription query below fetches the whale transactions on the BSC network. We have used WBNB address `0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c`. You can find the query [here](https://ide.bitquery.io/Whale-transfers-of-USDC-on-BSC) -``` +```graphql subscription{ EVM(network: bsc) { Transfers( @@ -43,7 +43,7 @@ subscription{ This websocket retrieves transfers where the sender is a particular address `0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c`. For this subscription query we use `where` keyword and in that we specify `{Transfer: {Sender: {is: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"}}}` to get the desired data. You can find the query [here](https://ide.bitquery.io/Transfers-where-sender-is-a-particular-address) -``` +```graphql subscription { EVM(network: bsc) { Transfers( @@ -75,7 +75,7 @@ subscription { [Run Query](https://ide.bitquery.io/Sender-OR-Receiver-Transfer-Example-BSC) -``` +```graphql query MyQuery { EVM(dataset: archive, network: bsc) { Transfers( @@ -111,7 +111,7 @@ query MyQuery { Let's see an example of NFT token transfers using GraphQL Subscription (Webhook). In the following NFT Token Transfers API, we will be subscribing to all NFT token transfers on BSC network. You can run the query [here](https://ide.bitquery.io/Track-realtime-NFT-Transfers-on-BSC-chain) -``` +```graphql subscription { EVM(network: bsc) { Transfers( diff --git a/docs/blockchain/BSC/four-meme-api.mdx b/docs/blockchain/BSC/four-meme-api.mdx index 9695242d..ea3a688a 100644 --- a/docs/blockchain/BSC/four-meme-api.mdx +++ b/docs/blockchain/BSC/four-meme-api.mdx @@ -802,7 +802,7 @@ Here's an example of [tracking Four.meme token prices](https://ide.bitquery.io/l
Click to expand GraphQL query -``` +```graphql { Trading { Pairs( @@ -1691,7 +1691,7 @@ You can run the query [here](https://ide.bitquery.io/Liquidity-Added-to-specific
Click to expand GraphQL query -``` +```graphql { EVM(dataset: realtime, network: bsc) { Events( @@ -1777,7 +1777,7 @@ You can run the query [here](https://ide.bitquery.io/Liquidity-Added-to-specific
Click to expand GraphQL query -``` +```graphql { EVM(dataset: realtime, network: bsc) { Events( @@ -1910,7 +1910,7 @@ query MyQuery($token: String) { } ``` -``` +```json { "token": "0x35a7bb282d8caafe71617c9d52ee30f1adfe4444" } @@ -1962,7 +1962,7 @@ query MyQuery($token: String!, $buyersList: [String!]) { } ``` -``` +```json { "token": "0x35a7BB282d8CAAFe71617c9d52EE30F1adFe4444", "buyersList" : [Pass the Address list you getting in Query 1] @@ -2035,7 +2035,7 @@ You can test the query [here](https://ide.bitquery.io/top-traders-of-a-four-meme
Click to expand GraphQL query -``` +```graphql query topTraders($network: evm_network, $token: String) { EVM(network: $network, dataset: combined) { DEXTradeByTokens( @@ -2073,7 +2073,7 @@ Using below API you can get the liquidity of a four meme token. Subtract `200000
Click to expand GraphQL query -``` +```graphql query MyQuery { EVM(dataset: combined, network: bsc) { BalanceUpdates( diff --git a/docs/blockchain/BSC/gra-fun-api.md b/docs/blockchain/BSC/gra-fun-api.md index 08688f27..fff8044e 100644 --- a/docs/blockchain/BSC/gra-fun-api.md +++ b/docs/blockchain/BSC/gra-fun-api.md @@ -394,7 +394,7 @@ To get all transfers of on GRA.fun, please check [this query](https://ide.bitque Use this API to get Pancake V3 APIs using [this api](https://ide.bitquery.io/Trades-of-token-on-pancake-v3) -``` +```graphql { EVM(dataset: archive, network: bsc) { DEXTrades( @@ -444,7 +444,7 @@ Use this API to get Pancake V3 APIs using [this api](https://ide.bitquery.io/Tra Get 1st trade of token on Pancake v3 using [this api](https://ide.bitquery.io/Trades-of-token-on-pancake-v3_5). -``` +```graphql { EVM(dataset: combined, network: bsc) { DEXTrades( diff --git a/docs/blockchain/Base/base-dextrades.mdx b/docs/blockchain/Base/base-dextrades.mdx index eab6bc45..4a7e3927 100644 --- a/docs/blockchain/Base/base-dextrades.mdx +++ b/docs/blockchain/Base/base-dextrades.mdx @@ -104,7 +104,7 @@ This example uses the chain-specific **DEXTrades** cube via `EVM(network: base) Read [DEXTrades vs DEXTradeByTokens vs Trades cube](/docs/cubes/dextrades-dextradebytokens-trading-trades) to get a better understanding on when to use which cube. You can find the query [here](https://ide.bitquery.io/subscribe-to-dex-trades-on-base) -``` +```graphql subscription MyQuery { EVM(network: base) { DEXTrades { @@ -172,7 +172,7 @@ subscription MyQuery { This query provides real-time updates on price of USDC `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` in terms of DAI `0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb`, including details about the DEX, market, and order specifics. Find the query [here](https://ide.bitquery.io/Price-of-USDC-in-terms-of-DAI-on-Base-network#) -``` +```graphql subscription { EVM(network: base) { DEXTrades( @@ -215,7 +215,7 @@ subscription { The below query retrieves the USD price of a token on Base chain by setting `SmartContract: {is: "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb"}` . Check the field `PriceInUSD` for the USD value. You can access the query [here](https://ide.bitquery.io/Get-latest-price-of-DAI-in-USD-on-Base#). -``` +```graphql subscription { EVM(network: base) { DEXTradeByTokens( @@ -305,7 +305,7 @@ query MyQuery { Use below query to get price change 5min, 1h, 6h and 24h of a specific token. Change the `Currency{SmartContract}` and `Dex{SmartContract}` according to your needs. Test the query [here] (https://ide.bitquery.io/Price-change-5min-1hr-6hr-24h-precentage-of-a-specific-token). -``` +```graphql query MyQuery { EVM(dataset: combined network:base) { DEXTradeByTokens( @@ -347,7 +347,7 @@ query MyQuery { Use below query to get top 10 Base Tokens by Price Change in last 1h. Test the query [here] (https://ide.bitquery.io/Top-10-base-tokens-by-price-change-in-last-1-hr). -``` +```graphql query MyQuery { EVM(dataset: combined network:base) { DEXTradeByTokens( @@ -424,7 +424,7 @@ Get up to 100 tokens with aggregated USD volume and average price over the last ▶️ [Aggregated Token Data](https://ide.bitquery.io/aggregated-data) -``` +```graphql { Trading { Tokens( diff --git a/docs/blockchain/Base/base-nft.md b/docs/blockchain/Base/base-nft.md index f8903dc8..b52fd629 100644 --- a/docs/blockchain/Base/base-nft.md +++ b/docs/blockchain/Base/base-nft.md @@ -11,7 +11,7 @@ In this section we'll have a look at some examples on how to get NFT information This query subscribes you to the real time transfers of a specific non-fungible token (NFT) on the Base network. You can find the query [here](https://ide.bitquery.io/Transfers-of-a-particular-NFT_1#) -``` +```graphql subscription { EVM(network: base) { Transfers( diff --git a/docs/blockchain/Base/base-transfers.mdx b/docs/blockchain/Base/base-transfers.mdx index 48509c41..771765e1 100644 --- a/docs/blockchain/Base/base-transfers.mdx +++ b/docs/blockchain/Base/base-transfers.mdx @@ -12,7 +12,7 @@ import VideoPlayer from "../../../src/components/videoplayer.js"; The subscription query below fetches the whale transactions on the Base network. We have used USDC address `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`. You can find the query [here](https://ide.bitquery.io/Whale-transfers-of-USDC-on-base#) -``` +```graphql subscription { EVM(network: base) { Transfers( @@ -45,7 +45,7 @@ subscription { This websocket retrieves transfers where the sender is a particular address `0x3304E22DDaa22bCdC5fCa2269b418046aE7b566A`. For this subscription query we use `where` keyword and in that we specify `{Transfer: {Sender: {is: "0x3304E22DDaa22bCdC5fCa2269b418046aE7b566A"}}}` to get the desired data. You can find the query [here](https://ide.bitquery.io/Sender-is-a-particular-address_3#) -``` +```graphql subscription { EVM(network: base) { Transfers( @@ -77,7 +77,7 @@ subscription { Let's see an example of NFT token transfers using GraphQL Subscription (Webhook). In the following NFT Token Transfers API, we will be subscribing to all NFT token transfers on Base network. You can run the query [here](https://ide.bitquery.io/NFT-Token-Transfers-API_4#) -``` +```graphql subscription { EVM(network: base) { Transfers(where: {Transfer: {Currency: {Fungible: false}}}) { @@ -111,7 +111,7 @@ This below query will give you all the transfers of a particular NFT `0xb68CA010 You can test out the query [here](https://ide.bitquery.io/get-all-transfers-of-a-specific-nft). -``` +```graphql query MyQuery { EVM(network: base, dataset: realtime) { Transfers( @@ -146,7 +146,7 @@ We use the `any` filter [ OR condition] to get transactions from or to a wallet. [Run Query](https://ide.bitquery.io/tx-from-to-base-address) -``` +```graphql query MyQuery { EVM(dataset: archive, network: base) { Transfers( diff --git a/docs/blockchain/Base/base-zora-api.md b/docs/blockchain/Base/base-zora-api.md index dae7e8ab..472b683a 100644 --- a/docs/blockchain/Base/base-zora-api.md +++ b/docs/blockchain/Base/base-zora-api.md @@ -326,7 +326,7 @@ query ($address: String) { [Run Query](https://ide.bitquery.io/Latest-Trades-of-a-Token-on-Zora-Base) -``` +```graphql { EVM(dataset: realtime, network: base) { DEXTrades( diff --git a/docs/blockchain/Ethereum/balances/transaction-balance-tracker/eth-mev-balance-tracker.md b/docs/blockchain/Ethereum/balances/transaction-balance-tracker/eth-mev-balance-tracker.md index 52f33c5a..d63d40ca 100644 --- a/docs/blockchain/Ethereum/balances/transaction-balance-tracker/eth-mev-balance-tracker.md +++ b/docs/blockchain/Ethereum/balances/transaction-balance-tracker/eth-mev-balance-tracker.md @@ -98,7 +98,7 @@ quickly see how large each MEV reward was. [Try the API](https://ide.bitquery.io/QuasarBuilder-MEV-Payout-Transaction-Balance) -``` +```graphql { EVM(network: eth) { TransactionBalances( diff --git a/docs/blockchain/Ethereum/calls/contract-creation.md b/docs/blockchain/Ethereum/calls/contract-creation.md index ae122163..5ff89c72 100644 --- a/docs/blockchain/Ethereum/calls/contract-creation.md +++ b/docs/blockchain/Ethereum/calls/contract-creation.md @@ -11,7 +11,7 @@ Smart contract creators can use these queries to track the deployment of their o This subscription will return information on each new smart contract created on Ethereum. You can create a [websocket](/docs/subscriptions/websockets/) to monitor the same in real-time. -``` +```graphql subscription { eth_creates: EVM(network: eth) { creates: Calls( @@ -50,7 +50,7 @@ This subscription has information on This query below, will return the number of new smart contracts created on the Ethereum and Binance Smart Chain networks since a particular date. It will also return the date of each day on which new smart contracts were created. You can find the query [here](https://ide.bitquery.io/ETHBSC-SC-creates-count-over-date) -``` +```graphql query { eth_creates: EVM(dataset: archive network: eth) { creates: Calls( @@ -83,7 +83,7 @@ query { This query will return the most recent transaction that created the token contract. The `Output` field of the Call object in the transaction contains the encoded bytecode of the contract. Replace `0xc923D39fA2d97fb4B660Fc66DAdB1421605975E0` with the token contract address that you want to get the code for. You can find the query [here](https://ide.bitquery.io/ByteCode-of-A-Token) -``` +```graphql { eth_creates: EVM(dataset: archive, network: eth) { creates: Calls( @@ -114,7 +114,7 @@ You can use calls api to get smart contract creator or deployer of a smart contr Try this query [here](https://ide.bitquery.io/creator--deployer-of-an-address_1). -``` +```graphql { EVM(dataset: combined) { Calls( @@ -144,7 +144,7 @@ For example, You can run the query [here](https://ide.bitquery.io/Get-Contract-Type-in-v2) -``` +```graphql query MyQuery { EVM(network: eth) { Transfers( diff --git a/docs/blockchain/Ethereum/calls/smartcontract-filterby.md b/docs/blockchain/Ethereum/calls/smartcontract-filterby.md index 17115b8c..49c30b09 100644 --- a/docs/blockchain/Ethereum/calls/smartcontract-filterby.md +++ b/docs/blockchain/Ethereum/calls/smartcontract-filterby.md @@ -10,7 +10,7 @@ description: "Ethereum Smartcontract Filterby: query and stream Ethereum on-chai This query retrieves the 10 most recent smart contract calls that match a specific function signature (harvest()) on the Binance Smart Chain (BSC) network. It also includes transaction and block data associated with each call. You can find the GraphQL query [here](https://graphql.bitquery.io/ide/Calls-by-Method-Signature) -``` +```graphql query MyQuery { EVM(dataset: archive, network: bsc) { Calls( @@ -64,7 +64,7 @@ The query returns the following data for each smart contract call: This GraphQL query retrieves information about the latest STATICCALL EVM (Ethereum Virtual Machine) calls on the Binance Smart Chain network. You can find the GraphQL query [here](https://graphql.bitquery.io/ide/Smart-Contract-Calls-by-Opcode) -``` +```graphql query MyQuery { EVM(dataset: archive, network: bsc) { Calls( @@ -117,7 +117,7 @@ The Array-like structure of [Arguments and Returns](/docs/schema/evm/arguments/) This [query](https://ide.bitquery.io/smart_contract_argument_transfer) demonstrates how we can trace transfer calls to a particular token contract, Matic Token in this case, that are being transferred to a specified wallet address. This is useful for monitoring the inflow of a specific token to a certain wallet. -``` +```graphql query MyQuery { EVM(dataset: archive, network: eth) { Calls( @@ -192,7 +192,7 @@ Let's consider a scenario where we're interested in tracking large liquidity add By [this](https://ide.bitquery.io/addLiquidityETH_function) query, We can track calls to the function ` addLiquidityETH ` which is a common function used in Uniswap for adding liquidity to a pool. -``` +```graphql query MyQuery { EVM(dataset: archive, network: eth) { Calls( diff --git a/docs/blockchain/Ethereum/calls/smartcontract.md b/docs/blockchain/Ethereum/calls/smartcontract.md index 64bab834..40456051 100644 --- a/docs/blockchain/Ethereum/calls/smartcontract.md +++ b/docs/blockchain/Ethereum/calls/smartcontract.md @@ -67,7 +67,7 @@ This GraphQL query fetches data from the "eth" network about the 10 most recent You can run the query [here](https://ide.bitquery.io/smart-contract-creation-on-EVM-chains) -``` +```graphql query MyQuery { EVM(dataset: realtime, network: eth) { Calls( diff --git a/docs/blockchain/Ethereum/dextrades/DEXScreener/evm_dexscreener.mdx b/docs/blockchain/Ethereum/dextrades/DEXScreener/evm_dexscreener.mdx index 9f404865..ba6cdfcf 100644 --- a/docs/blockchain/Ethereum/dextrades/DEXScreener/evm_dexscreener.mdx +++ b/docs/blockchain/Ethereum/dextrades/DEXScreener/evm_dexscreener.mdx @@ -39,7 +39,7 @@ The query will fetch you the Top Trading Pairs in desceneding order of the total You can find the query [here](https://ide.bitquery.io/List-of-trading-pairs-in-descending-order-of-trxns-in-last-24-hours) -``` +```graphql query TrendingPairs { EVM(dataset: combined, network: eth) { DEXTradeByTokens( @@ -80,7 +80,7 @@ query TrendingPairs { The query will subscribe you to real-time trade transactions for a pair, providing a continuous stream of data as new trades are processed and recorded. You can find the query [here](https://ide.bitquery.io/Get-pair-trades-data-just-like-dexcsreener) -``` +```graphql subscription{ EVM(network: eth) { DEXTradeByTokens( @@ -127,7 +127,7 @@ subscription{ This query will give you the latest Price of a specified token using Trading API. Here is the [saved query link](https://ide.bitquery.io/token-usd-price-using-trading-api) -``` +```graphql query MyQuery { Trading { Pairs( @@ -168,7 +168,7 @@ The below query finds the liquidity of a pool using the pool address `0xc2eaB7d3 You can find the query [here](https://ide.bitquery.io/Get-liquidity-of-a-pair_1) -``` +```graphql query MyQuery { EVM(dataset: archive, network: eth) { BalanceUpdates( @@ -191,7 +191,7 @@ The query will fetch you the buys, sells, buy volume, sell volume and also the n You can find the query [here](https://ide.bitquery.io/Buys-Sells-BuyVolume-SellVolume-Makers-TotalTradedVolume-PriceinUSD-for-a-eth-pair#) -``` +```graphql query MyQuery($network: evm_network, $token: String,$pairAddress: String , $min5_timestamp: DateTime, $hr1_timestamp: DateTime) { EVM(dataset: realtime, network: $network) { DEXTradeByTokens( @@ -292,7 +292,7 @@ This query fetches the Open, High, Low, and Close (OHLC) price data (USD-quoted) You can find the query [here](https://ide.bitquery.io/ohlc-of-a-token-pair-1-hour-interval) -``` +```graphql query MyQuery { Trading { Pairs( @@ -338,7 +338,7 @@ query MyQuery { This query will fetch you top traders of a token for the selected network. You can test the query [here](https://ide.bitquery.io/top-traders-of-a-token_1). -``` +```graphql query topTraders($network: evm_network, $token: String) { EVM(network: $network) { DEXTradeByTokens( diff --git a/docs/blockchain/Ethereum/dextrades/crypto-coin-ticker.md b/docs/blockchain/Ethereum/dextrades/crypto-coin-ticker.md index c686b822..418e6c6a 100644 --- a/docs/blockchain/Ethereum/dextrades/crypto-coin-ticker.md +++ b/docs/blockchain/Ethereum/dextrades/crypto-coin-ticker.md @@ -84,7 +84,7 @@ subscription { Open this API on our [GraphQL IDE](https://ide.bitquery.io/Coin-ticker-api_4). -``` +```graphql { EVM(dataset: realtime) { DEXTradeByTokens( diff --git a/docs/blockchain/Ethereum/dextrades/dex-api.md b/docs/blockchain/Ethereum/dextrades/dex-api.md index 442e18d6..49772ffd 100644 --- a/docs/blockchain/Ethereum/dextrades/dex-api.md +++ b/docs/blockchain/Ethereum/dextrades/dex-api.md @@ -31,7 +31,7 @@ To learn the difference between two APIs, please check [this doc](/docs/schema/e This query will fetch you all the DEXs info for the selected network. You can test the query [here](https://ide.bitquery.io/dex-markets). -``` +```graphql query DexMarkets($network: evm_network) { EVM(network: $network) { DEXTradeByTokens { @@ -60,7 +60,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/eth/dex_market) This query will fetch you a specific DEX stats for the selected network. You can test the query [here](https://ide.bitquery.io/dex-info). -``` +```graphql query DexMarkets($network: evm_network, $market: String) { EVM(network: $network) { DEXTradeByTokens( @@ -92,7 +92,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/eth/dex_market/ This query will fetch you all trading pairs on a particular DEX for the selected network. You can test the query [here](https://ide.bitquery.io/trading-pairs-on-a-specific-dex). -``` +```graphql query DexMarkets($network: evm_network, $market: String, $time_10min_ago: DateTime, $time_1h_ago: DateTime, $time_3h_ago: DateTime) { EVM(network: $network) { DEXTradeByTokens( @@ -149,7 +149,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/eth/dex_market/ This query will fetch you Top Traders on a particular DEX for the selected network. You can test the query [here](https://ide.bitquery.io/top-traders-on-a-DEX_1). -``` +```graphql query DexMarkets($network: evm_network, $market: String) { EVM(network: $network) { DEXTradeByTokens( @@ -196,7 +196,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/eth/dex_market/ This query will fetch you latest trades on a particular DEX for the selected network. You can test the query [here](https://ide.bitquery.io/latest-trades_5). -``` +```graphql query LatestTrades($network: evm_network, $market: String) { EVM(network: $network) { DEXTradeByTokens( diff --git a/docs/blockchain/Ethereum/dextrades/ethereum-slippage-api.md b/docs/blockchain/Ethereum/dextrades/ethereum-slippage-api.md index f6d18b10..f3edea57 100644 --- a/docs/blockchain/Ethereum/dextrades/ethereum-slippage-api.md +++ b/docs/blockchain/Ethereum/dextrades/ethereum-slippage-api.md @@ -154,7 +154,7 @@ This subscription query retrieves real-time slippage data for Uniswap V4 pools o You can find the query [here](https://ide.bitquery.io/realtime-pair-slippage-on-ethereum-uniswap-v4) -``` +```graphql subscription { EVM(network: eth) { DEXPoolSlippages( diff --git a/docs/blockchain/Ethereum/dextrades/evm-bullx-api.md b/docs/blockchain/Ethereum/dextrades/evm-bullx-api.md index 40919673..b66d24f9 100644 --- a/docs/blockchain/Ethereum/dextrades/evm-bullx-api.md +++ b/docs/blockchain/Ethereum/dextrades/evm-bullx-api.md @@ -16,7 +16,7 @@ The query will fetch you the Top Trading Pairs in desceneding order of the total You can find the query [here](https://ide.bitquery.io/List-of-trading-pairs-in-descending-order-of-trxns-in-last-24-hours) -``` +```graphql query TrendingPairs { EVM(dataset: combined, network: eth) { DEXTradeByTokens( @@ -57,7 +57,7 @@ query TrendingPairs { The query will subscribe you to real-time trade transactions for a pair, providing a continuous stream of data as new trades are processed and recorded. You can find the query [here](https://ide.bitquery.io/Get-pair-trades-data-just-like-dexcsreener) -``` +```graphql subscription{ EVM(network: eth) { DEXTradeByTokens( @@ -104,7 +104,7 @@ subscription{ This query will give you the latest Price of a specified token using DEXTrades API. Here we have calculated the price of a token in USD and also against the sell currency. Here is the [saved query link](https://ide.bitquery.io/Price-of-a-token-in-realtime) -``` +```graphql query MyQuery { EVM(network: eth, dataset: realtime) { DEXTrades( @@ -138,7 +138,7 @@ The below query finds the liquidity of a pool using the pool address `0xc2eaB7d3 You can find the query [here](https://ide.bitquery.io/Get-liquidity-of-a-pair_1) -``` +```graphql query MyQuery { EVM(dataset: archive, network: eth) { BalanceUpdates( @@ -161,7 +161,7 @@ The query will fetch you the buys, sells, buy volume, sell volume and also the n You can find the query [here](https://ide.bitquery.io/Buys-Sells-BuyVolume-SellVolume-Makers-TotalTradedVolume-PriceinUSD-for-a-eth-pair#) -``` +```graphql query MyQuery($network: evm_network, $token: String,$pairAddress: String , $min5_timestamp: DateTime, $hr1_timestamp: DateTime) { EVM(dataset: realtime, network: $network) { DEXTradeByTokens( @@ -262,7 +262,7 @@ This query retrieves the Open, High, Low, and Close (OHLC) prices in USD for a s You can find the query [here](https://ide.bitquery.io/WETH-USDT-OHLC-on-Ethereum_1) -``` +```graphql { EVM(network: eth, dataset: archive) { DEXTradeByTokens( @@ -291,7 +291,7 @@ You can find the query [here](https://ide.bitquery.io/WETH-USDT-OHLC-on-Ethereum This query will fetch you top traders of a token for the selected network. You can test the query [here](https://ide.bitquery.io/top-traders-of-a-token_7). -``` +```graphql query topTraders($network: evm_network, $token: String) { EVM(network: $network) { DEXTradeByTokens( diff --git a/docs/blockchain/Ethereum/dextrades/evm-geckoterminal-api.md b/docs/blockchain/Ethereum/dextrades/evm-geckoterminal-api.md index e5c82b1f..a3022cde 100644 --- a/docs/blockchain/Ethereum/dextrades/evm-geckoterminal-api.md +++ b/docs/blockchain/Ethereum/dextrades/evm-geckoterminal-api.md @@ -39,7 +39,7 @@ The query will fetch you the Top Trading Pairs in desceneding order of the total You can find the query [here](https://ide.bitquery.io/List-of-trading-pairs-in-descending-order-of-trxns-in-last-24-hours) -``` +```graphql query TrendingPairs { EVM(dataset: combined, network: eth) { DEXTradeByTokens( @@ -80,7 +80,7 @@ query TrendingPairs { The query will subscribe you to real-time trade transactions for a pair, providing a continuous stream of data as new trades are processed and recorded. You can find the query [here](https://ide.bitquery.io/Get-pair-trades-data-just-like-geckoterminal) -``` +```graphql subscription{ EVM(network: eth) { DEXTradeByTokens( @@ -127,7 +127,7 @@ subscription{ This query will give you the latest Price of a specified token using DEXTrades API. Here we have calculated the price of a token in USD and also against the sell currency. Here is the [saved query link](https://ide.bitquery.io/Price-of-a-token-in-realtime) -``` +```graphql query MyQuery { EVM(network: eth, dataset: realtime) { DEXTrades( @@ -161,7 +161,7 @@ The below query finds the liquidity of a pool using the pool address `0xc2eaB7d3 You can find the query [here](https://ide.bitquery.io/Get-liquidity-of-a-pair_1) -``` +```graphql query MyQuery { EVM(dataset: archive, network: eth) { BalanceUpdates( @@ -184,7 +184,7 @@ The query will fetch you the buys, sells, buy volume, sell volume and also the n You can find the query [here](https://ide.bitquery.io/Buys-Sells-BuyVolume-SellVolume-Makers-TotalTradedVolume-PriceinUSD-for-a-eth-pair#) -``` +```graphql query MyQuery($network: evm_network, $token: String,$pairAddress: String , $min5_timestamp: DateTime, $hr1_timestamp: DateTime) { EVM(dataset: realtime, network: $network) { DEXTradeByTokens( @@ -285,7 +285,7 @@ This query retrieves the Open, High, Low, and Close (OHLC) prices in USD for a s You can find the query [here](https://ide.bitquery.io/WETH-USDT-OHLC-on-Ethereum_1) -``` +```graphql { EVM(network: eth, dataset: archive) { DEXTradeByTokens( @@ -314,7 +314,7 @@ You can find the query [here](https://ide.bitquery.io/WETH-USDT-OHLC-on-Ethereum This query will fetch you top traders of a token for the selected network. You can test the query [here](https://ide.bitquery.io/top-traders-of-a-token_1). -``` +```graphql query topTraders($network: evm_network, $token: String) { EVM(network: $network) { DEXTradeByTokens( diff --git a/docs/blockchain/Ethereum/dextrades/evm-gmgn-api.md b/docs/blockchain/Ethereum/dextrades/evm-gmgn-api.md index 2e4b6882..91d354d4 100644 --- a/docs/blockchain/Ethereum/dextrades/evm-gmgn-api.md +++ b/docs/blockchain/Ethereum/dextrades/evm-gmgn-api.md @@ -40,7 +40,7 @@ The query returns **top / trending trading pairs** by **trade count** (GMGN-styl You can find the query [here](https://ide.bitquery.io/List-of-trading-pairs-in-descending-order-of-trxns-in-last-24-hours) -``` +```graphql query TrendingPairs { EVM(dataset: combined, network: eth) { DEXTradeByTokens( @@ -81,7 +81,7 @@ query TrendingPairs { The query will subscribe you to real-time trade transactions for a pair, providing a continuous stream of data as new trades are processed and recorded. You can find the query [here](https://ide.bitquery.io/Get-pair-trades-data-just-like-dexcsreener) -``` +```graphql subscription{ EVM(network: eth) { DEXTradeByTokens( @@ -128,7 +128,7 @@ subscription{ This query will give you the latest Price of a specified token using DEXTrades API. Here we have calculated the price of a token in USD and also against the sell currency. Here is the [saved query link](https://ide.bitquery.io/Price-of-a-token-in-realtime) -``` +```graphql query MyQuery { EVM(network: eth, dataset: realtime) { DEXTrades( @@ -162,7 +162,7 @@ The below query finds the liquidity of a pool using the pool address `0xc2eaB7d3 You can find the query [here](https://ide.bitquery.io/Get-liquidity-of-a-pair_1) -``` +```graphql query MyQuery { EVM(dataset: archive, network: eth) { BalanceUpdates( @@ -185,7 +185,7 @@ The query will fetch you the buys, sells, buy volume, sell volume and also the n You can find the query [here](https://ide.bitquery.io/Buys-Sells-BuyVolume-SellVolume-Makers-TotalTradedVolume-PriceinUSD-for-a-eth-pair#) -``` +```graphql query MyQuery($network: evm_network, $token: String,$pairAddress: String , $min5_timestamp: DateTime, $hr1_timestamp: DateTime) { EVM(dataset: realtime, network: $network) { DEXTradeByTokens( @@ -286,7 +286,7 @@ This query retrieves the Open, High, Low, and Close (OHLC) prices in USD for a s You can find the query [here](https://ide.bitquery.io/WETH-USDT-OHLC-on-Ethereum_1) -``` +```graphql { EVM(network: eth, dataset: archive) { DEXTradeByTokens( @@ -315,7 +315,7 @@ You can find the query [here](https://ide.bitquery.io/WETH-USDT-OHLC-on-Ethereum This query will fetch you top traders of a token for the selected network. You can test the query [here](https://ide.bitquery.io/top-traders-of-a-token_7). -``` +```graphql query topTraders($network: evm_network, $token: String) { EVM(network: $network) { DEXTradeByTokens( diff --git a/docs/blockchain/Ethereum/dextrades/evm-photon-api.md b/docs/blockchain/Ethereum/dextrades/evm-photon-api.md index b9a5bd5c..9bc1bd5c 100644 --- a/docs/blockchain/Ethereum/dextrades/evm-photon-api.md +++ b/docs/blockchain/Ethereum/dextrades/evm-photon-api.md @@ -13,7 +13,7 @@ The query will fetch you the Top Trading Pairs in desceneding order of the total You can find the query [here](https://ide.bitquery.io/List-of-trading-pairs-in-descending-order-of-trxns-in-last-24-hours) -``` +```graphql query TrendingPairs { EVM(dataset: combined, network: eth) { DEXTradeByTokens( @@ -54,7 +54,7 @@ query TrendingPairs { The query will subscribe you to real-time trade transactions for a pair, providing a continuous stream of data as new trades are processed and recorded. You can find the query [here](https://ide.bitquery.io/Get-pair-trades-data-just-like-dexcsreener) -``` +```graphql subscription{ EVM(network: eth) { DEXTradeByTokens( @@ -101,7 +101,7 @@ subscription{ This query will give you the latest Price of a specified token using DEXTrades API. Here we have calculated the price of a token in USD and also against the sell currency. Here is the [saved query link](https://ide.bitquery.io/Price-of-a-token-in-realtime) -``` +```graphql query MyQuery { EVM(network: eth, dataset: realtime) { DEXTrades( @@ -135,7 +135,7 @@ The below query finds the liquidity of a pool using the pool address `0xc2eaB7d3 You can find the query [here](https://ide.bitquery.io/Get-liquidity-of-a-pair_1) -``` +```graphql query MyQuery { EVM(dataset: archive, network: eth) { BalanceUpdates( @@ -158,7 +158,7 @@ The query will fetch you the buys, sells, buy volume, sell volume and also the n You can find the query [here](https://ide.bitquery.io/Buys-Sells-BuyVolume-SellVolume-Makers-TotalTradedVolume-PriceinUSD-for-a-eth-pair#) -``` +```graphql query MyQuery($network: evm_network, $token: String,$pairAddress: String , $min5_timestamp: DateTime, $hr1_timestamp: DateTime) { EVM(dataset: realtime, network: $network) { DEXTradeByTokens( @@ -259,7 +259,7 @@ This query retrieves the Open, High, Low, and Close (OHLC) prices in USD for a s You can find the query [here](https://ide.bitquery.io/WETH-USDT-OHLC-on-Ethereum_1) -``` +```graphql { EVM(network: eth, dataset: archive) { DEXTradeByTokens( @@ -288,7 +288,7 @@ You can find the query [here](https://ide.bitquery.io/WETH-USDT-OHLC-on-Ethereum This query will fetch you top traders of a token for the selected network. You can test the query [here](https://ide.bitquery.io/top-traders-of-a-token_7). -``` +```graphql query topTraders($network: evm_network, $token: String) { EVM(network: $network) { DEXTradeByTokens( diff --git a/docs/blockchain/Ethereum/dextrades/get-trading-pairs-of-token.md b/docs/blockchain/Ethereum/dextrades/get-trading-pairs-of-token.md index 634f86cb..657bf58c 100644 --- a/docs/blockchain/Ethereum/dextrades/get-trading-pairs-of-token.md +++ b/docs/blockchain/Ethereum/dextrades/get-trading-pairs-of-token.md @@ -13,7 +13,7 @@ Protocols like Uniswap have pairs or pools. In this section we will see how we c This query can be used to get all trade metrics (trade amount, TX count) for a given pair ( in this case WETH/CaL) on a given EVM network over a particular time period. -``` +```graphql query ($network: evm_network, $token: String!, $token2: String!) { EVM(network: $network, dataset: combined) { Unique_Buyers: DEXTrades( diff --git a/docs/blockchain/Ethereum/dextrades/pancakeswap-api.mdx b/docs/blockchain/Ethereum/dextrades/pancakeswap-api.mdx index ba10756c..6a57f189 100644 --- a/docs/blockchain/Ethereum/dextrades/pancakeswap-api.mdx +++ b/docs/blockchain/Ethereum/dextrades/pancakeswap-api.mdx @@ -22,7 +22,7 @@ The PancakSwap DEX Data is also available for view as a dashboard [at DEXRABBIT]
Click to expand GraphQL query -``` +```graphql query LatestTrades { EVM(network: eth) { DEXTradeByTokens( @@ -76,7 +76,7 @@ query LatestTrades {
Click to expand GraphQL query -``` +```graphql query pairs($min_count: String, $market: String, $network: evm_network, $time_10min_ago: DateTime, $time_1h_ago: DateTime, $time_3h_ago: DateTime, $time_ago: DateTime, $eth: String!, $weth: String!, $usdc: String!, $usdt: String!) { EVM(network: $network) { DEXTradeByTokens( @@ -150,7 +150,7 @@ query pairs($min_count: String, $market: String, $network: evm_network, $time_10
Click to expand GraphQL query -``` +```graphql query topTraders { EVM(network: eth) { DEXTradeByTokens( diff --git a/docs/blockchain/Ethereum/dextrades/token-trades-apis.mdx b/docs/blockchain/Ethereum/dextrades/token-trades-apis.mdx index 9b5873b7..c2eb6196 100644 --- a/docs/blockchain/Ethereum/dextrades/token-trades-apis.mdx +++ b/docs/blockchain/Ethereum/dextrades/token-trades-apis.mdx @@ -385,7 +385,7 @@ Use below query to get price change 5min, 1h, 6h and 24h of a specific token. Ch
Click to expand GraphQL query and variables -``` +```graphql query MyQuery { EVM(dataset: combined) { DEXTradeByTokens( @@ -432,7 +432,7 @@ Use below query to get top 10 Eth Tokens by Price Change in last 1h. Test the qu
Click to expand GraphQL query and variables -``` +```graphql query MyQuery { EVM(dataset: combined) { DEXTradeByTokens( @@ -575,7 +575,7 @@ Our DEX Dashboard gives you a easier way to check the data -> [DEXrabbit](https: Click to expand GraphQL query and variables -``` +```graphql query LatestTrades { EVM(network: eth) { DEXTradeByTokens( @@ -1689,7 +1689,7 @@ query ($trader: String) { } ``` -``` +```json { "trader": "0x0a62Bd9Ee12119a5aC4807C0970fed8B71E83163" } diff --git a/docs/blockchain/Ethereum/dextrades/trades-of-an-address-api.md b/docs/blockchain/Ethereum/dextrades/trades-of-an-address-api.md index 2f109be9..3552d296 100644 --- a/docs/blockchain/Ethereum/dextrades/trades-of-an-address-api.md +++ b/docs/blockchain/Ethereum/dextrades/trades-of-an-address-api.md @@ -127,7 +127,7 @@ For each trade, the query retrieves the following data: You can view the query in the IDE [here](https://ide.bitquery.io/latest_buys_and_sell_) -``` +```graphql query MyQuery { EVM(dataset: combined, network: eth) { Sells: DEXTrades( diff --git a/docs/blockchain/Ethereum/dextrades/uniswap-api.mdx b/docs/blockchain/Ethereum/dextrades/uniswap-api.mdx index 67c92111..c16a3fc4 100644 --- a/docs/blockchain/Ethereum/dextrades/uniswap-api.mdx +++ b/docs/blockchain/Ethereum/dextrades/uniswap-api.mdx @@ -107,7 +107,7 @@ These also includes trading metrics like SMA, EMA, VWAP, and more. Click to expand GraphQL query -``` +```graphql subscription { Trading { Pairs( diff --git a/docs/blockchain/Ethereum/dextrades/uniswap-position-api.md b/docs/blockchain/Ethereum/dextrades/uniswap-position-api.md index f394f7c5..83aa7a94 100644 --- a/docs/blockchain/Ethereum/dextrades/uniswap-position-api.md +++ b/docs/blockchain/Ethereum/dextrades/uniswap-position-api.md @@ -446,7 +446,7 @@ It returns decoded arguments—including the Uniswap position `tokenId`, the `re [Run query](https://ide.bitquery.io/Fee-collection-on-Uniswap-v3-Positions) -``` +```graphql { EVM(dataset: realtime, network: eth) { Events( diff --git a/docs/blockchain/Ethereum/ethers-library/eth_blockNumber.md b/docs/blockchain/Ethereum/ethers-library/eth_blockNumber.md index e3225335..bc0f4418 100644 --- a/docs/blockchain/Ethereum/ethers-library/eth_blockNumber.md +++ b/docs/blockchain/Ethereum/ethers-library/eth_blockNumber.md @@ -26,7 +26,7 @@ subscription { [This](https://ide.bitquery.io/eth_blockNumber-stream-bsc) returns the latest `Block Number` for the different Network, namely `bsc`. -``` +```graphql subscription { EVM(network: bsc) { Blocks { diff --git a/docs/blockchain/Ethereum/ethers-library/eth_subscribe.md b/docs/blockchain/Ethereum/ethers-library/eth_subscribe.md index 8caa3072..b34bc4d8 100644 --- a/docs/blockchain/Ethereum/ethers-library/eth_subscribe.md +++ b/docs/blockchain/Ethereum/ethers-library/eth_subscribe.md @@ -10,7 +10,7 @@ Ethereum Subscription API allows developers to build websockets that receive rea To subscribe to incoming pending transactions, use the below subscription. You can run it [here](https://ide.bitquery.io/eth_subscribependingTransactions) -``` +```graphql subscription { EVM(mempool: true) { Transactions { @@ -43,7 +43,7 @@ subscription { You can subscribe to all incoming logs filtered by any of the fields including method signature, tx value,sender , receiver and so on. In the below example we are tracking only logs where the method name is `transfer`. You can run it [here](https://ide.bitquery.io/eth_subscribelogs) -``` +```graphql subscription { EVM(mempool: true) { Events(where: {Log: {Signature: {Name: {is: "Transfer"}}}}) { @@ -83,7 +83,7 @@ subscription { You can subscribe to new blocks as they arrive in real-time. This includes information about the new block, such as its block number, hash,transaction count and timestamp. -``` +```graphql subscription { EVM { Blocks { diff --git a/docs/blockchain/Ethereum/events/events-api.md b/docs/blockchain/Ethereum/events/events-api.md index bded39ec..d52d8603 100644 --- a/docs/blockchain/Ethereum/events/events-api.md +++ b/docs/blockchain/Ethereum/events/events-api.md @@ -48,7 +48,7 @@ More patterns below: **mempool** logs (pending), **recent** events with `query`, This query listens to real-time mempool events on the Ethereum (ETH) blockchain. The query is designed to capture details of transactions, logs, events, and arguments from the Ethereum Virtual Machine (EVM) before they are confirmed in a block. You can run it [here](https://ide.bitquery.io/Mempool-event-stream) -``` +```graphql subscription { EVM(network: eth, mempool: true) { Events { @@ -204,7 +204,7 @@ query MyQuery { The query below shows latest 10 events emitted by the AAVE V3 contract. The `Log` field in the results will contain information about the event, including its signature, smart contract address, and transaction hash. The `Arguments` field will contain the values of any arguments that were passed to the event. You can find the query [here](https://ide.bitquery.io/All-aave-v3-events-latest) -``` +```graphql { EVM(dataset: realtime, network: eth) { Events( @@ -253,7 +253,7 @@ To get Staking-related information, we will be using the "Staked" signature to f You can find the query [here](https://ide.bitquery.io/Copy-of-Latest-Token-Stake-Events) -``` +```graphql query MyQuery { EVM(dataset: realtime, network: eth) { Events( @@ -288,7 +288,7 @@ query MyQuery { In the below query we listen for a specific event (Approval) across multiple smart contracts on the Ethereum (ETH) network. Run the query [here](https://ide.bitquery.io/Subscribe-to-the-Same-Event-Across-Multiple-Contracts) -``` +```graphql subscription { EVM(network: eth) { Events( @@ -322,7 +322,7 @@ subscription { This query retrieves the most recent liquidity removal events (Burn events) on Uniswap. It includes details about the transaction, block, log, and arguments. You can run the query [here](https://ide.bitquery.io/uniswap-v2-liquidity-removed) -``` +```graphql { EVM(network: eth, dataset: combined) { Events( @@ -385,7 +385,7 @@ This query retrieves the most recent liquidity removal events (Burn events) on U This subscription provides information on the latest real-time swap events on Ethereum. You can run it [here](https://ide.bitquery.io/all-swap-events) -``` +```graphql subscription { EVM(network: eth) { Events(where: {Log: {Signature: {Name: {in: ["swap", "Swap"]}}}}) { @@ -435,7 +435,7 @@ subscription { Chefdotfun, similar to platforms like Pumpfun and Sunpump, is a token creation platform on the Ethereum network. This query retrieves the latest Chefdotfun swap transactions by filtering event logs related to the smart contract. You can run the query [here](https://ide.bitquery.io/Latest-chefdog-swaps) -``` +```graphql query MyQuery { EVM(dataset: combined, network: eth) { Events( diff --git a/docs/blockchain/Ethereum/mempool/mempool-api.md b/docs/blockchain/Ethereum/mempool/mempool-api.md index 17a494e8..4e359414 100644 --- a/docs/blockchain/Ethereum/mempool/mempool-api.md +++ b/docs/blockchain/Ethereum/mempool/mempool-api.md @@ -16,7 +16,7 @@ Subscribe to **`EVM(mempool: true)`** **`Transactions`** with **`where.any`** on The below query retrieves information about in-flight transactions, helping you simulate the most recent state. It is a way to see if they will succeed without sending them on-chain. The `Success` field tells you if your mempool tranaction is successful and `FaultError` and `FaultError` indicate otherwise. You can find query [here](https://ide.bitquery.io/Simulating-Pending-Transactions_1) -``` +```graphql subscription{ EVM(mempool: true) { Transfers{ @@ -59,7 +59,7 @@ The Recommended Fees API provides real-time data from the mempool. It returns fi You can run the query [here](https://ide.bitquery.io/Get-Mempool-Fees) -``` +```graphql { EVM(mempool: true) { Transactions(limit: {count: 100}) { @@ -93,7 +93,7 @@ You can run the query [here](https://ide.bitquery.io/Get-Mempool-Fees) This query returns information about transactions that have triggered the `PairCreated` event in the mempool, including the transaction hash, log signature, and argument values. You can run the query [here](https://ide.bitquery.io/PairCreated-in-Mempool) -``` +```graphql subscription { EVM(mempool: true) { Events(where: {Log: {Signature: {Name: {is: "PairCreated"}}}}) { @@ -138,7 +138,7 @@ subscription { This subscription provides information about the most recent token trades in the mempool, including the block number and time, transaction details, and trade information such as buyer, seller, price, and currencies involved. You can run the query [here](https://ide.bitquery.io/mempool-token-trades_1) -``` +```graphql subscription { EVM(mempool: true) { buyside: DEXTrades { @@ -185,7 +185,7 @@ subscription { This subscription returns details about the latest token transfers in the mempool, including the transfer amount, currency name and symbol, sender, receiver, and transfer type. You can run the query [here](https://ide.bitquery.io/mempool-transfers_1) -``` +```graphql subscription { EVM(mempool: true) { Transfers { @@ -213,7 +213,7 @@ The example below retrieves mempool transactions **from** the specified address You can run the query [here](https://ide.bitquery.io/Binance-Mempool-Transactions_1) -``` +```graphql subscription { EVM(mempool: true) { Transactions( @@ -240,7 +240,7 @@ subscription { You can track changes in balance after each transaction in the mempool, even before it is confirmed. You can run it [here](https://ide.bitquery.io/Mempool-balance-updates-on-Ethereum-Arbitrum-BNB-subscription) -``` +```graphql subscription { EVM(network: eth, mempool: true) { BalanceUpdates { @@ -267,7 +267,7 @@ subscription { The following subscription query retrieves real-time mempool transactions and includes key details such as the block time, block number, transaction hash, transaction cost, and the V, R, S components of the transaction signature. You can run it [here](https://ide.bitquery.io/vrs-signature) -``` +```graphql subscription { EVM(network: eth, mempool: true) { Transactions { diff --git a/docs/blockchain/Ethereum/nft/nft-blur-marketplace-api.md b/docs/blockchain/Ethereum/nft/nft-blur-marketplace-api.md index ab226a7a..fa7579cd 100644 --- a/docs/blockchain/Ethereum/nft/nft-blur-marketplace-api.md +++ b/docs/blockchain/Ethereum/nft/nft-blur-marketplace-api.md @@ -11,7 +11,7 @@ The NFT Blur Marketplace API provides a wide range of data related to the BLUR N The Blur Marketplace supports the [Seaport protocol](https://opensea.io/blog/articles/introducing-seaport-protocol), which can be utilize to retrieve the most recent Blur trades - [query](https://ide.bitquery.io/Latest-10-Trades-on-Blur). -``` +```graphql query MyQuery { EVM { DEXTrades( @@ -78,7 +78,7 @@ We can also identify the most traded NFT on the Blur Marketplace using this API. In the following [query](https://ide.bitquery.io/Most-traded-NFT-on-Blur-marketplace), we aggregate the data based on buyers, sellers, NFTs, and trade volume, and then sort the results based on the trade count. This highlights the most active NFTs in the marketplace. -``` +```graphql query MyQuery { EVM(dataset: combined, network: eth) { DEXTrades( @@ -126,7 +126,7 @@ query MyQuery { Here, the [query](https://ide.bitquery.io/Total-buy-sell-of-an-NFT-token-onBLUR) gather total trades, trade volume, unique buyers, and sellers for a specific NFT token on Blur Marketplace - in this case, the [Nakamigos NFT token](https://explorer.bitquery.io/ethereum/token/0xd774557b647330c91bf44cfeab205095f7e6c367). -``` +```graphql query MyQuery { EVM(dataset: combined, network: eth) { DEXTrades( @@ -168,7 +168,7 @@ query MyQuery { In [this](https://ide.bitquery.io/Top-buyers-of-NFTs-onBLUR) query, we fetch the top buyers on the BLUR marketplace. We aggregate based on NFTs bought, unique transactions, and then sort them based on the number of trades -``` +```graphql query MyQuery { EVM(dataset: combined, network: eth) { DEXTrades( @@ -218,7 +218,7 @@ query MyQuery { In [this](https://ide.bitquery.io/Specific-buyer-stats-for-an-NFT-onBLUR) query, we are getting details for a specific address on Blur NFT marketplace. We are also getting the first and last trade dates for the address. -``` +```graphql query MyQuery { EVM(dataset: combined, network: eth) { DEXTrades( @@ -281,7 +281,7 @@ Blur uses [Blend protocol](https://www.paradigm.xyz/2023/05/blend) for NFT loans We're using LogHeader instead of Log → SmartContract for queries due to a [delegated proxy contract](https://medium.com/coinmonks/proxy-pattern-and-upgradeable-smart-contracts-45d68d6f15da). -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -353,7 +353,7 @@ We're using LogHeader instead of Log → SmartContract for queries due to a [del [This](https://ide.bitquery.io/Latest-loans-for-specific-NFTtoken) query retrieves all loans linked to the [MutantApeYachtClub](https://explorer.bitquery.io/ethereum/token/0x60e4d786628fea6478f785a6d7e704777c86a7c6) collection on the BLUR market. We filter event arguments in the smart contract and sort by block time -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -429,7 +429,7 @@ Same as previous queries, this query will return details about the block, transa Using argument filtering, [this](https://ide.bitquery.io/Latest-Loans-for-a-specificlender) query fetches the latest loans for a specific lender address. The same method can be applied to find loans for a specific borrower address - [query](https://ide.bitquery.io/Latest-Loans-for-a-specificborrower-on-Blur-marketplace). -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -505,7 +505,7 @@ Similar to previous queries, this query will provide details about the block, tr If we want to track loans above a specific amount on the Blur marketplace, we can use the following [query](https://ide.bitquery.io/Loans-above-a-specific-amount-on-the-Blur-NFT-marketplace). -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -571,7 +571,7 @@ If we want to track loans above a specific amount on the Blur marketplace, we ca [This](https://ide.bitquery.io/Loan-history-for-specific-NFTID) query retrives the loan history for a specific NFT ID on the BLUR market, by matching event arguments to a particular collection address and tokenId. -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -647,7 +647,7 @@ The response includes details about the block, transaction, log, and event argum The Blur's Blend protocol utilizes LienID as a primary key to track individual loan details. [This](https://ide.bitquery.io/Get-loan-details-for-specificlienId) query fetches details for a specific LienID across different events. -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -718,7 +718,7 @@ The response will include details about the block, transaction, log, and event a Refinancing in NFTs refers to securing a new loan using an NFT as collateral to repay an existing loan. The following [query](https://ide.bitquery.io/loan-refinance-on-Blur) retrieves the latest refinance events on BLUR. -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -782,7 +782,7 @@ Refinancing in NFTs refers to securing a new loan using an NFT as collateral to To retrieve all refinance loans for a specific NFT collection, we filter Refinance event arguments in [this](https://ide.bitquery.io/All-refinance-loans-for-specificNFT-collection) query -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -852,7 +852,7 @@ To retrieve all refinance loans for a specific NFT collection, we filter Refinan For loan repayment transactions on the BLUR market, use the [following](https://ide.bitquery.io/Loan-repayment-of-blur-marketplace) query. It filters 'Repay' events and sets the smart contract address to the Blur: Blend address -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -926,7 +926,7 @@ The response contains details about the block, transaction, log, and arguments, The 'StartAuction' event is triggered when an NFT auction starts on the Blur : [Blend Contract](https://explorer.bitquery.io/ethereum/smart_contract/0x29469395eaf6f95920e59f858042f0e28d98a20b/events). The following [query](https://ide.bitquery.io/Auction-on-blur-marketplace) monitors these events. If you want to track auctions for a specific NFT, modify the [query](https://ide.bitquery.io/Auctions-for-specific-lienID) to filter for a specific LienID in the 'Arguments' field. -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -990,7 +990,7 @@ The 'StartAuction' event is triggered when an NFT auction starts on the Blur : Locked NFTs are temporarily non-transferrable and can be traded or transferred after the lock period. These NFTs are often cheaper than non-locked. The following [query](https://ide.bitquery.io/Locked-NFT-bought-on-Blur-marketplace) retrieves the latest trades of locked NFTs by filtering for the 'BuyLocked' event under the Blur : [Blend Contract](https://explorer.bitquery.io/ethereum/smart_contract/0x29469395eaf6f95920e59f858042f0e28d98a20b/events). -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -1055,7 +1055,7 @@ Locked NFTs are temporarily non-transferrable and can be traded or transferred a On the BLUR market, the 'OfferCancelled' event initiates when an offer is withdrawn or cancelled. The following [query](https://ide.bitquery.io/Latest-Cancelled-offers-on-Blur-NFT-marketplace) fetches recent 'OfferCancelled' events under the Blur : [Blend Contract](https://explorer.bitquery.io/ethereum/smart_contract/0x29469395eaf6f95920e59f858042f0e28d98a20b/events). . -``` +```graphql { EVM(dataset: combined, network: eth) { Events( @@ -1119,7 +1119,7 @@ On the BLUR market, the 'OfferCancelled' event initiates when an offer is withdr When a seizure event happens, control of the NFT shifts to the lender or an enforcing third party. The [query](https://ide.bitquery.io/Latest-Seized-NFTs-on-Blur-marketplace) filters transactions for the 'seize' event on the Blur : [Blend Contract](https://explorer.bitquery.io/ethereum/smart_contract/0x29469395eaf6f95920e59f858042f0e28d98a20b/events) to track these -``` +```graphql { EVM(dataset: combined, network: eth) { Events( diff --git a/docs/blockchain/Ethereum/nft/nft-ownership-api.md b/docs/blockchain/Ethereum/nft/nft-ownership-api.md index 1eace476..432c865f 100644 --- a/docs/blockchain/Ethereum/nft/nft-ownership-api.md +++ b/docs/blockchain/Ethereum/nft/nft-ownership-api.md @@ -108,7 +108,7 @@ By setting, `Transfers(limit: {count: 1} orderBy: {ascending: Block_Time})` we f You can run the query [here](https://ide.bitquery.io/Fidenza-725) -``` +```graphql query MyQuery { EVM(dataset: archive) { Transfers( @@ -149,7 +149,7 @@ query MyQuery { Check past (churned) token holders of a NFT token [using following query](https://ide.bitquery.io/past-token-holder-of-a-token_1). -``` +```graphql { EVM(dataset: combined) { BalanceUpdates( diff --git a/docs/blockchain/Ethereum/transactions/transaction-api.md b/docs/blockchain/Ethereum/transactions/transaction-api.md index 8af05b96..da3e960d 100644 --- a/docs/blockchain/Ethereum/transactions/transaction-api.md +++ b/docs/blockchain/Ethereum/transactions/transaction-api.md @@ -60,7 +60,7 @@ You can run the query [here](https://ide.bitquery.io/Latest-Transactions-fromto-
Click to expand GraphQL query -``` +```graphql { EVM(dataset: archive, network: eth) { Transactions( @@ -90,7 +90,7 @@ You can run the query [here](https://ide.bitquery.io/Latest-Transactions-fromto- The below query retrieves transaction details using the transaction hash. The `where` clause filters transactions based on the `Hash` field, which is set to `0xc3684c0ea63c0e081fb779bb8feaa5e5109ccc70ef30f17f4eea041ec5ea0bc7`. You can find the query [here](https://ide.bitquery.io/Get-a-transaction-by-hash) -``` +```graphql query MyQuery { EVM(dataset: combined, network: eth) { Transactions( @@ -117,7 +117,7 @@ query MyQuery { The following query helps you determine the next available nonce for an Ethereum account by getting the latest transaction in the mempool (broadcasted transactions). The returned nonce is the highest nonce used by the account in the mempool. To get the next available nonce for a new transaction, you should increment this value by 1. You can find the query [here](https://ide.bitquery.io/get-next-available-nonce) -``` +```graphql query MyQuery { EVM(mempool: true, network: eth) { Transactions(limit: {count: 1}, orderBy: {descending: Block_Time}) { @@ -136,7 +136,7 @@ In the below query we will use the field `Transaction_ValueInUSD` to get the tot You can find the query [here](https://ide.bitquery.io/Transaction-value-in-USD) -``` +```graphql query MyQuery { EVM(network: eth) { in_txs: Transactions( @@ -156,7 +156,7 @@ The below query gets all internal transactions for a particular tx filtered usin You can run the query [here](https://ide.bitquery.io/internal-transactions-for-a-particular-tx) -``` +```graphql query MyQuery { EVM(network: eth) { Calls( diff --git a/docs/blockchain/Ethereum/transfers/nft-token-transfer-api.md b/docs/blockchain/Ethereum/transfers/nft-token-transfer-api.md index 1f3f7e25..c9b68498 100644 --- a/docs/blockchain/Ethereum/transfers/nft-token-transfer-api.md +++ b/docs/blockchain/Ethereum/transfers/nft-token-transfer-api.md @@ -96,7 +96,7 @@ Read more about using `array_intersect` [here](/docs/graphql/capabilities/array- You can find the query [here](https://ide.bitquery.io/array_intersect-example-for-NFT). -``` +```graphql query ($addresses: [String!]) { EVM(dataset: archive) { Transfers( diff --git a/docs/blockchain/Ethereum/transfers/rwa-api.md b/docs/blockchain/Ethereum/transfers/rwa-api.md index 0e1d1b34..341544df 100644 --- a/docs/blockchain/Ethereum/transfers/rwa-api.md +++ b/docs/blockchain/Ethereum/transfers/rwa-api.md @@ -87,7 +87,7 @@ This query filters for recent `Issue` events on Ethereum and displays logs emitt You can use the same as a `subscription` to monitor issuances in real-time. You can run the query [here](https://ide.bitquery.io/BlackRock-USD-Institutional-Digital-Liquidity-Fund-Latest-Issuance) -``` +```graphql { EVM(dataset: realtime, network: eth) { Events( diff --git a/docs/blockchain/Ethereum/transfers/total-supply.mdx b/docs/blockchain/Ethereum/transfers/total-supply.mdx index 00a9c559..88aa0291 100644 --- a/docs/blockchain/Ethereum/transfers/total-supply.mdx +++ b/docs/blockchain/Ethereum/transfers/total-supply.mdx @@ -45,7 +45,7 @@ We will use the [Transaction Balance Tracker APIs](/docs/blockchain/Ethereum/bal ### Get Supply of a Token -``` +```graphql query MyQuery { EVM(network: eth, dataset: combined) { Transfers( @@ -81,7 +81,7 @@ query MyQuery { ### Getting Marketcap -``` +```graphql { EVM(dataset: combined) { Transfers( diff --git a/docs/blockchain/Matic/matic-dextrades.md b/docs/blockchain/Matic/matic-dextrades.md index 53f18938..3398689c 100644 --- a/docs/blockchain/Matic/matic-dextrades.md +++ b/docs/blockchain/Matic/matic-dextrades.md @@ -105,7 +105,7 @@ This example uses the chain-specific **DEXTrades** cube via `EVM(network: matic) Read [DEXTrades vs DEXTradeByTokens vs Trades cube](/docs/cubes/dextrades-dextradebytokens-trading-trades) to get a better understanding on when to use which cube. You can find the query [here](https://ide.bitquery.io/Realtime-matic-dex-trades-websocket) -``` +```graphql subscription { EVM(network: matic) { DEXTrades { @@ -157,7 +157,7 @@ subscription { This query provides real-time updates on price of AVAX `0x2C89bbc92BD86F8075d1DEcc58C7F4E0107f286b` in terms of WMATIC `0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270`, including details about the DEX, market, and order specifics. Find the query [here](https://ide.bitquery.io/Price-of-a-AVAX-in-terms-of-WMATIC-on-matic_2) -``` +```graphql subscription { EVM(network: matic) { DEXTrades( @@ -208,7 +208,7 @@ subscription { The below query retrieves the USD price of a token on Matic by setting `SmartContract: {is: "0xe06bd4f5aac8d0aa337d13ec88db6defc6eaeefe"}` . Check the field `PriceInUSD` for the USD value. You can access the query [here](https://ide.bitquery.io/Latest-USD-Price-of-a-Token-on-Matic). -``` +```graphql subscription { EVM(network: matic) { DEXTrades( @@ -263,7 +263,7 @@ We use `any` filter ( OR condition) to exclude `$wmatic`, `$weth`, `$usdc`, `$us You can run this query [here](https://ide.bitquery.io/top-tokens-on-matic-stats) -``` +```graphql query pairs($min_count: String, $network: evm_network, $time_10min_ago: DateTime, $time_1h_ago: DateTime, $time_3h_ago: DateTime, $time_ago: DateTime, $wmatic: String!, $weth: String!, $usdc: String!, $usdt: String!, $usdcpos: String!) { EVM(network: $network) { DEXTradeByTokens( @@ -326,7 +326,7 @@ query pairs($min_count: String, $network: evm_network, $time_10min_ago: DateTime This query is available as a heatmap on [https://dexrabbit.com/matic](https://dexrabbit.com/matic) -![](/img/dexrabbit/matic_toptokens.png) +![Top Polygon tokens by volume on DEXrabbit](/img/dexrabbit/matic_toptokens.png) ## Top Traders of a Token @@ -334,7 +334,7 @@ This query retrieves data on the top traders of a specific token on the Matic ne You can run the query [here](https://ide.bitquery.io/top-traders-of-a-token-on-matic_1) -``` +```graphql query topTraders($network: evm_network, $time_ago: DateTime, $token: String) { EVM(network: $network) { DEXTradeByTokens( @@ -364,7 +364,7 @@ query topTraders($network: evm_network, $time_ago: DateTime, $token: String) { This query is available as a chart and table on [https://dexrabbit.com/matic](https://dexrabbit.com/matic) -![](/img/dexrabbit/matic_toptraders.png) +![Top Polygon traders on DEXrabbit](/img/dexrabbit/matic_toptraders.png) --- diff --git a/docs/blockchain/Matic/matic-nft.md b/docs/blockchain/Matic/matic-nft.md index 00d0bf92..2551f186 100644 --- a/docs/blockchain/Matic/matic-nft.md +++ b/docs/blockchain/Matic/matic-nft.md @@ -11,7 +11,7 @@ In this section we'll have a look at some examples using the Matic NFT API. This query subscribes you to the real time transfers of a specific non-fungible token (NFT) on the Matic network. You can find the query [here](https://ide.bitquery.io/Real-time-transfer-websocket-for-NFT-token-on-matic) -``` +```graphql subscription { EVM(network: matic) { Transfers( diff --git a/docs/blockchain/Matic/matic-transfers.md b/docs/blockchain/Matic/matic-transfers.md index 57d02e95..a76ebbbe 100644 --- a/docs/blockchain/Matic/matic-transfers.md +++ b/docs/blockchain/Matic/matic-transfers.md @@ -10,7 +10,7 @@ In this section we'll have a look at some examples using the Polygon (MATIC) Tra The subscription query below fetches the whale transactions on the MATIC network. We have used USDC address `0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359`. You can find the query [here](https://ide.bitquery.io/Whale-transfers-of-USDC-on-matic) -``` +```graphql subscription{ EVM(network: matic) { Transfers( @@ -43,7 +43,7 @@ subscription{ This websocket retrieves transfers where the sender is a particular address `0x1A8f43e01B78979EB4Ef7feBEC60F32c9A72f58E`. For this subscription query we use `where` keyword and in that we specify `{Transfer: {Sender: {is: "0x1A8f43e01B78979EB4Ef7feBEC60F32c9A72f58E"}}}` to get the desired data. You can find the query [here](https://ide.bitquery.io/Sender-is-a-particular-address_2) -``` +```graphql subscription { EVM(network: matic) { Transfers( @@ -75,7 +75,7 @@ subscription { Let's see an example of NFT token transfers using GraphQL Subscription (Webhook). In the following NFT Token Transfers API, we will be subscribing to all NFT token transfers on Polygon (MATIC) network. You can run the query [here](https://ide.bitquery.io/NFT-Token-Transfers-API_3) -``` +```graphql subscription { EVM(network: matic) { Transfers(where: {Transfer: {Currency: {Fungible: false}}}) { diff --git a/docs/blockchain/Optimism/index.mdx b/docs/blockchain/Optimism/index.mdx index 68c8b09f..04e820b0 100644 --- a/docs/blockchain/Optimism/index.mdx +++ b/docs/blockchain/Optimism/index.mdx @@ -54,7 +54,7 @@ Bitquery supports websocket and webhooks; you can convert most GraphQL APIs into ## Quick start -Run this minimal GraphQL query on **[GraphQL IDE](http://ide.bitquery.io)** after signing up, to fetch the latest 5 DEX trades on Optimism: +Run this minimal GraphQL query on **[GraphQL IDE](https://ide.bitquery.io)** after signing up, to fetch the latest 5 DEX trades on Optimism: ```graphql query LatestOptimismTrades { diff --git a/docs/blockchain/Optimism/optimism-dextrades.md b/docs/blockchain/Optimism/optimism-dextrades.md index 9614da20..f5dbea89 100644 --- a/docs/blockchain/Optimism/optimism-dextrades.md +++ b/docs/blockchain/Optimism/optimism-dextrades.md @@ -205,7 +205,7 @@ This example uses the chain-specific **DEXTrades** cube via `EVM(network: optimi You can find the query [here](https://ide.bitquery.io/Realtime-optimism-dex-trades-websocket) -``` +```graphql subscription { EVM(network: optimism) { DEXTrades { @@ -333,7 +333,7 @@ An example for the same could be seen in the [DEXRabbit](https://dexrabbit.com/o This query provides real-time updates on price of WETH `0x4200000000000000000000000000000000000006` in terms of USD Coin `0x7f5c764cbc14f9669b88837ca1490cca17c31607`, including details about the DEX, market, and order specifics. Find the query [here](https://ide.bitquery.io/Price-of-WETH-in-terms-of-USDC-on-Optimism#) -``` +```graphql subscription { EVM(network: optimism) { DEXTrades( @@ -414,7 +414,7 @@ An example of the utilisation of this data could be seen on [DEXRabbit](https:// The below query retrieves the USD price of a token on Optimism by setting `SmartContract: {is: "0x68f180fcCe6836688e9084f035309E29Bf0A2095"}` . Check the field `PriceInUSD` for the USD value. You can access the query [here](https://ide.bitquery.io/Get-latest-price-of-WBTC-in-USD-on-optimism#). -``` +```graphql subscription { EVM(network: optimism) { DEXTradeByTokens( diff --git a/docs/blockchain/Optimism/optimism-nft.md b/docs/blockchain/Optimism/optimism-nft.md index 16e34378..2f036a7d 100644 --- a/docs/blockchain/Optimism/optimism-nft.md +++ b/docs/blockchain/Optimism/optimism-nft.md @@ -12,7 +12,7 @@ This query subscribes you to the real time transfers of a specific non-fungible You can find the query [here](https://ide.bitquery.io/Transfers-of-a-particular-NFT#) -``` +```graphql subscription { EVM(network: optimism) { Transfers( diff --git a/docs/blockchain/Optimism/optimism-transfers.md b/docs/blockchain/Optimism/optimism-transfers.md index 03ba695c..22dd7d48 100644 --- a/docs/blockchain/Optimism/optimism-transfers.md +++ b/docs/blockchain/Optimism/optimism-transfers.md @@ -11,7 +11,7 @@ In this section we'll have a look at some examples using the Optimism Transfers The subscription query below fetches the whale transactions on the Optimism network. We have used USDT address `0x94b008aA00579c1307B0EF2c499aD98a8ce58e58` You can find the query [here](https://ide.bitquery.io/Whale-transfers-of-USDT-on-optimism) -``` +```graphql subscription { EVM(network: optimism) { Transfers( @@ -44,7 +44,7 @@ subscription { This websocket retrieves transfers where the sender is a particular address `0xEbe80f029b1c02862B9E8a70a7e5317C06F62Cae`. For this subscription query we use `where` keyword and in that we specify `{Transfer: {Sender: {is: "0xEbe80f029b1c02862B9E8a70a7e5317C06F62Cae"}}}` to get the desired data. You can find the query [here](https://ide.bitquery.io/Sender-is-a-particular-address) -``` +```graphql subscription { EVM(network: optimism) { Transfers( @@ -76,7 +76,7 @@ subscription { Let's see an example of NFT token transfers using GraphQL Subscription (Webhook). In the following NFT Token Transfers API, we will be subscribing to all NFT token transfers on Optimism network. You can run the query [here](https://ide.bitquery.io/NFT-Token-Transfers-API_1) -``` +```graphql subscription { EVM(network: optimism) { Transfers(where: {Transfer: {Currency: {Fungible: false}}}) { diff --git a/docs/blockchain/Solana/Believe-API.md b/docs/blockchain/Solana/Believe-API.md index 95d262e0..5a950634 100644 --- a/docs/blockchain/Solana/Believe-API.md +++ b/docs/blockchain/Solana/Believe-API.md @@ -123,7 +123,7 @@ subscription MyQuery { Using below query, you can check when was a Believe Launchpad token created. Here we have taken the example of checking creation time and transaction signature of this token `GsVr8GdT57gBa6GxujrtAeRGmYbFfABGFk2eaG2DzBLV`. Note: we only have last 8 hours of Solana Instructions data so this query will not return anything for the Believe Launchpad token which was created more than 8 hours ago. Run the query: [Get a Believe token's creation time and dev address? ➤](https://ide.bitquery.io/check-when-a-Believe-protocol-token-was-created-on-Meteora-DBC_1). -``` +```graphql query MyQuery($tokenAddress: String!) { Solana { Instructions( @@ -198,7 +198,7 @@ query MyQuery($tokenAddress: String!) { For checking which Believe tokens graduated, we need to get all the tokens created by Believe on Meteora DBC using this [Get All Token Creations by Believe - API](/docs/blockchain/Solana/Believe-API/#get-latest-meteora-dbc-token-creations-using-believe-launchpad) and then after getting all the token addresses put them in [Check if the Believe Tokens has Graduated - API](https://ide.bitquery.io/Check-if-the-tokens-have-migrated-from-Meteora-DBC_1) to check which of them graduated to Meteora. -``` +```graphql query MyQuery { Solana { Instructions( @@ -281,7 +281,7 @@ query MyQuery { Then put all the token addresses in the `$tokenAddresses` variable in the following query. Run it here: [Check if the tokens have migrated from Meteora DBC ➤](https://ide.bitquery.io/Check-if-the-tokens-have-migrated-from-Meteora-DBC_1). -``` +```graphql query MyQuery($tokenAddresses: [String!]) { Solana { Instructions( diff --git a/docs/blockchain/Solana/BonkSwap-API.md b/docs/blockchain/Solana/BonkSwap-API.md index bdad7bd5..68b5c65e 100644 --- a/docs/blockchain/Solana/BonkSwap-API.md +++ b/docs/blockchain/Solana/BonkSwap-API.md @@ -38,7 +38,7 @@ This is a graphQL query that fetches latest swaps on BonkSwap, you can convert t [Run Query ➤](https://ide.bitquery.io/Latest-Trades-on-BonkSwap) -``` +```graphql query LatestTrades { Solana { DEXTradeByTokens( @@ -100,7 +100,7 @@ The below API fetches top traders on BonkSwap using recent trading volume of the [Run Query ➤](https://ide.bitquery.io/Top-Traders-on-BonkSwap) -``` +```graphql query TopTraders { Solana { DEXTradeByTokens( @@ -163,7 +163,7 @@ The below API fetches recent trades by a particular trader. We use the `Transact [Run Query ➤](https://ide.bitquery.io/Bonkswap-Trades-by-Trader-API) -``` +```graphql { Solana(network: solana, dataset: realtime) { DEXTrades( @@ -237,7 +237,7 @@ The below API fetches recent trades by a particular trader. We use the `Transact [Run Query ➤](https://ide.bitquery.io/ohlc-for-bonkswap-token) -``` +```graphql query MyQuery { Solana { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/Boop-Fun-API.md b/docs/blockchain/Solana/Boop-Fun-API.md index 185b952d..0877390a 100644 --- a/docs/blockchain/Solana/Boop-Fun-API.md +++ b/docs/blockchain/Solana/Boop-Fun-API.md @@ -26,7 +26,7 @@ Below query can be used to track Boop.fun token migrations. In this query we are Try the query [here](https://ide.bitquery.io/Boopfun-token-migrations) -``` +```graphql query MyQuery { Solana { Instructions( @@ -97,7 +97,7 @@ query MyQuery { You can track latest buy trades on Boop.Fun using the below API. Try the API [here](https://ide.bitquery.io/latest-boopfun-token-buys#). -``` +```graphql query MyQuery { Solana { Instructions( @@ -168,7 +168,7 @@ query MyQuery { You can track latest sell trades on Boop.Fun using the below API. Try the API [here](https://ide.bitquery.io/latest-boopfun-token-sells#). -``` +```graphql query MyQuery { Solana { Instructions( @@ -239,7 +239,7 @@ query MyQuery { You can track latest token launches on Boop.Fun using the below API. Try the API [here](https://ide.bitquery.io/latest-boopfun-token-creations#). -``` +```graphql query MyQuery { Solana { Instructions( @@ -313,7 +313,7 @@ Use this single subscription to stream real-time token migration events across B Try out the [API](https://ide.bitquery.io/Raydium-Launchlab-Meteora-DBC-BoopFun-Moonshot-LetsBonkfun-token-migrations-in-realtime_2) here on IDE. -``` +```graphql subscription{ Solana { Instructions( diff --git a/docs/blockchain/Solana/DEXScreener/solana_dexscreener.mdx b/docs/blockchain/Solana/DEXScreener/solana_dexscreener.mdx index 11342711..24bdc9c7 100644 --- a/docs/blockchain/Solana/DEXScreener/solana_dexscreener.mdx +++ b/docs/blockchain/Solana/DEXScreener/solana_dexscreener.mdx @@ -40,7 +40,7 @@ import VideoPlayer from "../../../../src/components/videoplayer.js"; The query will subscribe you to real-time trade transactions for a Solana pair, providing a continuous stream of data as new trades are processed and recorded. You can find the query [here](https://ide.bitquery.io/Get-Solana-pair-trades-data-just-like-dexcsreener#) -``` +```graphql subscription MyQuery { Solana { DEXTradeByTokens( @@ -80,7 +80,7 @@ subscription MyQuery { This query will give you the latest Price of a specified token using Trading API. Here is the [saved query link](https://ide.bitquery.io/token-usd-price-using-trading-api_1) -``` +```graphql query MyQuery { Trading { Pairs( @@ -121,7 +121,7 @@ This query fetches the Open, High, Low, and Close (OHLC) price data (USD-quoted) You can find the query [here](https://ide.bitquery.io/ohlc-of-a-solana-token-pair-1-hour-interval) -``` +```graphql query MyQuery { Trading { Pairs( @@ -272,7 +272,7 @@ Please change the `Block: {Time: {since: "2024-08-15T04:19:00Z"}}` accordingly w Keep in mind you cannot use this as a websocket subscription becuase aggregate functions like `sum` doesn't work well in `subscription`. You can find the query [here](https://ide.bitquery.io/Dexscreener--All-in-One-query_1) -``` +```graphql query MyQuery { Solana { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/Meteora-DAMM-v2-API.md b/docs/blockchain/Solana/Meteora-DAMM-v2-API.md index 01e111e0..c3cd3b5c 100644 --- a/docs/blockchain/Solana/Meteora-DAMM-v2-API.md +++ b/docs/blockchain/Solana/Meteora-DAMM-v2-API.md @@ -25,7 +25,7 @@ In this section we will see how to get data on Meteora DAMM v2 trades in real-ti This query subscribes to real-time trades on the Meteora DAMM v2 (Dynamic Automated Market Maker) on the Solana blockchain by filtering using the program address `cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG`. You can run the query [here](https://ide.bitquery.io/Real-time-trades-on-MeteoraDAMMv2-DEX-on-Solana) -``` +```graphql subscription { Solana { DEXTrades( @@ -99,7 +99,7 @@ The mint addresses for the tokens being used in the pool are listed, indicating You can test the query [here](https://ide.bitquery.io/Track-Latest-created-pools-on-Meteora-DAMM-v2) -``` +```graphql subscription MyQuery { Solana { Instructions( @@ -170,7 +170,7 @@ You can use the following query to get the latest price of a token on Meteora DA You can run this query using this [link](https://ide.bitquery.io/latest-price-of-a-token-on-Damm-v2). -``` +```graphql { Solana { DEXTradeByTokens( @@ -196,7 +196,7 @@ You can use the following subscription to get real-time price updates of a token You can run this query using this [link](https://ide.bitquery.io/Realtime-Price-feed-of-a-Token-on-Meteora-DAMM-v2). -``` +```graphql subscription{ Solana { DEXTradeByTokens( @@ -224,7 +224,7 @@ Only use this API as a query and not as a subscription websocket, as Aggregates You can run this query [here](https://ide.bitquery.io/Meteora-DAMM-v2-OHLC-API). -``` +```graphql { Solana { DEXTradeByTokens( @@ -258,7 +258,7 @@ Keep in mind you can use this API only as a query and not a subscription websock You can run the query [here](https://ide.bitquery.io/Get-the-Top-Traders-of-a-specific-Token-on-Meteora-DAMM-v2-DEX_1) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -295,7 +295,7 @@ This query fetches the traded volume, buy volume and sell volume of a specific t Try out the API [here](https://ide.bitquery.io/Get-trading-volume-buy-volume-sell-volume-of-a-token_2). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/Meteora-DLMM-API.md b/docs/blockchain/Solana/Meteora-DLMM-API.md index d5b16ba7..e8fe99fc 100644 --- a/docs/blockchain/Solana/Meteora-DLMM-API.md +++ b/docs/blockchain/Solana/Meteora-DLMM-API.md @@ -32,7 +32,7 @@ The mint addresses for the tokens being used in the pool are listed, indicating You can test the query [here](https://ide.bitquery.io/Track-Latest-created-pools-on-Meteora-DLMM_1) -``` +```graphql subscription MyQuery { Solana { Instructions( @@ -161,7 +161,7 @@ You can use the following query to get the latest price of a token on Meteora DL You can run this query using this [link](https://ide.bitquery.io/latest-price-of-a-token-on-DLMM#). -``` +```graphql { Solana { DEXTradeByTokens( @@ -188,7 +188,7 @@ You can use the following subscription to get real-time price updates of a token You can run this query using this [link](https://ide.bitquery.io/Realtime-Price-feed-of-a-Token-on-Meteora-DLMM#). -``` +```graphql subscription{ Solana { DEXTradeByTokens( @@ -216,7 +216,7 @@ Only use this API as a query and not as a subscription websocket, as Aggregates You can run this query [here](https://ide.bitquery.io/Meteora-DLMM-OHLC-API#). -``` +```graphql { Solana { DEXTradeByTokens( @@ -250,7 +250,7 @@ Keep in mind you can use this API only as a query and not a subscription websock You can run the query [here](https://ide.bitquery.io/Get-the-Top-Traders-of-a-specific-Token-on-Meteora-DLMM-DEX#) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -287,7 +287,7 @@ This query fetches the traded volume, buy volume and sell volume of a specific t Try out the API [here](https://ide.bitquery.io/Get-trading-volume-buy-volume-sell-volume-of-a-token_3#). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/Meteora-DYN-API.md b/docs/blockchain/Solana/Meteora-DYN-API.md index 8ec6f016..23a0715d 100644 --- a/docs/blockchain/Solana/Meteora-DYN-API.md +++ b/docs/blockchain/Solana/Meteora-DYN-API.md @@ -14,7 +14,7 @@ import VideoPlayer from "../../../src/components/videoplayer.js"; Below query will give you the latest created Meteora DYN pools in realtime. You can test the query [here](https://ide.bitquery.io/Track-Latest-created-pools-on-MeteoraDYN) -``` +```graphql subscription MyQuery { Solana { Instructions( @@ -144,7 +144,7 @@ You can use the following query to get the latest price of a token on Meteora DY You can run this query using this [link](https://ide.bitquery.io/latest-price-of-a-token-on-DYN#). -``` +```graphql { Solana { DEXTradeByTokens( @@ -170,7 +170,7 @@ You can use the following query to get the latest price of a token on Meteora DY You can run this query using this [link](https://ide.bitquery.io/Realtime-Price-feed-of-a-Token-on-Meteora-DYN#). -``` +```graphql subscription{ Solana { DEXTradeByTokens( @@ -192,7 +192,7 @@ subscription{ If you want to get OHLC data for any specific currency pair on Meteora DYN, you can use this api. Only use [this API](https://ide.bitquery.io/Meteora-DYN-OHLC-API#) as query and not subscription websocket as Aggregates and Time Intervals don't work well with subscriptions. -``` +```graphql { Solana { DEXTradeByTokens( @@ -220,7 +220,7 @@ If you want to get OHLC data for any specific currency pair on Meteora DYN, you The below query gets the Top Traders of the specified Token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` on Meteora DYN. Keep in mind you can use this API only as a query and not a subscription websocket because aggregates don't work with subscription and you will end up getting wrong results. You can run the query [here](https://ide.bitquery.io/Get-the-Top-Traders-of-a-specific-Token-on-Meteora-DYN-DEX#) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -255,7 +255,7 @@ query TopTraders($token: String) { This query fetches you the traded volume, buy volume and sell volume of a token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`. Try out the API [here](https://ide.bitquery.io/Get-trading-volume-buy-volume-sell-volume-of-a-token_4#). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/Moonshot-API.md b/docs/blockchain/Solana/Moonshot-API.md index 05552d11..a125415b 100644 --- a/docs/blockchain/Solana/Moonshot-API.md +++ b/docs/blockchain/Solana/Moonshot-API.md @@ -200,7 +200,7 @@ subscription { Below query will get you all the instructions that the Moonit Program has. You can test the API [here](https://ide.bitquery.io/instruction-invocation-count-in-last-10-hours). -``` +```graphql query MyQuery { Solana { Instructions( @@ -225,7 +225,7 @@ Thats why we have filtered for these 2 instructions in the below API, and tracki Test out the API [here](https://ide.bitquery.io/Track-Moonit-Token-Migrations-to-Raydium-and-Meteora-in-realtime). -``` +```graphql subscription MyQuery { Solana { Instructions( @@ -296,7 +296,7 @@ Use this single subscription to stream real-time token migration events across B Try out the [API](https://ide.bitquery.io/Raydium-Launchlab-Meteora-DBC-BoopFun-Moonshot-LetsBonkfun-token-migrations-in-realtime_2) here on IDE. -``` +```graphql subscription{ Solana { Instructions( @@ -839,7 +839,7 @@ query ($tokens: [String!]) { } ``` -``` +```json { "tokens": [ "token mint address" diff --git a/docs/blockchain/Solana/Orbic-API.md b/docs/blockchain/Solana/Orbic-API.md index f4f03415..5fdaa3c9 100644 --- a/docs/blockchain/Solana/Orbic-API.md +++ b/docs/blockchain/Solana/Orbic-API.md @@ -74,7 +74,7 @@ You can use the following query to get the latest price of a token on Orbic on S You can run this query using this [link](https://ide.bitquery.io/latest-price-of-a-token-on-Orbic#). -``` +```graphql { Solana { DEXTradeByTokens( @@ -101,7 +101,7 @@ You can use the following query to get the latest price of a token on Orbic on S You can run this query using this [link](https://ide.bitquery.io/Realtime-Price-feed-of-a-Token-on-Orbic#). -``` +```graphql subscription{ Solana { DEXTradeByTokens( @@ -123,7 +123,7 @@ subscription{ If you want to get OHLC data for any specific currency pair on Orbic, you can use this api. Only use [this API](https://ide.bitquery.io/Orbic-OHLC-API#) as query and not subscription websocket as Aggregates and Time Intervals don't work well with subscriptions. -``` +```graphql { Solana { DEXTradeByTokens( @@ -151,7 +151,7 @@ If you want to get OHLC data for any specific currency pair on Orbic, you can us The below query gets the Top Traders of the specified Token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` on Orbic. Keep in mind you can use this API only as a query and not a subscription websocket because aggregates don't work with subscription and you will end up getting wrong results. You can run the query [here](https://ide.bitquery.io/Get-the-Top-Traders-of-a-specific-Token-on-Orbic-DEX#) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -186,7 +186,7 @@ query TopTraders($token: String) { This query fetches you the traded volume, buy volume and sell volume of a token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`. Try out the API [here](https://ide.bitquery.io/Get-trading-volume-buy-volume-sell-volume-of-a-token_5#). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/Pumpfun/Pump-Fun-API.mdx b/docs/blockchain/Solana/Pumpfun/Pump-Fun-API.mdx index 674cdaf9..9cceb0b6 100644 --- a/docs/blockchain/Solana/Pumpfun/Pump-Fun-API.mdx +++ b/docs/blockchain/Solana/Pumpfun/Pump-Fun-API.mdx @@ -360,7 +360,7 @@ Now you can track the newly created Pump.fun Tokens along with their dev address
Click to expand GraphQL query -``` +```graphql subscription { Solana { TokenSupplyUpdates( @@ -416,7 +416,7 @@ Try the API [here](https://ide.bitquery.io/Track-Mayhem-Mode-enabled-Pumpfun-Tok
Click to expand GraphQL query -``` +```graphql subscription MyQuery { Solana { Instructions( @@ -475,7 +475,7 @@ Now you can check if a pump fun token is in Mayhem mode or not, we will be check
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana { Instructions( @@ -700,7 +700,7 @@ Use the below query to get top 10 Pump.fun tokens by price change in the last 5
Click to expand GraphQL query -``` +```graphql { Trading { Pairs( @@ -1910,7 +1910,7 @@ query MyQuery($token: String, $bonding_curve: String) { } ``` -``` +```json { "token": "3Fymji2JPhhbKuCzNPKEyjdEuF9cyFuQ8HksyjRGpump", "bonding_curve": "6AMeqEdepfKKmTQAwcMvbrwugcaJaXtt3MsJGy7WdXpk" diff --git a/docs/blockchain/Solana/Pumpfun/Pump-Fun-Marketcap-Bonding-Curve-API.mdx b/docs/blockchain/Solana/Pumpfun/Pump-Fun-Marketcap-Bonding-Curve-API.mdx index a48620f2..aa427eb1 100644 --- a/docs/blockchain/Solana/Pumpfun/Pump-Fun-Marketcap-Bonding-Curve-API.mdx +++ b/docs/blockchain/Solana/Pumpfun/Pump-Fun-Marketcap-Bonding-Curve-API.mdx @@ -550,7 +550,7 @@ query ($token: String) { } ``` -``` +```json { "token":"6SmgaPU4LMd8eWhamtpTtArr7JYPKZSF8AKK2Uy5pump" } diff --git a/docs/blockchain/Solana/SolFi-api.md b/docs/blockchain/Solana/SolFi-api.md index 65a2767d..e1ecd2b8 100644 --- a/docs/blockchain/Solana/SolFi-api.md +++ b/docs/blockchain/Solana/SolFi-api.md @@ -64,7 +64,7 @@ You can use the following query to get the latest price of a token on SolFi on S You can run this query using this [link](https://ide.bitquery.io/latest-price-of-token-on-solfi). -``` +```graphql { Solana { DEXTradeByTokens( @@ -90,7 +90,7 @@ You can use the following query to get the latest price of a token on SolFi on S You can run this query using this [link](https://ide.bitquery.io/realtime-price-of-token-on-solfi). -``` +```graphql subscription{ Solana { DEXTradeByTokens( @@ -112,7 +112,7 @@ subscription{ If you want to get OHLC data for any specific currency pair on SolFi, you can use this api. Only use [this API](https://ide.bitquery.io/SolFi-OHLC-for-specific-pair) as query and not subscription websocket as Aggregates and Time Intervals don't work well with subscriptions. -``` +```graphql { Solana { DEXTradeByTokens( @@ -141,7 +141,7 @@ If you want to get OHLC data for any specific currency pair on SolFi, you can us The below query gets the Top Traders of the specified Token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` on SolFi. Keep in mind you can use this API only as a query and not a subscription websocket because aggregates don't work with subscription and you will end up getting wrong results. You can run the query [here](https://ide.bitquery.io/top-traders-of-a-token-on-solfi) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -176,7 +176,7 @@ query TopTraders($token: String) { This query fetches you the traded volume, buy volume and sell volume of a token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`. Try out the API [here](https://ide.bitquery.io/trade_volume-Solfi). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/Solana-AldrinAmm-api.md b/docs/blockchain/Solana/Solana-AldrinAmm-api.md index 64fe8581..c154ceac 100644 --- a/docs/blockchain/Solana/Solana-AldrinAmm-api.md +++ b/docs/blockchain/Solana/Solana-AldrinAmm-api.md @@ -70,7 +70,7 @@ You can use the following query to get the latest price of a token on AldrinAmm You can run this query using this [link](https://ide.bitquery.io/live-price-of-token-on-aldrinAmm). -``` +```graphql { Solana { DEXTradeByTokens( @@ -94,7 +94,7 @@ You can run this query using this [link](https://ide.bitquery.io/live-price-of-t If you want to get OHLC data for any specific currency pair on AldrinAmm, you can use this api. Only use [this API](https://ide.bitquery.io/AldrinAmm-OHLC-for-specific-pair) as query and not subscription websocket as Aggregates and Time Intervals don't work well with subscriptions. -``` +```graphql { Solana { DEXTradeByTokens( @@ -123,7 +123,7 @@ If you want to get OHLC data for any specific currency pair on AldrinAmm, you ca The below query gets the Top Traders of the specified Token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` on AldrinAmm. Keep in mind you can use this API only as a query and not a subscription websocket because aggregates don't work with subscription and you will end up getting wrong results. You can run the query [here](https://ide.bitquery.io/top-traders-of-a-token-on-aldrinAmm_2) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -152,7 +152,7 @@ query TopTraders($token: String) { This query fetches you the traded volume, buy volume and sell volume of a token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` on AldrinAmm DEX. Try out the API [here](https://ide.bitquery.io/trade_volume_aldrinAmm). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/Solana-DEX-Orders-API.md b/docs/blockchain/Solana/Solana-DEX-Orders-API.md index e9aa726b..9f5c1075 100644 --- a/docs/blockchain/Solana/Solana-DEX-Orders-API.md +++ b/docs/blockchain/Solana/Solana-DEX-Orders-API.md @@ -18,7 +18,7 @@ import VideoPlayer from "../../../src/components/videoplayer.js"; This query provides real-time updates on order events, including details about the DEX, market, and order specifics. You can run the query [here](https://ide.bitquery.io/Copy-of-Solana-DEX-trades-API) -``` +```graphql subscription { Solana { DEXOrders { @@ -91,7 +91,7 @@ To fetch the most recent orders for a specific token, filter using the token's ` You can run the query [here](https://ide.bitquery.io/Latest-DEXOrders-for-token-on-Solana) -``` +```graphql { Solana(dataset: realtime) { DEXOrders( @@ -136,7 +136,7 @@ You can filter orders based on specific price conditions, such as all orders wit You can run the query [here](https://ide.bitquery.io/LimitPrice-DEXOrders-for-token-on-Solana) -``` +```graphql { Solana(dataset: realtime) { DEXOrders( @@ -181,7 +181,7 @@ This query retrieves the latest open orders on Solana-based DEXs. Open orders ar You can run the query [here](https://ide.bitquery.io/Latest-Open-DEX-Orders-Solana) -``` +```graphql { Solana(dataset: realtime) { DEXOrders( @@ -225,7 +225,7 @@ You can run the query [here](https://ide.bitquery.io/Latest-Open-DEX-Orders-Sola This query fetches the latest orders from the OpenBook DEX on Solana, providing comprehensive information about the DEX protocol, market, order specifics, and transaction details. OpenBook is an exchange protocol offering central limit orderbook for top Solana DeFi protocols. You can run the query [here](https://ide.bitquery.io/Latest-Openbook-DEX-Orders#) -``` +```graphql { Solana(dataset: realtime) { DEXOrders( diff --git a/docs/blockchain/Solana/Solana-DexPools-API.md b/docs/blockchain/Solana/Solana-DexPools-API.md index 190f00e3..1cb179b3 100644 --- a/docs/blockchain/Solana/Solana-DexPools-API.md +++ b/docs/blockchain/Solana/Solana-DexPools-API.md @@ -72,7 +72,7 @@ You can use the below query to get the tokens which are getting traded and have
Click to expand GraphQL query -``` +```graphql subscription MyQuery { Solana { DEXPools( @@ -143,7 +143,7 @@ You can find the query [here](https://ide.bitquery.io/get-all-the-liquidity-pool
Click to expand GraphQL query -``` +```graphql query ($token: String) { Solana { DEXPools( @@ -477,7 +477,7 @@ This query tracks liquidity addition events on Solana DEX pools by monitoring sp Click to expand GraphQL query -``` +```graphql { Solana(network: solana) { DEXPools( @@ -544,7 +544,7 @@ This query tracks liquidity removal events on Solana DEX pools by monitoring wit Click to expand GraphQL query -``` +```graphql { Solana(network: solana) { diff --git a/docs/blockchain/Solana/Solana-Lifinity-dex-api.mdx b/docs/blockchain/Solana/Solana-Lifinity-dex-api.mdx index e5311435..e2e645c7 100644 --- a/docs/blockchain/Solana/Solana-Lifinity-dex-api.mdx +++ b/docs/blockchain/Solana/Solana-Lifinity-dex-api.mdx @@ -70,7 +70,7 @@ You can use the following query to get the latest price of a token on Lifinity o You can run this query using this [link](https://ide.bitquery.io/live-price-of-token-on-lifinity). -``` +```graphql { Solana { DEXTradeByTokens( @@ -94,7 +94,7 @@ You can run this query using this [link](https://ide.bitquery.io/live-price-of-t If you want to get OHLC data for any specific currency pair on Lifinity, you can use this api. Only use [this API](https://ide.bitquery.io/Lifinity-OHLC-for-specific-pair_1) as query and not subscription websocket as Aggregates and Time Intervals don't work well with subscriptions. -``` +```graphql { Solana { DEXTradeByTokens( @@ -122,7 +122,7 @@ If you want to get OHLC data for any specific currency pair on Lifinity, you can The below query gets the Top Traders of the specified Token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` on Lifinity. Keep in mind you can use this API only as a query and not a subscription websocket because aggregates don't work with subscription and you will end up getting wrong results. You can run the query [here](https://ide.bitquery.io/top-traders-of-a-token-on-lifinity) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -157,7 +157,7 @@ query TopTraders($token: String) { This query fetches you the traded volume, buy volume and sell volume of a token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` on Lifinity DEX. Try out the API [here](https://ide.bitquery.io/trade_volume_lifinity). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/Solana-OpenBook-api.mdx b/docs/blockchain/Solana/Solana-OpenBook-api.mdx index b996427e..0b97b693 100644 --- a/docs/blockchain/Solana/Solana-OpenBook-api.mdx +++ b/docs/blockchain/Solana/Solana-OpenBook-api.mdx @@ -279,7 +279,7 @@ You can use the following query to get the latest price of a token on OpenBook o You can run this query using this [link](https://ide.bitquery.io/live-price-of-token-on-openbook). -``` +```graphql { Solana { DEXTradeByTokens( @@ -312,7 +312,7 @@ You can run this query using this [link](https://ide.bitquery.io/live-price-of-t If you want to get OHLC data for any specific currency pair on OpenBook, you can use this api. Only use [this API](https://ide.bitquery.io/OpenBook-OHLC-for-specific-pair) as query and not subscription websocket as Aggregates and Time Intervals don't work well with subscriptions. -``` +```graphql { Solana { DEXTradeByTokens( @@ -340,7 +340,7 @@ If you want to get OHLC data for any specific currency pair on OpenBook, you can The below query gets the Top Traders of the specified Token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` on OpenBook. Keep in mind you can use this API only as a query and not a subscription websocket because aggregates don't work with subscription and you will end up getting wrong results. You can run the query [here](https://ide.bitquery.io/top-traders-of-a-token-on-openbook) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -375,7 +375,7 @@ query TopTraders($token: String) { This query fetches you the traded volume, buy volume and sell volume of a token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` on OpenBook DEX. Try out the API [here](https://ide.bitquery.io/trade_volume_openbook). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/Solana-Phoenix-api.md b/docs/blockchain/Solana/Solana-Phoenix-api.md index 9d9f7488..a7600cdd 100644 --- a/docs/blockchain/Solana/Solana-Phoenix-api.md +++ b/docs/blockchain/Solana/Solana-Phoenix-api.md @@ -66,7 +66,7 @@ You can use the following query to get the latest price of a token on Phoenix on You can run this query using this [link](https://ide.bitquery.io/latest-price-of-token-on-phoenix). -``` +```graphql { Solana { DEXTradeByTokens( @@ -92,7 +92,7 @@ You can use the following query to get the latest price of a token on Phoenix on You can run this query using this [link](https://ide.bitquery.io/realtime-price-of-token-on-phoenix). -``` +```graphql subscription{ Solana { DEXTradeByTokens( @@ -114,7 +114,7 @@ subscription{ If you want to get OHLC data for any specific currency pair on Phoenix, you can use this api. Only use [this API](https://ide.bitquery.io/Phoenix-OHLC-for-specific-pair_1) as query and not subscription websocket as Aggregates and Time Intervals don't work well with subscriptions. -``` +```graphql { Solana { DEXTradeByTokens( @@ -143,7 +143,7 @@ If you want to get OHLC data for any specific currency pair on Phoenix, you can The below query gets the Top Traders of the specified Token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` on Phoenix. Keep in mind you can use this API only as a query and not a subscription websocket because aggregates don't work with subscription and you will end up getting wrong results. You can run the query [here](https://ide.bitquery.io/top-traders-of-a-token-on-phoenix) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -178,7 +178,7 @@ query TopTraders($token: String) { This query fetches you the traded volume, buy volume and sell volume of a token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`. Try out the API [here](https://ide.bitquery.io/trade_volume_phoenix). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/Solana-Raydium-DEX-API.mdx b/docs/blockchain/Solana/Solana-Raydium-DEX-API.mdx index 30165c4e..636b3016 100644 --- a/docs/blockchain/Solana/Solana-Raydium-DEX-API.mdx +++ b/docs/blockchain/Solana/Solana-Raydium-DEX-API.mdx @@ -172,7 +172,7 @@ You can find the query [here](https://ide.bitquery.io/Solana-Raydium-New-Pairs_2
Click to expand GraphQL query -``` +```graphql query{ Solana(dataset: archive) { DEXTradeByTokens( @@ -229,7 +229,7 @@ You can run this query using [this link](https://ide.bitquery.io/live-price-of-t
Click to expand GraphQL query -``` +```graphql { Solana { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/ai-agent-solana-data.mdx b/docs/blockchain/Solana/ai-agent-solana-data.mdx index 303c04e9..b4a21318 100644 --- a/docs/blockchain/Solana/ai-agent-solana-data.mdx +++ b/docs/blockchain/Solana/ai-agent-solana-data.mdx @@ -168,7 +168,7 @@ You can fetch Marketcap of a token using below query.
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana { TokenSupplyUpdates( diff --git a/docs/blockchain/Solana/goonfi-api.md b/docs/blockchain/Solana/goonfi-api.md index adda8698..f3b79b49 100644 --- a/docs/blockchain/Solana/goonfi-api.md +++ b/docs/blockchain/Solana/goonfi-api.md @@ -194,7 +194,7 @@ You can use the following query to get the latest price of a token on GoonFi on You can run this query using this [link](https://ide.bitquery.io/latest-price-of-a-token-on-GoonFi_1). -``` +```graphql { Solana { DEXTradeByTokens( @@ -225,7 +225,7 @@ You can use the following query to get the latest price of a token on GoonFi on You can run this query using this [link](https://ide.bitquery.io/Realtime-Price-feed-of-a-Token-on-GoonFi_1). -``` +```graphql subscription{ Solana { DEXTradeByTokens( @@ -252,7 +252,7 @@ subscription{ If you want to get OHLC data for any specific currency pair on GoonFi, you can use this api. Only use [this API](https://ide.bitquery.io/GoonFi-OHLC-API_1) as query and not subscription websocket as Aggregates and Time Intervals don't work well with subscriptions. -``` +```graphql { Solana { DEXTradeByTokens( @@ -281,7 +281,7 @@ If you want to get OHLC data for any specific currency pair on GoonFi, you can u Below API will give you realtime prices, OHLC, and volume data for all GoonFi trading pairs. We have selected `1` sec as the interval for the OHLC, volume or moving average calculation. You can select any other interval as well like 5 sec, 30 sec, 60 sec, 3600 sec, etc. Try the API [here](https://ide.bitquery.io/GoonFi-Realtime-OHLC-Price-Volume-API---Crypto-Price-API_1). -``` +```graphql subscription MyQuery { Trading { Pairs( @@ -339,7 +339,7 @@ subscription MyQuery { The below query gets the Top Traders of the specified Token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` on GoonFi. Keep in mind you can use this API only as a query and not a subscription websocket because aggregates don't work with subscription and you will end up getting wrong results. You can run the query [here](https://ide.bitquery.io/Get-the-Top-Traders-of-a-specific-Token-on-GoonFi-DEX_1) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -374,7 +374,7 @@ query TopTraders($token: String) { This query fetches you the traded volume, buy volume and sell volume of a token `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`. Try out the API [here](https://ide.bitquery.io/Get-trading-volume-buy-volume-sell-volume-of-a-token-on-GoonFi-DEX_1). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/heaven-dex-api.md b/docs/blockchain/Solana/heaven-dex-api.md index c637a223..93825dc2 100644 --- a/docs/blockchain/Solana/heaven-dex-api.md +++ b/docs/blockchain/Solana/heaven-dex-api.md @@ -233,7 +233,7 @@ You can run this query using [this link](https://ide.bitquery.io/live-price-of-t
Click to expand GraphQL query -``` +```graphql { Solana { DEXTradeByTokens( @@ -527,7 +527,7 @@ The below query gets the Top Traders of the specified Token `G9z2bN7rqxdoN526H4X
Click to expand GraphQL query -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -567,7 +567,7 @@ This query fetches you the traded volume, buy volume and sell volume of a token
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/historical-aggregate-data.mdx b/docs/blockchain/Solana/historical-aggregate-data.mdx index 453cfcdc..edf5e59b 100644 --- a/docs/blockchain/Solana/historical-aggregate-data.mdx +++ b/docs/blockchain/Solana/historical-aggregate-data.mdx @@ -315,7 +315,7 @@ We also use `PriceAsymmetry` and `AmountInUSD` in combination to filter outliers Read more about quantiles [here](/docs/graphql/metrics/quantile/) You can run the query [here](https://ide.bitquery.io/Price-ATH-query) -``` +```graphql { Solana(dataset: combined) { DEXTradeByTokens( @@ -334,7 +334,7 @@ You can run the query [here](https://ide.bitquery.io/Price-ATH-query) Fetches a Solana token’s ATH price, ATH date, and price change percentages over the past 24h, 7d, and 30d using Bitquery Solana APIs. Try the [query to get ATH price, ATH date, price change](https://ide.bitquery.io/ath-with-price-delta_1). -``` +```graphql query ($token: String) { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/index.mdx b/docs/blockchain/Solana/index.mdx index e21eecac..8bd4e541 100644 --- a/docs/blockchain/Solana/index.mdx +++ b/docs/blockchain/Solana/index.mdx @@ -180,3 +180,10 @@ import VideoPlayer from "../../../src/components/videoplayer.js"; { q: "Do I need a separate API key for gRPC streams?", a: "GraphQL uses your standard OAuth token. Kafka and gRPC may require additional credentials — contact support to enable them." }, ]} /> + +## More guides + +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) — how far back Solana data goes +- [Common errors and what to do](/docs/start/errors/) — empty results, dataset, and quota errors +- [Kafka Operations Cookbook](/docs/streams/kafka-operations/) +- [Plans, Points & Limits](/docs/plans/how-billing-works/) diff --git a/docs/blockchain/Solana/jupiter-studio-api.md b/docs/blockchain/Solana/jupiter-studio-api.md index b2e85658..1a6a7ce6 100644 --- a/docs/blockchain/Solana/jupiter-studio-api.md +++ b/docs/blockchain/Solana/jupiter-studio-api.md @@ -318,7 +318,7 @@ Check if specific Jupiter Studio tokens have migrated from Meteora DBC to Meteor
Click to expand GraphQL query -``` +```graphql query MyQuery($tokenAddresses: [String!]) { Solana { Instructions( diff --git a/docs/blockchain/Solana/launchpad-raydium.md b/docs/blockchain/Solana/launchpad-raydium.md index 5a5ee8d7..73e56e28 100644 --- a/docs/blockchain/Solana/launchpad-raydium.md +++ b/docs/blockchain/Solana/launchpad-raydium.md @@ -98,7 +98,7 @@ Below query will get you all the instructions that the Raydium LaunchLab Program
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana { Instructions( @@ -128,7 +128,7 @@ Test out the API [here](https://ide.bitquery.io/Track-Token-Migrations-to-Raydiu
Click to expand GraphQL query -``` +```graphql subscription MyQuery { Solana { Instructions( @@ -204,7 +204,7 @@ Try out the [API](https://ide.bitquery.io/Raydium-Launchlab-Meteora-DBC-BoopFun-
Click to expand GraphQL query -``` +```graphql subscription{ Solana { Instructions( diff --git a/docs/blockchain/Solana/letsbonk-api.md b/docs/blockchain/Solana/letsbonk-api.md index 04315b6d..aa3ef741 100644 --- a/docs/blockchain/Solana/letsbonk-api.md +++ b/docs/blockchain/Solana/letsbonk-api.md @@ -362,7 +362,7 @@ Below query will get you all the instructions that the Raydium LaunchLab Program
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana { Instructions( @@ -392,7 +392,7 @@ Run the stream: [Track LetsBonk.fun token migrations to Raydium ➤](https://ide
Click to expand GraphQL query -``` +```graphql subscription MyQuery { Solana { Instructions( @@ -468,7 +468,7 @@ Try out the [API](https://ide.bitquery.io/Raydium-Launchlab-Meteora-DBC-BoopFun-
Click to expand GraphQL query -``` +```graphql subscription{ Solana { Instructions( diff --git a/docs/blockchain/Solana/meteora-dynamic-bonding-curve-api.md b/docs/blockchain/Solana/meteora-dynamic-bonding-curve-api.md index a882f3c3..e7b951b6 100644 --- a/docs/blockchain/Solana/meteora-dynamic-bonding-curve-api.md +++ b/docs/blockchain/Solana/meteora-dynamic-bonding-curve-api.md @@ -80,7 +80,7 @@ subscription { Below query will give you the latest created Meteora DBC in realtime. You can test the query [here](https://ide.bitquery.io/token-creations-on-meteora-DBC) -``` +```graphql subscription MyQuery { Solana { Instructions( @@ -162,7 +162,7 @@ subscription MyQuery { Below query will give you the latest migrated tokens Meteora DBC in realtime. You can test the query [here](https://ide.bitquery.io/meteora-DBC-token-migrations-to-Meteors-DEX) -``` +```graphql subscription MyQuery { Solana { Instructions( @@ -246,7 +246,7 @@ Use this single subscription to stream real-time token migration events across B Try out the [API](https://ide.bitquery.io/Raydium-Launchlab-Meteora-DBC-BoopFun-Moonshot-LetsBonkfun-token-migrations-in-realtime_2) here on IDE. -``` +```graphql subscription{ Solana { Instructions( @@ -321,7 +321,7 @@ subscription{ Below query will give you the response for each token in the list if the token has graduated from Meteora DBC. Try out the query [here](https://ide.bitquery.io/Check-if-the-tokens-have-migrated-from-Meteora-DBC_1). -``` +```graphql query MyQuery($tokenAddresses: [String!]) { Solana { Instructions( @@ -518,7 +518,7 @@ You can use the following query to get the latest price of a token on Meteora DB You can run this query using this [link](https://ide.bitquery.io/latest-price-of-a-meteora-dbc-token). -``` +```graphql { Solana { DEXTradeByTokens( @@ -542,7 +542,7 @@ You can run this query using this [link](https://ide.bitquery.io/latest-price-of If you want to get OHLC data for any specific currency pair on Meteora DBC, you can use this api. Only use [this API](https://ide.bitquery.io/Meteora-DBC-OHLC-API) as query and not subscription websocket as Aggregates and Time Intervals don't work well with subscriptions. -``` +```graphql { Solana { DEXTradeByTokens( @@ -570,7 +570,7 @@ If you want to get OHLC data for any specific currency pair on Meteora DBC, you The below query gets the Top Traders of the specified Token `4kJkgxzuk1gcjsgRSVhdeSiC15ibQLRDKTuqtf2i16Dm` on Meteora DBC. Keep in mind you can use this API only as a query and not a subscription websocket because aggregates don't work with subscription and you will end up getting wrong results. You can run the query [here](https://ide.bitquery.io/Get-the-Top-Traders-of-a-specific-Token-on-Meteora-DBC) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -605,7 +605,7 @@ query TopTraders($token: String) { This query fetches you the traded volume, buy volume and sell volume of a token `4kJkgxzuk1gcjsgRSVhdeSiC15ibQLRDKTuqtf2i16Dm`. Try out the API [here](https://ide.bitquery.io/Get-trading-volume-buy-volume-sell-volume-of-a-token). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/raydium-clmm-API.md b/docs/blockchain/Solana/raydium-clmm-API.md index 9ef4a1d1..8602fb5e 100644 --- a/docs/blockchain/Solana/raydium-clmm-API.md +++ b/docs/blockchain/Solana/raydium-clmm-API.md @@ -27,7 +27,7 @@ In this section we will see how to get data on Raydium CLMM trades in real-time. This query subscribes to real-time trades on the Raydium CLMM (Concentrated Liquidity Market Maker) on the Solana blockchain by filtering using `{Program: {Address: {is: "CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"}}}:`. You can run the query [here](https://ide.bitquery.io/Raydium-CLMM-DEX-Trades-with-AccountNames) -``` +```graphql subscription MyQuery { Solana { DEXTrades( @@ -90,7 +90,7 @@ The mint addresses for the tokens being used in the pool are listed for example You can run the query [here](https://ide.bitquery.io/Raydium-CLMM-Pool-Creation) -``` +```graphql { Solana { Instructions( @@ -156,7 +156,7 @@ You can run the query [here](https://ide.bitquery.io/Raydium-CLMM-Pool-Creation) The below query tracks latest position closes on raydium CLMM by filtering using `Method: {is: "closePosition"}`. The `personalPosition` account which is the 4th in the list of `Accounts` includes the address of account to store personal position. -``` +```graphql { Solana { Instructions( @@ -230,7 +230,7 @@ This is where various accounts like NFTs, tokens, and program states are updated - **amount0Max**: The maximum amount of **Token 0** to be added to the position. - **amount1Max**: The maximum amount of **Token 1** to be added to the position. -``` +```graphql { Solana { Instructions( @@ -327,7 +327,7 @@ The arguments and account details include You can run the query [here](https://ide.bitquery.io/increaseLiquidityV2-latest-raydium-clmm#) -``` +```graphql { Solana { Instructions( @@ -430,7 +430,7 @@ This API fetches **Decrease Liquidity V2** transactions from the **Raydium CLMM* You can run the query **[here](https://ide.bitquery.io/decreaseLiquidityV2-latest-raydium-clmm_1#)** -``` +```graphql { Solana { Instructions( diff --git a/docs/blockchain/Solana/raydium-cpmm-API.md b/docs/blockchain/Solana/raydium-cpmm-API.md index 4bc89017..8821d13d 100644 --- a/docs/blockchain/Solana/raydium-cpmm-API.md +++ b/docs/blockchain/Solana/raydium-cpmm-API.md @@ -19,7 +19,7 @@ In this section we will see how to get data on Raydium CPMM trades in real-time. This query subscribes to real-time trades on the Raydium CPMM on the Solana blockchain by filtering using `{Program: {Address: {is: "CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"}}}:`. You can run the query [here](https://ide.bitquery.io/CPMM-trades). -``` +```graphql subscription MyQuery { Solana { DEXTrades( @@ -81,7 +81,7 @@ The mint addresses for the tokens being used in the pool are listed for example You can run the query [here](https://ide.bitquery.io/CPMM-pools-created_1) -``` +```graphql { Solana { Instructions( diff --git a/docs/blockchain/Solana/solana-balance-updates.mdx b/docs/blockchain/Solana/solana-balance-updates.mdx index 6c4aeb5f..ed9de6ba 100644 --- a/docs/blockchain/Solana/solana-balance-updates.mdx +++ b/docs/blockchain/Solana/solana-balance-updates.mdx @@ -25,7 +25,7 @@ The below query retrieves the token addresses and their balances owned by a part For tracking the transfers that cause these balance changes, see our **[Solana Transfers API](/docs/blockchain/Solana/solana-transfers/)**. -``` +```graphql query MyQuery { Solana { BalanceUpdates( @@ -51,7 +51,7 @@ You can find the query [here](https://ide.bitquery.io/active-address-balance-upd The balance update does not inherently include transaction fees. Therefore, to get the actual balance after all transactions and fees, you need to subtract the total transaction fees from the balance updates. -``` +```graphql subscription { Solana(network: solana) { BalanceUpdates( @@ -86,7 +86,7 @@ subscription { Get the token holdings of an address and calculate the holding time using `first_buy_time` and `latest_balance_update_time`; test this query [here](https://ide.bitquery.io/token-holdings-of-an-address_2). -``` +```graphql query MyQuery { Solana { BalanceUpdates( @@ -116,7 +116,7 @@ query MyQuery { [This query](https://ide.bitquery.io/top-100-holders-of-USDC-token-on-Solana) returns all token holders of a particular token after a given time. -``` +```graphql query MyQuery { Solana { BalanceUpdates( @@ -145,7 +145,7 @@ query MyQuery { To focus on the balance changes of a particular Solana wallet, [this](https://ide.bitquery.io/balance-updates-of-a-wallet_4) query filters the data stream to include only those updates relevant to the specified address. This is especially useful for wallet owners or services tracking specific accounts. -``` +```graphql subscription{ Solana { BalanceUpdates( @@ -192,7 +192,7 @@ For those interested in the NFT market, this query is tailored to track balance You can find the query [here](https://ide.bitquery.io/Solana-NFT-Balance-Updates_1) -``` +```graphql subscription { Solana { BalanceUpdates( @@ -241,7 +241,7 @@ subscription { The query will subscribe you to real-time updates for balance changes on the Solana blockchain for the address `675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8`, The `PostBalance` field will give you the native SOL balance in this case after the balance update. You can find the query [here](https://ide.bitquery.io/Balance-of-the-raydium-liquidity-pool-address) -``` +```graphql subscription { Solana { BalanceUpdates( @@ -280,7 +280,7 @@ When querying Solana balance updates, you can use pre-made aggregates to optimiz - **`aggregates: no`**: This option does not use any pre-made aggregates. > When using the aggregates: only option, you need to include the Owner field in the response to ensure proper aggregation and filtering. -``` +```graphql { Solana(aggregates: only) { BalanceUpdates( diff --git a/docs/blockchain/Solana/solana-dextrades.mdx b/docs/blockchain/Solana/solana-dextrades.mdx index eb28cf1d..a3dc28dd 100644 --- a/docs/blockchain/Solana/solana-dextrades.mdx +++ b/docs/blockchain/Solana/solana-dextrades.mdx @@ -146,7 +146,7 @@ You can find the query [here](https://ide.bitquery.io/solana-trades-subscription
Click to expand GraphQL query -``` +```graphql subscription { Solana { DEXTrades { @@ -236,7 +236,7 @@ You can run the query [here](https://ide.bitquery.io/Price-of-a-Token-Against-WS
Click to expand GraphQL query -``` +```graphql query LatestTrades { Solana { DEXTradeByTokens( @@ -288,7 +288,7 @@ You can find the query [here](https://ide.bitquery.io/Latest-Trades-of-Trump-COi
Click to expand GraphQL query -``` +```graphql query LatestTrades($token: String, $base: String) { Solana { DEXTradeByTokens( @@ -332,7 +332,7 @@ query LatestTrades($token: String, $base: String) { } ``` -``` +```json { "token": "CzLSujWBLFsSjncfkh59rUFqvafWcY5tzedWJSuypump", "base": "So11111111111111111111111111111111111111112" @@ -355,7 +355,7 @@ You can run the query [here](https://ide.bitquery.io/Price-change-of-a-token-on-
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana(dataset: realtime) { DEXTradeByTokens( @@ -385,7 +385,7 @@ query MyQuery { Click to expand GraphQL query -``` +```graphql query MyQuery { Solana(dataset: realtime) { DEXTradeByTokens( @@ -442,7 +442,7 @@ Use below query to calculate the price change percentage for a specific token in
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana { @@ -506,7 +506,7 @@ Use the below query to get top 10 solana tokens by price change in last 1 hr. Te
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana { @@ -691,7 +691,7 @@ You can find the query [here](https://ide.bitquery.io/Solana-Raydium-New-Pairs_2
Click to expand GraphQL query -``` +```graphql query{ Solana(dataset: archive) { DEXTradeByTokens( @@ -1074,7 +1074,7 @@ You can find the query [here](https://ide.bitquery.io/DEX-Markets-for-a-token)
Click to expand GraphQL query -``` +```graphql query ($token: String, $base: String, $time_10min_ago: DateTime, $time_1h_ago: DateTime, $time_3h_ago: DateTime) { Solana { DEXTradeByTokens( @@ -1125,7 +1125,7 @@ You can use the below query to get any token's creation time. Note that we are p
Click to expand GraphQL query -``` +```graphql { Solana(dataset: combined) { DEXTradeByTokens( @@ -1148,7 +1148,7 @@ You can use the below stream to get the volume changes in last 2 minutes. Try th
Click to expand GraphQL query -``` +```graphql { Solana(dataset: realtime) { DEXTradeByTokens( @@ -1190,7 +1190,7 @@ You can use the below stream to get the Solana price. Try the query on ide [here
Click to expand GraphQL query -``` +```graphql subscription { Solana { DEXTrades( @@ -1225,7 +1225,7 @@ You can find the query [here](https://ide.bitquery.io/Top-Bought-Solana-Tokens)
Click to expand GraphQL query -``` +```graphql { Solana { DEXTradeByTokens( @@ -1263,7 +1263,7 @@ You can find the query [here](https://ide.bitquery.io/Top-sold-Solana-Tokens)
Click to expand GraphQL query -``` +```graphql { Solana { DEXTradeByTokens( @@ -1301,7 +1301,7 @@ You can find the query [here](https://ide.bitquery.io/top-trading-pairs)
Click to expand GraphQL query -``` +```graphql query ($time_10min_ago: DateTime, $time_1h_ago: DateTime, $time_3h_ago: DateTime) { Solana { DEXTradeByTokens( @@ -1362,7 +1362,7 @@ You can find the query [here](https://ide.bitquery.io/top-dexs)
Click to expand GraphQL query -``` +```graphql query DexMarkets { Solana { DEXTradeByTokens { @@ -1400,7 +1400,7 @@ You can find the query [here](https://ide.bitquery.io/traded-pairs-of-a-token)
Click to expand GraphQL query -``` +```graphql query ($token: String, $time_10min_ago: DateTime, $time_1h_ago: DateTime, $time_3h_ago: DateTime) { Solana { DEXTradeByTokens( @@ -1461,7 +1461,7 @@ Find the query [here](https://ide.bitquery.io/Solana-DEXs)
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana { DEXTrades(limitBy: {by: Trade_Dex_ProtocolFamily, count: 1}, limit: {count: 10}) { @@ -1487,7 +1487,7 @@ The below query retrieves the USD price of a token on Solana by setting `MintAdd
Click to expand GraphQL query -``` +```graphql { Solana { DEXTradeByTokens( @@ -1594,7 +1594,7 @@ The below query retrieves the token details such as update authority for a parti
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana(dataset: archive) { DEXTradeByTokens( @@ -1628,7 +1628,7 @@ This query retrieves top buyers of the token `4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iC
Click to expand GraphQL query -``` +```graphql { Solana { DEXTradeByTokens( @@ -1665,7 +1665,7 @@ This query retrieves top sellers of the token `4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5i
Click to expand GraphQL query -``` +```graphql { Solana { DEXTradeByTokens( @@ -1702,7 +1702,7 @@ You can use this API to fetch trades of a specific wallet address `tRadEVu2Va7Ws
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana { DEXTradeByTokens( @@ -1760,7 +1760,7 @@ This query fetches you the traded volume, buy volume and sell volume of a token
Click to expand GraphQL query -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( @@ -1871,7 +1871,7 @@ Test the subscription query [here](https://ide.bitquery.io/seconds-oHLC-realtime
Click to expand GraphQL query -``` +```graphql subscription{ Trading { Tokens( @@ -1940,7 +1940,7 @@ The `Trade Side Account` field is **not available** in aggregate queries across
Click to expand GraphQL query -``` +```graphql query TradesSolToken($ca: String!, $currencies: [String!], $dataset: dataset_arg_enum, $interval: Int) { Solana(dataset: $dataset) { DEXTradeByTokens( @@ -1996,7 +1996,7 @@ ere is [an example](https://ide.bitquery.io/latest-price-for-more-than-1-markets
Click to expand GraphQL query -``` +```graphql subscription { Solana { DEXTrades( @@ -2032,7 +2032,7 @@ When querying Solana DEXTradeByTokens, you can use pre-made aggregates to optimi
Click to expand GraphQL query -``` +```graphql { Solana(aggregates: only) { @@ -2073,7 +2073,7 @@ Run this query [here](https://ide.bitquery.io/find-all-trades-interacting-with-a
Click to expand GraphQL query -``` +```graphql { Solana { DEXTrades(limit: {count: 100}) { @@ -2142,7 +2142,7 @@ Get up to 100 tokens with aggregated USD volume and average price over the last ▶️ [Aggregated Token Data](https://ide.bitquery.io/aggregated-data) -``` +```graphql { Trading { Tokens( diff --git a/docs/blockchain/Solana/solana-geckoterminal-api.md b/docs/blockchain/Solana/solana-geckoterminal-api.md index 649ce4ef..d6a436c3 100644 --- a/docs/blockchain/Solana/solana-geckoterminal-api.md +++ b/docs/blockchain/Solana/solana-geckoterminal-api.md @@ -33,7 +33,7 @@ This guide shows how to retrieve the same Solana DEX data that GeckoTerminal dis The query will subscribe you to real-time trade transactions for a Solana pair, providing a continuous stream of data as new trades are processed and recorded. You can find the query [here](https://ide.bitquery.io/Get-Solana-pair-trades-data-just-like-geckoTerminal_1) -``` +```graphql subscription MyQuery { Solana { DEXTradeByTokens( @@ -176,7 +176,7 @@ The query will give the top 10 pairs on Solana network in descending order of th Keep in mind you cannot use this as a websocket subscription becuase aggregate functions like `sum` doesn't work well in `subscription`. You can find the query [here](https://ide.bitquery.io/Get-Top-Pairs-on-Solana-on-GeckoTerminal_1) -``` +```graphql query MyQuery { Solana { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/solana-instruction-balance-updates.md b/docs/blockchain/Solana/solana-instruction-balance-updates.md index 8b7e436c..cdbbf842 100644 --- a/docs/blockchain/Solana/solana-instruction-balance-updates.md +++ b/docs/blockchain/Solana/solana-instruction-balance-updates.md @@ -11,7 +11,7 @@ The query below gives you balance update associated with a instruction invocatio You can run the query [here](https://ide.bitquery.io/balance-updates) -``` +```graphql query { Solana(dataset: realtime) { InstructionBalanceUpdates(limit: {count: 10}) { @@ -33,7 +33,7 @@ query { Using the below query, you can retrieve latest liquidity locks made using streamflow. Test the query [here](https://ide.bitquery.io/Liquidity-lock-using-instructions-balance-update) -``` +```graphql { Solana { InstructionBalanceUpdates(limit: {count: 20} diff --git a/docs/blockchain/Solana/solana-instructions.mdx b/docs/blockchain/Solana/solana-instructions.mdx index 78f82e6d..e58144dc 100644 --- a/docs/blockchain/Solana/solana-instructions.mdx +++ b/docs/blockchain/Solana/solana-instructions.mdx @@ -205,7 +205,7 @@ The metadata is returned is the **JSON** field, which includes fields such as na You can run the query [here](https://ide.bitquery.io/Get-newly-created-token-metadata-on-Solana) You can also add the keyword `subscription` and track it in real-time. -``` +```graphql { Solana { Instructions( @@ -276,7 +276,7 @@ The query below fetches the count of the latest created tokens on the Solana blo You can run the query [here](https://ide.bitquery.io/Count---Tokens-created-on-Solana) -``` +```graphql query MyQuery { Solana(dataset: realtime, network: solana) { Instructions( @@ -298,7 +298,7 @@ query MyQuery { Use the below query to get the `BuyEvent` instruction details. Test the query [here](https://ide.bitquery.io/BuyEvent). -``` +```graphql subscription { Solana { Instructions(where: { diff --git a/docs/blockchain/Solana/solana-logs.md b/docs/blockchain/Solana/solana-logs.md index d686e398..f100bacc 100644 --- a/docs/blockchain/Solana/solana-logs.md +++ b/docs/blockchain/Solana/solana-logs.md @@ -11,7 +11,7 @@ Solana Logs API helps you filter program instruction logs using regular expressi The Solana Logs API allows you to search for specific instructions based on log content that matches exact phrases. For example, to find logs related to 'AnchorError' with a specific error code and message You can find the query [here](https://ide.bitquery.io/SlippageToleranceExceeded#) -``` +```graphql { Solana { Instructions( @@ -55,7 +55,7 @@ To exclude instructions containing specific log phrases such as 'AnchorError' yo You can find the query [here](https://ide.bitquery.io/Not-Anchor-Error-Solana-Logs) -``` +```graphql { Solana { Instructions( @@ -97,7 +97,7 @@ You can find the query [here](https://ide.bitquery.io/Not-Anchor-Error-Solana-Lo To find instructions based on logs that contain specific patterns or keywords, such as an invoke log, you can use the `like` filter. -``` +```graphql { Solana { Instructions( @@ -139,7 +139,7 @@ To find instructions based on logs that contain specific patterns or keywords, s To find instructions based on logs that contain specific patterns or keywords, such as an ZETA market log, you can use the `includes` filter which searches for the presence of the keyword as a whole in the log. You can run the query [here](https://ide.bitquery.io/Solana-Zeta-Market-logs) -``` +```graphql { Solana { Instructions( diff --git a/docs/blockchain/Solana/solana-nft.mdx b/docs/blockchain/Solana/solana-nft.mdx index e1e94d74..51036a00 100644 --- a/docs/blockchain/Solana/solana-nft.mdx +++ b/docs/blockchain/Solana/solana-nft.mdx @@ -14,7 +14,7 @@ import VideoPlayer from "../../../src/components/videoplayer.js"; The subscription query provided below fetches the most recent NFT trades on the Solana blockchain. You can find the query [here](https://ide.bitquery.io/Latest-Solana-NFT-Trades). In this query you will also get failed transactions. To get only successful transactions, set `Transaction: {Result: {Success: true}}` -``` +```graphql subscription { Solana { DEXTradeByTokens(where: {Trade: {Currency: {Fungible: false}}}) { @@ -45,7 +45,7 @@ subscription { The subscription query provided below fetches the real time nft balance updates of addressses across Solana Ecosystem. This query also gives us NFT balance of the wallets using `PreBalance` and `PostBalance`. You can find the query [here](https://ide.bitquery.io/real-time-nft-balance-updates-across-solana-ecosystem) -``` +```graphql subscription { Solana { BalanceUpdates( @@ -77,7 +77,7 @@ subscription { The subscription query provided fetches the most-traded NFTs in the last few hours. For Solana, only realtime information is available, so the aggregate might not be accurate beyond a few hours. You can find the query [here](https://ide.bitquery.io/NFT-currencies-on-Solana-by-DEXes_1) -``` +```graphql { Solana { DEXTradeByTokens( diff --git a/docs/blockchain/Solana/solana-photon-api.md b/docs/blockchain/Solana/solana-photon-api.md index 30c95512..0dc63b30 100644 --- a/docs/blockchain/Solana/solana-photon-api.md +++ b/docs/blockchain/Solana/solana-photon-api.md @@ -26,7 +26,7 @@ The query uses a `joinInstructions` function to filter trades that specifically [Run Query](https://ide.bitquery.io/Trades-Executed-on-Photon) -``` +```graphql { Solana { DEXTrades(limit: {count: 100}, orderBy: {descending: Block_Time}) { @@ -92,7 +92,7 @@ The query uses a `joinInstructions` function to filter trades that specifically The query will get latest trades for a Solana pair executed via Photon You can find the query [here](https://ide.bitquery.io/Trades-of-a-Pair-Executed-on-Photon) -``` +```graphql { Solana { DEXTrades( diff --git a/docs/blockchain/Solana/solana-rewards.mdx b/docs/blockchain/Solana/solana-rewards.mdx index a43317a5..056e04d5 100644 --- a/docs/blockchain/Solana/solana-rewards.mdx +++ b/docs/blockchain/Solana/solana-rewards.mdx @@ -14,7 +14,7 @@ import VideoPlayer from "../../../src/components/videoplayer.js"; The query below helps track the most recent reward distributions on the Solana blockchain in real-time. You can find the query [here](https://ide.bitquery.io/Latest-Solana-Rewards) -``` +```graphql subscription { Solana { Rewards(limit: {count: 10}) { @@ -43,7 +43,7 @@ subscription { If you're interested in tracking the rewards for a specific wallet address, you can modify the query to filter results based on the address. This allows stakeholders to monitor their own rewards or analyze rewards distribution to specific addresses over time. You can find the query [here](https://ide.bitquery.io/Rewards-for-a-wallet-address) -``` +```graphql subscription { Solana { Rewards( diff --git a/docs/blockchain/Solana/solana-trader-API.md b/docs/blockchain/Solana/solana-trader-API.md index e009a30d..e23ffdbd 100644 --- a/docs/blockchain/Solana/solana-trader-API.md +++ b/docs/blockchain/Solana/solana-trader-API.md @@ -68,7 +68,7 @@ Change the token mint (`Trade.Currency.MintAddress`), quote currency (`Trade.Sid Below query will give you the trades of the wallets present in `addressList` in realtime. Try the query [here](https://ide.bitquery.io/Trades-of-wallets-in-realtime_1). -``` +```graphql subscription MyQuery($addressList: [String!]) { Solana { DEXTrades( @@ -126,7 +126,7 @@ subscription MyQuery($addressList: [String!]) { Below query will give you the trades of the wallets present in `addressList` along with the balance updates happened in those trades.. Try the query [here](https://ide.bitquery.io/Trades-of-wallets-with-balance-Updates-in-that-trades). -``` +```graphql query MyQuery($addressList: [String!]) { Solana { DEXTrades( @@ -202,7 +202,7 @@ query MyQuery($addressList: [String!]) { To get the count of Buys and Sells of a specific trader after a certain `timestamp`, use the following query. Find the query [here](https://ide.bitquery.io/buys-and-sells-of-a-traders) -``` +```graphql query MyQuery($timestamp: DateTime, $trader: String) { Solana(dataset: combined) { DEXTradeByTokens( @@ -223,7 +223,7 @@ query MyQuery($timestamp: DateTime, $trader: String) { Get total bought, total sold, average sell price, and last active trade time for a specific token by a trader. Test the query [here](https://ide.bitquery.io/Total-buy-total-sell-avg-sell-last-active) -``` +```graphql query MyQuery ($trader:String, $token:String){ Solana(dataset: realtime) { DEXTradeByTokens( @@ -240,7 +240,7 @@ query MyQuery ($trader:String, $token:String){ } ``` -``` +```json { "token":"FSJYiGZhJ1wDPNhHbSHm49yJkzbFp7FykNB2SZFipump", "trader": "CECN4BW4DKnbyddkd9FhWVR5dotzKhQr5p7DUPhQ55Du" @@ -255,7 +255,7 @@ To filter trades by a wallet we will use the condition `Account: {Address: {is}} You can convert this subscription to a `query` to get past trades of the wallet. -``` +```graphql subscription { Solana { buy: DEXTrades( diff --git a/docs/blockchain/Solana/solana-transactions.md b/docs/blockchain/Solana/solana-transactions.md index 55f3895c..4b3f1f77 100644 --- a/docs/blockchain/Solana/solana-transactions.md +++ b/docs/blockchain/Solana/solana-transactions.md @@ -14,7 +14,7 @@ In this section we'll have a look at some examples using the Solana Transactions The subscription query below fetches the most recent transactions on the Solana blockchain You can find the query [here](https://ide.bitquery.io/Realtime-Solana-Transactions) -``` +```graphql subscription { Solana { Transactions(limit: {count: 10}) { @@ -56,7 +56,7 @@ You can run the query [here](https://ide.bitquery.io/Solana-tx-dynamic-filter) - **`$network`**: Specifies the Solana network. - **`$tx_filter`**: A filter object used to specify the criteria for transactions to retrieve. -``` +```graphql subscription( $network: solana_network $tx_filter: Solana_Transaction_Filter diff --git a/docs/blockchain/Solana/solana-transfers.mdx b/docs/blockchain/Solana/solana-transfers.mdx index 6a115dfc..e5b83c3d 100644 --- a/docs/blockchain/Solana/solana-transfers.mdx +++ b/docs/blockchain/Solana/solana-transfers.mdx @@ -27,7 +27,7 @@ For monitoring the balance changes that result from these transfers, see our **[ [Run Stream >](https://ide.bitquery.io/Subscribe-to-the-all-transfers-on-Solana) -``` +```graphql subscription { Solana(network: solana) { Transfers { @@ -60,7 +60,7 @@ subscription { Let's see an example of NFT token transfers using GraphQL Subscription (Webhook). In the following API, we will be subscribing to all NFT token transfers. You can run the query [here](https://ide.bitquery.io/Subscribe-to-the-latest-NFT-transfers-on-Solana) -``` +```graphql subscription { Solana { Transfers(where: {Transfer: {Currency: {Fungible: false}}}) { @@ -94,7 +94,7 @@ subscription { One of the most common types of transfers on Solana are SPL token transfers. Let's see an example to get the latest SPL token transfers using our API. Today we are taking an example of JUPITER token transfers. The contract address for the JUPITER token is `JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN`. You can find the query [here](https://ide.bitquery.io/SPL-transfers-websocket_1) -``` +```graphql subscription { Solana { Transfers( @@ -127,7 +127,7 @@ subscription { This query will help you fetch transfers for a particular transaction signature `3x3fbg3zfTvcfwEiDee5Z5NnQP2Hr7cgZZ9bMxNYtYKi6fMN9gT6xpdUzRb2FjfCkGXMPvhkt3bW61CHCNaWwdQi`. Check the query [here](https://ide.bitquery.io/Query-transfer-by-sig) -``` +```graphql { Solana(dataset: realtime) { Transfers( @@ -168,7 +168,7 @@ This query will help you fetch transfers for a particular transaction signature This websocket retrieves transfers where the sender is a particular address `2g9NLWUM6bPm9xq2FBsb3MT3F3G5HDraGqZQEVzcCWTc`. For this subscription query we use `where` keyword and in that we specify `{Transfer: {Sender: {Address: {is: "2g9NLWUM6bPm9xq2FBsb3MT3F3G5HDraGqZQEVzcCWTc"}}}}` to get the desired data. You can find the query [here](https://ide.bitquery.io/transfers-where-sender-is-the-specified-address_1) -``` +```graphql subscription { Solana { Transfers( @@ -275,7 +275,7 @@ subscription { This query fetches you the recent 10 transfers of a specific wallet address `9nnLbotNTcUhvbrsA6Mdkx45Sm82G35zo28AqUvjExn8`. Try the query [here](https://ide.bitquery.io/Transfers-of-a-wallet_1). -``` +```graphql { Solana { Transfers( diff --git a/docs/blockchain/Solana/solana_fees_api.md b/docs/blockchain/Solana/solana_fees_api.md index 1df226a8..d7b5a3f5 100644 --- a/docs/blockchain/Solana/solana_fees_api.md +++ b/docs/blockchain/Solana/solana_fees_api.md @@ -18,7 +18,7 @@ If you want fastest data without any latency, we can provide Kafka streams, plea Get a list of successful DEX trades on Solana along with the transaction fee details for each trade. You can test the query [here](https://ide.bitquery.io/trades-with-transaction-fees#). -``` +```graphql query MyQuery { Solana { DEXTradeByTokens( @@ -81,7 +81,7 @@ query MyQuery { Track wallet token transfers and get the fees paid for each by the address. You can test the query [here](https://ide.bitquery.io/wallet-transfers-with-transaction-fees-paid#). -``` +```graphql query MyQuery { Solana { Transfers( @@ -122,7 +122,7 @@ query MyQuery { Get the total fees (in SOL and USD) paid by a specific Solana account across all transfers. You can test the query [here](https://ide.bitquery.io/total-txn-fees-paid-by-the-Account#). -``` +```graphql query MyQuery { Solana { Transfers( @@ -140,7 +140,7 @@ query MyQuery { Get total fees paid by a Solana account for transferring each type of token. You can test the query [here](https://ide.bitquery.io/Transaction-fees-paid-by-Account-aggregated-by-currency#). -``` +```graphql query MyQuery { Solana { Transfers( diff --git a/docs/blockchain/Solana/xstocks-api.md b/docs/blockchain/Solana/xstocks-api.md index eb454c2b..6ea7e96b 100644 --- a/docs/blockchain/Solana/xstocks-api.md +++ b/docs/blockchain/Solana/xstocks-api.md @@ -72,7 +72,7 @@ You can get latest price of xStocks tokens prices using our [Crypto price api](/ You can run the query [here](https://ide.bitquery.io/xStocks-prices) -``` +```graphql subscription { Trading { Tokens( @@ -131,7 +131,7 @@ You can use the following query to get the latest price of a Apple xStock on Sol You can run this query using this [link](https://ide.bitquery.io/Get-Latest-Price-of-Apple-xStock-in--USD-Real-time). -``` +```graphql query { Solana { DEXTradeByTokens( @@ -178,7 +178,7 @@ You can use the following query to get the latest price of a Apple xStock on Sol You can run this query using this [link](https://ide.bitquery.io/Get-realtime-Price-of-Apple-xStock-in--USD-Real-time). -``` +```graphql subscription { Solana { DEXTradeByTokens( @@ -221,7 +221,7 @@ subscription { If you want to get OHLC data for any xStock, you can use this api. Only use [this API](https://ide.bitquery.io/Tesla-xStock-OHLC-for-specific-pair) as query and not subscription websocket as Aggregates and Time Intervals don't work well with subscriptions. -``` +```graphql { Solana { DEXTradeByTokens( @@ -249,7 +249,7 @@ If you want to get OHLC data for any xStock, you can use this api. Only use [thi The below query gets the Top Traders of the Apple xStock `XsbEhLAtcf6HdfpFZ5xEMdqW8nfAvcsP5bdudRLJzJp`. Keep in mind you can use this API only as a query and not a subscription websocket because aggregates don't work with subscription and you will end up getting wrong results. You can run the query [here](https://ide.bitquery.io/Top-Traders-of-the-Apple-xStock_1) -``` +```graphql query TopTraders($token: String) { Solana { DEXTradeByTokens( @@ -288,7 +288,7 @@ query TopTraders($token: String) { This query fetches you the traded volume, buy volume and sell volume of a Meta xStock `Xsa62P5mvPszXL1krVUnU5ar38bBSVcWAB6fmPCo5Zu`. Try out the API [here](https://ide.bitquery.io/trade_volume-META-xStock). -``` +```graphql query MyQuery { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/blockchain/Tron/index.mdx b/docs/blockchain/Tron/index.mdx index 64d755d4..b4188c48 100644 --- a/docs/blockchain/Tron/index.mdx +++ b/docs/blockchain/Tron/index.mdx @@ -58,7 +58,7 @@ Bitquery supports websocket and webhooks; you can convert most GraphQL APIs into ## Quick start -Run this minimal GraphQL query on **[GraphQL IDE](http://ide.bitquery.io)** after signing up, to fetch the latest 5 DEX trades on Tron: +Run this minimal GraphQL query on **[GraphQL IDE](https://ide.bitquery.io)** after signing up, to fetch the latest 5 DEX trades on Tron: ```graphql query LatestTronTrades { diff --git a/docs/blockchain/Tron/sunswap-api.md b/docs/blockchain/Tron/sunswap-api.md index b1ea2896..28d06c80 100644 --- a/docs/blockchain/Tron/sunswap-api.md +++ b/docs/blockchain/Tron/sunswap-api.md @@ -16,7 +16,7 @@ You can use following query to get new tokens and sell event using following str Here is [link]( https://ide.bitquery.io/Events-with-argumens) using which you can run it on our IDE. -``` +```graphql subscription { Tron(mempool: true) { NewTokenEvents: Events( @@ -65,7 +65,7 @@ To fetch the most recent trades on SunSwap, you can filter the trades by using t The query retrieves details about each trade, including the amounts and prices of tokens bought and sold, as well as information about the trading pair. You can find the query [here](https://ide.bitquery.io/sunswap-v2-latest-Trades) -``` +```graphql query MyQuery { Tron(dataset: realtime, network: tron) { DEXTrades( @@ -107,7 +107,7 @@ query MyQuery { ## Latest Trades of a Token on Sunswap You can run the query [here](https://ide.bitquery.io/sunswap-latest-Trades-of-token) -``` +```graphql query MyQuery { Tron(dataset: realtime, network: tron) { DEXTrades( diff --git a/docs/blockchain/Tron/tron-balance-updates.md b/docs/blockchain/Tron/tron-balance-updates.md index 8ebb0761..e1360f4a 100644 --- a/docs/blockchain/Tron/tron-balance-updates.md +++ b/docs/blockchain/Tron/tron-balance-updates.md @@ -51,7 +51,7 @@ query TronWalletPortfolio($address: String) { **Variables** -``` +```json { "address": "TFXttAWURRrXrd9JvFPVLEh1esJK8NHxn7" } @@ -304,7 +304,7 @@ The examples below use the deprecated **`Tron.BalanceUpdates`** API. Migrate to [Run Query ➤](https://ide.bitquery.io/balance-of-an-address-on-tron) -``` +```graphql { Tron(dataset: combined, aggregates: yes) { BalanceUpdates( @@ -413,7 +413,7 @@ query TronWalletPortfolio($address: String) { This query fetches you the top 10 token holders of the token `TXL6rJbvmjD46zeN1JssfgxvSo99qC8MRT`. Check out the query [here](https://ide.bitquery.io/top-token-holders_2). -``` +```graphql query MyQuery { Tron(dataset: combined) { BalanceUpdates( diff --git a/docs/blockchain/Tron/tron-fees-api.md b/docs/blockchain/Tron/tron-fees-api.md index 064c15e7..1c90172a 100644 --- a/docs/blockchain/Tron/tron-fees-api.md +++ b/docs/blockchain/Tron/tron-fees-api.md @@ -17,7 +17,7 @@ If you want fastest data without any latency, we can provide Kafka streams, plea Get a list of successful DEX trades on Tron along with the transaction fee details for each trade. You can test the query [here](https://ide.bitquery.io/tron-trades-with-transaction-fees#). -``` +```graphql query MyQuery { Tron { DEXTradeByTokens( @@ -72,7 +72,7 @@ query MyQuery { Track wallet token transfers and get the fees paid for each by the address. You can test the query [here](https://ide.bitquery.io/tron-wallet-transfers-with-transaction-fees-paid). -``` +```graphql query MyQuery { Tron { Transfers( @@ -109,7 +109,7 @@ query MyQuery { Get the total fees (in SOL and USD) paid by a specific Tron account across all transfers. You can test the query [here](https://ide.bitquery.io/Tron-total-txn-fees-paid-by-the-Account#). -``` +```graphql query MyQuery { Tron { Transfers( @@ -127,7 +127,7 @@ query MyQuery { Get total fees paid by a Tron account for transferring each type of token. You can test the query [here](https://ide.bitquery.io/Tron-Transaction-fees-paid-by-Account-aggregated-by-currency). -``` +```graphql query MyQuery { Tron { Transfers( diff --git a/docs/blockchain/Tron/tron-mempool.md b/docs/blockchain/Tron/tron-mempool.md index 3a61806b..8b2f8d47 100644 --- a/docs/blockchain/Tron/tron-mempool.md +++ b/docs/blockchain/Tron/tron-mempool.md @@ -12,7 +12,7 @@ The below subscription provides real-time data on token transfers happening in t You can find the query [here](https://ide.bitquery.io/Tron-mempool-transfers) -``` +```graphql subscription { Tron(mempool: true) { Transfers { @@ -35,7 +35,7 @@ subscription { The below subscription provides provides real-time data on decentralized exchange (DEX) trades happening in the TRON mempool including details of buyer,seller, protocol information and the amount with USD values. -``` +```graphql subscription { Tron(mempool: true) { DEXTrades { @@ -86,7 +86,7 @@ subscription { The below subscription provides data on all transactions happening in the TRON mempool including Witness information. -``` +```graphql subscription { Tron(mempool: true) { Transactions { @@ -122,7 +122,7 @@ subscription { The below subscription provides data on non-fungible token (NFT) transfers happening in the TRON mempool. -``` +```graphql subscription { Tron(mempool: true) { Transfers(where: {Transfer: {Currency: {Fungible: false}}}) { diff --git a/docs/blockchain/Tron/tron-nft.md b/docs/blockchain/Tron/tron-nft.md index 20a380b5..8df8080b 100644 --- a/docs/blockchain/Tron/tron-nft.md +++ b/docs/blockchain/Tron/tron-nft.md @@ -11,7 +11,7 @@ In this section we'll have a look at some examples using the Tron NFT API. This query subscribes you to the real time transfers of a specific non-fungible token (NFT) on the Tron network. You can find the query [here](https://ide.bitquery.io/Websocket-for-tracking-Transfers-of-a-particular-NFT-websocket) -``` +```graphql subscription{ Tron { Transfers( diff --git a/docs/blockchain/Tron/tron-transactions-api.md b/docs/blockchain/Tron/tron-transactions-api.md index 9d264e42..dddc6d50 100644 --- a/docs/blockchain/Tron/tron-transactions-api.md +++ b/docs/blockchain/Tron/tron-transactions-api.md @@ -10,7 +10,7 @@ In this section we'll have a look at some examples using the Tron Transactions A The subscription query below fetches the transactions on the Tron network for the wallet address `TDqSquXBgUCLYvYC4XZgrprLK589dkhSCf`. -``` +```graphql subscription { Tron { Transactions( diff --git a/docs/blockchain/Tron/tron-transfers.md b/docs/blockchain/Tron/tron-transfers.md index 172f6923..258963e6 100644 --- a/docs/blockchain/Tron/tron-transfers.md +++ b/docs/blockchain/Tron/tron-transfers.md @@ -10,7 +10,7 @@ In this section we'll have a look at some examples using the Tron Transfers API. The subscription query below fetches the whale transactions on the Tron network. We have used USDT address `TThzxNRLrW2Brp9DcTQU8i4Wd9udCWEdZ3`. You can find the query [here](https://ide.bitquery.io/Whale-transfers-of-USDT-on-Tron) -``` +```graphql subscription{ Tron { Transfers( @@ -42,7 +42,7 @@ subscription{ This query retrieves the top 10 transfers by amount of the token `TXL6rJbvmjD46zeN1JssfgxvSo99qC8MRT`. Try the query [here](https://ide.bitquery.io/top-transfers-of-a-token_2). -``` +```graphql query MyQuery { Tron { Transfers( @@ -68,7 +68,7 @@ query MyQuery { This query fetches you the recent 10 transfers of a specific wallet address `TFXttAWURRrXrd9JvFPVLEh1esJK8NHxn7`. Try the query [here](https://ide.bitquery.io/Transfers-of-a-wallet-API). -``` +```graphql { Tron { Transfers( @@ -100,7 +100,7 @@ This query fetches you the recent 10 transfers of a specific wallet address `TFX This websocket retrieves transfers where the sender is a particular address `TDqSquXBgUCLYvYC4XZgrprLK589dkhSCf`. For this subscription query we use `where` keyword and in that we specify `{Transfer: {Sender: {is: "TDqSquXBgUCLYvYC4XZgrprLK589dkhSCf"}}}` to get the desired data. You can find the query [here](https://ide.bitquery.io/Sender-is-particular-address) -``` +```graphql subscription { Tron { Transfers( @@ -165,7 +165,7 @@ query DailyTransferVolume($token: String, $since: DateTime) { ``` Variables: -``` +```json { "token": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", "since": "2025-01-01T00:00:00Z" @@ -256,7 +256,7 @@ query TopUSDTReceivers24h { Let's see an example of NFT token transfers using GraphQL Subscription (Webhook). In the following NFT Token Transfers API, we will be subscribing to all NFT token transfers on Tron network. You can run the query [here](https://ide.bitquery.io/NFT-Token-Transfers-API_5) -``` +```graphql subscription { Tron { Transfers(where: {Transfer: {Currency: {Fungible: false}}}) { diff --git a/docs/blockchain/Tron/usdt-trc20-api.md b/docs/blockchain/Tron/usdt-trc20-api.md index 5adeba94..4b3a6de4 100644 --- a/docs/blockchain/Tron/usdt-trc20-api.md +++ b/docs/blockchain/Tron/usdt-trc20-api.md @@ -11,7 +11,7 @@ In this section we'll have a look at some examples using the TCR20 API. To monitor USDT transfers on Tron in real-time, you can use the following query. You can run the query [here](https://ide.bitquery.io/usdt-trc20-transfers_1) -``` +```graphql subscription { Tron { @@ -48,7 +48,7 @@ subscription { This query retrieves real-time data on DEX trades involving USDT on the Tron network. It monitors trades where USDT is the bought currency, identified by the smart contract `TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t`. The subscription provides details about each trade, including the trade timestamp, protocol details, buyer and seller information, trade amounts, and order IDs. -``` +```graphql subscription { Tron { DEXTrades( @@ -197,7 +197,7 @@ query USDTHolderBuckets { This query retrieves real-time data on USDT transfers in the Tron network's mempool by filtering using the smart contract address `TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t`. The subscription provides details about each pending transfer, including the transaction hash, transfer amount, sender and receiver addresses, and the anticipated block number. -``` +```graphql subscription { Tron(mempool: true) { Transfers( diff --git a/docs/chinese.md b/docs/chinese.md new file mode 100644 index 00000000..a24ad995 --- /dev/null +++ b/docs/chinese.md @@ -0,0 +1,29 @@ +--- +title: "中文文档 (Chinese)" +description: "Bitquery 中文文档说明:如何用浏览器自动翻译阅读完整文档,以及中文支持渠道。" +slug: /chinese/ +sidebar_position: 3 +--- + +# Bitquery 中文文档 + +Bitquery 的完整文档目前以**英文**提供。您可以使用浏览器的自动翻译功能,用中文阅读所有页面。 + +## 使用自动翻译 + +- **Chrome / Edge**:在任意文档页面右键单击 → 选择“翻译成中文”。 +- **Safari**:点击地址栏中的翻译图标 → 选择中文。 + +翻译后即可浏览全部内容,包括代码示例。 + +## 常用页面 + +- [快速开始(第一个查询)](/docs/start/first-query/) +- [数据覆盖与保留时间](/docs/graphql/data-coverage-retention/) +- [套餐、积分与限制](/docs/plans/how-billing-works/) +- [Solana API](/docs/blockchain/Solana/) +- [MCP 服务器(AI 代理)](/docs/mcp/mcp-server/) + +## 中文支持 + +如需中文支持,请通过 [Telegram](https://t.me/Bloxy_info) 联系我们,或发送邮件至 [support@bitquery.io](mailto:support@bitquery.io)。 diff --git a/docs/contribution-guidelines.md b/docs/contribution-guidelines.md index ad2c4e8f..fbfe6e1e 100644 --- a/docs/contribution-guidelines.md +++ b/docs/contribution-guidelines.md @@ -58,3 +58,14 @@ If you need help contributing to the Bitquery documentation, please feel free to • Be sure to write descriptive commit messages. • Be responsive to feedback from the maintainers of the Bitquery documentation repository. + +## Documentation maintenance & governance + +To keep the docs answering what users actually ask, maintainers follow a few standing rules: + +- **Docs-first support.** Any question answered twice in support (Telegram/tickets) becomes a new or updated docs page within a week — the answer is already written, converting it takes ~30 minutes. Share the docs link, not a one-off reply. +- **Capture IDE snippets.** A saved `ide.bitquery.io` query shared as a support answer should be embedded in the relevant docs page, not left only in chat. +- **Evergreen facts.** Never embed point-in-time numbers or dated tables in a page. Express retention as rolling windows ("last 30 days", "since the chain was onboarded"). Any unavoidable absolute date lives in one place — the [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) matrix — and is linked from elsewhere. +- **Ship docs with the feature.** A new chain, cube, stream, or topic ships with its docs page on day one, including its row in the retention matrix. +- **Link hygiene.** `yarn check-links` runs in CI and must pass. Use root-relative internal links with a trailing slash; never absolute `https://docs.bitquery.io/...` self-links. Run `yarn check-links --report` periodically to review orphaned pages, dead ends, thin pages, and untagged code fences. +- **Page checklist.** Purpose clear in the first two sentences; every query explained (when to use it, key fields, a run-in-IDE link, a note on the response); a `## Next steps` block of related links; an `` block on high-traffic pages (it emits FAQPage JSON-LD for AI answer engines). diff --git a/docs/cubes/dextrades.mdx b/docs/cubes/dextrades.mdx index efa5effd..d54040f2 100644 --- a/docs/cubes/dextrades.mdx +++ b/docs/cubes/dextrades.mdx @@ -18,7 +18,7 @@ The DEXTrades cube provides comprehensive information about the dex trading data > Import Note: If there is a trade between 2 addresses, the details in `Buy{}` dropdown are pool details, and the information displayed in the DEXTrades cube is from the pool's perspective. -![](/img/tokenAB.png) +![Token A to Token B trade pair diagram](/img/tokenAB.png) Let's understand the concept of buyer and seller. Token X and token Y swap as above. @@ -42,7 +42,7 @@ Next, we understand how the Dextrades Cube displays the result: Take this query for example: -``` +```graphql { EVM(network: eth, dataset: archive) { DEXTrades( @@ -87,7 +87,7 @@ Take this query for example: Output -``` +```json { "EVM": { "DEXTrades": [ @@ -165,7 +165,7 @@ Metrics allow for sum, count, average, median, maximum, minimum, and more calcul The count metric can easily retrieve a specific token's total number of trades. [Run this API](https://ide.bitquery.io/Count-of-trade-on-Uniswap-of-pepe) to find the total trades of [PEPE](https://explorer.bitquery.io/ethereum/token/0x6982508145454ce325ddbe47a25d4ec3d2311933) "0x698…" tokens in the [Uniswap v3 factory](https://explorer.bitquery.io/ethereum/token/0x6982508145454ce325ddbe47a25d4ec3d2311933) "0x1f984…" in the ethereum network. -``` +```graphql query MyQuery { EVM(dataset: archive, network: eth) { DEXTradeByTokens( diff --git a/docs/cubes/dextradesbyTokens.md b/docs/cubes/dextradesbyTokens.md index 8dc4b4a3..1e0f71c1 100644 --- a/docs/cubes/dextradesbyTokens.md +++ b/docs/cubes/dextradesbyTokens.md @@ -18,7 +18,7 @@ Unlike DEXTrades cube which uses `Buy` and `Sell` from the pool's perspective, D Let's understand the concept of buyer and seller when a trade occurs between User A and User B, and Token X and Token Y are swapped between them. -![](/img/tokenAB.png) +![Token A to Token B trade pair diagram](/img/tokenAB.png) We see the trade from user A's side, then we get the following: @@ -36,7 +36,7 @@ Therefore, buyers and sellers change relatively when the trade sides change. [Run this API for better understanding](https://ide.bitquery.io/DEXTradeByTokens-API_1). When you run this API you get the following result. -``` +```json { "EVM": { "DEXTradeByTokens": [ diff --git a/docs/examples/cross-chain/cross-chain-api.md b/docs/examples/cross-chain/cross-chain-api.md index fb1311e8..adf08247 100644 --- a/docs/examples/cross-chain/cross-chain-api.md +++ b/docs/examples/cross-chain/cross-chain-api.md @@ -8,7 +8,7 @@ Effortlessly check NFTs across different chains. [You can run the query here](ht By using GraphQL Aliasing and Fragments to combine queries for multiple blockchains in a single API call we simplify complex data aggregation across various chains for more organized handling. In this query below we can NFT balances for the address `0xaba7161a7fb69c88e16ed9f455ce62b791ee4d03` across multiple chains. Replace it with a wallet address whose NFT balance you need. -``` +```graphql query MyQuery { binance: EVM(network: bsc, dataset: archive) { diff --git a/docs/examples/polymarket-api/bitcoin-polymarket-api.md b/docs/examples/polymarket-api/bitcoin-polymarket-api.md index 5c2bb933..7d18a160 100644 --- a/docs/examples/polymarket-api/bitcoin-polymarket-api.md +++ b/docs/examples/polymarket-api/bitcoin-polymarket-api.md @@ -402,7 +402,7 @@ query MyQuery { Use the following WebSocket subscription to monitor live trades greater than $5,000 USD on Polymarket Bitcoin Up or Down markets. This is ideal for detecting whale activity and large market movements in real time. -``` +```graphql subscription { EVM(network: matic) { PredictionTrades( diff --git a/docs/graphql/capabilities/array-intersect.md b/docs/graphql/capabilities/array-intersect.md index 21ca7f7b..653fef85 100644 --- a/docs/graphql/capabilities/array-intersect.md +++ b/docs/graphql/capabilities/array-intersect.md @@ -6,7 +6,7 @@ description: "Array Intersection in Bitquery GraphQL with clear syntax, examples # Array Intersection The `array_intersect` feature is an advanced query format that generates an intersection of addresses from specified datasets. You can use the `where` clause to introduce filters that refine your results according to desired criteria. The output is a list of addresses that share a common link to the two datasets. -![](/img/diagrams/array_intersect.png) +![Array intersect operation diagram](/img/diagrams/array_intersect.png) In the following section, we'll explore how to use `array_intersect` to reveal the associations between pairs of addresses or contracts. @@ -31,7 +31,7 @@ Constraints: Suppose you have an array of two addresses ( A and B ) and want to identify which addresses have engaged in transactions with both Contract A and Contract B. By passing these arrays to array_intersect, the function will return an array of addresses that interacted with both contracts. -``` +```graphql query($addresses: [String!]) { EVM(dataset: archive){ Transfers( @@ -67,7 +67,7 @@ query($addresses: [String!]) { This query will return a response in this format ; as an array consisting of elements found in both side1 and side2 that have interacted with **all the addresses** in the intersectWith array. If no common elements are detected, the result will be an empty array. -``` +```json { "EVM": { "Transfers": [ diff --git a/docs/graphql/capabilities/joins.md b/docs/graphql/capabilities/joins.md index caa4ca9a..0d5311ed 100644 --- a/docs/graphql/capabilities/joins.md +++ b/docs/graphql/capabilities/joins.md @@ -10,7 +10,7 @@ The `joinPLACEHOLDER` function enables you to **embed a subquery** within your m For example, -``` +```graphql query MyQuery { EVM { DEXTradeByTokens{ @@ -33,7 +33,7 @@ query MyQuery { - `inner` returns only matching results. If there are no matching results in joined query, the result is not returned; - `inner_any` returns only one ( any ) matching result. If there are no matching results in joined query, the result is not returned; -![](/img/joins.png) +![GraphQL joins across cubes diagram](/img/joins.png) Here are the additional details from your document that you may want to include in your Markdown: diff --git a/docs/graphql/data-coverage-retention.mdx b/docs/graphql/data-coverage-retention.mdx new file mode 100644 index 00000000..a0460786 --- /dev/null +++ b/docs/graphql/data-coverage-retention.mdx @@ -0,0 +1,106 @@ +--- +title: "Data Coverage & Retention: How Far Back Does Data Go?" +description: "How much history each Bitquery API keeps per chain — realtime vs archive vs combined datasets, Kafka backfill, and when to use S3 exports." +sidebar_position: 1 +--- + +import FAQ from "@site/src/components/FAQ"; + +# Data Coverage & Retention + +How far back Bitquery data goes depends on the **chain**, the **cube** (Trades, Transfers, Balances, Holders, …), the **dataset** (`realtime`, `archive`, `combined`), and the **interface** (GraphQL, WebSocket, Kafka, or cloud/S3 export). This page is the single source of truth for those windows. **If a query returns empty results for a date range, check here first** — most "missing data" reports are really a dataset or retention mismatch, not a bug. + +:::note Windows expand over time +Retention windows widen as coverage grows. If you need more than the API keeps, use a cloud/S3 export or an Enterprise historical plan (see below). +::: + +## The three datasets: realtime, archive, combined + +Every GraphQL cube is served from one or more datasets, selected with the `dataset:` argument: + +- **`realtime`** — the most recent data (roughly the last few hours), lowest latency. Always available. +- **`archive`** — deep history. Available where Bitquery has back-indexed the chain/cube. +- **`combined`** — stitches `archive` + `realtime` into one continuous result. Use it when you need both history and the latest rows in a single query. + +**Availability differs by chain and by cube.** Selecting a dataset a chain doesn't support surfaces a ClickHouse error such as `no table can query ... consider use realtime dataset`. That's not a bug — it means the archive/combined table for that cube isn't deployed on that chain. See the [dataset reference](/docs/graphql/dataset/realtime/) and the [Early Access Program datasets](/docs/graphql/dataset/EAP/) for details. + +Rule of thumb: reach for `realtime` for live/streaming use cases, `combined` for "recent history + now", and `archive` for pure backfills — but only where the matrix below says archive exists. + +## Coverage matrix + +Windows are expressed as rolling ranges, not fixed dates, so they stay correct over time. + +### EVM chains (Ethereum, BSC, Base, Arbitrum, Optimism, Polygon, …) + +| Cube | realtime | archive / combined | Kafka | Notes | +|---|---|---|---|---| +| DEX Trades | ✅ | ✅ full history | ✅ | Deep history via `combined`. | +| Transfers | ✅ | ✅ full history | ✅ | | +| Transactions | ✅ | ✅ full history | ✅ | | +| Balances | ✅ | ✅ | — | Query at a block/date for point-in-time balances. | +| Holders | ✅ | ✅ all v2 EVM chains | — | The Holders API is available on all v2 EVM chains. | +| Calls & Events | ✅ | ~3 months (Ethereum: full history) | ✅ | ~3 months on all EVM chains **except Ethereum**, which keeps full history. Older data on any chain (including Ethereum) via S3 export. | +| Mempool | ✅ (stream) | — | — | Pending-tx data is realtime only. | + +### Solana + +| Cube | realtime | archive / combined | Kafka | Notes | +|---|---|---|---|---| +| DEX Trades | ✅ | ~30 days via API | ✅ | Older raw trades via a cloud/S3 export. | +| OHLC / price aggregates | ✅ | Minute-level since October 2024 | ✅ (trading topics) | Aggregated candles go back much further than raw trades. | +| Transfers | ✅ ~last 8h | via S3 | ✅ | The API serves roughly the last 8 hours; deep history via S3 export. | +| Balances | ⏳ recent activity only | — | — | Balances reflect tokens active recently; dormant balances may not appear. | +| Instructions | ⏳ recent only | — | ✅ | Deep historical instruction lookup by signature is not available via API. | +| DEX Pools | ✅ | — | ✅ | Pool events are realtime; not in archive. | + +### Tron & Bitcoin + +| Cube | realtime | archive / combined | Notes | +|---|---|---|---| +| Transfers / Transactions | ✅ | ✅ full history | Full archive available. | +| Balances | ✅ | ✅ | Point-in-time supported. | +| Coinpath (money flow) | — | ✅ (v1) | Coinpath is served by the [v1 API](https://docs.bitquery.io/v1/); there is no v2 equivalent yet. | + +### Trading cube (cross-chain Trades / Tokens / Pairs) + +| Surface | Window | Notes | +|---|---|---| +| Trades / Tokens / Pairs | ~30 days | For older raw trades use chain-level `DEXTradeByTokens` or an S3 export. | +| Price / OHLC aggregates | Longer than raw trades **[confirm start]** | See the [Crypto Price API](/docs/trading/crypto-price-api/introduction/). | + +### Robinhood chain + +| Cube | Window | Notes | +|---|---|---| +| Trades | Since the chain was onboarded | Full history from onboarding forward. | +| Transfers | Complete history | Full transfer history available. | + +## Kafka is not a historical firehose + +Kafka (and Solana gRPC) deliver **realtime data plus a small backfill window (hours, not history)**. If you connect a fresh consumer, you get recent messages forward — not the chain from genesis. For anything older than the backfill window, use GraphQL (within the API's retention) or a cloud/S3 export. See the [Kafka Operations Cookbook](/docs/streams/kafka-operations/). + +## Need more history than the API keeps? + +When you need a full backfill beyond the API windows above: + +- **Cloud / S3 datasets** — Parquet exports of raw + decoded data into your own store. See [Cloud datasets](/docs/cloud/). +- **Enterprise plans** — the self-serve plans (Personal/Pro/Scale) share a rolling window (about 30-day trades and 4–8h on-chain data); complete history requires an Enterprise plan or a historical export. See [Plans, Points & Limits](/docs/plans/how-billing-works/). + +Contact [sales@bitquery.io](mailto:sales@bitquery.io) for custom export ranges. + + + +## Next steps + +- [Datasets: realtime, archive, combined](/docs/graphql/dataset/realtime/) +- [Common errors — including empty results](/docs/start/errors/) +- [Kafka Operations Cookbook](/docs/streams/kafka-operations/) +- [Cloud datasets (Parquet / S3)](/docs/cloud/) diff --git a/docs/graphql/metrics/priceAsymmetry.md b/docs/graphql/metrics/priceAsymmetry.md index 977a6e9a..bdb645e5 100644 --- a/docs/graphql/metrics/priceAsymmetry.md +++ b/docs/graphql/metrics/priceAsymmetry.md @@ -33,7 +33,7 @@ Use the PriceAsymmetry metric to filter the response. By comparing two values de Here's an example [query on ethereum trades](https://ide.bitquery.io/Price-based-on-DEX-trades-in-USD). -``` +```graphql subscription { EVM { DEXTradeByTokens( @@ -63,7 +63,7 @@ subscription { Similarly, below is an example on solana trades. -``` +```graphql subscription { Solana { DEXTradeByTokens( diff --git a/docs/graphql/metrics/sum.md b/docs/graphql/metrics/sum.md index ecc1e29d..3867f704 100644 --- a/docs/graphql/metrics/sum.md +++ b/docs/graphql/metrics/sum.md @@ -9,7 +9,7 @@ description: "Sum trade amounts and transfer volumes in Bitquery GraphQL aggrega Example: -``` +```graphql { EVM (dataset: archive){ MinerRewards { diff --git a/docs/graphql/metrics/uniq.md b/docs/graphql/metrics/uniq.md index dfff788e..94eca2b5 100644 --- a/docs/graphql/metrics/uniq.md +++ b/docs/graphql/metrics/uniq.md @@ -9,7 +9,7 @@ The `uniq` function is used to estimate the count of unique values in a dataset. ### Example Query -``` +```graphql { EVM(dataset: archive, network: eth) { TokenHolders( @@ -28,7 +28,7 @@ The `uniq` function is used to estimate the count of unique values in a dataset. ### Result -``` +```json { "EVM": { "TokenHolders": [ diff --git a/docs/graphql/postman.md b/docs/graphql/postman.md index e3b3f4b8..b934f517 100644 --- a/docs/graphql/postman.md +++ b/docs/graphql/postman.md @@ -8,7 +8,7 @@ You can run the queries and subscriptions on Postman as well. Below is the link [Postman Collection for Examples](https://www.postman.com/interstellar-eclipse-270749/workspace/bitquery) -![](/img/postman.png) +![Using the Bitquery GraphQL API in Postman](/img/postman.png) You can find examples for all chains in folders. Remember that token must be passed differently for a `query` vs a `subscription`. You can read more about it [here](/docs/authorization/how-to-use/) diff --git a/docs/graphql/sorting.md b/docs/graphql/sorting.md index ea1931ea..19c302de 100644 --- a/docs/graphql/sorting.md +++ b/docs/graphql/sorting.md @@ -31,7 +31,7 @@ First results will be sorted by Transaction_Value and after that by Block_Number Another way to sort on multiple condition is following -``` +```graphql { EVM { Events( @@ -70,7 +70,7 @@ this is not the same as: The example below shows how to sort transfers by their index within a block in ascending order, -``` +```graphql { EVM(dataset: archive) { Transfers( diff --git a/docs/ide/points.md b/docs/ide/points.md index 6d044cdc..a14a7864 100644 --- a/docs/ide/points.md +++ b/docs/ide/points.md @@ -65,7 +65,7 @@ Here's how it works: ### Example -``` +```graphql { EVM(network: eth, dataset: realtime) { Transactions { diff --git a/docs/intro.md b/docs/intro.md index 88a749a4..244870ad 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -29,7 +29,7 @@ query { ``` ## Integrated Development Environment (IDE) -Integrated Development Environment (**[IDE](https://graphql.bitquery.io/ide?endpoint=https://streaming.bitquery.io/graphql)**) helps you to manage your query, +Integrated Development Environment (**[IDE](https://ide.bitquery.io/)**) helps you to manage your query, share them with other developers and generate a code to use the queries in your applications. ![IDE screen](/img/ide/ide_screen.png) diff --git a/docs/migration/from-alchemy.mdx b/docs/migration/from-alchemy.mdx new file mode 100644 index 00000000..da0a31c1 --- /dev/null +++ b/docs/migration/from-alchemy.mdx @@ -0,0 +1,63 @@ +--- +title: "Migrating from Alchemy to Bitquery" +description: "Map Alchemy Transfers, Token, and NFT API calls to Bitquery GraphQL cubes for decoded, multi-chain data." +sidebar_position: 11 +--- + +import FAQ from "@site/src/components/FAQ"; + +# Migrating from Alchemy to Bitquery + +Alchemy is node-and-enhanced-API centric; Bitquery is a decoded, multi-chain data layer queried with GraphQL. This guide maps the common enhanced-API calls. + +:::note +Verify chain/cube coverage against the [coverage matrix](/docs/graphql/data-coverage-retention/). +::: + +## Concept mapping + +| Alchemy | Bitquery (GraphQL) | +|---|---| +| `alchemy_getAssetTransfers` | `EVM { Transfers(...) }` | +| Token balances / metadata | `EVM { Balances(...) }`, Currency fields | +| NFT API | [NFT API](/docs/blockchain/Ethereum/nft/nft-api/) | +| `eth_getLogs` (raw) | `EVM { Events(...) }` (decoded) | +| Webhooks / Notify | [WebSocket subscriptions](/docs/subscriptions/websockets/) / [Kafka](/docs/streams/kafka-operations/) | +| Trace/debug for internal txs | `EVM { Calls(...) }` (decoded internal calls) | + +## Example: asset transfers for an address + +```graphql +{ + EVM(network: eth, dataset: combined) { + Transfers( + where: { Transfer: { Receiver: { is: "0x..." } } } + orderBy: { descending: Block_Time } + ) { + Block { Time } + Transfer { Amount Currency { Symbol SmartContract } Sender } + Transaction { Hash } + } + } +} +``` + +## What differs + +- **Decoded, not raw.** Events and internal calls come decoded, so you often skip client-side log parsing. +- **Multi-chain in one schema.** The same cube shape works across supported EVM chains (and Solana/Tron have parallel cubes). +- **Delivery.** Real-time via WebSocket/Kafka/gRPC. + + + +## Next steps + +- [Getting started](/docs/start/first-query/) +- [Smart contract calls](/docs/blockchain/Ethereum/calls/smartcontract/) +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) diff --git a/docs/migration/from-goldsky.mdx b/docs/migration/from-goldsky.mdx new file mode 100644 index 00000000..1445e43a --- /dev/null +++ b/docs/migration/from-goldsky.mdx @@ -0,0 +1,64 @@ +--- +title: "Migrating from GoldSky Subgraphs to Bitquery" +description: "Move from GoldSky/subgraph indexing to Bitquery's prebuilt decoded cubes — no subgraph deployment required." +sidebar_position: 14 +--- + +import FAQ from "@site/src/components/FAQ"; + +# Migrating from GoldSky Subgraphs to Bitquery + +Subgraphs require you to define a schema, write mappings, and deploy an indexer per protocol. Bitquery gives you prebuilt, decoded cross-chain cubes you query directly — no subgraph to author or operate. + +:::note +Verify chain/cube coverage in the [coverage matrix](/docs/graphql/data-coverage-retention/). +::: + +## Concept mapping + +| GoldSky / subgraph | Bitquery | +|---|---| +| Define GraphQL schema + mappings | Prebuilt cubes — no schema authoring | +| Deploy & sync a subgraph | Nothing to deploy; query immediately | +| Entity queries | Cube queries (`EVM { ... }`, `Solana { ... }`, `Trading { ... }`) | +| Subgraph webhooks / streams | [WebSocket](/docs/subscriptions/websockets/) / [Kafka](/docs/streams/kafka-operations/) / [gRPC](/docs/grpc/solana/introduction/) | +| Custom protocol decoding | Ask support to index a protocol's ABIs/IDL | + +## Example: pair-creation events (a common subgraph use case) + +```graphql +{ + EVM(network: eth, dataset: combined) { + Events( + where: { Log: { Signature: { Name: { is: "PairCreated" } } } } + orderBy: { descending: Block_Time } + limit: { count: 100 } + ) { + Block { Time } + Log { Signature { Name } SmartContract } + Transaction { Hash } + } + } +} +``` + +## What differs + +- **No indexer to run.** You skip subgraph authoring, deployment, and re-syncs. +- **Cross-chain in one place.** The same query shapes span supported chains. +- **Rate limits & cost** are point-based rather than per-subgraph — see [How Billing Works](/docs/plans/how-billing-works/). +- **Custom protocols.** If a protocol isn't decoded yet, ask support to index its ABIs/IDL. + + + +## Next steps + +- [Smart contract events](/docs/blockchain/Ethereum/events/events-api/) +- [How Billing Works](/docs/plans/how-billing-works/) +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) diff --git a/docs/migration/from-helius.mdx b/docs/migration/from-helius.mdx new file mode 100644 index 00000000..125378bf --- /dev/null +++ b/docs/migration/from-helius.mdx @@ -0,0 +1,64 @@ +--- +title: "Migrating from Helius to Bitquery (Solana)" +description: "Map Helius Solana APIs — enhanced transactions, DAS, and webhooks — to Bitquery Solana cubes, Kafka, and gRPC." +sidebar_position: 12 +--- + +import FAQ from "@site/src/components/FAQ"; + +# Migrating from Helius to Bitquery (Solana) + +Both cover Solana; Bitquery adds a decoded GraphQL layer plus Kafka and gRPC streams, and cross-chain coverage in one schema. + +:::note +Solana retention differs sharply by cube — check the [coverage matrix](/docs/graphql/data-coverage-retention/) before assuming deep history. +::: + +## Concept mapping + +| Helius | Bitquery | +|---|---| +| Enhanced/parsed transactions | `Solana { Transactions / Instructions / DEXTradeByTokens }` | +| Webhooks | [WebSocket subscriptions](/docs/subscriptions/websockets/), [Kafka](/docs/streams/kafka-operations/), [gRPC](/docs/grpc/solana/introduction/) | +| Token / DAS metadata | Solana token + [Crypto Price API](/docs/trading/crypto-price-api/introduction/) | +| pump.fun / launchpad data | [Solana launchpad pages](/docs/blockchain/Solana/) | +| Low-latency streaming | [Solana gRPC (CoreCast)](/docs/grpc/solana/introduction/) | + +## Example: DEX trades for a mint + +```graphql +{ + Solana(dataset: realtime) { + DEXTradeByTokens( + where: { Trade: { Currency: { MintAddress: { is: "" } } } } + orderBy: { descending: Block_Time } + limit: { count: 100 } + ) { + Trade { Amount Price Side { Type } Dex { ProtocolName } } + Transaction { Signature } + Block { Time } + } + } +} +``` + +## What differs + +- **Query language.** Decoded GraphQL cubes rather than parsed-transaction REST responses. +- **Streaming options.** WebSocket, Kafka, and gRPC — pick by latency and filtering needs. gRPC requires at least one filter. +- **History.** Raw Solana trades cover a rolling recent window via API; OHLC aggregates go back further; deep raw history is via S3 export. See the matrix. +- **Note:** deep historical Solana *instructions by signature* are not available — consume them in real time via Kafka or gRPC. + + + +## Next steps + +- [Solana gRPC (CoreCast)](/docs/grpc/solana/introduction/) +- [Solana DEX trades](/docs/blockchain/Solana/solana-dextrades/) +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) diff --git a/docs/migration/from-moralis.mdx b/docs/migration/from-moralis.mdx new file mode 100644 index 00000000..851fd574 --- /dev/null +++ b/docs/migration/from-moralis.mdx @@ -0,0 +1,64 @@ +--- +title: "Migrating from Moralis to Bitquery" +description: "Map common Moralis calls — token prices, transfers, balances, and holders — to Bitquery GraphQL cubes and streams." +sidebar_position: 10 +--- + +import FAQ from "@site/src/components/FAQ"; + +# Migrating from Moralis to Bitquery + +A concept map for teams moving REST-style Moralis calls to Bitquery's GraphQL cubes. Instead of one endpoint per resource, you compose a single GraphQL query against the cube you need. + +:::note +Capability comparisons below describe Bitquery's model; verify exact coverage for your chains against the [coverage matrix](/docs/graphql/data-coverage-retention/). +::: + +## Concept mapping + +| Moralis (REST) | Bitquery (GraphQL) | +|---|---| +| Get wallet token balances | `EVM { Balances(...) }` — [Balances](/docs/blockchain/Ethereum/balances/balance-api/) | +| Get wallet token transfers | `EVM { Transfers(...) }` — [Transfers](/docs/blockchain/Ethereum/transfers/erc20-token-transfer-api/) | +| Get token price | [Crypto Price API](/docs/trading/crypto-price-api/introduction/) | +| Get token holders | `EVM { Holders(...) }` — [Holders](/docs/blockchain/Ethereum/token-holders/token-holder-api/) | +| Get DEX trades / swaps | `EVM { DEXTrades / DEXTradeByTokens }` — [DEX trades](/docs/blockchain/Ethereum/dextrades/dex-api/) | +| Streams (webhooks) | [WebSocket subscriptions](/docs/subscriptions/websockets/) or [Kafka](/docs/streams/kafka-operations/) | + +## Example: wallet token transfers + +```graphql +{ + EVM(network: eth, dataset: combined) { + Transfers( + where: { Transfer: { Sender: { is: "0x..." } } } + orderBy: { descending: Block_Time } + limit: { count: 100 } + ) { + Block { Time } + Transfer { Amount Currency { Symbol SmartContract } Receiver } + Transaction { Hash } + } + } +} +``` + +## What differs + +- **One flexible query vs many endpoints.** You select exactly the fields you need across a cube, rather than calling a fixed-shape endpoint. +- **Dataset selection.** Choose `realtime` / `combined` explicitly for live vs historical data — see the [coverage matrix](/docs/graphql/data-coverage-retention/). +- **Streaming.** Real-time delivery is via WebSocket/Kafka/gRPC rather than webhooks. **[confirm your delivery needs]** + + + +## Next steps + +- [Getting started](/docs/start/first-query/) +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) +- [First query](/docs/start/first-query/) diff --git a/docs/migration/from-yellowstone.mdx b/docs/migration/from-yellowstone.mdx new file mode 100644 index 00000000..4b4b9003 --- /dev/null +++ b/docs/migration/from-yellowstone.mdx @@ -0,0 +1,45 @@ +--- +title: "Migrating from Yellowstone gRPC to Bitquery CoreCast" +description: "Move from Yellowstone Geyser gRPC to Bitquery's Solana CoreCast gRPC — decoded streams, filters, and auth differences." +sidebar_position: 13 +--- + +import FAQ from "@site/src/components/FAQ"; + +# Migrating from Yellowstone gRPC to Bitquery CoreCast + +If you're streaming Solana over Yellowstone Geyser gRPC, Bitquery's **CoreCast** gRPC offers a decoded stream. The mental models differ, so read this before porting a Yellowstone client. + +:::note +CoreCast is **not** a drop-in Yellowstone replacement — the protobuf schema and semantics differ. +::: + +## Key differences + +- **Decoded, not raw.** CoreCast delivers decoded events (DEX trades, pools, transfers) rather than raw account/transaction updates you decode yourself. +- **A filter is required.** A CoreCast subscription must include at least one filter; a fully-unfiltered "everything" stream is rejected. +- **Multiple tokens per stream.** A single CoreCast stream can filter on many token/account addresses at once — you don't need one stream per token. +- **Auth.** Uses a Bitquery-issued credential; errors surface as gRPC status codes — `16 UNAUTHENTICATED` (bad/missing/expired credential) vs `7 PERMISSION_DENIED` (valid but not entitled). See [common errors](/docs/start/errors/#grpc-auth-errors). + +## Getting started + +See [Solana gRPC (CoreCast)](/docs/grpc/solana/introduction/) for the connection details, then the topic pages for the decoded event shapes. + +## When to choose Kafka or WebSocket instead + +- Need multi-chain, not just Solana? Use [Kafka](/docs/streams/kafka-operations/). +- Need simple browser/server subscriptions with server-side filtering? Use [WebSocket subscriptions](/docs/subscriptions/websockets/). + + + +## Next steps + +- [Solana gRPC (CoreCast)](/docs/grpc/solana/introduction/) +- [Kafka Operations Cookbook](/docs/streams/kafka-operations/) +- [Common errors — gRPC auth](/docs/start/errors/#grpc-auth-errors) diff --git a/docs/plans/how-billing-works.mdx b/docs/plans/how-billing-works.mdx new file mode 100644 index 00000000..832b7aaa --- /dev/null +++ b/docs/plans/how-billing-works.mdx @@ -0,0 +1,84 @@ +--- +title: "How Billing Works: Points, Plans & Limits" +description: "Understand Bitquery API points — how queries are priced, streams billing, overage, trials, and per-chain plan entitlements." +sidebar_position: 1 +--- + +import FAQ from "@site/src/components/FAQ"; + +# How Billing Works: Points, Plans & Limits + +Bitquery bills by **points**, not by raw request count, because queries differ enormously in the work they do. This page explains what a point is, how streams are billed separately, what happens when you run out, and why a query can fail on a chain you didn't purchase. + +:::note Check the pricing page for current numbers +Plan prices and allowances can change — the [pricing page](https://bitquery.io/pricing) is the source of truth. The figures below were current at the time of writing. +::: + +## Plans at a glance + +| Plan | Price | Points / mo | Rate limit | Concurrent streams | +|---|---|---|---|---| +| Personal | $39/mo | 100K | 30 / min | — | +| Pro | $79/mo | 1M | 90 / min | 100 | +| Scale | $239/mo | 5M | 240 / min | 1,000 | +| Enterprise | Custom | Custom | Custom | Unlimited | + +A call costs about **5 points**, so points ÷ 5 ≈ included calls (e.g. Scale's 5M points ≈ 1M calls). See the [pricing page](https://bitquery.io/pricing) for the latest. + +## What is a point? + +**Points = resources consumed × price per unit.** A query that scans billions of rows costs more points than one served from a small indexed slice. The same query can even cost slightly different amounts run-to-run depending on how much data it touches. This is why two APIs with the same number of calls can have very different point costs. For the full model, see [IDE Points](/docs/ide/points/). + +Key consequences developers hit most often: + +- **A query costs about 5 points**, adjusted by how much data it scans. Batching is efficient: one request filtering 50 addresses costs roughly the same as one for a single address — so prefer one batched query over 50 separate ones. +- **There's a per-request record cap** (around 25,000 records). For larger result sets, paginate or use a stream/export. +- **Points don't roll over.** Unused points expire at the end of the billing period; they do not carry forward. + +## Streams are billed separately from points + +WebSocket subscriptions, Kafka, and gRPC streams are **not** paid for out of your query points. They use stream entitlements: + +- Stream **capacity** is measured in *stream-minutes* and *GB of stream data* (add-ons at checkout), and by **concurrent stream count** (Personal: none; Pro: 100; Scale: 1,000; Enterprise: unlimited). +- **Each environment/consumer counts as its own stream.** Running the same Kafka topic from `dev`, `staging`, and `prod` (different consumer groups) counts as three streams. +- Kafka access is a separate line item from your GraphQL plan. + +See [Rate Limits & Concurrency](/docs/plans/rate-limits/) for the concurrency caps and how they surface. + +## Running out: overage, caps, and the 402 + +- When you exhaust your points, requests fail with a **`402` / `points limit exceeded`** error. Top up or upgrade from [Account → Billing](https://account.bitquery.io/user/upgrade). +- Overage is billed per additional million points — **$50 per 1M points** (monthly billing) or **$40 per 1M points** (annual). +- **After upgrading, regenerate your access token if you still see the old limit.** A token minted under the previous plan can keep returning `points limit exceeded` until you generate a fresh one. + +Check your live usage at [Account → Usage](https://account.bitquery.io/user/stats/queries) and via the [Usage API](/docs/authorization/usage-api/). + +## Per-chain entitlements + +Plans grant access to a specific set of chains. **Querying a chain that isn't in your plan fails** — and the error can look like a data problem rather than a billing one. If a query works in the IDE but fails from your app (or vice-versa), confirm the chain is included in your plan. + +## Trials + +The free trial runs for **7 days** and includes **1,000 API points, 100 MCP credits, 2 simultaneous streams, 17 stream-minutes, and 0.2 GB of stream data**, across **all chains with complete history**. No card required. + +## Paying by crypto + +Card payment is available on all plans; **crypto payment is available on annual plans**. For invoices, only pay against an invoice issued from `bitquery.io` — beware of impersonation. + + + +## Next steps + +- [IDE Points (how points are calculated)](/docs/ide/points/) +- [Upgrade to a paid plan](/docs/ide/paid/) +- [Rate Limits & Concurrency](/docs/plans/rate-limits/) +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) diff --git a/docs/plans/rate-limits.mdx b/docs/plans/rate-limits.mdx new file mode 100644 index 00000000..1bc4ed32 --- /dev/null +++ b/docs/plans/rate-limits.mdx @@ -0,0 +1,69 @@ +--- +title: "Rate Limits, Concurrency & Backoff" +description: "Bitquery API rate limits, 429 causes, recommended backoff, WebSocket concurrency caps, and gRPC stream rules." +sidebar_position: 2 +--- + +import FAQ from "@site/src/components/FAQ"; + +# Rate Limits, Concurrency & Backoff + +This page explains the limits that govern how fast you can query and stream, how to tell the different throttles apart, and how to build a client that backs off correctly. + +:::note Limits vary by plan +The [pricing page](https://bitquery.io/pricing) is the source of truth for current per-plan limits. +::: + +## Request rate limit + +The GraphQL API enforces a per-account **requests-per-minute** limit by plan: + +| Plan | Rate limit | +|---|---| +| Personal | 30 / min | +| Pro | 90 / min | +| Scale | 240 / min | +| Enterprise | Custom | + +Exceeding it returns a `429`. Heavy analytical queries also compete for shared compute (see below), so throughput in practice depends on query cost, not just request count. + +## Three different throttles — and how to tell them apart + +A `4xx`/`5xx` under load can come from three distinct sources. Diagnosing which one you hit determines the fix: + +1. **Account rate limit** — you're sending requests faster than your plan's per-minute allowance. *Fix:* slow down / add client-side rate limiting. +2. **Shared compute pressure** — a message like `temporarily blocked due to a high number of long-running queries` means the shared query engine is busy, not that you exceeded an account limit. *Fix:* retry with backoff; make queries cheaper (narrower time windows, indexed filters). +3. **Plan entitlement block** — the request targets a chain/cube/interface not in your plan. *Fix:* this is billing, not throttling — see [How Billing Works](/docs/plans/how-billing-works/). + +## Recommended client behavior + +- Run **heavy queries sequentially**, not in large parallel bursts. +- On `429` or a shared-compute block, use **exponential backoff** (start around 5s, double, cap at ~1 min). +- Keep queries cheap: narrow `Block.Time`/date ranges, and filter on [indexed fields](/docs/graphql/indexed-fields-reference/) so the engine scans less. +- Prefer **one batched query** (many addresses/tokens in a single `where`) over many small ones. + +## WebSocket concurrency + +- Each plan allows a maximum number of **concurrent subscriptions** (Personal: none; Pro: 100; Scale: 1,000; Enterprise: unlimited). +- **Exceeding the cap fails silently:** the socket connects but delivers no data, rather than returning a clear error. If a subscription "connects but nothing arrives," check your running-subscription count first at [Account → Subscriptions](https://account.bitquery.io/user/api_v2/subscriptions). +- **Revoking a token does not kill open sockets.** Terminate running subscriptions explicitly from the account panel. See [WebSocket subscriptions](/docs/subscriptions/websockets/). + +## gRPC (Solana CoreCast) + +- A gRPC subscription **requires at least one filter** — an unfiltered stream is rejected. +- **Multiple tokens per stream.** You can subscribe to many token/account filters in a single gRPC stream — you don't need one stream per token. + + + +## Next steps + +- [How Billing Works: Points, Plans & Limits](/docs/plans/how-billing-works/) +- [WebSocket subscriptions](/docs/subscriptions/websockets/) +- [Common errors and what to do](/docs/start/errors/) +- [Indexed fields reference](/docs/graphql/indexed-fields-reference/) diff --git a/docs/schema/evm/arguments.md b/docs/schema/evm/arguments.md index 85b666b7..82776a2e 100644 --- a/docs/schema/evm/arguments.md +++ b/docs/schema/evm/arguments.md @@ -22,7 +22,7 @@ additional information is provided: As example, the following data means the array of size 2 of addresses: -``` +```json { "Index": 0, "Name": "", @@ -112,7 +112,7 @@ and to specific values of arguments. Combining argument filters with signature filters on events and calls gives you the power to analyze the arguments used in smart contracts in specific context. -``` +```graphql { EVM { Calls( diff --git a/docs/stablecoin-APIs/stablecoin-balance-api.md b/docs/stablecoin-APIs/stablecoin-balance-api.md index 2333088d..d8091b98 100644 --- a/docs/stablecoin-APIs/stablecoin-balance-api.md +++ b/docs/stablecoin-APIs/stablecoin-balance-api.md @@ -14,7 +14,7 @@ We are going to particularly deep-dive into how to get Stablecoin Balance data i Below stream will give you balance of `9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM` for `FDUSD` on Solana. Test the query [here](https://ide.bitquery.io/FDUSD-balance-of-an-address). -``` +```graphql query MyQuery { Solana { BalanceUpdates( @@ -67,7 +67,7 @@ query { Below query will give you **USDT** balance for address `TUTQj7VJ1QjR3t2GJByvrP25yZNFcj38VJ` on Tron. Test the query [here](https://ide.bitquery.io/Stablecoin-Balance-of-an-Address). -``` +```graphql query MyQuery { Tron(dataset: combined) { BalanceUpdates( @@ -95,7 +95,7 @@ Token holder API examples can be found [here](/docs/blockchain/Ethereum/token-ho [This query](https://ide.bitquery.io/top-100-holders-of-USDC-token-on-Solana) returns the top 100 holders of a particular Stablecoin. -``` +```graphql query MyQuery { Solana { BalanceUpdates( diff --git a/docs/stablecoin-APIs/stablecoin-price-api.md b/docs/stablecoin-APIs/stablecoin-price-api.md index f92d33df..3bc9681b 100644 --- a/docs/stablecoin-APIs/stablecoin-price-api.md +++ b/docs/stablecoin-APIs/stablecoin-price-api.md @@ -18,7 +18,7 @@ Need help implementing stablecoin price APIs? Contact our support team or join o [Run Stream](https://ide.bitquery.io/stablecoin-1-second-price-stream) -``` +```graphql subscription { Trading { Tokens( @@ -76,7 +76,7 @@ subscription { [Run Query](https://ide.bitquery.io/5-minute-price-change-stablecoin-API) -``` +```graphql { Trading { Tokens( @@ -150,7 +150,7 @@ This query compares USDT prices across different blockchain networks in real-tim [Run Query](https://ide.bitquery.io/usdt-latest-price-arbitrage) -``` +```graphql { Trading { Tokens( diff --git a/docs/stablecoin-APIs/stablecoin-reserve-api.md b/docs/stablecoin-APIs/stablecoin-reserve-api.md index e475c1c2..1058a191 100644 --- a/docs/stablecoin-APIs/stablecoin-reserve-api.md +++ b/docs/stablecoin-APIs/stablecoin-reserve-api.md @@ -14,7 +14,7 @@ We are going to particularly deep-dive into how to get Stablecoin Transfers data Below API query will give you realtime reserves data of `USDT` on Ethereum. Test the API [here](https://ide.bitquery.io/USDT-Stablecoin-reserves-on-Ethereum). -``` +```graphql query MyQuery { EVM(network: eth, dataset: combined) { Transfers( @@ -40,7 +40,7 @@ query MyQuery { Below API query will give you realtime reserves data of `USDC` on Solana. Test the API [here](https://ide.bitquery.io/USDC-Stablecoin-reserves-on-Solana). -``` +```graphql { Solana { TokenSupplyUpdates( @@ -68,7 +68,7 @@ Below API query will give you realtime reserves data of `USDC` on Solana. Test t Below API query will give you realtime reserves data of `USDT` on Tron. Test the API [here](https://ide.bitquery.io/USDT-Stablecoin-reserves-on-Tron). -``` +```graphql query MyQuery { Tron(dataset: combined) { Transfers( diff --git a/docs/stablecoin-APIs/stablecoin-trades-api.md b/docs/stablecoin-APIs/stablecoin-trades-api.md index 76e7a506..fa7becdc 100644 --- a/docs/stablecoin-APIs/stablecoin-trades-api.md +++ b/docs/stablecoin-APIs/stablecoin-trades-api.md @@ -16,7 +16,7 @@ For pre-built stablecoin dashboards (top tokens, flows, market activity), browse Below stream will give you realtime **USDT** DEX trades on Ethereum. Test the stream [here](https://ide.bitquery.io/Stablecoin-trades-for-etheruem). -``` +```graphql subscription { EVM { DEXTrades( @@ -73,7 +73,7 @@ subscription { Below stream tracks **USDT** on Ethereum when **PriceInUSD** is outside **0.95–1.05** (depeg-style band). Test the query [here](https://ide.bitquery.io/Stablecoin-Depeg-tracking-Stream-for-evm). -``` +```graphql subscription { EVM { DEXTradeByTokens( @@ -119,7 +119,7 @@ subscription { Below stream will give you realtime trades of `USDT` on Solana. Test the stream [here](https://ide.bitquery.io/solana-trades-subscription_10_1). -``` +```graphql subscription { Solana { DEXTrades (where:{any:[{Trade:{Buy:{Currency:{MintAddress:{is:"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"}}}}},{Trade:{Sell:{Currency:{MintAddress:{is:"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"}}}}}]}){ @@ -198,7 +198,7 @@ subscription { Below stream will provide you the realtime portfolio updates for a particular address for a specific Stablecoin. In this query example, we are tracking portfolio updates for the address `3i51cKbLbaKAqvRJdCUaq9hsnvf9kqCfMujNgFj7nRKt` and for stablecoin `USDC`. Test the query [here](https://ide.bitquery.io/real-time-stablecoin-portfolio_2). -``` +```graphql subscription MyQuery { Solana { DEXTradeByTokens( @@ -251,7 +251,7 @@ subscription MyQuery { Below stream will be able to track specific Stablecoin depeg. In this query example, we are tracking depeg for the stablecoin `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` which has a symbol `USDC`. Test the query [here](https://ide.bitquery.io/stablecoin-depeg-tracking-stream-for-USDC). -``` +```graphql subscription { Solana { DEXTradeByTokens( @@ -296,7 +296,7 @@ subscription { Below stream will give you realtime **USDT** DEX trades on Tron. Test the stream [here](https://ide.bitquery.io/Stablecoin-trades-for-tron). -``` +```graphql subscription { Tron { DEXTrades( @@ -353,7 +353,7 @@ subscription { Below stream tracks **USDT** on Tron when **PriceInUSD** is outside **0.95–1.05** (depeg-style band). Test the query [here](https://ide.bitquery.io/Stablecoin-Depeg-tracking-Stream-for-tron). -``` +```graphql subscription { Tron { DEXTradeByTokens( diff --git a/docs/stablecoin-APIs/stablecoin-transfers-api.md b/docs/stablecoin-APIs/stablecoin-transfers-api.md index 5f1df3e8..262694d9 100644 --- a/docs/stablecoin-APIs/stablecoin-transfers-api.md +++ b/docs/stablecoin-APIs/stablecoin-transfers-api.md @@ -14,7 +14,7 @@ We are going to particularly deep-dive into how to get Stablecoin Transfers data Below stream will give you realtime transfers of `USDC` on Eth mainnet. Test the stream [here](https://ide.bitquery.io/Stablecoin-Realtime-Payments-Stream-on-Eth-Mainnet). -``` +```graphql subscription { EVM(network: eth) { Transfers( @@ -42,7 +42,7 @@ subscription { Below API query will give you mint/burn data of `USDT` on Ethereum. Test the API [here](https://ide.bitquery.io/USDT-Stablecoin-reserves-on-Ethereum). -``` +```graphql query MyQuery { EVM(network: eth, dataset: combined) { Transfers( @@ -68,7 +68,7 @@ query MyQuery { Below stream will give you realtime transfers of `USDC` on Solana. Test the stream [here](https://ide.bitquery.io/stablecoin-transfers-websocket). -``` +```graphql subscription { Solana { Transfers( @@ -103,7 +103,7 @@ subscription { Below query will give you `EURC` transfers from/to `cHxJ2uC6vgcCfoFSfupkfCWbKHAkekrGfG39DXRamXT` on Solana. Test the query [here](https://ide.bitquery.io/stablecoin-Transfers-fromto-an-address). -``` +```graphql { Solana { Transfers( @@ -135,7 +135,7 @@ Below query will give you `EURC` transfers from/to `cHxJ2uC6vgcCfoFSfupkfCWbKHAk Below stream will give you realtime transfers of `USDT` on Tron. Test the stream [here](https://ide.bitquery.io/Stablecoin-Realtime-Transfers-Stream-on-tron). -``` +```graphql subscription { Tron(network: tron) { Transfers( @@ -162,7 +162,7 @@ subscription { Below query will give you `USDT` transfers from/to `TUTQj7VJ1QjR3t2GJByvrP25yZNFcj38VJ` on Tron. Test the query [here](https://ide.bitquery.io/Stablecoin-recieved-and-sent-by-an-address). -``` +```graphql { Tron(dataset: combined) { Transfers( diff --git a/docs/stablecoin-APIs/usdt-api.md b/docs/stablecoin-APIs/usdt-api.md index 8a03eecb..ef7e67ae 100644 --- a/docs/stablecoin-APIs/usdt-api.md +++ b/docs/stablecoin-APIs/usdt-api.md @@ -29,7 +29,7 @@ Get real-time and historical USDT prices, OHLCV, and moving averages across supp 🔗 [Stream Example](https://ide.bitquery.io/stablecoin-price-stream-of-USDT_2) 🔗 [API Example](https://ide.bitquery.io/stablecoin-price-query-of-USDT_1) -``` +```graphql subscription { Trading { Tokens( @@ -85,7 +85,7 @@ Get real-time and historical USDT prices, OHLCV, and moving averages across supp } ``` -``` +```graphql query { Trading { Tokens( @@ -150,7 +150,7 @@ Track live USDT stablecoin transfers. USDT is ideal for payments, settlements, e 🔗 [Stream Example](https://ide.bitquery.io/USDT-token-Transfers-stream-on-solana) 🔗 [API Example](https://ide.bitquery.io/USDT-token-Transfers-api-on-solana) -``` +```graphql subscription { Solana { Transfers( @@ -195,7 +195,7 @@ subscription { } ``` -``` +```graphql { Solana { Transfers( @@ -251,7 +251,7 @@ Below example is to track USDT trading activity on Solana. 🔗 [Stream Example](https://ide.bitquery.io/solana-trades-subscription_10_1) 🔗 [API Example](https://ide.bitquery.io/solana-USDT-trades-query) -``` +```graphql subscription { Solana { DEXTrades (where:{any:[{Trade:{Buy:{Currency:{MintAddress:{is:"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"}}}}},{Trade:{Sell:{Currency:{MintAddress:{is:"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"}}}}}]}){ @@ -325,7 +325,7 @@ subscription { } ``` -``` +```graphql query { Solana { DEXTrades ( @@ -409,7 +409,7 @@ Monitor USDT reserve or get lateast reserve value on Solana using below Stream/A 🔗 [Stream Example](https://ide.bitquery.io/USDT-Stablecoin-reserves-on-Solana) 🔗 [API Example](https://ide.bitquery.io/USDT-Stablecoin-reserves-on-Solana--query) -``` +```graphql subscription{ Solana { TokenSupplyUpdates( @@ -429,7 +429,7 @@ subscription{ } ``` -``` +```graphql { Solana { TokenSupplyUpdates( @@ -459,7 +459,7 @@ Query USDT holders, balances over time, and distribution metrics (e.g., whales, 🔗 [API Example](https://ide.bitquery.io/USDT-balance-of-an-address) -``` +```graphql query MyQuery { Solana { BalanceUpdates( @@ -482,7 +482,7 @@ query MyQuery { 🔗 [API Example](https://ide.bitquery.io/top-100-holders-of-USDT-token-on-Solana_1) -``` +```graphql query MyQuery { Solana(dataset: realtime, network: solana, aggregates: yes) { BalanceUpdates( diff --git a/docs/start/errors.md b/docs/start/errors.md index 7f82f026..5714133d 100644 --- a/docs/start/errors.md +++ b/docs/start/errors.md @@ -41,7 +41,7 @@ This error typically arises due to incorrect query construction involving limits This error occurs when you exceed certain limits set by ClickHouse or the Bitquery API. These limits may include: -- **Rate Limit**: The maximum number of queries allowed per minute (e.g., 180 queries per minute). +- **Rate Limit**: The maximum number of queries allowed per minute (the exact value depends on your plan — see [Rate Limits & Concurrency](/docs/plans/rate-limits/)). - **Session Limit**: The maximum number of active sessions allowed at any given time. - **Streams Limit**: The maximum number of streams you can open simultaneously. @@ -128,6 +128,65 @@ These errors typically occur due to how the WebSocket client is configured in `w --- +## Billing, quota & access errors + +These are the most common runtime errors and their fixes. Each heading is the literal error string so you can search for it. + +### `No active billing period` (HTTP 402) {#no-active-billing-period} + +A `402` with **`No active billing period`** (or `access restricted by points limit`) means the account has no active plan/points for this request. Common causes: + +- Your trial expired, or a free tier hasn't been activated. +- A payment is still provisioning (there can be a short delay after paying). +- You're calling a **paid-only interface** (for example gRPC/Kafka) your plan doesn't include. + +**Fix:** confirm an active plan at [Account → Billing](https://account.bitquery.io/user/upgrade); see [How Billing Works](/docs/plans/how-billing-works/). If you just paid, wait a few minutes and retry. + +### `points limit exceeded: usage quota reached` {#points-limit-exceeded} + +You've consumed your point allowance for the period, **or** you're using a token minted under a previous (smaller) plan. + +**Fix:** top up / upgrade at [Account → Billing](https://account.bitquery.io/user/upgrade). **If you just upgraded and still see this, generate a new access token** — a token created under the old plan can keep enforcing the old limit. See [How Billing Works](/docs/plans/how-billing-works/). + +### `too many concurrent subscriptions` / `exceeded the maximum number of subscriptions per user id` {#too-many-concurrent-subscriptions} + +You've hit your plan's concurrent-subscription cap. Two gotchas: + +- Over the cap, a subscription may **connect but deliver no data** instead of erroring clearly. +- **Revoking a token does not stop already-open sockets.** + +**Fix:** view and terminate running subscriptions at [Account → Subscriptions](https://account.bitquery.io/user/api_v2/subscriptions). See [WebSocket subscriptions](/docs/subscriptions/websockets/) and [Rate Limits & Concurrency](/docs/plans/rate-limits/). + +### `no table can query ... consider use realtime dataset` / `Missing columns` {#dataset-not-available} + +The cube isn't deployed on the **dataset** you selected for that **chain** (for example, `combined` Holders on a chain that only has `realtime` Holders), or a column doesn't exist on that chain. + +**Fix:** switch dataset (often to `realtime`), or choose a chain/cube combination that exists. See the [Data Coverage & Retention matrix](/docs/graphql/data-coverage-retention/). + +### `Table doesn't exist` (v1) {#v1-table-does-not-exist} + +A v1 query is hitting a table retired during the v1 → v2 migration. Move the query to the v2 endpoint and schema — see [Getting started](/docs/start/first-query/). + +### gRPC `16 UNAUTHENTICATED` vs `7 PERMISSION_DENIED` {#grpc-auth-errors} + +- **`16 UNAUTHENTICATED`** — the credential is missing, malformed, or expired. Regenerate and re-send it. +- **`7 PERMISSION_DENIED`** — the credential is valid but not entitled (wrong plan, rate-limited, or no active billing period). + +See [Solana gRPC](/docs/grpc/solana/introduction/). + +### Kafka authentication / connection failures {#kafka-auth-errors} + +If your Kafka client can't authenticate or reach the brokers, check the connection recipe: port 9092, `SASL_PLAINTEXT` with your Kafka username/password (SASL/PLAIN), and no client TLS certs. See the [Kafka Operations Cookbook](/docs/streams/kafka-operations/). + +### Empty results despite data existing — full checklist {#empty-results-checklist} + +1. **Dataset/retention** — is the date range within the window for that cube? See the [coverage matrix](/docs/graphql/data-coverage-retention/). +2. **EVM address case** — filters with `is:` are case-sensitive; lowercase the address or use `caseInsensitive`. +3. **Ordering pitfall** — ordering by a non-indexed timestamp field can silently drop rows; order by `Block_Time` instead. +4. **Filters** — verify network, DEX/program, and token/mint address against an explorer. + +--- + ## Limits ### Default Limit diff --git a/docs/start/first-query.md b/docs/start/first-query.md index 79018d48..4e23773d 100644 --- a/docs/start/first-query.md +++ b/docs/start/first-query.md @@ -5,7 +5,7 @@ description: "Run your first Bitquery GraphQL query in minutes with IDE setup, a --- # Your First Query -Create and run your first query on Bitquery IDE by visiting [https://graphql.bitquery.io/ide](https://graphql.bitquery.io/ide). +Create and run your first query on Bitquery IDE by visiting [https://ide.bitquery.io/](https://ide.bitquery.io/). ## Create an account @@ -13,7 +13,7 @@ To continue, you must first [register](https://account.bitquery.io/auth/signup) **Registration Process**: -- Navigate to the Bitquery GraphQL IDE by visiting [https://graphql.bitquery.io/ide](https://graphql.bitquery.io/ide). +- Navigate to the Bitquery GraphQL IDE by visiting [https://ide.bitquery.io/](https://ide.bitquery.io/). - If you are not registered, click on the "Not registered" link. - You will need to provide your Email, Password, Password Confirmation, Name, and Company Name in the designated fields. - Complete the CAPTCHA challenge and click the Submit button to proceed. diff --git a/docs/start/mempool.md b/docs/start/mempool.md index 42fd10ab..34788879 100644 --- a/docs/start/mempool.md +++ b/docs/start/mempool.md @@ -10,7 +10,7 @@ Before any information can be written on a block, it must first go through the m By using the following query format, you can access all information about broadcasted transactions, including events, trades, and balances: -``` +```graphql query{ EVM(mempool: true){ @@ -21,7 +21,7 @@ query{ ``` And below format for subscriptions -``` +```graphql subscription { EVM(mempool: true) { } diff --git a/docs/start/starter-queries.md b/docs/start/starter-queries.md index 547eb19f..d0acf372 100644 --- a/docs/start/starter-queries.md +++ b/docs/start/starter-queries.md @@ -856,7 +856,7 @@ This API returns the total number of holders for a specific token on a given dat #### Real-Time Holders of Multiple Tokens This API leverages the balanceUpdate endpoint to deliver real-time holder data for multiple tokens. -▶️ [Real-Time Holders of Multiple Tokens](http://ide.bitquery.io/Top-10-holders-of-multiple-tokens-on-Base_2) +▶️ [Real-Time Holders of Multiple Tokens](https://ide.bitquery.io/Top-10-holders-of-multiple-tokens-on-Base_2) #### Token Holders of Multiple Tokens on a speicifc date @@ -1018,7 +1018,7 @@ Get the OHLC stats of a token traded on Pancakeswap. #### Get Price Change 5min, 1h, 6h and 24h of a specific BSC token This query gets you Price Change 5min, 1h, 6h and 24h of a specific token on the BSC network. -▶️ [Get Price Change 5min, 1h, 6h and 24h of a specific token](ttps://ide.bitquery.io/Price-change-5min-1hr-6hr-precentage-of-a-specific-token_3) +▶️ [Get Price Change 5min, 1h, 6h and 24h of a specific token](https://ide.bitquery.io/Price-change-5min-1hr-6hr-precentage-of-a-specific-token_3) #### Top 10 BSC Tokens by Price Change in last 1h @@ -1322,7 +1322,7 @@ Get trades of NFTs for a given contract and marketplace. #### Get NFT trades for a specific NFT contract and token ID Get trades of NFTs for a given contract and token ID. -▶️ [Get NFT trades by token](hhttps://ide.bitquery.io/Get-NFT-trades-by-token) +▶️ [Get NFT trades by token](https://ide.bitquery.io/Get-NFT-trades-by-token) #### Get NFT trades by wallet diff --git a/docs/start/starter-subscriptions.md b/docs/start/starter-subscriptions.md index 325ec775..341e94ff 100644 --- a/docs/start/starter-subscriptions.md +++ b/docs/start/starter-subscriptions.md @@ -433,7 +433,7 @@ Monitor balance changes related to MEV activities, including transaction fee rew Monitor all contract self-destruct event balances in real-time. -▶️ [Track All Self-Destruct Event Balances](hhttps://ide.bitquery.io/All-Self-Destruct-Event-Balances-Stream-base_1) +▶️ [Track All Self-Destruct Event Balances](https://ide.bitquery.io/All-Self-Destruct-Event-Balances-Stream-base_1) #### Monitoring Balance after Latest Gas Fee Burn diff --git a/docs/streams/kafka-operations.mdx b/docs/streams/kafka-operations.mdx new file mode 100644 index 00000000..e24b4c15 --- /dev/null +++ b/docs/streams/kafka-operations.mdx @@ -0,0 +1,75 @@ +--- +title: "Kafka Operations Cookbook" +description: "Connect, authenticate, and operate Bitquery Kafka consumers — offsets, timestamps, retention, billing, and schema gotchas." +sidebar_position: 3 +--- + +import FAQ from "@site/src/components/FAQ"; + +# Kafka Operations Cookbook + +Practical operating guidance for Bitquery Kafka consumers: how to connect and authenticate, how offsets and timestamps behave, what retention to expect, and the schema traps that trip up new integrators. For the streaming concepts and topic catalogue, start with [Kafka Streaming Concepts](/docs/streams/kafka-streaming-concepts/). + +:::caution Verify connection details for your account +Broker hosts, ports, and credential rules are provisioned per account — use the values in your onboarding details. +::: + +## Connection recipe + +- **Port:** `9092` +- **Security protocol:** `SASL_PLAINTEXT` with your Kafka **username and password** (SASL/PLAIN) — no client TLS certificates required. +- **Consumer group id:** use any stable `group.id` for your consumer. +- Credentials for the chain topics (e.g. `solana.*`) and the `trading.*` topic family may differ — use the credential issued for the family you're consuming. + +See the language-specific starters: [Python](/docs/streams/protobuf/kafka-protobuf-python/), [JavaScript](/docs/streams/protobuf/kafka-protobuf-js/), [Go](/docs/streams/protobuf/kafka-protobuf-go/). + +## Retention: Kafka is not a historical firehose + +Kafka delivers **realtime data plus a small backfill window (hours, not history)**. A fresh consumer sees recent messages forward — not the chain from genesis. For anything older, use GraphQL (within its [retention window](/docs/graphql/data-coverage-retention/)) or a [cloud/S3 export](/docs/cloud/). Two independent integrators have assumed Kafka replays genesis; it does not. + +## Offsets and restart behavior + +Two common restart modes: + +- **Skip the backlog (only new messages):** reset the group to the latest offset — e.g. `auto.offset.reset=latest`, or an explicit reset to end on startup. +- **Resume where you stopped (backfill the gap):** reuse the **same `group.id`** and resume from committed offsets. Commit periodically — but **not too frequently**, since very frequent commits create broker backpressure. +- If you see **`Offset out of range`** (your committed offset aged out of the retention window), reset to `latest` and continue. + +## Timestamps (especially Solana) + +- On Solana shred streams, a message carries its **slot**, but the **block timestamp is only populated on the final message of a block** (messages are pushed before the block finalizes). **Do not treat an empty/zero `BlockHeader.Timestamp` on non-final messages as staleness.** +- Block time is rounded and propagation adds a small delay, so an event can carry a timestamp a second or two before it reaches your consumer. Budget for this when computing "latency". + +## No server-side filtering + +Kafka topics are **firehoses** — there is no server-side filter. Consume the topic and filter client-side (by mint, program, pair, address, etc.). If you need server-side filtering, use GraphQL subscriptions or Solana gRPC (which requires at least one filter) instead. + +## Billing: what counts as a "stream" + +Each **environment / consumer group** counts as its own stream. Running the same topic from `dev`, `staging`, and `prod` (three consumer groups) counts as three streams. Kafka capacity is billed separately from GraphQL query points. See [How Billing Works](/docs/plans/how-billing-works/). + +## Schema gotchas + +- In `BlockHeader`, the fields **`TxHash`, `Root`, and `ReceiptHash` are block-level Merkle roots — not a transaction hash.** The actual transaction hash lives on the transaction record (`TransactionHeader`), not the block header. The `TxHash` name is a common source of confusion. +- Message nesting generally goes block → transaction → event; consult the [protobuf schema](/docs/streams/protobuf/kafka-trading-topics-protobuf/) for the exact shape of each topic. + +## Diagnosing lag + +If messages arrive late or pile up, check **consumer lag first** — it's usually the client (slow processing, too few partitions consumed, large payloads on some chains) rather than the broker. Scale consumers or parallelize partition consumption. + + + +## Next steps + +- [Kafka Streaming Concepts & topic list](/docs/streams/kafka-streaming-concepts/) +- [Protobuf schema reference](/docs/streams/protobuf/kafka-trading-topics-protobuf/) +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) +- [Common errors — Kafka auth](/docs/start/errors/#kafka-auth-errors) diff --git a/docs/subscriptions/aws/s3_tutorial.md b/docs/subscriptions/aws/s3_tutorial.md index 7b1ad57d..8267913b 100644 --- a/docs/subscriptions/aws/s3_tutorial.md +++ b/docs/subscriptions/aws/s3_tutorial.md @@ -6,7 +6,7 @@ description: "Using Bitquery Subscriptions to Load On-chain Data into S3 using B In this tutorial we will use Bitquery Subscription queries to fetch latest Pumpfun information on Solana upload it to an S3 Bucket. -![](/img/aws/upload.png) +![Uploading streamed data to AWS S3](/img/aws/upload.png) #### **1. Prerequisites** diff --git a/docs/subscriptions/example-rust.md b/docs/subscriptions/example-rust.md index c6a01407..30f80f27 100644 --- a/docs/subscriptions/example-rust.md +++ b/docs/subscriptions/example-rust.md @@ -7,7 +7,7 @@ description: "Building with WebSockets: Code Sample in Rust using Bitquery Graph In this section we will see how to use bitquery subscriptions in Rust. The final output will look something like this -![](/img/ApplicationExamples/rust.png) +![Rust WebSocket subscription example](/img/ApplicationExamples/rust.png) You can find the complete code [here](https://github.com/bitquery/graphql-streaming-example-rs/) diff --git a/docs/subscriptions/google-bigquery/bigquery.md b/docs/subscriptions/google-bigquery/bigquery.md index 8068044d..f739a9bd 100644 --- a/docs/subscriptions/google-bigquery/bigquery.md +++ b/docs/subscriptions/google-bigquery/bigquery.md @@ -65,7 +65,7 @@ To ensure that Pub/Sub sends data to BigQuery: - **Delivery Type**: Write to BigQuery - **BigQuery Table**: Select the `newtrades` table in the `trade_data` dataset. -![](/img/diagrams/bigquery_table.png) +![BigQuery table populated with streamed blockchain data](/img/diagrams/bigquery_table.png) 3. Click **Create**. diff --git a/docs/subscriptions/google-bigquery/intro.mdx b/docs/subscriptions/google-bigquery/intro.mdx index db0269b4..dd21fddd 100644 --- a/docs/subscriptions/google-bigquery/intro.mdx +++ b/docs/subscriptions/google-bigquery/intro.mdx @@ -10,7 +10,7 @@ We will use a subscription query, integrate Google Pub/Sub, create subscribers, This is just a sample setup—you can use any intermediary to feed data into Google BigQuery or any other cloud database. -![](/img/diagrams/bigquery.png) +![Bitquery to Google BigQuery data pipeline](/img/diagrams/bigquery.png) ## Architecture diff --git a/docs/subscriptions/google-bigquery/pub-sub.md b/docs/subscriptions/google-bigquery/pub-sub.md index f9fe057b..0626a15d 100644 --- a/docs/subscriptions/google-bigquery/pub-sub.md +++ b/docs/subscriptions/google-bigquery/pub-sub.md @@ -14,7 +14,7 @@ This tutorial walks through a process of subscribing to the Bitquery Streaming A - Navigate to Pub/Sub > Topics. - Create a new topic named `bitquery-data-stream`( this is an example). -![](/img/diagrams/pubsub.png) +![Google Pub/Sub data pipeline diagram](/img/diagrams/pubsub.png) 2. Create a Subscription: diff --git a/docs/subscriptions/mempool-subscriptions.md b/docs/subscriptions/mempool-subscriptions.md index c2e5aa18..8ea9cdbd 100644 --- a/docs/subscriptions/mempool-subscriptions.md +++ b/docs/subscriptions/mempool-subscriptions.md @@ -23,7 +23,7 @@ Mempool subscriptions differ from regular subscriptions. This subscription invol To distinguish between pending and confirmed transactions, use a two-step approach combining `mempool: true` for unconfirmed transactions and `mempool: false` for confirmed ones. -``` +```graphql subscription { confirmed: EVM(mempool: false) { Transactions { @@ -44,7 +44,7 @@ subscription { Mempool Transactions -``` +```graphql subscription { mempool_transactions: EVM(mempool: true) { Transactions { diff --git a/docs/subscriptions/silent-disconnect-reconnect.md b/docs/subscriptions/silent-disconnect-reconnect.md index 7abb7728..3e63c778 100644 --- a/docs/subscriptions/silent-disconnect-reconnect.md +++ b/docs/subscriptions/silent-disconnect-reconnect.md @@ -9,7 +9,7 @@ When using Bitquery GraphQL streams via WebSocket, you need to implement reconne This is how it would look with below sample implemention of a silent disconnect-reconnect scenario. -![](/img/ApplicationExamples/disconnect.png) +![WebSocket disconnect and reconnect flow](/img/ApplicationExamples/disconnect.png) ## Best Practices diff --git a/docs/subscriptions/subscription.md b/docs/subscriptions/subscription.md index 16c7def8..56c7dd9d 100644 --- a/docs/subscriptions/subscription.md +++ b/docs/subscriptions/subscription.md @@ -49,7 +49,7 @@ For **default success and other filters** (e.g. only successful transactions, ca It is possible—and often more efficient—to manage multiple subscriptions over a single WebSocket connection. This approach allows you to bundle various subscriptions, such as DEX Trades, Transactions, Blocks, and Transfers, into a single Websocket stream. However, it's important to note that your top-level element must be only one. -``` +```graphql subscription{ EVM{ Transfers{ @@ -71,7 +71,7 @@ This query will return two sets of transfer data for USDT on the Ethereum networ You can run the query [here](https://ide.bitquery.io/USDT-transfers-of-different-amounts-mempool) -``` +```graphql subscription ($token: String!, $minamount: String!, $mempool: Boolean, $network: evm_network!) { usdt: EVM(network: $network, mempool: $mempool) { transfers_above_10K: Transfers( diff --git a/docs/trading/crypto-price-api/crypto-marketcap-api.md b/docs/trading/crypto-price-api/crypto-marketcap-api.md index 136e84a3..089be60a 100644 --- a/docs/trading/crypto-price-api/crypto-marketcap-api.md +++ b/docs/trading/crypto-price-api/crypto-marketcap-api.md @@ -722,7 +722,7 @@ Compare **`Trading.Pairs`** rows for the same **currency** / **quote** across **
Click to expand GraphQL query -``` +```graphql { Trading { Pairs( @@ -786,7 +786,7 @@ Subscribe to **`Trading.Pairs`** filtered by **Uniswap protocols** and **1s** in
Click to expand GraphQL query -``` +```graphql subscription { Trading { Pairs( @@ -1232,7 +1232,7 @@ Query **`EVM(network: eth, dataset: combined).Events`** for **`Burn`** logs on t
Click to expand GraphQL query -``` +```graphql { EVM(network: eth, dataset: combined) { Events( diff --git a/docs/trading/crypto-price-api/currency.md b/docs/trading/crypto-price-api/currency.md index 3bd70a27..de89e0e8 100644 --- a/docs/trading/crypto-price-api/currency.md +++ b/docs/trading/crypto-price-api/currency.md @@ -17,7 +17,7 @@ The OHLC values (Open, High, Low, Close) are determined across all chains and to **Volume.Quote vs Volume.Usd**: For USD-based pricing, `Volume.Quote` is the sum of quote token amounts (not USD). Use `Volume.Usd` for USD totals. See [Price Index Algorithm](/docs/trading/crypto-price-api/price-index-algorithm) for details. -``` +```graphql { Trading { Currencies( diff --git a/docs/trading/crypto-price-api/examples.md b/docs/trading/crypto-price-api/examples.md index 5a81b0ed..e6c4088c 100644 --- a/docs/trading/crypto-price-api/examples.md +++ b/docs/trading/crypto-price-api/examples.md @@ -14,7 +14,7 @@ Here we have selected the filter `Price: {IsQuotedInUsd: true}`, this means that > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql subscription { Trading { Pairs( @@ -77,7 +77,7 @@ Here we have selected the filter `Price: {IsQuotedInUsd: false}`, this means tha > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql subscription { Trading { Pairs( @@ -145,7 +145,7 @@ Here we have selected the filter `Price: {IsQuotedInUsd: false}`, this means tha > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql subscription { Trading { Pairs( @@ -268,7 +268,7 @@ This query retrieves the OHLC (Open, High, Low, Close) prices of a currency(in t > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql { Trading { Currencies( @@ -561,7 +561,7 @@ Fetch the top 10 tokens by 5-minute percentage price change (USD-based), only in Here we have selected the filter `Price: {IsQuotedInUsd: true}`, this means that any price values such as OHLC or Average indicators will be in USD. If you want them in quote currency, change the filter to `Price: {IsQuotedInUsd: false}`. -This stream uses [expressions](http://docs.bitquery.io/docs/graphql/capabilities/expression/) +This stream uses [expressions](/docs/graphql/capabilities/expression/) [Run Stream ➤](https://ide.bitquery.io/5-minute-price-change-api_2) @@ -643,13 +643,13 @@ Stream the top 10 tokens on Solana by 5-minute price change (in USD), filtered b Here we have selected the filter `Price: {IsQuotedInUsd: true}`, this means that any price values such as OHLC or Average indicators will be in USD. If you want them in quote currency, change the filter to `Price: {IsQuotedInUsd: false}`. -This stream uses [expressions](http://docs.bitquery.io/docs/graphql/capabilities/expression/) +This stream uses [expressions](/docs/graphql/capabilities/expression/) [Run Stream ➤](https://ide.bitquery.io/5-minute-price-change-api-on-solana_6) > Note: We include `Volume: { Usd: { gt: 5 } }` in most examples to remove extreme outliers; this stream already filters by `Volume: { Usd: { gt: 100000 } }`. -``` +```graphql subscription{ Trading { Tokens( @@ -721,7 +721,7 @@ subscription{ Calculate the percentage drawdown (price decline) for tokens of a specific currency (e.g., Bitcoin) over a 1-hour interval. -This query uses [expressions](http://docs.bitquery.io/docs/graphql/capabilities/expression/) to calculate drawdown as: `((Close - Open) / Open) * 100`. +This query uses [expressions](/docs/graphql/capabilities/expression/) to calculate drawdown as: `((Close - Open) / Open) * 100`. > **Note:** You can use `Token: {Address: {is: "token_address"}}` filter instead of `Currency: {Id: {is: "bid:bitcoin"}}` to filter by token address. We include `Volume: { Usd: { gt: 10 } }` to filter out tokens with very low trading volume. @@ -886,7 +886,7 @@ Here we have selected the filter `Price: {IsQuotedInUsd: true}`, this means that > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql subscription { Trading { Pairs( @@ -969,7 +969,7 @@ Here we have selected the filter `Price: {IsQuotedInUsd: true}`, this means that > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql subscription { Trading { Pairs( @@ -1053,7 +1053,7 @@ Here we have selected the filter `Price: {IsQuotedInUsd: true}`, this means that > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql subscription { Trading { Pairs( @@ -1137,7 +1137,7 @@ Here we have selected the filter `Price: {IsQuotedInUsd: true}`, this means that > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql subscription { Trading { Pairs( @@ -1221,7 +1221,7 @@ Here we have selected the filter `Price: {IsQuotedInUsd: true}`, this means that > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql subscription { Trading { Pairs( @@ -1305,7 +1305,7 @@ Here we have selected the filter `Price: {IsQuotedInUsd: true}`, this means that > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql subscription { Trading { Pairs( @@ -1388,7 +1388,7 @@ Here we have selected the filter `Price: {IsQuotedInUsd: true}`, this means that > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql subscription { Trading { Pairs( @@ -1471,7 +1471,7 @@ Here we have selected the filter `Price: {IsQuotedInUsd: true}`, this means that > Note: We include `Volume: { Usd: { gt: 5 } }` to further remove extreme outliers; the stream already pre-filters outliers—this is an additional check. -``` +```graphql subscription { Trading { Pairs( diff --git a/docs/trading/crypto-price-api/pairs.md b/docs/trading/crypto-price-api/pairs.md index 3a65cc91..45ca9e25 100644 --- a/docs/trading/crypto-price-api/pairs.md +++ b/docs/trading/crypto-price-api/pairs.md @@ -6,7 +6,7 @@ description: "Get crypto trading pair prices, volume, and OHLC with Bitquery Tra The Pairs cube provides trading data for a base token traded against a quote token on a particular DEX or protocol. -``` +```graphql { Trading { Pairs( diff --git a/docs/trading/crypto-trades-api/wallet-pnl.mdx b/docs/trading/crypto-trades-api/wallet-pnl.mdx new file mode 100644 index 00000000..5d5439a4 --- /dev/null +++ b/docs/trading/crypto-trades-api/wallet-pnl.mdx @@ -0,0 +1,93 @@ +--- +title: "Wallet PnL: Compute Realized & Unrealized Profit" +description: "Compute a wallet's realized and unrealized PnL from Bitquery trade history using the Trades API, with an average-cost walkthrough." +sidebar_position: 6 +--- + +import FAQ from "@site/src/components/FAQ"; + +# Wallet PnL: Realized & Unrealized Profit + +Bitquery doesn't return a single "PnL" number — you compute it from a wallet's **trade history** plus the token's **current price**. This recipe shows the average-cost approach that most trackers use. It works on every chain the Trades API covers, including the Robinhood chain. + +## 1. Pull the wallet's trades + +Open the [Bitquery IDE](https://ide.bitquery.io/) and run a Trades query filtered to the wallet, ordered by time. This returns each buy/sell with amount, price, and side — the raw material for PnL. + +```graphql +{ + Trading { + Trades( + where: { Trade: { Account: { Address: { is: "" } } } } + orderBy: { ascending: Block_Time } + limit: { count: 10000 } + ) { + Block { Time } + Trade { + Side { Type } + Amount + Price + Currency { Symbol Address } + } + } + } +} +``` + +The `Side.Type` (buy/sell), `Amount`, and `Price` on each row are what you fold into a running position. Note the [Trades API retention window](/docs/graphql/data-coverage-retention/) — for deep history beyond it, use a [cloud/S3 export](/docs/cloud/). + +## 2. Fold trades into a position (average cost) + +For each token, walk trades in time order: + +- **Buy:** increase quantity; increase cost basis by `amount × price`. +- **Sell:** realized PnL += `amount × (sell price − average cost)`; reduce quantity and cost basis proportionally. +- **Average cost** = running cost basis ÷ running quantity. + +```python +# trades: list of {side, amount, price} in time order, per token +qty = 0.0 +cost = 0.0 # total cost basis of the open position +realized = 0.0 +for t in trades: + if t["side"] == "buy": + qty += t["amount"] + cost += t["amount"] * t["price"] + else: # sell + avg = cost / qty if qty else 0.0 + realized += t["amount"] * (t["price"] - avg) + cost -= t["amount"] * avg + qty -= t["amount"] + +avg_cost = cost / qty if qty else 0.0 +# unrealized needs the current price (see step 3) +``` + +## 3. Add unrealized PnL + +Fetch the token's **current price** from the [Crypto Price API](/docs/trading/crypto-price-api/introduction/), then: + +```text +unrealized = open_quantity × (current_price − average_cost) +total_pnl = realized + unrealized +``` + +## Caveats + +- **Price source matters.** Use a consistent price feed (the same one you'd display) — the token-level price index is MEV/outlier-filtered; see [which price to use](/docs/trading/crypto-price-api/price-index-algorithm/). +- **Fees & gas** aren't included above — subtract them if you need net PnL. +- **Method choice** (average cost vs FIFO) changes realized PnL; pick one and be consistent. + + + +## Next steps + +- [Trades API](/docs/trading/crypto-trades-api/trades-api/) +- [Crypto Price API](/docs/trading/crypto-price-api/introduction/) +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) diff --git a/docs/usecases/automated-trading-ethereum-volume-surge-bot.mdx b/docs/usecases/automated-trading-ethereum-volume-surge-bot.mdx index fba2e574..eed632f5 100644 --- a/docs/usecases/automated-trading-ethereum-volume-surge-bot.mdx +++ b/docs/usecases/automated-trading-ethereum-volume-surge-bot.mdx @@ -37,7 +37,7 @@ To build this MEV Bot, set up your programming environment by installing Python, 1. By running the query below, you can download the libraries needed for the project without any issues. -``` +```bash pip install requests web3 os ``` diff --git a/docs/usecases/crypto-dashboard.md b/docs/usecases/crypto-dashboard.md index 2e8f8028..2c855470 100644 --- a/docs/usecases/crypto-dashboard.md +++ b/docs/usecases/crypto-dashboard.md @@ -40,7 +40,7 @@ npx create-react-app my-app command and clear the defaults in app.js file. ### Import Statements -``` +```javascript import React, { useState } from 'react'; import axios from 'axios'; import './portfolio.css'; diff --git a/docs/usecases/discord-bot.md b/docs/usecases/discord-bot.md index a5f1b44c..399ac263 100644 --- a/docs/usecases/discord-bot.md +++ b/docs/usecases/discord-bot.md @@ -49,7 +49,7 @@ At the top of your `index.js` file, import the necessary dependencies: -``` +```javascript const { Client, GatewayIntentBits } = require("discord.js"); const axios = require("axios"); require("dotenv").config(); @@ -66,7 +66,7 @@ Next, configure the Discord bot by creating a new instance of the `Client` class -``` +```javascript const client = new Client({ intents: [ GatewayIntentBits.Guilds, @@ -85,7 +85,7 @@ Retrieve your Discord bot token and Bitquery OAuth token. Replace the placeholde -``` +```javascript const CLIENT_TOKEN = ""; ``` diff --git a/docs/usecases/mempool-transaction-fee.md b/docs/usecases/mempool-transaction-fee.md index f2ca5f1b..635f36d3 100644 --- a/docs/usecases/mempool-transaction-fee.md +++ b/docs/usecases/mempool-transaction-fee.md @@ -85,7 +85,7 @@ This function fetch_data_from_mempool_api() sends a POST request to the Mempool ### Step 4: Creating the Streamlit App -``` +```python def main(): ``` @@ -260,15 +260,15 @@ When you run the Streamlit app generated by the code, here's what you can expect - Latest Transactions and Fee Details: You will see a table displaying details of the latest transactions fetched from the Mempool API. The table includes information such as block time, block number, transaction hash, transaction cost, sender, receiver, and various fee details. -![](/img/mempool-transaction-fee/image-001.png) +![Mempool transaction fee analysis, step 1](/img/mempool-transaction-fee/image-001.png) - Burnt Fee over Time: A scatter plot will show the burnt fee (the fee consumed by the network) over time. The x-axis represents the timestamp of transactions, and the y-axis represents the burnt fee value. -![](/img/mempool-transaction-fee/image-002.png) +![Mempool transaction fee analysis, step 2](/img/mempool-transaction-fee/image-002.png) - Priority Fee per Gas over Time: Another scatter plot will display the priority fee per gas (the fee paid by the user for faster confirmation) over time. Similarly, the x-axis represents the timestamp, and the y-axis represents the priority fee per gas. -![](/img/mempool-transaction-fee/image-003.png) +![Mempool transaction fee analysis, step 3](/img/mempool-transaction-fee/image-003.png) When interacting with the dashboard, users can analyze transaction data, identify patterns, and make informed decisions regarding transaction prioritization and fee management. diff --git a/docs/usecases/nft-creator/components.md b/docs/usecases/nft-creator/components.md index 2c5b0082..dd0d6132 100644 --- a/docs/usecases/nft-creator/components.md +++ b/docs/usecases/nft-creator/components.md @@ -421,7 +421,7 @@ The Header component has two states: `expand` and `navColour`. The Header component has one function: `scrollHandler()`. This function listens for a scroll event and updates the `navColour` state based on the scroll position. If the scroll position is greater than or equal to 20, `navColour` is set to `true` and the navigation bar becomes sticky. -``` +```javascript import React from 'react'; import Header from './Header'; diff --git a/docs/usecases/ohlcv-complete-guide.md b/docs/usecases/ohlcv-complete-guide.md index d953ea34..64d01c4f 100644 --- a/docs/usecases/ohlcv-complete-guide.md +++ b/docs/usecases/ohlcv-complete-guide.md @@ -194,7 +194,7 @@ In EVM and non-EVM chains, you can also use `subscription` to get a token pair w Take this query below for example; -``` +```graphql subscription LatestTrades { Solana { DEXTradeByTokens( @@ -323,7 +323,7 @@ For example if you check the OHLC for this token `J3TqbUgHurQGNxWtT88UQPcMNVmrL8 Take this query [https://ide.bitquery.io/quantile](https://ide.bitquery.io/quantile) which includes both OHLC using `maximum`, `minimum` and using `quantile` and removes small trades using `AmountinUSD >10` filter. -``` +```graphql { Solana(dataset: combined) { DEXTradeByTokens( diff --git a/docs/usecases/real-time-balance-tracker/scripts.md b/docs/usecases/real-time-balance-tracker/scripts.md index 90b20768..29fb0ccd 100644 --- a/docs/usecases/real-time-balance-tracker/scripts.md +++ b/docs/usecases/real-time-balance-tracker/scripts.md @@ -14,7 +14,7 @@ Current Balance = sum(all_balance_updates) + steam_balance_updates To initiate the project run the following command. -``` +```bash npm init -y ``` @@ -27,7 +27,7 @@ Before going further make sure that all the dependencies are installed. The depe Use the following command to install these dependencies. -``` +```bash npm install axios dotenv express ws ``` diff --git a/docs/usecases/real-time-balance-tracker/ui.md b/docs/usecases/real-time-balance-tracker/ui.md index 6d341b7b..b79bcdac 100644 --- a/docs/usecases/real-time-balance-tracker/ui.md +++ b/docs/usecases/real-time-balance-tracker/ui.md @@ -108,7 +108,7 @@ In this section we will create a simple UI using HTML, CSS and JavaScript to mak To run the project run the following command: -``` +```bash node index.js ``` diff --git a/docs/usecases/real-time-historical-ethereum-price-excel-google-sheets.mdx b/docs/usecases/real-time-historical-ethereum-price-excel-google-sheets.mdx index 2809a41d..2d040547 100644 --- a/docs/usecases/real-time-historical-ethereum-price-excel-google-sheets.mdx +++ b/docs/usecases/real-time-historical-ethereum-price-excel-google-sheets.mdx @@ -25,13 +25,13 @@ Adjust the query and data fields according to your specific requirements. You will be able to download the JSON file on cloud console as shown Below -![](/img/ApplicationExamples/google_cloud_console.png) +![Google Cloud Console API setup](/img/ApplicationExamples/google_cloud_console.png) ### Step 1: Install Required Libraries First, you need to install the necessary Python libraries if you haven't already: -``` +```bash pip install gspread oauth2client requests ``` diff --git a/docs/usecases/streaming-moonshot-prices.md b/docs/usecases/streaming-moonshot-prices.md index a57840c3..96c15eb9 100644 --- a/docs/usecases/streaming-moonshot-prices.md +++ b/docs/usecases/streaming-moonshot-prices.md @@ -10,7 +10,7 @@ You can find the complete repo [here](https://github.com/Divyn/streaming-moonsho The final output would look something like this -![](/img/ApplicationExamples/moonshot.png) +![Streaming Moonshot token prices](/img/ApplicationExamples/moonshot.png) ### Prerequisites @@ -31,7 +31,7 @@ cd moonshot-stream Install the necessary dependencies for WebSocket support: -``` +```bash npm install reconnecting-websocket ``` diff --git a/docs/usecases/telegram-bot.md b/docs/usecases/telegram-bot.md index e89803b3..88365988 100644 --- a/docs/usecases/telegram-bot.md +++ b/docs/usecases/telegram-bot.md @@ -15,7 +15,7 @@ You can find the complete code [here](https://github.com/divyasshree-BQ/telegram 1. Install the required Python libraries: -``` +```bash pip install asyncio json websockets tracemalloc telegram-bot-api ``` @@ -37,7 +37,7 @@ You also need to get your API OAuth Token from Bitquery, you can get it for free **Step 4: Define Functions for Handling Long Messages** Since the response received from the Bitquery API is much longer than allowed limits( 4000 characters), we will write a function that splits the text and sends it to the chat. -``` +```python def split_text(text, max_length): return [text[i:i + max_length] for i in range(0, len(text), max_length)] diff --git a/docs/usecases/track-millions-of-solana-wallets.md b/docs/usecases/track-millions-of-solana-wallets.md index 9fb4b2cf..881690b4 100644 --- a/docs/usecases/track-millions-of-solana-wallets.md +++ b/docs/usecases/track-millions-of-solana-wallets.md @@ -91,7 +91,7 @@ cd solana-wallet-tracker 2. Install dependencies: -``` +```bash pip install confluent-kafka protobuf base58 bitquery-pb2-kafka-package python-dotenv ``` @@ -107,7 +107,7 @@ KAFKA_PASSWORD = 4. Run the wallet tracker: -``` +```bash python wallet_balance_extractor.py ``` @@ -200,7 +200,7 @@ Let's examine the entire implementation in detail: ### Imports -``` +```javascript import uuid import base58 import json @@ -219,7 +219,7 @@ The IndexedWalletTracker class is the heart of our implementation. It manages th #### Initialization -``` +```python def __init__(self): # Create output directory self.output_dir = "wallet_balances" @@ -259,7 +259,7 @@ This initializes: #### Utility Functions -``` +```python def convert_bytes(self, value): """Convert bytes to base58 string""" if isinstance(value, bytes): @@ -269,7 +269,7 @@ def convert_bytes(self, value): This simple utility converts byte values (like addresses) to Solana's base58 format. -``` +```python def calculate_human_balance(self, raw_balance, decimals): """Calculate human-readable balance based on token decimals""" if decimals > 0: @@ -281,7 +281,7 @@ This function converts raw token amounts (like 1000000000 lamports) to human-rea #### Extracting Data from Messages -``` +```python def extract_token_metadata(self, currency): """Extract token metadata from Currency object""" token_mint = "UNKNOWN" @@ -325,7 +325,7 @@ def extract_token_metadata(self, currency): This function extracts token metadata (mint address, symbol, decimals, name) from the Currency objects in the Kafka messages. It also updates the token metadata cache for future reference. -``` +```python def extract_address(self, tx, account_index): """Extract address from transaction using account index""" address = None @@ -353,7 +353,7 @@ This function extracts a wallet address from a transaction given an account inde #### Updating Wallet Balances -``` +```python def update_wallet_balance(self, address, token_mint, token_info, raw_balance): """Update the wallet balance index with the latest balance""" if address == "UNKNOWN" or address is None: @@ -383,7 +383,7 @@ def update_wallet_balance(self, address, token_mint, token_info, raw_balance): This is the core function that updates our in-memory index with the latest wallet balance. It also calculates a human-readable balance value and tracks when the balance was last updated. -``` +```python def process_balance_update(self, address, token_info, raw_balance): """Process a balance update and update the index""" if address and token_info['mint'] != "UNKNOWN": @@ -405,7 +405,7 @@ This is a wrapper around `update_wallet_balance` that also updates our statistic #### Exporting Balances -``` +```python def export_balances(self, force=False): """Export current balances to file if interval has passed or forced""" current_time = time.time() @@ -463,7 +463,7 @@ This function exports our in-memory wallet balances to both JSON and CSV files. #### Processing Messages -``` +```python def process_message(self, token_block): """Process a token block message""" self.stats['messages_processed'] += 1 @@ -615,7 +615,7 @@ After processing all the balance updates, the method checks if it's time to expo #### Statistics Reporting -``` +```python def print_stats(self): """Print tracker statistics""" elapsed = time.time() - self.stats['start_time'] @@ -636,7 +636,7 @@ This method prints statistics about the tracker's performance, including runtime #### Main Consumer Function -``` +```python def run_consumer(): """Run the Kafka consumer with the indexed wallet tracker""" # Load environment variables from .env file diff --git a/docs/usecases/tradingview-subscription-realtime/getting-started.md b/docs/usecases/tradingview-subscription-realtime/getting-started.md index 859adbc8..5b09b7bf 100644 --- a/docs/usecases/tradingview-subscription-realtime/getting-started.md +++ b/docs/usecases/tradingview-subscription-realtime/getting-started.md @@ -113,7 +113,7 @@ Aggregated OHLC from any provider can have **open ≠ previous close**. This tut At runtime, the pieces interact like this: -![](/img/diagrams/tradingview_flowchart.png) +![TradingView integration flowchart](/img/diagrams/tradingview_flowchart.png) 1. **First paint:** the widget asks the datafeed for **history**; your code calls Bitquery over **HTTPS**, maps the result to bars, and returns them to TradingView. 2. **Live:** the widget **subscribes**; your code opens a **WebSocket** subscription, receives each new bar, and forwards it to TradingView’s callback so the chart updates. diff --git a/docs/usecases/wallet-provenance.mdx b/docs/usecases/wallet-provenance.mdx new file mode 100644 index 00000000..12f3b3cc --- /dev/null +++ b/docs/usecases/wallet-provenance.mdx @@ -0,0 +1,72 @@ +--- +title: "Wallet Provenance: First Funding & Deployer History" +description: "Find who funded a wallet, its first incoming transfer, and every token a deployer has launched — for provenance and rug-checks." +sidebar_position: 21 +--- + +import FAQ from "@site/src/components/FAQ"; + +# Wallet Provenance & Deployer History + +Two related investigation recipes: tracing where a wallet's funds first came from, and listing every token a deployer has launched (a common rug-check). + +## First incoming transfer (who funded this wallet) + +Order the wallet's incoming transfers ascending by time and take the first — that's the initial funding event, and its sender is the funder. + +```graphql +{ + EVM(network: eth, dataset: combined) { + Transfers( + where: { Transfer: { Receiver: { is: "0x..." } } } + orderBy: { ascending: Block_Time } + limit: { count: 1 } + ) { + Block { Time } + Transfer { + Sender + Amount + Currency { Symbol SmartContract } + } + Transaction { Hash } + } + } +} +``` + +Order by `Block_Time` (not a transaction-timestamp field, which can drop rows). Repeat on the funder to walk the chain back a few hops; for deep multi-hop money-flow use [Coinpath](https://docs.bitquery.io/v1/docs/Examples/coinpath/money-flow-api). + +## Every token a wallet deployed (rug-check) + +Find contract-creation events by a deployer address to see all tokens/contracts it launched — repeat-deployer patterns are a rug signal. + +```graphql +{ + EVM(network: eth, dataset: combined) { + Calls( + where: { + Call: { Create: true, Signer: { is: "0x..." } } + } + ) { + Block { Time } + Call { To } + Transaction { Hash } + } + } +} +``` + +`Call.To` on a creation call is the newly-deployed contract address. On Solana, use the launchpad create instructions (e.g. pump.fun) filtered by the creator wallet — see the [Solana launchpad pages](/docs/blockchain/Solana/). + + + +## Next steps + +- [ERC-20 transfers API](/docs/blockchain/Ethereum/transfers/erc20-token-transfer-api/) +- [Coinpath (v1)](https://docs.bitquery.io/v1/docs/Examples/coinpath/money-flow-api) diff --git a/docusaurus.config.js b/docusaurus.config.js index 28239945..e465d14e 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -45,7 +45,7 @@ const config = { onBrokenLinks: "throw", markdown: { hooks: { - onBrokenMarkdownLinks: "warn", + onBrokenMarkdownLinks: "throw", }, }, @@ -78,6 +78,40 @@ const config = { crossorigin: "anonymous", }, }, + { + tagName: "link", + attributes: { + rel: "preload", + href: "/fonts/jetbrains-mono-latin-400-normal.woff2", + as: "font", + type: "font/woff2", + crossorigin: "anonymous", + }, + }, + { + tagName: "link", + attributes: { + rel: "preload", + href: "/fonts/jetbrains-mono-latin-500-normal.woff2", + as: "font", + type: "font/woff2", + crossorigin: "anonymous", + }, + }, + { + tagName: "meta", + attributes: { + name: "theme-color", + content: "#93254b", + }, + }, + { + tagName: "link", + attributes: { + rel: "apple-touch-icon", + href: "/img/apple-touch-icon.png", + }, + }, ], scripts: [ @@ -89,8 +123,7 @@ const config = { ], plugins: [ - // Copy MD button is now in swizzled DocItem/Content (src/theme/DocItem/Content) - // require.resolve("./plugins/copy-md-plugin"), + // Copy MD button is implemented in swizzled DocItem/Content (src/theme/DocItem/Content). // [ // "@graphql-markdown/docusaurus", // { @@ -132,7 +165,7 @@ const config = { to: "/docs/blockchain/Solana/Pumpfun/pump-swap-api/", from: "/docs/blockchain/Solana/pump-swap-api/", }, - // PumpFun → Pumpfun case redirect lives in static/_redirects (Netlify). + // PumpFun → Pumpfun case redirect is handled server-side in nginx/default.conf. // A client-redirect here breaks macOS builds (case-insensitive FS). { to: "/docs/blockchain/Ethereum/token-holders/token-holder-api/", @@ -1166,10 +1199,10 @@ const config = { }, ...(enableAnalytics ? { - gtag: { - trackingID: "G-ZWB80TDH9J", - anonymizeIP: true, - }, + // GA4 + HubSpot load via GTM (container GTM-5GC69JH6, which has a + // GA-4 Google Tag firing on All Pages). Do NOT also enable the gtag + // plugin here — it would load G-ZWB80TDH9J a second time and + // double-count pageviews. googleTagManager: { containerId: "GTM-5GC69JH6", }, @@ -1196,13 +1229,6 @@ const config = { isCloseable: true, }, - // metadata: [ - // { - // name: 'baidu-site-verification', - // content: 'codeva-3D7wc6GZVP' // Replace with your actual content value - // }, - // // ... other meta tags ... - // ], // Replace with your project's social card image: "img/heroImage4.png", navbar: { @@ -1212,11 +1238,6 @@ const config = { srcDark: "img/logoBitqueryWhite.png", }, items: [ - { - to: "https://docs.bitquery.io/v1/", - label: "V1 Docs", - position: "left", - }, { type: "doc", docId: "intro", @@ -1230,6 +1251,11 @@ const config = { position: "left", label: "MCP Server", }, + { + to: "https://docs.bitquery.io/v1/", + label: "V1 (legacy)", + position: "left", + }, { to: "https://bitquery.io/forms/api", label: "Book Demo", @@ -1359,7 +1385,7 @@ const config = { { label: "Visit bitquery.io", href: "https://bitquery.io/" }, { label: "Enterprise & sales", - href: "https://bitquery.io/contact", + href: "https://bitquery.io/forms/api", }, ], }, diff --git a/nginx/default.conf b/nginx/default.conf index 19308933..ee2ff42c 100644 --- a/nginx/default.conf +++ b/nginx/default.conf @@ -5,10 +5,41 @@ server { root /usr/share/nginx/html; index index.html; - # Stale docs blog → main site blog (Task 5) + # --- Compression (WP-0.1) --- + # The base image gzips text/html only; add JS/CSS/SVG/JSON so bundles ship + # compressed. Brotli is intentionally NOT enabled: nginx:stable-alpine ships + # without the brotli module, so `brotli on;` would fail to start. To add + # brotli, build a custom nginx image with ngx_brotli and re-add here. + gzip on; + gzip_comp_level 6; + gzip_min_length 1024; + gzip_vary on; + gzip_types text/css application/javascript application/json application/xml image/svg+xml text/plain application/x-protobuf; + + # --- Server-side 301 redirects (WP-0.3) --- + # Ported from the (Netlify-only, never-executed) static/_redirects plus two + # gaps proven live: /blog with no trailing slash, and the old PumpFun casing. + + # Stale docs blog → main site blog location /blog/ { return 301 https://bitquery.io/blog/; } + # /blog without a trailing slash previously fell through to the SPA fallback + # and soft-404'd; send it to the same place as /blog/. + location = /blog { + return 301 https://bitquery.io/blog/; + } + + # Old PumpFun casing (Google-indexed; went dead when the dir was renamed to + # Pumpfun). `^~` is a CASE-SENSITIVE prefix match, so correctly-cased + # /Pumpfun/ URLs never enter this block — no redirect loop. + location ^~ /docs/blockchain/Solana/PumpFun { + rewrite ^/docs/blockchain/Solana/PumpFun(/.*)?$ /docs/blockchain/Solana/Pumpfun$1 permanent; + } + + # Legacy MCP path (was a client-side redirect only) + location = /docs/usecases/MCP { return 301 /docs/mcp/mcp-server/; } + location = /docs/usecases/MCP/ { return 301 /docs/mcp/mcp-server/; } # Self-hosted fonts + webpack-hashed /assets (filenames change on update) location ~* ^/(fonts|assets)/ { @@ -24,8 +55,18 @@ server { add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; } + # --- Real 404s (WP-0.2) --- + # The site is a fully static Docusaurus export (every route is a real + # index.html, and build/404.html exists). Serve that with a genuine 404 + # status instead of the old `try_files ... /index.html` SPA fallback, which + # returned 200 + the homepage shell for every unknown URL (site-wide soft-404). + error_page 404 /404.html; + location = /404.html { + internal; + } + location / { - try_files $uri $uri/ /index.html; + try_files $uri $uri/ =404; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; } } diff --git a/package.json b/package.json index f99b731e..6e87b92c 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "start": "node scripts/patch-gray-matter.js && docusaurus start", "dev": "node scripts/patch-gray-matter.js && docusaurus start", "build": "node scripts/patch-gray-matter.js && docusaurus build", + "check-links": "node scripts/check-links.mjs", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", "clear": "docusaurus clear", diff --git a/plugins/copy-md-plugin/index.js b/plugins/copy-md-plugin/index.js deleted file mode 100644 index e0f64fd9..00000000 --- a/plugins/copy-md-plugin/index.js +++ /dev/null @@ -1,51 +0,0 @@ -module.exports = function copyMdPlugin() { - return { - name: 'copy-md-plugin', - injectHtmlTags() { - return { - headTags: [ - { - tagName: 'script', - innerHTML: ` - function copyMarkdown() { - var btn = document.querySelector('button.copy-md'); - if (!btn) return; - var originalText = btn.innerHTML; - var md = document.body.innerText; - navigator.clipboard.writeText(md) - .then(function() { - btn.innerHTML = '✓ Copied!'; - setTimeout(function() { btn.innerHTML = originalText; }, 2000); - }) - .catch(function(err) { - btn.innerHTML = 'Copy failed'; - setTimeout(function() { btn.innerHTML = originalText; }, 2000); - }); - } - document.addEventListener('DOMContentLoaded', function() { - var btn = document.querySelector('button.copy-md'); - var container = document.querySelector('main article') || document.querySelector('main .theme-doc-markdown') || document.querySelector('main'); - if (btn && container) { - container.style.position = 'relative'; - container.appendChild(btn); - } - }); - `, - }, - ], - postBodyTags: [ - { - tagName: 'button', - attributes: { - type: 'button', - class: 'copy-md', - onclick: 'copyMarkdown()', - }, - innerHTML: 'Copy MD', - }, - ], - }; - }, - }; - }; - \ No newline at end of file diff --git a/plugins/llms-txt.js b/plugins/llms-txt.js index 35077036..a706e12f 100644 --- a/plugins/llms-txt.js +++ b/plugins/llms-txt.js @@ -1,38 +1,134 @@ /** - * Generates /llms-full.txt at build time from all /docs/* routes. - * static/llms.txt is the curated hand-maintained index. + * At build time this plugin emits, from the docs source: + * 1. /llms-full.txt — the full text of every doc page (one ingestible corpus + * for LLMs), excluding the auto-generated graphql-reference. + * 2. Raw markdown twins at /index.md so agents can fetch clean markdown + * directly (e.g. https://docs.bitquery.io/docs/x/y/index.md). + * + * static/llms.txt remains the curated, hand-maintained entry-point index. + * + * Routes are resolved against the actual build output (index.html presence) so + * slug overrides and trailing slashes are always correct. */ const fs = require("fs"); const path = require("path"); +function walkDocs(dir, acc = []) { + for (const e of fs.readdirSync(dir, { withFileTypes: true })) { + if (e.name.startsWith("_") || e.name.startsWith(".")) continue; + const full = path.join(dir, e.name); + if (e.isDirectory()) { + if (full.endsWith(`${path.sep}graphql-reference`)) continue; + walkDocs(full, acc); + } else if (/\.mdx?$/.test(e.name)) acc.push(full); + } + return acc; +} + +function parseFM(raw) { + const m = raw.match(/^---\r?\n([\s\S]*?)\r?\n---/); + const body = m ? raw.slice(m[0].length) : raw; + const fm = m ? m[1] : ""; + const g = (k) => fm.match(new RegExp(`^${k}:\\s*["']?(.+?)["']?\\s*$`, "m"))?.[1]; + return { + title: g("title") || body.match(/^#\s+(.+)$/m)?.[1] || null, + description: g("description") || null, + slug: g("slug") || null, + draft: /^\s*draft:\s*true\s*$/m.test(fm), + body, + }; +} + +function candidateRoutes(rel, slug) { + const noExt = rel.replace(/\.mdx?$/, ""); + const segs = noExt.split(path.sep); + const isIndex = /^(index|readme)$/i.test(segs[segs.length - 1]); + const cands = []; + if (slug) { + const s = slug.startsWith("/") ? slug : `/${slug}`; + cands.push(`/docs${s}`.replace(/\/+$/, "") + "/"); + cands.push(s.replace(/\/+$/, "") + "/"); // slug used as-is + } + const base = isIndex ? segs.slice(0, -1) : segs; + cands.push(`/docs/${base.join("/")}`.replace(/\/+$/, "") + "/"); + return [...new Set(cands)]; +} + +// Strip front matter, imports, and JSX component blocks for the text corpus. +function cleanBody(body) { + return body + .replace(/^import\s+.*$/gm, "") + .replace(//g, "") + .replace(/\{\/\*[\s\S]*?\*\/\}/g, "") + .replace(/\n{3,}/g, "\n\n") + .trim(); +} + /** @type {import('@docusaurus/types').PluginModule} */ -module.exports = function llmsTxtPlugin() { +module.exports = function llmsTxtPlugin(context) { return { name: "llms-txt", - async postBuild({ siteConfig, routesPaths, outDir }) { + async postBuild({ siteConfig, outDir }) { const base = siteConfig.url.replace(/\/$/, ""); - const docRoutes = routesPaths - .filter((r) => r.startsWith("/docs/") && !r.includes("*")) - .sort(); + const docsRoot = path.join(context.siteDir, "docs"); + if (!fs.existsSync(docsRoot)) return; - const lines = [ - "# Bitquery Docs — full index", - "", - "> Auto-generated at build time. Curated entry points: /llms.txt", + const sections = []; + let rawWritten = 0; + + for (const filePath of walkDocs(docsRoot)) { + const raw = fs.readFileSync(filePath, "utf8"); + const { title, description, slug, draft, body } = parseFM(raw); + if (draft) continue; + const rel = path.relative(docsRoot, filePath); + + // Resolve the real route by checking which candidate was built. + let route = null; + for (const c of candidateRoutes(rel, slug)) { + if (fs.existsSync(path.join(outDir, c.replace(/^\//, ""), "index.html"))) { + route = c; + break; + } + } + if (!route) continue; + + const url = `${base}${route}`; + + // 1) full-text corpus entry + sections.push( + `## ${title || rel}\nURL: ${url}\n${description ? `\n${description}\n` : ""}\n${cleanBody(body)}\n`, + ); + + // 2) raw markdown twin next to the built index.html + try { + fs.writeFileSync( + path.join(outDir, route.replace(/^\//, ""), "index.md"), + raw, + "utf8", + ); + rawWritten++; + } catch { + /* ignore individual write failures */ + } + } + + sections.sort(); + const header = [ + "# Bitquery Docs — full text", "", - "## All documentation pages", + "> Full text of every documentation page (excludes the auto-generated GraphQL reference).", + "> Curated entry points: /llms.txt", "", - ...docRoutes.map((r) => { - const url = `${base}${r.endsWith("/") ? r : `${r}/`}`; - return `- ${url}`; - }), - ]; - + ].join("\n"); fs.writeFileSync( path.join(outDir, "llms-full.txt"), - `${lines.join("\n")}\n`, + `${header}\n${sections.join("\n---\n\n")}\n`, "utf8", ); + + console.log( + `[llms-txt] wrote llms-full.txt (${sections.length} pages) and ${rawWritten} raw .md twins`, + ); }, }; }; diff --git a/plugins/tech-article-jsonld.js b/plugins/tech-article-jsonld.js index dc2bec90..74377b43 100644 --- a/plugins/tech-article-jsonld.js +++ b/plugins/tech-article-jsonld.js @@ -1,5 +1,5 @@ /** - * Injects TechArticle JSON-LD into each built doc page HTML at postBuild. + * Injects TechArticle + BreadcrumbList JSON-LD into each built doc page at postBuild. */ const fs = require("fs"); const path = require("path"); @@ -33,9 +33,10 @@ function parseFrontmatter(filePath) { if (!title) { title = body.match(/^#\s+(.+)$/m)?.[1]; } + const description = fm.match(/^description:\s*["']?(.+?)["']?\s*$/m)?.[1]; const slug = fm.match(/^slug:\s*(.+)\s*$/m)?.[1]; const draft = /^\s*draft:\s*true\s*$/m.test(fm); - return { title, slug, draft }; + return { title, description, slug, draft }; } function docPermalink(siteDir, filePath) { @@ -45,25 +46,56 @@ function docPermalink(siteDir, filePath) { return null; } if (parsed.slug) { - const slug = parsed.slug.startsWith("/") ? parsed.slug : `/${parsed.slug}`; - return slug.endsWith("/") ? slug : `${slug}/`; + // Doc slugs are relative to the /docs route base. A leading-slash slug like + // "/migration/" maps to "/docs/migration/", not "/migration/". + const s = parsed.slug.startsWith("/") ? parsed.slug : `/${parsed.slug}`; + const full = `/docs${s}`.replace(/\/+$/, "") + "/"; + return full; } - const withoutExt = rel.replace(/\.(md|mdx)$/, ""); + const withoutExt = rel.replace(/\.(md|mdx)$/, "").replace(/\/(index|README)$/i, ""); return `/docs/${withoutExt}/`; } -function gitLastUpdated(siteDir, filePath) { +function gitDate(siteDir, filePath, first) { try { - const iso = execSync(`git log -1 --format=%cI -- "${filePath}"`, { - cwd: siteDir, - encoding: "utf8", - }).trim(); + const flag = first ? "--diff-filter=A --follow" : ""; + const iso = execSync( + `git log -1 ${flag} --format=%cI -- "${filePath}"`, + { cwd: siteDir, encoding: "utf8" }, + ).trim(); return iso ? iso.split("T")[0] : undefined; } catch { return undefined; } } +function humanize(seg) { + return seg + .replace(/[-_]+/g, " ") + .replace(/\b\w/g, (c) => c.toUpperCase()); +} + +function breadcrumb(base, permalink, title) { + const parts = permalink.split("/").filter(Boolean); // e.g. ["docs","blockchain","Solana","x"] + const items = []; + let acc = ""; + parts.forEach((seg, i) => { + acc += `/${seg}`; + const isLast = i === parts.length - 1; + items.push({ + "@type": "ListItem", + position: i + 1, + name: isLast ? title || humanize(seg) : seg === "docs" ? "Docs" : humanize(seg), + item: `${base}${acc}/`, + }); + }); + return { + "@context": "https://schema.org", + "@type": "BreadcrumbList", + itemListElement: items, + }; +} + /** @type {import('@docusaurus/types').PluginModule} */ module.exports = function techArticleJsonLdPlugin(context) { return { @@ -91,13 +123,16 @@ module.exports = function techArticleJsonLdPlugin(context) { continue; } - const { title } = parseFrontmatter(filePath); - const dateModified = gitLastUpdated(context.siteDir, filePath); + const { title, description } = parseFrontmatter(filePath); + const dateModified = gitDate(context.siteDir, filePath, false); + const datePublished = gitDate(context.siteDir, filePath, true); - const jsonLd = { + const techArticle = { "@context": "https://schema.org", "@type": "TechArticle", headline: title, + ...(description ? { description } : {}), + ...(datePublished ? { datePublished } : {}), ...(dateModified ? { dateModified } : {}), author: { "@type": "Organization", name: "Bitquery" }, publisher: { "@type": "Organization", name: "Bitquery" }, @@ -107,7 +142,12 @@ module.exports = function techArticleJsonLdPlugin(context) { }, }; - const tag = ``; + const crumbs = breadcrumb(base, permalink, title); + + const tag = + `` + + ``; + let html = fs.readFileSync(htmlPath, "utf8"); if (html.includes('"@type":"TechArticle"')) { continue; diff --git a/scripts/check-links.mjs b/scripts/check-links.mjs new file mode 100644 index 00000000..615e002e --- /dev/null +++ b/scripts/check-links.mjs @@ -0,0 +1,193 @@ +#!/usr/bin/env node +/** + * Internal link checker for the Bitquery docs (WP-0.13). + * + * Design principle (learned the hard way): validate links against the routes + * Docusaurus ACTUALLY emits, never against raw source file paths. Source-path + * resolution produces false positives because of `slug:` front matter, + * generated-index category pages, and extensionless relative links that resolve + * in URL space (against the page's route + trailing slash), not on disk. + * + * Route source of truth: + * 1. If `build/` exists, the route set is every directory under build/ that + * contains an index.html (plus any *.html). This is authoritative — it + * includes /docs/category/* pages, slug overrides, everything. CI runs + * `yarn build` first, so CI always gets this strict mode. + * 2. If `build/` is absent, fall back to slug-aware source resolution and + * DOWNGRADE unresolved-route errors to warnings (so a local run without a + * build never fails spuriously). Dead URL schemes are always errors. + * + * Usage: + * node scripts/check-links.mjs # check; exit 1 on errors + * node scripts/check-links.mjs --report # also print orphans / thin pages / etc. + */ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.resolve(__dirname, ".."); +const DOCS = path.join(ROOT, "docs"); +const BUILD = path.join(ROOT, "build"); +const REPORT = process.argv.includes("--report"); + +const norm = (r) => { + let s = r.split("#")[0].split("?")[0].toLowerCase(); + if (s.length > 1) s = s.replace(/\/+$/, ""); + return s; +}; + +// ---- collect markdown files ------------------------------------------------ +function walk(dir, acc = []) { + for (const e of fs.readdirSync(dir, { withFileTypes: true })) { + if (e.name.startsWith("_") || e.name.startsWith(".")) continue; + const full = path.join(dir, e.name); + if (e.isDirectory()) { + if (full === path.join(DOCS, "graphql-reference")) continue; // auto-generated + walk(full, acc); + } else if (/\.mdx?$/.test(e.name)) acc.push(full); + } + return acc; +} +const files = walk(DOCS); + +function parseFrontMatter(src) { + const m = src.match(/^---\r?\n([\s\S]*?)\r?\n---/); + const fm = {}; + if (m) { + for (const line of m[1].split(/\r?\n/)) { + const kv = line.match(/^([A-Za-z_][\w-]*):\s*(.*)$/); + if (kv) fm[kv[1]] = kv[2].replace(/^["']|["']$/g, "").trim(); + } + } + return { fm, body: m ? src.slice(m[0].length) : src }; +} + +// slug-aware source route (fallback mode + inbound/outbound reporting) +function sourceRoute(rel, fm) { + const segs = rel.replace(/\.mdx?$/, "").split("/"); + const isIndex = /^(index|readme)$/i.test(segs[segs.length - 1]); + if (fm.slug) { + const s = fm.slug.trim(); + if (s.startsWith("/")) return norm("/docs" + s); + segs.pop(); + return norm("/docs/" + segs.concat(s.replace(/^\.\//, "")).join("/")); + } + if (fm.id) { + segs.pop(); + return norm("/docs/" + segs.concat(fm.id).join("/")); + } + if (isIndex) segs.pop(); + return norm("/docs/" + segs.join("/")); +} + +const pages = files.map((f) => { + const rel = path.relative(DOCS, f).split(path.sep).join("/"); + const src = fs.readFileSync(f, "utf8"); + const { fm, body } = parseFrontMatter(src); + return { f, rel, fm, body, route: sourceRoute(rel, fm), draft: /^true$/i.test(fm.draft || "") }; +}); + +// ---- build the authoritative route set ------------------------------------- +let routeSet = new Set(); +let strict = false; +if (fs.existsSync(BUILD)) { + strict = true; + (function walkBuild(dir) { + for (const e of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, e.name); + if (e.isDirectory()) walkBuild(full); + else if (e.name === "index.html") { + routeSet.add(norm("/" + path.relative(BUILD, dir).split(path.sep).join("/"))); + } else if (e.name.endsWith(".html")) { + routeSet.add(norm("/" + path.relative(BUILD, full).split(path.sep).join("/").replace(/\.html$/, ""))); + } + } + })(BUILD); +} else { + for (const p of pages) if (!p.draft) routeSet.add(p.route); + // best-effort generated-index category routes from sidebars.js + try { + const sb = fs.readFileSync(path.join(ROOT, "sidebars.js"), "utf8"); + for (const m of sb.matchAll(/label:\s*["']([^"']+)["']/g)) { + routeSet.add(norm("/docs/category/" + m[1].toLowerCase().replace(/[^a-z0-9]+/g, "-"))); + } + } catch {} +} + +// ---- strip code, extract links --------------------------------------------- +function stripCode(body) { + return body.replace(/```[\s\S]*?```/g, "").replace(/`[^`]*`/g, ""); +} +const LINK_RE = /\]\(\s*(<[^>]+>|[^)\s]+)/g; + +const errors = []; +const warns = []; +const inbound = new Map(); // route -> count +const outbound = new Map(); // rel -> count +const badScheme = /^(ttps|hhttps|htps|htp|ttp|hhtp):\/\//i; + +for (const p of pages) { + const clean = stripCode(p.body); + let outCount = 0; + for (const m of clean.matchAll(LINK_RE)) { + let target = m[1].replace(/^<|>$/g, "").trim(); + if (!target) continue; + const bare = target.split("#")[0].split("?")[0]; + + if (badScheme.test(target)) { errors.push(`${p.rel}: dead URL scheme → ${target}`); continue; } + if (/^http:\/\/ide\.bitquery\.io/i.test(target)) { warns.push(`${p.rel}: insecure http:// IDE link → ${target}`); continue; } + if (/^https?:\/\/docs\.bitquery\.io\/docs/i.test(target)) { + warns.push(`${p.rel}: absolute self-link (use root-relative) → ${target}`); + continue; + } + if (/^[a-z]+:/i.test(target)) continue; // external / mailto / tel + if (!bare) continue; // pure anchor + + if (target.startsWith("/")) { + if (!/^\/docs(\/|$)/i.test(bare)) continue; // static asset (/img, /fonts, /llms.txt…) + const r = norm(bare); + if (routeSet.has(r)) { outCount++; inbound.set(r, (inbound.get(r) || 0) + 1); } + else if (strict) errors.push(`${p.rel}: broken /docs link → ${target}`); + else warns.push(`${p.rel}: unresolved /docs link (no build/, lenient) → ${target}`); + continue; + } + + // relative + if (/\.mdx?$/.test(bare)) { + const abs = path.resolve(path.dirname(p.f), bare); + if (fs.existsSync(abs)) outCount++; + else errors.push(`${p.rel}: broken relative file link → ${target}`); + continue; + } + if (/\.[a-z0-9]{2,5}$/i.test(bare)) continue; // relative asset (image etc.) — skipped + // extensionless relative → resolve in URL space against the page's route + const resolved = norm(new URL(bare, "https://x" + p.route + "/").pathname); + if (routeSet.has(resolved)) { outCount++; inbound.set(resolved, (inbound.get(resolved) || 0) + 1); } + else if (strict) errors.push(`${p.rel}: broken relative link → ${target} (resolves to ${resolved})`); + else warns.push(`${p.rel}: unresolved relative link (no build/, lenient) → ${target}`); + } + outbound.set(p.rel, outCount); +} + +// ---- output ---------------------------------------------------------------- +console.log(`check-links: ${pages.length} pages · route set ${routeSet.size} (${strict ? "strict: build/" : "lenient: source-only, run `yarn build` for strict"})`); +if (warns.length) { console.log(`\n⚠️ ${warns.length} warning(s):`); warns.slice(0, 100).forEach((w) => console.log(" " + w)); } +if (errors.length) { console.log(`\n❌ ${errors.length} error(s):`); errors.forEach((e) => console.log(" " + e)); } +else console.log("\n✓ no link errors"); + +if (REPORT) { + const zeroIn = pages.filter((p) => !p.draft && !inbound.get(p.route)); + const zeroOut = pages.filter((p) => !outbound.get(p.rel)); + const thin = pages + .map((p) => ({ rel: p.rel, w: (stripCode(p.body).replace(/[#>*`\[\]()|_-]/g, " ").match(/\S+/g) || []).length })) + .filter((p) => p.w < 120) + .sort((a, b) => a.w - b.w); + const noLangFences = pages.filter((p) => [...p.body.matchAll(/```([^\n]*)\n/g)].some((m) => !m[1].trim())).length; + const noAltImgs = pages.reduce((n, p) => n + [...stripCode(p.body).matchAll(/!\[(\s*)\]\(/g)].length, 0); + console.log(`\n--- report ---`); + console.log(`zero inbound: ${zeroIn.length} · zero outbound: ${zeroOut.length} · thin(<120w): ${thin.length} · pages w/ unlabeled fences: ${noLangFences} · images w/o alt: ${noAltImgs}`); + console.log(`thin (worst 15): ${thin.slice(0, 15).map((t) => `${t.rel}(${t.w})`).join(", ")}`); +} + +process.exit(errors.length ? 1 : 0); diff --git a/sidebars.js b/sidebars.js index c4cf84b1..4d23944a 100644 --- a/sidebars.js +++ b/sidebars.js @@ -5,6 +5,7 @@ const sidebars = { tutorialSidebar: [ "intro", "api-comparison", + "chinese", { type: "category", label: "Start", @@ -66,6 +67,36 @@ const sidebars = { ], }, + { + type: "category", + label: "Plans, Points & Limits", + link: { + type: "generated-index", + title: "Plans, Points & Limits", + description: + "How Bitquery bills — points, streams, rate limits, and plan entitlements.", + }, + items: ["plans/how-billing-works", "plans/rate-limits"], + }, + + { + type: "category", + label: "Migrating to Bitquery", + link: { + type: "generated-index", + title: "Migrating to Bitquery", + description: + "Move to Bitquery from Moralis, Alchemy, Helius, Yellowstone gRPC, or GoldSky subgraphs.", + }, + items: [ + "migration/from-moralis", + "migration/from-alchemy", + "migration/from-helius", + "migration/from-yellowstone", + "migration/from-goldsky", + ], + }, + { type: "category", label: "Building Queries", @@ -75,6 +106,7 @@ const sidebars = { description: "Learn how to build powerful queries", }, items: [ + "graphql/data-coverage-retention", { type: "category", label: "Capabilities", @@ -112,6 +144,7 @@ const sidebars = { link: { type: "generated-index", title: "Dataset Overview", + description: "Choose between realtime, archive, and combined datasets for Bitquery GraphQL queries.", }, items: [ "graphql/dataset/archive", @@ -121,6 +154,7 @@ const sidebars = { "graphql/dataset/options", "graphql/dataset/realtime", "graphql/dataset/select-blocks", + "graphql/dataset/EAP", ], }, { @@ -193,6 +227,7 @@ const sidebars = { link: { type: "generated-index", title: "Streaming via Subscriptions", + description: "Stream real-time blockchain data over GraphQL WebSocket subscriptions.", }, items: [ "subscriptions/subscription", @@ -228,9 +263,11 @@ const sidebars = { link: { type: "generated-index", title: "Data Streams Overview", + description: "Real-time blockchain data via Kafka, WebSocket, and gRPC streams.", }, items: [ "streams/kafka-streaming-concepts", + "streams/kafka-operations", { type: "category", label: "Multi-chain and Chain-Specific Data Streams", @@ -326,6 +363,7 @@ const sidebars = { link: { type: "generated-index", title: "Understanding Cubes Overview", + description: "How Bitquery cubes model blockchain data for GraphQL queries.", }, items: [ { @@ -334,6 +372,7 @@ const sidebars = { link: { type: "generated-index", title: "EVM Cube Overview", + description: "Cubes for querying EVM chains — trades, transfers, balances, holders, calls, and events.", }, items: [ "cubes/EVM", @@ -378,7 +417,11 @@ const sidebars = { { type: "category", label: "Token Transfers", - items: ["blockchain/Ethereum/transfers/erc20-token-transfer-api"], + items: [ + "blockchain/Ethereum/transfers/erc20-token-transfer-api", + "blockchain/Ethereum/transfers/ico-token-ownership-transfer", + "blockchain/Ethereum/transfers/nft-token-transfer-api", + ], }, { type: "category", @@ -421,6 +464,7 @@ const sidebars = { link: { type: "generated-index", title: "DEX Trades", + description: "Query and stream DEX trades across chains with the Bitquery GraphQL API.", }, items: [ { @@ -605,6 +649,7 @@ const sidebars = { "blockchain/Solana/byreal-api", "blockchain/Solana/bags-fm-api", "blockchain/Solana/solana-balance-updates", + "blockchain/Solana/solana-instruction-balance-updates", "blockchain/Solana/solana-token-holders", "blockchain/Solana/solana-dextrades", "blockchain/Solana/solana-token-marketcap-api", @@ -827,6 +872,7 @@ const sidebars = { link: { type: "generated-index", title: "Cross-Chain API", + description: "Query blockchain data across multiple chains in a single Bitquery API.", }, items: ["examples/cross-chain/cross-chain-api"], }, @@ -940,6 +986,7 @@ const sidebars = { items: [ "trading/crypto-trades-api/trades-api", "trading/crypto-trades-api/traders-api", + "trading/crypto-trades-api/wallet-pnl", ], }, ], @@ -982,6 +1029,7 @@ const sidebars = { }, items: [ "examples/polymarket-api/polymarket-api", + "examples/polymarket-api/polymarket-wallet-api", "examples/polymarket-api/polymarket-wallet-realized-pnl", "examples/polymarket-api/polymarket-advanced-analytics-api", "examples/polymarket-api/polymarket-markets-api", @@ -1000,6 +1048,7 @@ const sidebars = { link: { type: "generated-index", title: "Stablecoin APIs", + description: "Track stablecoin transfers, supply, and holders across chains.", }, items: [ "stablecoin-APIs/stablecoin-price-api", @@ -1068,6 +1117,7 @@ const sidebars = { link: { type: "generated-index", title: "How-To Guides Overview", + description: "Step-by-step recipes for building with the Bitquery blockchain data API.", }, items: [ { @@ -1076,6 +1126,7 @@ const sidebars = { link: { type: "generated-index", title: "NFT and Analytics", + description: "Query NFT trades, transfers, and metadata across chains.", }, items: [ { @@ -1090,6 +1141,7 @@ const sidebars = { }, "usecases/nft-analytics", "usecases/nft-scanner", + "usecases/wallet-provenance", "usecases/tokenholder-heatmap", ], }, @@ -1099,6 +1151,7 @@ const sidebars = { link: { type: "generated-index", title: "Detecting Wash Trades on Solana", + description: "Build a Solana wash-trading detector with Bitquery DEX data.", }, items: [ "usecases/wash-trading-detector/overview", @@ -1121,6 +1174,7 @@ const sidebars = { link: { type: "generated-index", title: "TradingView Charting", + description: "Build TradingView charts with real-time Bitquery price data.", }, items: [ // { @@ -1144,8 +1198,10 @@ const sidebars = { "usecases/tradingview-subscription-realtime/custom_datafeed", "usecases/tradingview-subscription-realtime/widget", "usecases/tradingview-subscription-realtime/final-step", + "usecases/tradingview-subscription-realtime/bar-continuity", ], }, + "usecases/tradingview/tradingview", "usecases/trading-indicators", ], }, @@ -1155,6 +1211,7 @@ const sidebars = { link: { type: "generated-index", title: "Building Applications Using Kafka", + description: "Consume Bitquery Kafka streams to build real-time blockchain apps.", }, items: [ "usecases/binance-exchange-wallet-monitoring", @@ -1168,6 +1225,7 @@ const sidebars = { link: { type: "generated-index", title: "Blockchain Monitoring", + description: "Monitor wallets, tokens, and transactions in real time with Bitquery.", }, items: [ "usecases/ohlcv-complete-guide", @@ -1202,6 +1260,7 @@ const sidebars = { link: { type: "generated-index", title: "Apps and Dashboards", + description: "Build analytics apps and dashboards on Bitquery blockchain data.", }, items: [ "usecases/crypto-dashboard", @@ -1218,6 +1277,7 @@ const sidebars = { link: { type: "generated-index", title: "Bot Building", + description: "Build trading and monitoring bots with the Bitquery API and streams.", }, items: [ "usecases/polymarket-tg-alerts-bot", @@ -1255,6 +1315,7 @@ const sidebars = { link: { type: "generated-index", title: "Cloud Examples", + description: "Work with Bitquery cloud datasets (Parquet/S3) for historical blockchain data.", }, items: [ "cloud/examples/appsync", @@ -1281,6 +1342,7 @@ const sidebars = { link: { type: "generated-index", title: "API Blog", + description: "Guides and updates on using the Bitquery blockchain data API.", }, items: [ "API-Blog/migrate-v1-v2", @@ -1291,6 +1353,17 @@ const sidebars = { "API-Blog/polymarket-api-vs-bitquery-polymarket-api", ], }, + { + type: "category", + label: "Glossary", + link: { + type: "generated-index", + title: "Glossary", + description: + "Definitions of EVM and Solana terms used across the Bitquery docs.", + }, + items: ["glossary/EVM", "glossary/solana"], + }, ], }; diff --git a/static/_headers b/static/_headers deleted file mode 100644 index 041bac50..00000000 --- a/static/_headers +++ /dev/null @@ -1,11 +0,0 @@ -/* - Strict-Transport-Security: max-age=31536000; includeSubDomains; preload - -/fonts/* - Cache-Control: public, max-age=31536000, immutable - -/assets/* - Cache-Control: public, max-age=31536000, immutable - -/img/* - Cache-Control: public, max-age=604800, stale-while-revalidate=86400 diff --git a/static/_redirects b/static/_redirects deleted file mode 100644 index c9acaba4..00000000 --- a/static/_redirects +++ /dev/null @@ -1,11 +0,0 @@ -# Blog moved to main site (docs blog disabled) -/blog/* https://bitquery.io/blog/:splat 301 - -# Legacy MCP path → canonical MCP docs (HTTPS, trailing slash) -/docs/usecases/MCP /docs/mcp/mcp-server/ 301 -/docs/usecases/MCP/ /docs/mcp/mcp-server/ 301 - -# Canonicalize PumpFun → Pumpfun URL casing (case-sensitive hosts / SEO) -/docs/blockchain/Solana/PumpFun /docs/blockchain/Solana/Pumpfun/ 301 -/docs/blockchain/Solana/PumpFun/ /docs/blockchain/Solana/Pumpfun/ 301 -/docs/blockchain/Solana/PumpFun/* /docs/blockchain/Solana/Pumpfun/:splat 301 diff --git a/static/img/apple-touch-icon.png b/static/img/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..804a86224272dd6bca23b1ad21035121e6485d49 GIT binary patch literal 17446 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 literal 0 HcmV?d00001 diff --git a/static/img/favicon.ico b/static/img/favicon.ico index 8416fcbce9ba8657814018a76d27f7badb7328e2..18cfdaec06d944686f359c390789a52d4ecefb67 100644 GIT binary patch literal 15748 zcmbVzi8qw*`~N+QF_>X&k##I(&)BjvmQaLJQCTLGtq^5j9=j|VOGsslRD`rCVWP5C zq(!6*SyI-KWf=S(@6S2EKj6!8%sIyW%(Y+F>vi1#AmHzvF9aY0e?tIv!LP5_+gjo| zML6M?_=8sFM|b|Z^Ml2}znp{ao&&&8>!7*Gv9O`pTcJ+Jyk5`_&&}=aJ@>u&biYkuuYs1UN=|0pyxpy9^L z)lJ(oA8;C^iJLxA^GhrVo54+`))D5<;14*%h`utj6mD_7OTYhbFN8I#+mVqqMbjf5 zU89E$CkrP3IbD8O)A6ECN&W{;@5d!Rq2v`OaY5Gi%H8^MA5>KXUxCK+jUoMKe?4({ z*SqYff+@sM=}$W*HATgFiu1*1kbj!S z9PsFSe{Lbbc>d#jf%?g)5w+OXB0=t^Lto=V`?&+ZH;KOFo?+X*%}$ivkT;j;jbC#} zsvk2|kag8XtVyy_2vp9=UV$5v+tj@ke1q|8(vrm13bp#B-T(A)w1AB+gJQ`V<%NaB zw|?375g~it88zUYSLfOY^_{D;n5=O_64PGY#@ZMi%=m<` zeFmGyTbBXVwD<@9b;26>r^e@>UZfsr!Q82=S3*bvHk2s9%=Joatj4d#Mbjh0jL~Ps zlAp5;D~#fF_vF1AQWCVm{Z@E&hbfwqWnSS`jT``1=CucZkkle@p$+UtBp z`KrE4PFY?W?YiaE7-fWT|MZN+X!1kT64)nJk9qJced0Ud%UE=wQlW zxaZscam=sFo(Kj8AD8*T9tWh`vGSIzGvNGdE#i+?Y_{+JB~AVzc~@s92FxkPuUA`B z+&=0p7}oO-ug-py0X3|muwUIIg+14wKi4r_!X^rOlByCb$MXWSZ}QpF*6WnK3Fp&& z{SCu%lW7*Hg*_M`19)S1Bc|sY$#2dbvTti5pXpzpQ@NBl@O>fQS{*Pq`LsX}jIWHRINfs$9oermxgNitdFumL1A zeX)(AGfqcO8@dn!sABi6O|N4g8>K>)&xG2vwa4f`D=X`bLS@3{NAN-XNOECb8-~&^ z#myK<`9`EZk&^u@pD1|WmZQ4Sp-nI1Q2n`DqETnCCUU<3KwIQ!(K8pRSE?Y*4D$6X zZO!4ED3#?iv%FzJhTNy>-kOCleX+VP6Lj%mvNt54E@Wq>d7I~?97kKsqz?*KkCG~W zvf!>QhaYTB5h+z-WpDto{}c4&gQGAoPnPE;@)GS(>LlPPXf;296w1ettuF|h`5i_Z zycBOYr*}PZT3a7hcglHq{rU8ilnKC^$K<0FuS!tjNh-61cb&SJ(F51(7tn@#oTSFt zZez!_HIXND+DRZ4cSM>jO=rqEqaySkA_4>BX6$~9hWL^mk13Q+Ag+*gEQlf!Zs`dD zBqYAz*O}PGQ-wJVq5@t0?9edTQx}U!HSQ3=nG!Kl!UGsa`O#wsxq}Z`5sLYA?iQYl zeJIa9eb^3lLJS&hl?3h7kFmm7(LybnpbR~&8d4I-T1|Yh^r*D*sySuf<6|kW+E2?O zA1;jhDjQhX-Z}&^?|mP#Lmp)(LR>(XgK&pbLCgCrup*}}m_RPxPrZ@O`!A2;=v^cRf6Mb1*!%mGlixoVr7&I@ z(tWOgiUvfXB3g!Qi*axmEHT+_S*R^Ewab%y%!hk*rJQ~RC3yVM)|DFbtrQEI2y!6> zf!>XrqqEuoFy6T2i$ z=q;T3G5}%(J0d&(SIpwz_a&cC{RC+)-cXepO>QMnp_Is7p##T>yX{8 zBodlk=Z&r*0r9V(IMikIs3}y$!W|DTojvCn2_)QHv3Assf?aLXxjj;P7xcpxdF$f< z+5>d*ClR*BcM4ev+rXQr$!ijS`Jk1Bp(DZootW`Pi_-j7gf_y{$$Te1cZbc) z53jmC6Efugp&gX26%1mjz`$g#Br{<)T$Hv=s73A<28=iIQiB~tO*z3y@m}{9uDE2f z=BdUy(rsSSRO#=;6_BxubhJZ+R)_2mZ!Vo<*(`%$k0S>lJWXbN@r|%|b3K96+Ocie zqlwmoL6M6k7O4EMSUF|t&ZV}D$ZfhaQ@$@7=n#lz}5Xz^+Kg#t! z^z(#QqqQ_4jyKhZhju$XQ8+B#xy~6^{Ybmrb5fRa13{Dw*jp7h7(QLUU~bfWQvRnN zDZ_#mj}Tr;iJQ%c-Qsepx`3xk;#WcvM4OOh%PlWhDxqF#kAL7g9LO1`fP@PTOU#_w z)%LJlixB0hT8n-v3M3eM>fv3fQHvacgR*l{CH>gKGxkC8xFeizrlbPc{+vRs9WSLT zv3<@T zgx9L_I1~CaqA(&%(t^_Z9s}*cPYQaOwCP3!(99dCBOig4j=Zi(vV8b-hYu<4G)fai zl_D;=I5svYLU@SGn*5%49jBr_>5krY2}_f~(L5?<&ufaQ9)waqyO6rxqDWj)bt0;@ z%H>LNKC+y#S2)D8+1cbe2@^UhjI3Yfgtre6yI%wbCJpya1gb{s@goj1cl&2!-yJzX zCV=EeTy&10YH9ATX9Fw|ja2Bj#Z*u;Nd#fbBt}@Heb}M<+7j$8-!ArtD4UnaHQo`{=%J+$MipPh&g%OvG z*9HT@5 zD-+#!oLph@kVD;k`mR}2hw=S|@FT5SP^%dQkQEPf}js#j}`nl$n_!ib1a_j7^fbp zde@l0tr&T!s}~KnZ`FBG&~5s7T6?Z?meQoj1twC5`fQi!(Ofm8!hTT@6ilii<;Eov zS3D6Lr}L*fGB5L5+aaWJhYnMv4#|o4FOBI3pTWkSZ7lYKPU}wztu^HMH8WD~wp*5_ z1B05>L`$phSFG;JyJFOKH!W&XHW0*B43@W1L|MMaqb2|R1e*v7@5{?B0VS%3WeuB{S}U?hVSRKPFGG z-+X~n0}&}zg=9SO92d>#^1^*{d-iiSp+3GCX(J|31SiX)@}}Q3!GkmPn8wS8BJ8x~ zMJ5nDhwhm5WbPaHLK5DYmoBrMo8fG9%!sF`M_TF`WsiBqd;;{@Y=swc7aUKP3NQ1H z@!?*&XU4F7m80>-M&N|2e1cX%chjeXaW|0>{h*K}uL=iSo4H5bsW8t{& z>DpY+6muUg2)wMLEs7%Ca|GC|Lo#%!qbD2D zW9p%g=Sz_ z0HbiZs}|3gPinPsH09&LU3^H4!JgM@0wz&s)q+O#U!8|^0E-U~&bvNLkpoh}h=r%D1%3VW;QN$x4pFyfd zMyeC5e}(bTZY1r| z7&11C_PZe7z#C-XAfs}w#W7;+IXBKAEd}uIw#jv|Iazk{Qssv%)*l9Y!_6~3M&hq6 zXsLk2+u2dl`Fz;Ps`Kajo5*+{@Qx2`Y1T8`pFgz2^Z5Xra9#l%4C|e>>45hu-1y61 zrz4)ciHir9q_%hCZ9UM6YRHM;3{JAB5M&wts7z0rFXxdqZKkH3piC{nkcU7`qy5({ zy@t4|IKJ^IO<;j3Rr=WM)|V;l2V(hj^gpqS^xFPqbk-e?$-mckOc#Hu$4gWkdTM~f z_UGse9SY8GE1&VqAS>db>qwd<<=Pp^i?ySz`!cRdBpl`UOzkHOYAu>dyYA-p;jS%5 z6PuptJCFQke=qbeZ~JkYMPBQ}oXTkdi_-HU8#kb23?wCFM%5SfpEQ4!KXZYkaia#M z2_`vd-RWm%@TQw5;wMkzQfEA2|o>2UOVChj%%o%$a%4UQqy0?BKa=6IsXi511vceZhaIM$8_LBsq`Z=$gWv)qVd zu+JX_QF>=`cAaQ7I&pKSd)3h$u_@JnWYg_IG4^DkaqTk8@A4&zf&yja-k570PT z`^-uETjJd8j|R+~KJaFcMRrt3p5v&QW;vupQmeedKjFN5;u0^Kl7pbCVg=Qg->7Du zLN#0(rE@bk1p>7PC5w75x6FqU+z!WF<;);Y<8o1C@17zym6MOk4E#7=Psy5j`~P=t z{fi|m)lGIChleB*_;w6q4;yA8rZ(pAwidZ*ZO+$o31BICUJD;$P@4rvT5p$|A*^g$V;s-q()1WI-zgu!^Yct0b$R*Kk=`1;P9)I8i z`RgB|xM`okV|Q>$*UP2@sfimVmLVA0W>9e_Y>;PM)r z5)Rg#6_l5lM10wem|5J;^I>S`Kh%_*k|vr0EYByivb`Sr#6FzjT4G$Kp!gpat+z*w zy_FXeCdY^wG_fPdzM`vghzzpzDfyf4Qd7=8?;B7M9z(Agh==g|~9jXEgo=e*Ixgl0p zHcT8UM=fJ6FtiD2YRCf)Wm>UMy%7{?svb(j!OPU-98$Sk|Mg9bH>ltO<*#!gTv>dm zmb@a|M`d1f=@j5*Oj%9(KsVM9^b>JGLUwmmuq68!<68_3fy2pn+7yK2PL{KkYF#6t zhOQ>ju03X}m+}(ghjcZ;Q8s!&XU7#ykjzG;Sq&b?9rsu-X-$j{IQR&&;EY`|`H26% zdUA17FSXacvp?~S&-)t+zTi~WL*B5!^W0)RhZ66yJcQ$HM8G0y0pEWEL(VeE=4gQS zA^WcXcDPL58vHZx_Mi}8crSS94i9Ct6|0YTjyz}K*>Z(NmNo~mslw2%isj!pZwtjw z?q?48tG_dup6UmwyP^H#;&6L|B)zd3yeu{G9}-|0Mn3#PG7?FmjLge#SA;M{8QBH~ zF5^rSKYw{qL^iT7D35@AU>QF;_mK3hpn3PC;GHvQxRu}}qZn`?N+jg$#Gb$)>N4Sc zvKDj`ZOa~3_H7F@zft5EZ4qS~lkA*9u2r?5B>zTu>$X{xE?UV8RH-JcvCM?yltsWN zR3J}y_KuJ{8PMncOrlTh3Au${v&u*jVwC1ui@vkVpWB=e?|;S|k1#X4s;xO`lbnB( z@DW7|)Db?#W0z9hA$=zJ!#)cZNd!0`138!hB7hf3Nu4P|Uo@Vweu-JAg4z(AcMma= z?gV*EtbSCCHQWD+OXQK9NpMI#8bOy1^w#?pe3=H?*U>E*%0x?KSKYrP*M!9qj{O+H^am0hjzBbs=_F(74i%}bo_M03#f=Rr+rU@e0DGJ$e#mh3e z2P;k?c}B72m<;Ctbc}xhIv-7RBlbITKikiwb5e#|>Re*%@^P}a=xpz=f0E@QTXPnx zb7M??y&}jTbU|8kajWr`BKnlzQVb%v)2!hU>zDbwd}RGDQ@8c*yIREW*iJ=z^+O0P z%OeZ!9xKuF+^}s~Axy(kqf9!-``vLlY^4)K>%Vct#uy#s)2W$6s|HT7UO2CaL$T6k zJMIFhHT;d=yhEIRJz&6b^Ll*4q))b6Z**%gGy53Z7~=4>!yY`D3sbsG)4Z!sLN)X| znw&qP$d3>K4-mw8@X~fdTN>Qzk~mM45<&lci1AG42)AB9!JXP?E|K(%k=5gj$V++K z!aNql3uzT_q}Ll`i?V|)%g?yDsz-9d;^D}97}l`%;r70hQ0dgbbzO>*pRYwceTalS z;MQ5@o5iEKtFU37>&*al`|iz&RAkXn6bY2UvL(SPV`$#h)8RU*u1)^8h%0o=u}1aT zzFB!3VB7zzwIu-wN5N5>!QHM$<;E*jzn5SNxq^)86;14)&lbLzU)phA{^7E%daB$#I_I_P5Vfjm{Y=Kma4DtcrfXxAKV1p;8UTNUsm>|ZwE(on~nZX*q z89EWTXDA&H9o%T)X7V&W5(`Svt603NilHP|AiUo?kc0a*y$^CGin6y;96xZUO8*5i zG0*TcZTVO?5rD#+-I3b0p|zr9=0)NA8pKtq%=5J%LGB=DHUaxv<8NFy4-c+pDWV-W zuQCQI8`U%=u4gcMsRr=Czj8R~MFpkvunQtR-QhX*QV(z@Gq-P`p{u-zLaFi@jh(C{ z()ATQ_a`Bz5)2!wTkmbO>}UQMnyAya3QT(2o@>t{bfNlQsuE-f*!PjBQTIav=ik}= zsYQH){t`aI8>9UA;swz$GY=)Mw*YzX<8I%p&EWg#ehIv*;vjd0B0 ztnH(YW%j37NkHfJ0hP!*ZJQPLIzs2H5UsFXBR>UEf&QHf;Q0)KNM4-V>J!NC} zQks+>uut^ShMW)19`k{s%%K~d-<-n%3GXts|0_J&_R z^`!!7-seGy7uXIgM6(ZU*J~MfNuUDR-ozGTXsK|mfwRfAnWA@a&2Opk!&5DyiqAWv z6vYJXLyr|jyEU}3HQ~or|f}=AVr^ZLxd*;zkgrOmqt7`-PeK*y=)F8Zn z9>hWxtZ>D%QZ*`YPDY4w!)bw@@I@26#s7!?D4gZ_WUAAU5-vi)!2Z!WFO$;r_afdZ z*MDRxi#0Uv^-Y&|yI9GB*ax2`J%fcN#kT_e=9R5J{KTYp2dg33o{B(*ov~7eCt#~e z0s$w5Ah^eekkJ3#3FLJWEVitV#oWdu?fs2|oEjcEvd;J>N~Le9=P*<2Kll4F zmJM_@D-OM!|C7SkUxdwPhQvxJnN=2)A_vvO(~m269vPQG2{wh z1<%sFVoR=*Zk*~_YphHf*DGPjgKuUd^0FlJNtatwW~Ewq!y9B@BCNPS>|gZbi83m@ z`T1wtO$B~-qZV4_H?0&~uOztd6lvj)O*w|9JbX<~s37xXG(96Ld^P$9BP(U-!LKs^ zCJjwV++%xijMsbk50BT1WqWeD*(`5;KM*^xSW<}~UHoqjJ*2W>00WPb)o1aY*#tf) z*EUGt$IFeF*{d9X7y)M|>VB9Cr&L2#2T*;FuT_Sps}2upp}5aoNLouX$bi1E(K*x! zWejUU5S_KKp7wM1lA8qg!2n%r#pZLM+oHQ{|MlFFj18mM@qxV7kR_eF-~V9Wv)?&o z01lsK6=FXJ+(Pb2$*2A4*K~Sq6`%#D50;Q96r}i2AwhjdMzID<&hP_o^0oJpYvJKT zf=y!El>18)+A&6BZezzcG`U4q!!A~V9t?CwBbo9@)%k~pP{`Em+3~E2@n;k;SGE?w z%XB=#e1j(^rZ!lHNb8?z0gQoaH&GepM>k=p&2GZ}$zUct+pKPKGXloG>FlyYjJuMl zU(nDM+MO=@M_PoSs}GVB`3DK7PoBRASfbaH|CJ&LK5&bzY$^ke{)a0mZ~m3mhV3?y29+xMnE>;5U%wSfv%yl=SZ!H*akxLO>6ov$NS2u4ZOESNVk3cn& zD14K_gFk5UYp-vqQr}3s=lr>n+ppg^Gu;)H`pc9U4Z8o3kkKdjn5sva@A;q)o+SYl zGm6R8CdFv6*=gUF4KRMT6uS>twDbo2X{p<{Eu6o6yDX+!2}A5uMA7Qc@O=*Wm(YM( ztbeMBA44;&1)%wC+BG5T$Ucy2Aip2Zo^KlO_s*OCW7Bi`SHK(i`Xrnl}CGC>uqHq1*=7olNnUAMZpOAsAZd34>^+uGNG1Kx=C>KA|W zbiAeR#UG6^e!i0;t2QSLIqDfeGYH{*>Mv?_Kf8(V`d%m3lOX-bC4OY7xqwnCOYD-Y zu)s~&sCS&dz_mv7;;u$^dvz;rt?#nKtJj)6Tw^_x?8R6O8b7?y)G1nf1JD z<%$;V?x%1_BHEE~J&?R=&>Y{bI$PQZ%OqfSDcaLbeq2@gVqK9Ocs?)hBqm@lo7=v* zyzf*k%r~t*>Ds0&TiqQQ^Ig_PJYj>RKC%~m4QtPQP*!gos;#W=l7W!_s11xMApiDS zFM;W3&r}fw4xVmz%|b4`wibgzb_(_H+fb8|b7@Qo+iJAymexzwdGP0}9eJ>7@H`A6 z7&uMwB&G0C-gk*PMbuVQ16JyJ8Zbz)XTBE)!Ckga6^L+Ns~K>K>YDI!RWMK^p9^}k z5?#iUIe8+})3opLK<^zGh3EBlp2Z7=CbxemPY@p;z|!`QJ93!Eh=3(r+F|MeE+j#w zd?sCwWSZ%8^^G)JsnYb9-<6Qxs4&!gb=MErDeRndks?pKFX#h59TGTP{j$_|^H`_V zcc5e^)TS=rN`NG(?>p)$QZuhp$tC z@SbMqW-+JE)UW$5*3*}bTH`ia7Vh`An}Rx#p??u6^+DpV|0}-|>87F<(CFM0;5X zz8INvXXrS5p0se>i{nNkUmpBBS(+ifVe={IKvpu^4x_gV2R*b5GxL;t?bml4ycU3S z9RKZM`m6mt^BdyhQ%L(qQNo(%v%k9l5v-DMi{-SVR4X0TSAWxjc0Qq;-&4M^-)Zm{ zF3-@l7g$L(p8~LR>3tKwuU$0FjA3VLU4>C5nVw`d11B}kqL2-B-uiX`4sD|vb~Cjk zfe1na&uIfs9Kl^59y!q(9GO`trFZO@(lrg;V-H4=l&)yEUpuOKByf@;Sd091gmG_0 z1hi#!?ibh|umSnuq`rr6lf&oY5R&Zp<>b~tb|4N#^_m0%F|sL5Jz|$*9O?#FqForO zn`s=NEasMmQcE-j*s~FmI74Y0sMI?Da+~6M$OXA8Wn18I~#EmR`3sqEki{_5QLuio&+h z;?Hayr(tX4c(IQMcElA|7Ya|iLOUvg=)xS>X~my=4kTA1$zP!!lMnXK-rFI{n1ns=C{bz8R{;Ln+$ECTY{PRH8o4+Dkj+?yNnX6NOCwI5haGf|s0#z=~%8V$t zI+@m@HAUub_msATH|?eV4>UAq84d?1cBRc|C{UzsOEs4t;2{A-*k!ayvZ>PhJsUwP zPU=ALw#$)AO2ey{yCkd2BY4kXw*oB5n|h7{-wX5+=ph(KhsNejiz}-D2R!FKW~Y6V zdD&8~`s^vtkuN=;D*9Qr0a5=px>bp}dsoBf*E|VB*Z51%+-5&CCzlExW~WEWQhCVj z?jnefm_7f~lboz~eRsSzBHcJR<$mHt>G=&A^P$z{f)c57Brg7hQTt~|k9veh{f`1J z+Og9xw8uSdhN2_`W&R^8iTj*hJrqGveXn#tR%Zfqhh23fP?R4VMlvxqh9v<*+YHSA z6Yf^8=9H%9bej?*<^2icX3Y)T!9a zv=;vcT@=~sLDm}wve*?!|Jq=o$@QJ%xCaM*Q^YaE2kF3SuTfS4dmeXS%Kf#Er&{lP zci(8SWoC}7R)2Xt;23jN7ma&06Vo|mFTS7PTTa3(3MX6>PB0fRyqKeiJjzD2tu;@E z8zf;6+-Ym|nd}H;3tYK`48)IbY#mY>TJ?|}TGe_ZB(|a7z5P6G5P5Fd<8HA&LE_z% zd%fw0v|dXx3lQfb|Na_|F-6)-TFX!tN;yI-bw)hwf{}wY2bDO5q^pF0Q%6`lsW78pf$QEu zgm&`t3EKKVB`1{fYTO-d8#T>&{G!a4mfNixvl}9oG0o#s*iGDhVb6EH8;>p?P8H)` zPQPUzVW)-y@-fPI2#s*^NSmpf&cAi`v52UvBx<^xjbYqLo!V%KDQ9jn8AvJ`J?}4Q=ff<13o48@F7R z^>bsB3Hv}I-ENRzeid4;oSV5qdkmsdY~a>g3S5!yZutQAi--fBX&Sr|gkp1E5tsYW zBI%d4(c(K_*RR-0X03og-oh<~W4&9*KVvs-@ZgLbLlY0h{g3z|4O)t-=$~oEB(u@l zqXKyw#|ZF@h1q;gUt&&u=rdwZJO1pwNLPErQrYEey%S@OM#A;(+6& z!}|lz_bUO3b8;nQY3MIax8O=(tkmFk<keM0SnJebU_W@9e#_Zi8TaxhQwTc`qF5Z z`a5ALikIR~XsL$Mr0x?wzwVE2UD^Qyci&k_Vn5TK!2!;|3>@NrgKM75OR0uj(HMgp zx=)Lw0F&=k3jH;~3-?O??kPwv?!ecV^Q+HhcJzn)WR&!x@XC2Kj*GUkegFkiPU8Qq zVT|<{Syayq5fN7N)BYO$e{ruO$IWR;L{77M>fDCjn}I#XK>^(z_J+ZPG*xX9@W0ln z>H{)hNX2m(W^yGUwc$|YQ1RNW6pHMz_mW60wOv0~r%p|^z>5HewlNr1@P*GhUlibd z2Tfu?ANZ{+uVM1^VJ=8j*vPllS%1oEHS~e` zNSXrf)n&f;z|8sIS)|p1P^X}g0jXBWo=u;Uvf+K}m{Q^Jd<+c&rG1BjyKA|&jG*R2 zb@=00F*S61DW@3?Lmp@`runZ%Utnmgt;DehCr^t))}67Rz;88q?J`4f`aoWEq|i*5 z$9eXZ7F~&;KzzN>v_8LEBvv3W;x)QaP!laf;o8`$DxceUF)nxPFjHV6WN)iTO*I%c zbAZg2JH0ku%WD%Y`D@R^2$}p#}dv&G}e?mcIxui_Da!vPQndP?*sxU?nPU zx7a_UxH}@kQva3ze>P0H2~qwx=ayFi=4&|TLY`}s%1yBuY-l|DJ$BlM9g#a*Z0%)axtJ*Wav0 zUtSDnp1dDroIJ$*rO!osW(C8)JCws+HnQ@^(}ZjTwZn)T8_XB4 zT1Gxp{QR>A;9@=tiNT*3&Z^ zZPi9fM!hL(1JR`+Kb=;LfFYt#4Eour?JhC;Cf;DzyGw!d@RRy``1jd}z3Ce1g=G_G zMDiO!8*!UQ!W<)bXn7`O9P>mT6_rS@RaAp{7F2cNimDEqK&*Vq-`wQ;>@?fe=vhWA zHgtDHdqVw@`wq~$0~89!H4n|ts(qgluWKZFZ>j)7G|#n%%WV7(y_vf8wkyD4!$_{> z4$C!>r_{IG%ULiC7r6ALF1#);iL zBn+9Z`;g(8U7(@&1d?VfZNPY{vD#&_(K00Tr|lJ&;(Bf<%IMkc=vFSKp?-Jlz^`c5 zNG$I1k*nv?yI#yzyOCRYXjDMh_5CPFROOoBl%}lq``NQvkhPIKZ~38jTdUD3W6y4f zN#0LLS&)Om)-%b;?6iShD6-C4zRY+|-S|j#)?-h?L~Ft z40sn{+|K|cWXBHqqPbscWiut>{H2;9q(8n<=-u4LsbH57D@`}#rDSg5A z0WKOAbghb?Cs6h28^Ra!6JDN9t!v{t6wx!9KLUQW)O^CM!sD2RywTk{Ms9Pm{X;yC zrb^9yDh9S(;@%a{h3soS6l40asW|Ysk-%I^)X;^UIGn#1=%o`r@MJ)hp!k&6kGAVH z5A??cq1}}4nrqFU{0Q-T?~WZfPE#e&da#Hi5=dIB67}3D)=I_DE-pd)rns8L=AVGx zo!M-(_IuM777t}3*0AC3cD$XWU^M4@`4$qmmawz?z(Z~~0XLCSGc<7!aZpb$P zL3i8z;aNg;^S*s{tTg;iXD~D&ciyD9oRJ>PDV)hFX=a0>;_Ism63-uw7>$OOZd;6f zX$=S+TxDadt`E2rxZdWCSQb(Mtp`4Q|D`}=vqL-$dp$69gg!0x>&4C^CFdId>1DB2 zxcLE`znyqf8#=&Dbgbo`M)f)bE|e zYZd+di&4dZ6QX|J!(2#Q+`hg=f5qn ziS2I@tI<5UFrXB*Ys&R|b``H;ExHQ6Z!j{W0>)=)1_=Y;Z=P%C;;I4tMO3LGSa}Ys zdRtT->a;@<4}+NGif_L@K{ds5`=g%>98$Gg8@foU1(JhHExkQF$nW zT+aJ(${P?QbhLpr8#tw*~oye?lI!XLdw7ZysYY@vIih;#GL^qZb+WE%RTI z9F$w4+vZY|bv|+=bo`?HfvrS)=7T`N-yZ3!sBdI`t-tzXk7#X%IQn?5(c>r4B@2d!B%{6J+wFvzaz~jL_8@zuIXYu&bb+N-@%Hy? zYsh`v+niZjl0*G1Jn|c{RP^{s#n#ytg+lKKymZO!!Q21dn2JTwXXrJ};GVSO0T`SSj+pXExI)itN`BWUy zz^&Zy^cfpZ>%{q3$H)s5VEgZK@^=ZzlN&8|qVs2^P|(W)p(sOt;L03%_B6W0{z~WXkshhrJxmO^Q+$DCxE{ zTTq%)FnOYD#QNm&TBsP<#{9vCj!T{j8mSwdV{E6T*;x+w(8cEps4+@kQeuO|#($Va zWP-fai%F+zqm>`d$EKIhlYf>uM(eG^YmtS&m1IxP6r|)l=h^-vjGm?TYT| zCOoCduRC_y-CetcGsIH|QpK~84^0FAUGUmy9r_y~U}dz+pjHw?W<-~yxVUkCsHS+cg=Eg=X?N3$O3#-mWd&*vi5()8>|~V)M36jy_xIQ=KoBIe=Yr zJ3N`xzsu- z{cb~x&+C7?)%Bv*szj~ocp-;|#lVi)Xpfc6dHXG2fh~D;{B)8*JL`mm<>lXf50BwG z<+!)wGfc*^oyR2@tI+{hx3f1FvO-t+-PRt`vu=()?O}JB-7uDpwVa-p(zO!nHpZNd zWn*4h2wnW>)^nialn1SZd+X&==EF_ymlMAo)~*h?=P^ML^7$1_q8&AsI3l%e5<^#b zYSwKOxZV5yN_30a;&xnrY=Wk=_K~fiye-fmylApswiatqY!X2McmG{FuZ`^ru>GAq zPaj0Ri4h6s4wncQpU%XYTS)Ws3Yk8rEX2!m6k!9?=v2SJHvSrCqRE#m0Fvb`RiBeH$Q=wIRQPGBy$P$(A z&_dE;sZfMU$u_@hY~A1c_x$mFJ+J4#=e{`SywB(QZ12x?j`>`M^@`OE1YI1R9RUgj zz$*9ySUn)rfk_Diz}+2a001}v289C%L@0oUC*cJQ4Nz)-4CNPOKf}V~p0j#uQ(ukx;G6Nq%4yRBp z6h`jWDBvlf77G4G?z-+YJ8}eNRWhBtCV90FDLIm47OG%niC@VyXGYVa$qXW%868E9 zGiO>T%sDrQm@OtK;OA5rkroPT-97PkF?2HCSVvb!R{>hnL&MCy?Hw0v;hlxTLXwGz zi8_e}Ix+Ncf}WX~89`T{ps%kDHMHZBs0<=gn;NIM=)s;GN1{_`3`z_Y&-O?RiHT=e zC@2tM1j0fHHeAZp694b`w*voG;NJ@TTY-No@NWhF|Es{CZih^TElwirWdLg!n0iLU zFk<2&VrX~+9bI5*>+FtUH(7AZVdXg}_(CS9b04^Y8QjWMFf?JC%IXzpb+)q$^7Qs_ zbar!?>+J;Y6KS+4v>*V{R0iGK$ritMT>ze=A2xOTKnMr}VV(;drji_O&Gb?|@J!Y>Qya=n2(BLgPr$5Z?j-bDTt@GXTJ`<%)?68XLm{h|*z# z5bt8+@OgZkjYH<~wK*LhZ#$^d0J~IPB9R^r0Dmi#;}b~X&Fp(Itvf2Y;VTdOvklj2+b4SFl@`V`cqoql4cCeN} z9Ae#2qP;7`(hxgRqgJ!mn=KCsqc}Q4EC?}^!f^J1cp1dI$Z-y97IaS0W4sq)q07VQ zb~X$0heSF=^ReE=NBXkmZ2#XP$j%G?5&q-|AAcz41^`h?p!ltZm>*)DxX3l^d|(d9 z%H#+;wtP;99`DW0UkS>+$y6s>h#?mwA&l^t~Fd}^5 zR)$?4q=7`7%O7$l{V1jK+%fbw*xVhG;N&o}}ipo4Hg2HFdfMGODA87e%l0m)z(P@zuTlAZ0` zEEyy~`OK1Z-c}og&CMpvSww3%Uf5&9&-e52sO zp8r3~7o~qRZ6IH_1>5+=hcDaLG(#~*#{ zCu|$G7yA<1jqMDgq|^UVBX`gZ8O_&_4D0*1T3}S5Pa}*i#sYeWo-yJWDWHupgmG*z zRxq*=l-eyYWLITzMgGodi2?Yt8Vh<{x?E^32`+0cwSQXjYw#N_@|~;o-zzzvYsgZ) z7c=G=r0fKl)hOrcOH4iq0s1SN@*Ln)&) zQTixTlqJdm<%aS`twRN)!ckOIJSqjX9hHsBMIA+*Mirs1qwb(;QIAk%x^BC4aX*8Gq8Es3)nL31Nbg|#QwzL zaN;;soC$mv*WotdHsf+|Cvc^>`?xk-A8wq3gF})-lf#0;gM-My;K<-O!f}P8hT|E> zM~(?j9!@zqlxt8!a#`*3gK-o{oP!_Ne*eH-JkSB0cphaLvkV{ZS&`yvjm@0To@Qz@I;JA>8ke-l-P_$5vP_fV> zp#fnIVHIHq;ZWfn!e@o+h5JMh5k(O@5t7Juk#iysL_Uh*L{&wdMK_6Ni(VCdDmp4A zEM_R?C&m;zCU#G(TO1Kr5qB1k65l6&L%dylQbI<;MuIG{TcSkbnZ&PU%a>U%BQMKZ zR=VuvvPnt2q=RInS^-6VTRwpw;jPDIX9jv{wRu14-NUJP%8kHQz= z8}Os@((9W#mWiDk? zV4DK&?o61(|=*WXW(d%W^mhJ%uv&iY% zyHTc5ozaZ3i80-{#CXs|$t2k1xJiepsHvxEj_E@)teLG@npu_EZ*yaFhWQQikrmo2 zB3Bfz7+9&glDzWV%03GP3!=qoi*8H2Ww7Nb%Wf-qE27mIt6pnG>rm?p*8Mi>Hk)j& z*nG9swWZsZ+5WOKx7%WO-yX4dvd^-A>LBdk>u}WJouh(dxZ`EVQ70p(%})1MVOP1X zIt1CQ!hqK2) zkGGzxp0S>Hy>MQhUdOyXdFy$ncsH#PSrfFTc+F2ATc3SCUA}6*@xFC_0)FfLiu`{0 z+xzGGcdsR^-LkfMozyzYy4wL90e%4&0>%R!0uKj%TyL~KV}1Ju)eX!Ik2XqejM{iF zNFaz9bTb$m>>pelJWccID z-(I;xX2;eYeLJ0YUe4gppl5VsuE;Fhh1o^f^>nwv?jyTrvqG~TXX|F?Wl!gjavtx| z+f%TIwKr_<(|yMKPVUF;r|xe*V0GY9u261rZr?%ogXM?thq4a+I2?5NQJ!I5VLo?$ ze13OqO{@XD6*smK4eqW*1JLqMUkl+Ua!p z8I?16XK`l}&VD-QcdqHY>G`4yQWvr>%v_{i?7rlEsiDZEsHj-Fc;998<@n2kSJq!? zy=s5;c8PY$=~D61>}%j!{I$>5gRi&WaJ^A?)AVM^E#+Is%S6hu%2DM><)al572UVj z-EO<%a;L6xMP=Dtox2ySOHLE7MX8bT%i9o?@&Uk!9db&kDGcsu8`(BTI&y(IYy*v7F zAHUGPObulW3k@Its`mBPi1o;m(Y2!=$LM3MZ#my3zhC@e_@i#zbNt=U=$})+vL+-a zF8wzB-8AVx**}#y%`sgtqdrqP>pJ^}70qJNh;-syFTnm<0v!gwtoU{j0KRnqh_u4~ zA#i^GH>ZJ`-?KuDS~%F^f8hB&B6|Y%5TFG1?_NW&yXgSn+BpDJpnrk&0C@5N;9~~R z1_n#VoC(}h&+RMOH#oS5IORMO5*@NI^&gk{Jtq_`=KaqrWMg1p$hP^9E9*WG;)Jb@ zHG)zAXdx6Lgkm)SImiPGn-n+}qoB|T28-k1WI@9Xm5JckRx~J$UGFUVg!mqi4>Z zJAdKgrJ~{+H*b}dSKPi+Sy$iipt0%UqsPylzj)c+@v8H6PjBCckDvMn20xE|`~GA6 z=dX$1lWblnfXvfcV)hSSLXa04gF!GHY+fjIB0LZw3|3wbCv4-zL5vkq(BH->YJ1@H z^;#}P1Mg9>5PBQ8xRPOy@)(=i9JBw9So;4Jvn67Gcy+<8#XKuC3TBH&!=*ytfZZE= z;5c9d1_x}k<_727;9?Kh7cC4Hbb?}AA_x}#@^Iof7pMOFE9))%E)K(b4R{gwjh+x9 z1gyYp5esye%j$Mm%CbPMzNPZS_j-NKG8xf`#@DbZ?)Cn6`THr&wu_SdGat|!P;8&0Rt z)*!>EwxC7QHn%Z2Xaqm{FX5LAU&KZZW%@JBCPia>X@#^B;Ae? z82;LoSyTUHY8TBoYq&~t%&J#z>xIC59FZmgn+1CI+I>8p+(_T^BiJD&u*YgSGjsKx z;G_zrwD{29FH$XHb9iz0o9-p=J<)fpC`@ld-PMyj*XE=qwfz2BT5>tl@8*k%H-?WdWzLb9jN_`ouAY%D=}P4m?I{t3CdcWPTCXID1w%)eJvWHobrcHf6d z$z=On!$&O~SJUiR;6`5d=2NLHC#9Z`^Cs=V9L$m4lP_FV)G}3~ITrpiaYDW%C2S%) z^3#_kzuvzh!MHY50|GhndXbFf`aF$1%<&tVyNu`ZBvnF*K4 zKEF}$u)4ZxailLb^TSEWP}3^ql+}t7t34y%+&X+>Bq?HQ9iiqrt8MmjT6fvDW3yb_ z$JP?829BnEoH-pC)NhIRdVCyt*hC5%c+UdZBjqNAqi!u(<=x@NeohyXg94>z#b%k! z=N;rG&*qHxm6#_EH+4vln|T*%SY1ltt!upCwfj(|Z`!22N2)G=V-2lZcG{_IEWiFQ zfd=ub{Ym9s8Bsll@4x=+WGY{=udzl@TUDa{`kTw4x<6#nxPK7P)1G4&>+kNFU4B=c zE4qc+$8hr~W&yA5BSA>xam|(Qc35n8p(O`JT68>Z`cYz{m7$>*GgNr%Xn2E6VBPAN zC|dp5)294DDf#=z-tnqJnG`FAl*~p+tt?X9f$Ehfx9Wnz+Q{xwbPDtNbjrTyOO4Tl z5KotUtt%H-WaVy7-aHx1U;J(AubDpoZqq6q6GEw$v5NG~z^g29E-5nOl26*bjC(EZ zrJZ+w9(z$Oz5je@POs+K(t_uE z&a2a{MkvgRPgh<}1zu-8o9#`b#B49Ox+OO>(?>{8-sT%5GAQB4IsDA*e9o?OBfpeh zzZGy{0sTTLrd>lCe^pQsQ=(Cv{%X@}qZjS|dCzq^_A-~9Es}l0IjuS46*+1(%YBmt zFtOKWN{qN>tx{X~qR&m+3Zb@y>j?#XLF?^QzTc22@7Oy0%@mlej}bC`GjptV)~r6X zp!l{{-TGUbI*S-NdHJdC5$|1f^25ixPJcELH{aoPUtf8}+VHE%2lZ6$M7D#*QE88_|Hz_r>dh>TY;Ef*%;-Wm8$r~hWZOVQ8v8ED*VF8U9 z#fiTzo3>By5>9apN%dcGu7R=-f)`}&>o(?R9KeVdyQY1#3>IPQ#ouRY_y4?R@SZi}Q^X96x+gihstZDetrKhFU8p+QT z#+;qFGj?<6*Q_>T>~}y&ONyqLr=7EM!t_mzM%=CPME@^uw>V{{Xa{PYUFoMCaNbp^ wCQq~G*zmKrU(>{yJ-xCbmJhs}Z*+cdJ<}C8Xm-zVWZ6}b&t2ttF|5x20mR5NaR2}S From b68d9898dc275362dbcf019922c8fc2989897c58 Mon Sep 17 00:00:00 2001 From: Gaurav agarwal Date: Fri, 24 Jul 2026 20:19:40 +0530 Subject: [PATCH 2/4] Audit reconciliation: hub cross-links, robots.txt, absolute llms.txt links MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - #7: add "More guides" cross-link block (retention, errors, plans, first-query) to the 10 chain hubs that lacked it (Solana already had it) - #8: robots.txt — add Disallow (graphql-reference, search) under each named AI bot group so they inherit the same exclusions as the wildcard group - #8: static/llms.txt — convert 27 root-relative links to absolute URLs so scrapers reading the file out of context resolve them (skipped v1-sunsetting-related items per founder) Verified: yarn build passes; check-links strict = 0 errors. Co-Authored-By: Claude Fable 5 --- docs/blockchain/Algorand/index.mdx | 8 +++++ docs/blockchain/Arbitrum/index.mdx | 8 +++++ docs/blockchain/BSC/index.mdx | 8 +++++ docs/blockchain/Base/index.mdx | 8 +++++ docs/blockchain/Bitcoin/index.mdx | 8 +++++ docs/blockchain/Cardano/index.mdx | 8 +++++ docs/blockchain/Ethereum/index.md | 8 +++++ docs/blockchain/Matic/index.mdx | 8 +++++ docs/blockchain/Optimism/index.mdx | 8 +++++ docs/blockchain/Tron/index.mdx | 8 +++++ static/llms.txt | 54 +++++++++++++++--------------- static/robots.txt | 16 +++++++++ 12 files changed, 123 insertions(+), 27 deletions(-) diff --git a/docs/blockchain/Algorand/index.mdx b/docs/blockchain/Algorand/index.mdx index 13c0107d..f74a2854 100644 --- a/docs/blockchain/Algorand/index.mdx +++ b/docs/blockchain/Algorand/index.mdx @@ -84,3 +84,11 @@ This query returns the 5 most recent Algorand blocks with height, hash, reward, ### Fund tracing - [Algorand Coinpath API](/docs/blockchain/Algorand/algorand-coinpath-api) — multi-hop ALGO and ASA flow tracing for compliance and treasury work. + + +## More guides + +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) — how far back this chain's data goes +- [Common errors and what to do](/docs/start/errors/) +- [Plans, Points & Limits](/docs/plans/how-billing-works/) +- [First query in 5 minutes](/docs/start/first-query/) diff --git a/docs/blockchain/Arbitrum/index.mdx b/docs/blockchain/Arbitrum/index.mdx index b610876f..7aa515c0 100644 --- a/docs/blockchain/Arbitrum/index.mdx +++ b/docs/blockchain/Arbitrum/index.mdx @@ -110,3 +110,11 @@ Monitor cross-chain bridge activities, deposits, withdrawals, and asset flows be ### Video Tutorial | Top Bought & Top Sold Tokens on Arbitrum + + +## More guides + +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) — how far back this chain's data goes +- [Common errors and what to do](/docs/start/errors/) +- [Plans, Points & Limits](/docs/plans/how-billing-works/) +- [First query in 5 minutes](/docs/start/first-query/) diff --git a/docs/blockchain/BSC/index.mdx b/docs/blockchain/BSC/index.mdx index d6c28e94..7094c28d 100644 --- a/docs/blockchain/BSC/index.mdx +++ b/docs/blockchain/BSC/index.mdx @@ -111,3 +111,11 @@ import VideoPlayer from "../../../src/components/videoplayer.js"; { q: "Can I get real-time BSC streams?", a: "Yes via GraphQL subscriptions, Kafka, or mempool APIs depending on your use case." }, ]} /> + + +## More guides + +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) — how far back this chain's data goes +- [Common errors and what to do](/docs/start/errors/) +- [Plans, Points & Limits](/docs/plans/how-billing-works/) +- [First query in 5 minutes](/docs/start/first-query/) diff --git a/docs/blockchain/Base/index.mdx b/docs/blockchain/Base/index.mdx index bbd071c4..9959fbe6 100644 --- a/docs/blockchain/Base/index.mdx +++ b/docs/blockchain/Base/index.mdx @@ -149,3 +149,11 @@ Browse live Base memecoin DEX prices on [DEXrabbit's Base Meme Coins category](h { q: "Is Base data near real-time?", a: "Yes. Trades and blocks are indexed as Base produces them. Use subscriptions for live apps." }, ]} /> + + +## More guides + +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) — how far back this chain's data goes +- [Common errors and what to do](/docs/start/errors/) +- [Plans, Points & Limits](/docs/plans/how-billing-works/) +- [First query in 5 minutes](/docs/start/first-query/) diff --git a/docs/blockchain/Bitcoin/index.mdx b/docs/blockchain/Bitcoin/index.mdx index aecb2a3f..7306d608 100644 --- a/docs/blockchain/Bitcoin/index.mdx +++ b/docs/blockchain/Bitcoin/index.mdx @@ -100,3 +100,11 @@ This query returns the 5 most recent Bitcoin blocks with height, difficulty, tra ### Real-time - [Bitcoin Kafka stream](/docs/streams/protobuf/chains/Bitcoin-protobuf) — `btc.transactions.proto` topic for sub-block-time delivery. + + +## More guides + +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) — how far back this chain's data goes +- [Common errors and what to do](/docs/start/errors/) +- [Plans, Points & Limits](/docs/plans/how-billing-works/) +- [First query in 5 minutes](/docs/start/first-query/) diff --git a/docs/blockchain/Cardano/index.mdx b/docs/blockchain/Cardano/index.mdx index 62275fd6..37247a81 100644 --- a/docs/blockchain/Cardano/index.mdx +++ b/docs/blockchain/Cardano/index.mdx @@ -87,3 +87,11 @@ This query returns the 5 most recent Cardano blocks with hash, height, transacti ### Fund tracing - [Cardano Coinpath API](/docs/blockchain/Cardano/coinpath) — multi-hop inbound and outbound ADA flow tracing for compliance and treasury work. + + +## More guides + +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) — how far back this chain's data goes +- [Common errors and what to do](/docs/start/errors/) +- [Plans, Points & Limits](/docs/plans/how-billing-works/) +- [First query in 5 minutes](/docs/start/first-query/) diff --git a/docs/blockchain/Ethereum/index.md b/docs/blockchain/Ethereum/index.md index f31f68da..582175f5 100644 --- a/docs/blockchain/Ethereum/index.md +++ b/docs/blockchain/Ethereum/index.md @@ -205,3 +205,11 @@ Query detailed Ethereum transaction data including transaction hashes, from/to a ### Ethereum Price & Balances + + +## More guides + +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) — how far back this chain's data goes +- [Common errors and what to do](/docs/start/errors/) +- [Plans, Points & Limits](/docs/plans/how-billing-works/) +- [First query in 5 minutes](/docs/start/first-query/) diff --git a/docs/blockchain/Matic/index.mdx b/docs/blockchain/Matic/index.mdx index 49363805..8cc7e120 100644 --- a/docs/blockchain/Matic/index.mdx +++ b/docs/blockchain/Matic/index.mdx @@ -90,3 +90,11 @@ Fetch collections, ownership, transfers, trades, and metadata on Polygon. ### Polygon (MATIC) API | How to Get Real-time & Historical Matic (Polygon) Data + + +## More guides + +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) — how far back this chain's data goes +- [Common errors and what to do](/docs/start/errors/) +- [Plans, Points & Limits](/docs/plans/how-billing-works/) +- [First query in 5 minutes](/docs/start/first-query/) diff --git a/docs/blockchain/Optimism/index.mdx b/docs/blockchain/Optimism/index.mdx index 04e820b0..070b184a 100644 --- a/docs/blockchain/Optimism/index.mdx +++ b/docs/blockchain/Optimism/index.mdx @@ -117,3 +117,11 @@ import VideoPlayer from "../../../src/components/videoplayer.js"; ### Video Tutorial | Get Latest Trades on Optimism Using Bitquery Subscriptions + + +## More guides + +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) — how far back this chain's data goes +- [Common errors and what to do](/docs/start/errors/) +- [Plans, Points & Limits](/docs/plans/how-billing-works/) +- [First query in 5 minutes](/docs/start/first-query/) diff --git a/docs/blockchain/Tron/index.mdx b/docs/blockchain/Tron/index.mdx index b4188c48..33a95995 100644 --- a/docs/blockchain/Tron/index.mdx +++ b/docs/blockchain/Tron/index.mdx @@ -131,3 +131,11 @@ import VideoPlayer from "../../../src/components/videoplayer.js"; ### Video Tutorial | How to track SunPump Token launches to SunSwap + + +## More guides + +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) — how far back this chain's data goes +- [Common errors and what to do](/docs/start/errors/) +- [Plans, Points & Limits](/docs/plans/how-billing-works/) +- [First query in 5 minutes](/docs/start/first-query/) diff --git a/static/llms.txt b/static/llms.txt index e23fff46..6c754280 100644 --- a/static/llms.txt +++ b/static/llms.txt @@ -8,57 +8,57 @@ - [Docs home](https://docs.bitquery.io/) — platform overview and navigation - [GraphQL IDE](https://ide.bitquery.io/) — run queries in the browser, no setup -- [First query in 5 minutes](/docs/start/first-query/) -- [API keys & authentication](/docs/authorization/how-to-generate/) -- [MCP Server for AI agents](/docs/mcp/mcp-server/) +- [First query in 5 minutes](https://docs.bitquery.io/docs/start/first-query/) +- [API keys & authentication](https://docs.bitquery.io/docs/authorization/how-to-generate/) +- [MCP Server for AI agents](https://docs.bitquery.io/docs/mcp/mcp-server/) ## Trading data — prices, trades & OHLCV Most teams building charts, bots, or dashboards start here. The **Trading cube** gives you clean, MEV-filtered swap data with USD price, market cap, and supply on every row. -- [Trading data overview](/docs/trading/trading-data-overview/) — when to use Trading cube vs chain-level APIs -- [Crypto Trades API](/docs/trading/crypto-trades-api/trades-api/) — real-time DEX swaps across 9 chains in one query -- [Crypto Price API](/docs/trading/crypto-price-api/introduction/) — token prices, pairs, and aggregated feeds -- [OHLC / candlestick (K-line) API](/docs/trading/crypto-price-api/crypto-ohlc-candle-k-line-api/) — build charts and technical indicators -- [Market cap & supply fields](/docs/trading/crypto-price-api/crypto-marketcap-api/) — FDV, circulating supply on trade rows -- [Traders API](/docs/trading/crypto-trades-api/traders-api/) — wallet-level trade history and PnL-style analytics +- [Trading data overview](https://docs.bitquery.io/docs/trading/trading-data-overview/) — when to use Trading cube vs chain-level APIs +- [Crypto Trades API](https://docs.bitquery.io/docs/trading/crypto-trades-api/trades-api/) — real-time DEX swaps across 9 chains in one query +- [Crypto Price API](https://docs.bitquery.io/docs/trading/crypto-price-api/introduction/) — token prices, pairs, and aggregated feeds +- [OHLC / candlestick (K-line) API](https://docs.bitquery.io/docs/trading/crypto-price-api/crypto-ohlc-candle-k-line-api/) — build charts and technical indicators +- [Market cap & supply fields](https://docs.bitquery.io/docs/trading/crypto-price-api/crypto-marketcap-api/) — FDV, circulating supply on trade rows +- [Traders API](https://docs.bitquery.io/docs/trading/crypto-trades-api/traders-api/) — wallet-level trade history and PnL-style analytics -For **historical OHLC older than ~30 days**, use chain-level [`DEXTradeByTokens`](/docs/cubes/dextradesbyTokens) instead of the Trading cube. +For **historical OHLC older than ~30 days**, use chain-level [`DEXTradeByTokens`](https://docs.bitquery.io/docs/cubes/dextradesbyTokens) instead of the Trading cube. ## Historical data & bulk uploads Need a full backfill, data lake, or warehouse load — not row-by-row GraphQL? -- [Cloud datasets overview](/docs/cloud/) — Parquet exports to S3, GCS, Snowflake, BigQuery -- [EVM historical dumps](/docs/cloud/evm/) — Ethereum, Polygon, Base, and other EVM chains -- [Solana historical dumps](/docs/cloud/solana/) -- [BSC / BNB Chain dumps](/docs/cloud/bsc/) +- [Cloud datasets overview](https://docs.bitquery.io/docs/cloud/) — Parquet exports to S3, GCS, Snowflake, BigQuery +- [EVM historical dumps](https://docs.bitquery.io/docs/cloud/evm/) — Ethereum, Polygon, Base, and other EVM chains +- [Solana historical dumps](https://docs.bitquery.io/docs/cloud/solana/) +- [BSC / BNB Chain dumps](https://docs.bitquery.io/docs/cloud/bsc/) - [Sample data on GitHub](https://github.com/bitquery/blockchain-cloud-data-dump-sample) — explore schemas before you buy Contact [sales@bitquery.io](mailto:sales@bitquery.io) for custom historical exports and upload schedules. ## Streaming interfaces -- [GraphQL queries](/docs/graphql/query/) -- [WebSocket subscriptions](/docs/subscriptions/subscription/) -- [Kafka streaming](/docs/streams/kafka-streaming-concepts/) -- [Solana gRPC / Protobuf](/docs/streams/protobuf/chains/Solana-protobuf/) +- [GraphQL queries](https://docs.bitquery.io/docs/graphql/query/) +- [WebSocket subscriptions](https://docs.bitquery.io/docs/subscriptions/subscription/) +- [Kafka streaming](https://docs.bitquery.io/docs/streams/kafka-streaming-concepts/) +- [Solana gRPC / Protobuf](https://docs.bitquery.io/docs/streams/protobuf/chains/Solana-protobuf/) ## Popular protocol APIs -- [Solana DEX trades](/docs/blockchain/Solana/solana-dextrades/) -- [Pump.fun API](/docs/blockchain/Solana/Pumpfun/Pump-Fun-API/) -- [Raydium DEX API](/docs/blockchain/Solana/Solana-Raydium-DEX-API/) -- [Polymarket API](/docs/examples/polymarket-api/polymarket-api/) -- [Token holders API](/docs/blockchain/Ethereum/token-holders/token-holder-api/) +- [Solana DEX trades](https://docs.bitquery.io/docs/blockchain/Solana/solana-dextrades/) +- [Pump.fun API](https://docs.bitquery.io/docs/blockchain/Solana/Pumpfun/Pump-Fun-API/) +- [Raydium DEX API](https://docs.bitquery.io/docs/blockchain/Solana/Solana-Raydium-DEX-API/) +- [Polymarket API](https://docs.bitquery.io/docs/examples/polymarket-api/polymarket-api/) +- [Token holders API](https://docs.bitquery.io/docs/blockchain/Ethereum/token-holders/token-holder-api/) ## MCP for AI agents -- [MCP overview](/docs/mcp/mcp-server/) -- [Claude Desktop setup](/docs/mcp/claude-desktop/) -- [Cursor setup](/docs/mcp/cursor/) -- [Build a trading agent](/docs/mcp/build-a-trading-agent/) +- [MCP overview](https://docs.bitquery.io/docs/mcp/mcp-server/) +- [Claude Desktop setup](https://docs.bitquery.io/docs/mcp/claude-desktop/) +- [Cursor setup](https://docs.bitquery.io/docs/mcp/cursor/) +- [Build a trading agent](https://docs.bitquery.io/docs/mcp/build-a-trading-agent/) ## Full index diff --git a/static/robots.txt b/static/robots.txt index 2852f97a..55d8de6a 100644 --- a/static/robots.txt +++ b/static/robots.txt @@ -5,27 +5,43 @@ Disallow: /search/ User-agent: GPTBot Allow: / +Disallow: /docs/graphql-reference/ +Disallow: /search/ User-agent: OAI-SearchBot Allow: / +Disallow: /docs/graphql-reference/ +Disallow: /search/ User-agent: ChatGPT-User Allow: / +Disallow: /docs/graphql-reference/ +Disallow: /search/ User-agent: ClaudeBot Allow: / +Disallow: /docs/graphql-reference/ +Disallow: /search/ User-agent: anthropic-ai Allow: / +Disallow: /docs/graphql-reference/ +Disallow: /search/ User-agent: PerplexityBot Allow: / +Disallow: /docs/graphql-reference/ +Disallow: /search/ User-agent: Google-Extended Allow: / +Disallow: /docs/graphql-reference/ +Disallow: /search/ User-agent: Applebot-Extended Allow: / +Disallow: /docs/graphql-reference/ +Disallow: /search/ Sitemap: https://docs.bitquery.io/sitemap.xml # AI index: https://docs.bitquery.io/llms.txt From f444b980a9276388e2c6a84b5015788afbbb8096 Mon Sep 17 00:00:00 2001 From: Gaurav agarwal Date: Fri, 24 Jul 2026 20:33:07 +0530 Subject: [PATCH 3/4] Reconciliation follow-ups: IDE-link sweep, H1 hygiene, thin pages, related-pages - (a) swept 22 graphql.bitquery.io/ide links -> ide.bitquery.io across 17 files - (b) H1 hygiene: added missing H1 to 13 pages, demoted extra H1s on 10 pages; expanded thin pages (schema-intro, websocket auth) and added useful cross-links/notes to IDE stubs + nft-creator tutorial page - (c) auto "Related pages" footer: swizzled DocItem/Content now renders sidebar siblings on every doc (no per-page frontmatter), mechanically removing dead-ends and adding inbound links; renders nothing when no category siblings Verified: yarn build passes (SSR renders the block on all pages); check-links strict = 0 errors. Co-Authored-By: Claude Fable 5 --- docs/authorization/websocket.md | 21 ++++++ docs/blockchain/Arbitrum/index.mdx | 2 + docs/blockchain/Ethereum/blocks/blocks-api.md | 2 +- .../Ethereum/calls/smartcontract-filterby.md | 4 +- .../dextrades/DEXScreener/evm_dexscreener.mdx | 2 +- .../dextrades/evm-geckoterminal-api.md | 2 +- .../dextrades/get-trading-pairs-of-token.md | 4 +- .../Ethereum/dextrades/token-trades-apis.mdx | 6 +- .../ethers-library/debug_traceTransaction.md | 2 +- .../eth_getTransactionReceipt.md | 2 +- docs/blockchain/Ethereum/events/events-api.md | 2 +- docs/blockchain/Ethereum/fees/fees-api.mdx | 2 + docs/blockchain/Ethereum/nft/nft-api.md | 2 +- .../Ethereum/nft/nft-blur-marketplace-api.md | 2 +- .../Ethereum/transactions/transaction-api.md | 2 +- .../transfers/erc20-token-transfer-api.md | 2 +- .../transfers/nft-token-transfer-api.md | 4 +- docs/blockchain/Matic/index.mdx | 2 + docs/blockchain/Matic/matic-transfers.md | 8 +-- .../blockchain/Optimism/optimism-transfers.md | 6 +- .../Solana/DEXScreener/solana_dexscreener.mdx | 2 +- docs/blockchain/Solana/Pumpfun/index.mdx | 2 + docs/blockchain/Solana/solana-bullx-api.md | 2 +- .../Solana/solana-geckoterminal-api.md | 2 +- docs/blockchain/Solana/solana-logs.md | 2 +- docs/blockchain/Solana/solana-transactions.md | 2 +- .../capabilities/aggregated_metrics.md | 2 +- .../capabilities/query_fact_records.md | 2 +- docs/graphql/dataset/EAP.mdx | 2 +- docs/ide/private.md | 8 +++ docs/ide/query.md | 2 + docs/ide/search.md | 8 +++ docs/ide/variables.md | 2 +- docs/schema/evm/arguments.md | 2 + docs/schema/evm/blocks.md | 2 + docs/schema/evm/calls.md | 2 + docs/schema/evm/dextrades.md | 2 + docs/schema/evm/events.md | 2 + docs/schema/evm/miners.md | 2 + docs/schema/evm/transactions.md | 2 + docs/schema/evm/transfers.md | 2 + docs/schema/evm/uncles.md | 2 + docs/schema/schema-intro.md | 26 ++++++- docs/start/getting-updates.md | 2 +- docs/usecases/mempool-transaction-fee.md | 2 +- docs/usecases/nft-creator/pages.md | 6 ++ src/css/custom.css | 18 +++++ src/theme/DocItem/Content/index.js | 67 +++++++++++++++++-- 48 files changed, 211 insertions(+), 45 deletions(-) diff --git a/docs/authorization/websocket.md b/docs/authorization/websocket.md index b8ec488d..2fc06982 100644 --- a/docs/authorization/websocket.md +++ b/docs/authorization/websocket.md @@ -16,3 +16,24 @@ Content-Type: application/json ``` Refer this [this](https://www.postman.com/interstellar-eclipse-270749/workspace/bitquery/ws-raw-request/659811c95188ca95c7b9e569?action=share&creator=27392958&ctx=documentation) link for postman example of how to use OAuth with websockets. + +## Example: connecting with graphql-ws (JavaScript) + +Pass the OAuth token in the connection URL and use the `graphql-ws` subprotocol: + +```javascript +import { createClient } from "graphql-ws"; + +const client = createClient({ + url: "wss://streaming.bitquery.io/graphql?token=ory_at_YOUR_TOKEN", + // Bitquery expects the token in the URL (not an Authorization header) for WebSockets. +}); +``` + +- Generate the token in [Account → API Access Tokens](https://account.bitquery.io/user/api_v2/access_tokens); see [how to generate a token](/docs/authorization/how-to-generate/). +- Revoking a token does **not** close an already-open socket — terminate running subscriptions from the account panel. + +## Next steps + +- [WebSocket subscriptions](/docs/subscriptions/websockets/) +- [Rate limits & concurrency](/docs/plans/rate-limits/) diff --git a/docs/blockchain/Arbitrum/index.mdx b/docs/blockchain/Arbitrum/index.mdx index 7aa515c0..6b11d541 100644 --- a/docs/blockchain/Arbitrum/index.mdx +++ b/docs/blockchain/Arbitrum/index.mdx @@ -17,6 +17,8 @@ keywords: - GMX API - Arbitrum DEX API --- +# Arbitrum API Documentation + import VideoPlayer from "../../../src/components/videoplayer.js"; Unlock the full potential of Arbitrum with comprehensive blockchain data—from GMX perpetual trading analytics and DEX swaps to liquidity monitoring, slippage analysis, cross-chain bridge monitoring, and smart contract interactions. This complete guide delivers production-ready GraphQL APIs, real-time streaming data, and practical examples for tracking trades, balances, liquidity pools, slippage, events, and more across the Arbitrum ecosystem. Whether you're building DeFi dashboards, trading algorithms, or cross-chain applications, discover all the Arbitrum data solutions you need here. diff --git a/docs/blockchain/Ethereum/blocks/blocks-api.md b/docs/blockchain/Ethereum/blocks/blocks-api.md index 487ec7d1..6258f51a 100644 --- a/docs/blockchain/Ethereum/blocks/blocks-api.md +++ b/docs/blockchain/Ethereum/blocks/blocks-api.md @@ -7,7 +7,7 @@ description: "Ethereum Blocks API: query and stream Ethereum on-chain data with ## Latest blocks in the Ethereum network -This GraphQL query retrieves the latest blocks in real time on the Ethereum network that were mined after March 3rd, 2023. It includes information on the block number, hash, mix digest, date, base fee, coinbase, transaction hash, transaction count, and result (including gas and errors). You can find the query [here](https://graphql.bitquery.io/ide/Latest-blocks-in-the-Ethereum-network_1). +This GraphQL query retrieves the latest blocks in real time on the Ethereum network that were mined after March 3rd, 2023. It includes information on the block number, hash, mix digest, date, base fee, coinbase, transaction hash, transaction count, and result (including gas and errors). You can find the query [here](https://ide.bitquery.io/Latest-blocks-in-the-Ethereum-network_1). ```graphql subscription { diff --git a/docs/blockchain/Ethereum/calls/smartcontract-filterby.md b/docs/blockchain/Ethereum/calls/smartcontract-filterby.md index 49c30b09..3338ffa7 100644 --- a/docs/blockchain/Ethereum/calls/smartcontract-filterby.md +++ b/docs/blockchain/Ethereum/calls/smartcontract-filterby.md @@ -8,7 +8,7 @@ description: "Ethereum Smartcontract Filterby: query and stream Ethereum on-chai ## Smart Contract Calls by Method Signature This query retrieves the 10 most recent smart contract calls that match a specific function signature (harvest()) on the Binance Smart Chain (BSC) network. It also includes transaction and block data associated with each call. -You can find the GraphQL query [here](https://graphql.bitquery.io/ide/Calls-by-Method-Signature) +You can find the GraphQL query [here](https://ide.bitquery.io/Calls-by-Method-Signature) ```graphql query MyQuery { @@ -62,7 +62,7 @@ The query returns the following data for each smart contract call: ## Smart Contract Calls by Opcode This GraphQL query retrieves information about the latest STATICCALL EVM (Ethereum Virtual Machine) calls on the Binance Smart Chain network. -You can find the GraphQL query [here](https://graphql.bitquery.io/ide/Smart-Contract-Calls-by-Opcode) +You can find the GraphQL query [here](https://ide.bitquery.io/Smart-Contract-Calls-by-Opcode) ```graphql query MyQuery { diff --git a/docs/blockchain/Ethereum/dextrades/DEXScreener/evm_dexscreener.mdx b/docs/blockchain/Ethereum/dextrades/DEXScreener/evm_dexscreener.mdx index ba6cdfcf..8ec0def5 100644 --- a/docs/blockchain/Ethereum/dextrades/DEXScreener/evm_dexscreener.mdx +++ b/docs/blockchain/Ethereum/dextrades/DEXScreener/evm_dexscreener.mdx @@ -27,7 +27,7 @@ DEXScreener EVM APIs include data apis for EVM chains like Ethereum, Binance Sma - **[EVM API Examples](/docs/blockchain/Ethereum/)** - Complete collection of EVM API examples - **[EVM DEX Trades](/docs/category/dex-trades/)** - Real-time DEX trading data and analytics - **[EVM Subscriptions](/docs/subscriptions/subscription)** - Learn how to set up real-time data streams -- **[IDE for EVM](https://graphql.bitquery.io/ide)** - Interactive development environment for testing EVM queries +- **[IDE for EVM](https://ide.bitquery.io)** - Interactive development environment for testing EVM queries This guide shows how to retrieve the same EVM DEX data that DEXScreener displays—real-time trades, pair stats, volumes, buyers/sellers, and more—using Bitquery APIs, streams, and Kafka. diff --git a/docs/blockchain/Ethereum/dextrades/evm-geckoterminal-api.md b/docs/blockchain/Ethereum/dextrades/evm-geckoterminal-api.md index a3022cde..244e6af1 100644 --- a/docs/blockchain/Ethereum/dextrades/evm-geckoterminal-api.md +++ b/docs/blockchain/Ethereum/dextrades/evm-geckoterminal-api.md @@ -27,7 +27,7 @@ GeckoTerminal EVM APIs include data apis for EVM chains like Ethereum, Binance S - **[EVM API Examples](/docs/blockchain/Ethereum/)** - Complete collection of EVM API examples - **[EVM DEX Trades](/docs/category/dex-trades/)** - Real-time DEX trading data and analytics - **[EVM Subscriptions](/docs/subscriptions/subscription)** - Learn how to set up real-time data streams -- **[IDE for EVM](https://graphql.bitquery.io/ide)** - Interactive development environment for testing EVM queries +- **[IDE for EVM](https://ide.bitquery.io)** - Interactive development environment for testing EVM queries This guide shows how to retrieve the same EVM DEX data that GeckoTerminal displays—real-time trades, pair stats, volumes, buyers/sellers, and more—using Bitquery APIs, streams, and Kafka. diff --git a/docs/blockchain/Ethereum/dextrades/get-trading-pairs-of-token.md b/docs/blockchain/Ethereum/dextrades/get-trading-pairs-of-token.md index 657bf58c..70060625 100644 --- a/docs/blockchain/Ethereum/dextrades/get-trading-pairs-of-token.md +++ b/docs/blockchain/Ethereum/dextrades/get-trading-pairs-of-token.md @@ -109,7 +109,7 @@ We are just providing the BLUR token as buy currency. } ``` -Open the above query on GraphQL IDE using this [link](https://graphql.bitquery.io/ide/Pair-tokens-for-BLUR-token-for-all-DEXs_1) +Open the above query on GraphQL IDE using this [link](https://ide.bitquery.io/Pair-tokens-for-BLUR-token-for-all-DEXs_1) **Parameters** @@ -175,7 +175,7 @@ Now, let's see an example of getting all pairs of a token for a specific DEX. In } ``` -Open the above query on GraphQL IDE using this [link](https://graphql.bitquery.io/ide/pairs-of-blur-token-new-dataset_1) +Open the above query on GraphQL IDE using this [link](https://ide.bitquery.io/pairs-of-blur-token-new-dataset_1) **Parameters**: diff --git a/docs/blockchain/Ethereum/dextrades/token-trades-apis.mdx b/docs/blockchain/Ethereum/dextrades/token-trades-apis.mdx index c2eb6196..b7b2f7ca 100644 --- a/docs/blockchain/Ethereum/dextrades/token-trades-apis.mdx +++ b/docs/blockchain/Ethereum/dextrades/token-trades-apis.mdx @@ -1282,7 +1282,7 @@ You can check the data here on [DEXrabbit](https://dexrabbit.com/eth).
-Open it with this [link](https://graphql.bitquery.io/ide/latest-trades-for-a-token---both-buy-and-sell). +Open it with this [link](https://ide.bitquery.io/latest-trades-for-a-token---both-buy-and-sell). ## Token trade from a specific DEX @@ -1316,7 +1316,7 @@ Open it with this [link](https://graphql.bitquery.io/ide/latest-trades-for-a-tok
-Open it with this [link](https://graphql.bitquery.io/ide/token-trades-for-a-specific-DEX_1). +Open it with this [link](https://ide.bitquery.io/token-trades-for-a-specific-DEX_1). ## Subscribe to new token trades (WebSocket) @@ -1364,7 +1364,7 @@ subscription {
-Open it with this [link](https://graphql.bitquery.io/ide/latest-token-trades-subscription). +Open it with this [link](https://ide.bitquery.io/latest-token-trades-subscription). ## OHLC in USD of a Token diff --git a/docs/blockchain/Ethereum/ethers-library/debug_traceTransaction.md b/docs/blockchain/Ethereum/ethers-library/debug_traceTransaction.md index da896daf..d9e3b668 100644 --- a/docs/blockchain/Ethereum/ethers-library/debug_traceTransaction.md +++ b/docs/blockchain/Ethereum/ethers-library/debug_traceTransaction.md @@ -6,7 +6,7 @@ description: "debug_traceTransaction: query and stream Ethereum on-chain data wi debug_traceTransaction is a JSON RPC method that returns tracing results for the specified transaction. In this section, we are looking for a way to build an alternative for the same using Bitquery API. -# Debug Trace Transaction +## Debug Trace Transaction To trace a transaction using the debug_traceTransaction we need the `transaction hash`. We are using [this](https://ide.bitquery.io/debug_traceTransaction) API given below for tracing the transaction, with transaction hash as `0x4fe59dcf4f834f17acdcd0f244538c119523009ce47817ccd56423404ba34ffa`. diff --git a/docs/blockchain/Ethereum/ethers-library/eth_getTransactionReceipt.md b/docs/blockchain/Ethereum/ethers-library/eth_getTransactionReceipt.md index 700a7553..95fe8d77 100644 --- a/docs/blockchain/Ethereum/ethers-library/eth_getTransactionReceipt.md +++ b/docs/blockchain/Ethereum/ethers-library/eth_getTransactionReceipt.md @@ -6,7 +6,7 @@ description: "eth_getTransactionReceipt: query and stream Ethereum on-chain data In this section, we will build an alternative to the eth_getTransactionReceipt JSON RPC method using the Bitquery APIs. The method is used to provide the receipt of a transaction given `transaction hash`. Note that the receipt is not available for pending transactions. -# Get Transaction Receipt +## Get Transaction Receipt We can get the receipt of a transaction using the transaction hash, `0x4fe59dcf4f834f17acdcd0f244538c119523009ce47817ccd56423404ba34ffa` for this example, using [this](https://ide.bitquery.io/eth_getTransactionReceipt_1) API given below. ``` graphql diff --git a/docs/blockchain/Ethereum/events/events-api.md b/docs/blockchain/Ethereum/events/events-api.md index d52d8603..ba111e3d 100644 --- a/docs/blockchain/Ethereum/events/events-api.md +++ b/docs/blockchain/Ethereum/events/events-api.md @@ -166,7 +166,7 @@ query MyQuery { ## Daily Stats on Calls This query retrieves the date and number of unique event calls for the date. -You can find the query [here](https://graphql.bitquery.io/ide/Daily-Unique-Call-Count) +You can find the query [here](https://ide.bitquery.io/Daily-Unique-Call-Count) ```graphql query MyQuery { diff --git a/docs/blockchain/Ethereum/fees/fees-api.mdx b/docs/blockchain/Ethereum/fees/fees-api.mdx index 20a8fa4f..8d8777ca 100644 --- a/docs/blockchain/Ethereum/fees/fees-api.mdx +++ b/docs/blockchain/Ethereum/fees/fees-api.mdx @@ -2,6 +2,8 @@ title: "Ethereum Fees API" description: "Ethereum Fees API: analyze Ethereum transaction fees and costs with Bitquery GraphQL queries and streams. See examples in the Bitquery IDE." --- +# Ethereum Fees API + import VideoPlayer from "../../../../src/components/videoplayer.js"; ## Get Trades with Transaction fees diff --git a/docs/blockchain/Ethereum/nft/nft-api.md b/docs/blockchain/Ethereum/nft/nft-api.md index 9814c404..7fac7941 100644 --- a/docs/blockchain/Ethereum/nft/nft-api.md +++ b/docs/blockchain/Ethereum/nft/nft-api.md @@ -218,7 +218,7 @@ The EVM Transfers query returns the following fields: ## All transfers of an NFT This query retrieves the most recent transfers of a specific non-fungible token (NFT) on the Ethereum network. -You can find the GraphQL query [here](https://graphql.bitquery.io/ide/All-transfers-of-an-NFT) +You can find the GraphQL query [here](https://ide.bitquery.io/All-transfers-of-an-NFT) ```graphql query MyQuery { diff --git a/docs/blockchain/Ethereum/nft/nft-blur-marketplace-api.md b/docs/blockchain/Ethereum/nft/nft-blur-marketplace-api.md index fa7579cd..a8eaa1c6 100644 --- a/docs/blockchain/Ethereum/nft/nft-blur-marketplace-api.md +++ b/docs/blockchain/Ethereum/nft/nft-blur-marketplace-api.md @@ -986,7 +986,7 @@ The 'StartAuction' event is triggered when an NFT auction starts on the Blur : `where` : 'LogHeader.Address' sets the address to the Blur: Blend Contract. 'Log.Signature.Name' filters for the event name "StartAuction". -# Latest Locked NFTs Buy Trades +## Latest Locked NFTs Buy Trades Locked NFTs are temporarily non-transferrable and can be traded or transferred after the lock period. These NFTs are often cheaper than non-locked. The following [query](https://ide.bitquery.io/Locked-NFT-bought-on-Blur-marketplace) retrieves the latest trades of locked NFTs by filtering for the 'BuyLocked' event under the Blur : [Blend Contract](https://explorer.bitquery.io/ethereum/smart_contract/0x29469395eaf6f95920e59f858042f0e28d98a20b/events). diff --git a/docs/blockchain/Ethereum/transactions/transaction-api.md b/docs/blockchain/Ethereum/transactions/transaction-api.md index da3e960d..88226c85 100644 --- a/docs/blockchain/Ethereum/transactions/transaction-api.md +++ b/docs/blockchain/Ethereum/transactions/transaction-api.md @@ -12,7 +12,7 @@ The Transaction API allows users to query for transaction data by specifying fil ## Latest Transactions This query is using the Transactions API to retrieve transaction data from the Binance Smart Chain (BSC) blockchain network in real-time. -You can find the query [here](https://graphql.bitquery.io/ide/Last-transactions-with-cost) +You can find the query [here](https://ide.bitquery.io/Last-transactions-with-cost)
Click to expand GraphQL query diff --git a/docs/blockchain/Ethereum/transfers/erc20-token-transfer-api.md b/docs/blockchain/Ethereum/transfers/erc20-token-transfer-api.md index 254b6064..199340f2 100644 --- a/docs/blockchain/Ethereum/transfers/erc20-token-transfer-api.md +++ b/docs/blockchain/Ethereum/transfers/erc20-token-transfer-api.md @@ -246,7 +246,7 @@ Monitor ERC20 token transfers in real-time using GraphQL subscriptions. This is This example subscribes to WETH (Wrapped Ethereum) token transfers. The contract address is [0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2](https://explorer.bitquery.io/ethereum/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2). -You can test this subscription [here](https://graphql.bitquery.io/ide/Subscribe-to-Latest-WETH-token-transfers). +You can test this subscription [here](https://ide.bitquery.io/Subscribe-to-Latest-WETH-token-transfers). ```graphql subscription { diff --git a/docs/blockchain/Ethereum/transfers/nft-token-transfer-api.md b/docs/blockchain/Ethereum/transfers/nft-token-transfer-api.md index c9b68498..845b5a63 100644 --- a/docs/blockchain/Ethereum/transfers/nft-token-transfer-api.md +++ b/docs/blockchain/Ethereum/transfers/nft-token-transfer-api.md @@ -39,7 +39,7 @@ Let's see how to get the latest NFT token transfers. We are taking Cryptokitties } ``` -Here is the [link](https://graphql.bitquery.io/ide/Cryptokitties-Token-Transfers) to the query on IDE. +Here is the [link](https://ide.bitquery.io/Cryptokitties-Token-Transfers) to the query on IDE. ## Subscribe to the latest ERC721 token transfers @@ -73,7 +73,7 @@ subscription { ``` -You can open this API on our GraphQL IDE using this [link](https://graphql.bitquery.io/ide/Subscribe-to-latest-Axie-infinity-token-transfers_1). +You can open this API on our GraphQL IDE using this [link](https://ide.bitquery.io/Subscribe-to-latest-Axie-infinity-token-transfers_1). ## Addresses that transfer NFTs to/from a list of addresses diff --git a/docs/blockchain/Matic/index.mdx b/docs/blockchain/Matic/index.mdx index 8cc7e120..3d012d92 100644 --- a/docs/blockchain/Matic/index.mdx +++ b/docs/blockchain/Matic/index.mdx @@ -15,6 +15,8 @@ keywords: - Polygon (MATIC) token api - Polygon (MATIC) transaction api --- +# Polygon (MATIC) API Documentation + import VideoPlayer from "../../../src/components/videoplayer.js"; Discover everything you need to build powerful Polygon (MATIC) applications—from real-time DEX trading analytics, liquidity monitoring, slippage analysis, and token holder insights to NFT tracking and transaction monitoring. This comprehensive guide provides ready-to-use GraphQL APIs, live streaming data, and step-by-step examples for tracking swaps, balances, transfers, liquidity pools, and more across the Polygon ecosystem. Whether you're building trading bots, dashboards, or DeFi analytics tools, find all the Polygon data solutions you need right here. diff --git a/docs/blockchain/Matic/matic-transfers.md b/docs/blockchain/Matic/matic-transfers.md index a76ebbbe..a375d84e 100644 --- a/docs/blockchain/Matic/matic-transfers.md +++ b/docs/blockchain/Matic/matic-transfers.md @@ -6,7 +6,7 @@ description: "Polygon (MATIC) Transfers API: monitor Polygon native and token tr In this section we'll have a look at some examples using the Polygon (MATIC) Transfers API. -# Subscribe to Recent Whale Transactions of a particular currency +## Subscribe to Recent Whale Transactions of a particular currency The subscription query below fetches the whale transactions on the MATIC network. We have used USDC address `0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359`. You can find the query [here](https://ide.bitquery.io/Whale-transfers-of-USDC-on-matic) @@ -39,7 +39,7 @@ subscription{ ``` -# Sender is a particular address +## Sender is a particular address This websocket retrieves transfers where the sender is a particular address `0x1A8f43e01B78979EB4Ef7feBEC60F32c9A72f58E`. For this subscription query we use `where` keyword and in that we specify `{Transfer: {Sender: {is: "0x1A8f43e01B78979EB4Ef7feBEC60F32c9A72f58E"}}}` to get the desired data. You can find the query [here](https://ide.bitquery.io/Sender-is-a-particular-address_2) @@ -71,7 +71,7 @@ subscription { ``` -# Subscribe to the latest NFT token transfers on Polygon (MATIC) +## Subscribe to the latest NFT token transfers on Polygon (MATIC) Let's see an example of NFT token transfers using GraphQL Subscription (Webhook). In the following NFT Token Transfers API, we will be subscribing to all NFT token transfers on Polygon (MATIC) network. You can run the query [here](https://ide.bitquery.io/NFT-Token-Transfers-API_3) @@ -103,7 +103,7 @@ subscription { ``` -# Check if an address ever interacted with Polymarket (CTF collateral transfer) +## Check if an address ever interacted with Polymarket (CTF collateral transfer) Polymarket on Polygon routes outcome collateral through the **conditional tokens** USDC denomination at `0x4d97dCd97eC945f40cF65F87097ACe5EA0476045`. A lightweight check for **any historic interaction** is: has this wallet **received** at least one transfer of that token? (`limit: { count: 1 }` — empty result means no matching receipt found in the indexed data.) diff --git a/docs/blockchain/Optimism/optimism-transfers.md b/docs/blockchain/Optimism/optimism-transfers.md index 22dd7d48..30ef74ab 100644 --- a/docs/blockchain/Optimism/optimism-transfers.md +++ b/docs/blockchain/Optimism/optimism-transfers.md @@ -6,7 +6,7 @@ description: "Optimism Transfers API: monitor Optimism native and token transfer In this section we'll have a look at some examples using the Optimism Transfers API. -# Subscribe to Recent Whale Transactions of a particular currency +## Subscribe to Recent Whale Transactions of a particular currency The subscription query below fetches the whale transactions on the Optimism network. We have used USDT address `0x94b008aA00579c1307B0EF2c499aD98a8ce58e58` You can find the query [here](https://ide.bitquery.io/Whale-transfers-of-USDT-on-optimism) @@ -40,7 +40,7 @@ subscription { ``` -# Sender is a particular address +## Sender is a particular address This websocket retrieves transfers where the sender is a particular address `0xEbe80f029b1c02862B9E8a70a7e5317C06F62Cae`. For this subscription query we use `where` keyword and in that we specify `{Transfer: {Sender: {is: "0xEbe80f029b1c02862B9E8a70a7e5317C06F62Cae"}}}` to get the desired data. You can find the query [here](https://ide.bitquery.io/Sender-is-a-particular-address) @@ -72,7 +72,7 @@ subscription { ``` -# Subscribe to the latest NFT token transfers on Optimism +## Subscribe to the latest NFT token transfers on Optimism Let's see an example of NFT token transfers using GraphQL Subscription (Webhook). In the following NFT Token Transfers API, we will be subscribing to all NFT token transfers on Optimism network. You can run the query [here](https://ide.bitquery.io/NFT-Token-Transfers-API_1) diff --git a/docs/blockchain/Solana/DEXScreener/solana_dexscreener.mdx b/docs/blockchain/Solana/DEXScreener/solana_dexscreener.mdx index 24bdc9c7..b16e75aa 100644 --- a/docs/blockchain/Solana/DEXScreener/solana_dexscreener.mdx +++ b/docs/blockchain/Solana/DEXScreener/solana_dexscreener.mdx @@ -29,7 +29,7 @@ Checkout our [DEXScreener EVM API documentation](/docs/blockchain/Ethereum/dextr - **[Solana API Examples](/docs/blockchain/Solana/)** - Complete collection of Solana API examples - **[Solana DEX Trades](/docs/blockchain/Solana/solana-dextrades)** - Real-time DEX trading data and analytics - **[Solana Subscriptions](/docs/subscriptions/subscription)** - Learn how to set up real-time data streams -- **[IDE for Solana](https://graphql.bitquery.io/ide)** - Interactive development environment for testing Solana queries +- **[IDE for Solana](https://ide.bitquery.io)** - Interactive development environment for testing Solana queries This guide shows how to retrieve the same Solana DEX data that DEXScreener displays—real-time trades, pair stats, volumes, buyers/sellers, and more—using Bitquery APIs, streams, and Kafka. diff --git a/docs/blockchain/Solana/Pumpfun/index.mdx b/docs/blockchain/Solana/Pumpfun/index.mdx index 92a406fd..1003c16e 100644 --- a/docs/blockchain/Solana/Pumpfun/index.mdx +++ b/docs/blockchain/Solana/Pumpfun/index.mdx @@ -14,6 +14,8 @@ keywords: - Best PumpFun API - PumpFun token data API --- +# PumpFun API Documentation + :::tip Need real-time Pump.fun data or anything from the last ~30 days? For **real-time + last ~30 days**, use the [**Trading cube**](/docs/trading/trading-data-overview) — [`Trading.Trades`](/docs/trading/crypto-trades-api/trades-api) gives you clean, MEV-filtered Pump.fun and PumpSwap swaps with **USD price, market cap, and supply on every row** across **9 chains in one API**. Pre-aggregated 1-second OHLC is available via [`Trading.Tokens`](/docs/trading/crypto-price-api/tokens) and [`Trading.Pairs`](/docs/trading/crypto-price-api/pairs). Use the Pump.fun pages below when you need **historical data older than ~30 days**, bonding-curve internals, or raw on-chain detail. ::: diff --git a/docs/blockchain/Solana/solana-bullx-api.md b/docs/blockchain/Solana/solana-bullx-api.md index 4cc61e04..9818e61e 100644 --- a/docs/blockchain/Solana/solana-bullx-api.md +++ b/docs/blockchain/Solana/solana-bullx-api.md @@ -301,7 +301,7 @@ query ($time_10min_ago: DateTime, $time_1h_ago: DateTime, $time_3h_ago: DateTime } ``` -# Get trading volume, buy volume, sell volume of a token +## Get trading volume, buy volume, sell volume of a token This query fetches you the traded volume, buy volume and sell volume of a token `J4JbUQRaZMxdoQgY6oEHdkPttoLtZ1oKpBThic76pump`. Try out the API [here](https://ide.bitquery.io/trade_volume_Solana#). diff --git a/docs/blockchain/Solana/solana-geckoterminal-api.md b/docs/blockchain/Solana/solana-geckoterminal-api.md index d6a436c3..1696883b 100644 --- a/docs/blockchain/Solana/solana-geckoterminal-api.md +++ b/docs/blockchain/Solana/solana-geckoterminal-api.md @@ -24,7 +24,7 @@ import VideoPlayer from "../../../src/components/videoplayer.js"; - **[Solana API Examples](/docs/blockchain/Solana/)** - Complete collection of Solana API examples - **[Solana DEX Trades](/docs/blockchain/Solana/solana-dextrades)** - Real-time DEX trading data and analytics - **[Solana Subscriptions](/docs/subscriptions/subscription)** - Learn how to set up real-time data streams -- **[IDE for Solana](https://graphql.bitquery.io/ide)** - Interactive development environment for testing Solana queries +- **[IDE for Solana](https://ide.bitquery.io)** - Interactive development environment for testing Solana queries This guide shows how to retrieve the same Solana DEX data that GeckoTerminal displays—real-time trades, pair stats, volumes, buyers/sellers, and more—using Bitquery APIs, streams, and Kafka. diff --git a/docs/blockchain/Solana/solana-logs.md b/docs/blockchain/Solana/solana-logs.md index f100bacc..93088da8 100644 --- a/docs/blockchain/Solana/solana-logs.md +++ b/docs/blockchain/Solana/solana-logs.md @@ -6,7 +6,7 @@ description: "Solana Logs: query and stream Solana on-chain data with Bitquery G Solana Logs API helps you filter program instruction logs using regular expressions. -# Finding Instructions with Log Matching +## Finding Instructions with Log Matching The Solana Logs API allows you to search for specific instructions based on log content that matches exact phrases. For example, to find logs related to 'AnchorError' with a specific error code and message You can find the query [here](https://ide.bitquery.io/SlippageToleranceExceeded#) diff --git a/docs/blockchain/Solana/solana-transactions.md b/docs/blockchain/Solana/solana-transactions.md index 4b3f1f77..9061f351 100644 --- a/docs/blockchain/Solana/solana-transactions.md +++ b/docs/blockchain/Solana/solana-transactions.md @@ -9,7 +9,7 @@ import FAQ from "@site/src/components/FAQ"; In this section we'll have a look at some examples using the Solana Transactions API. -# Subscribe to Recent Transactions +## Subscribe to Recent Transactions The subscription query below fetches the most recent transactions on the Solana blockchain You can find the query [here](https://ide.bitquery.io/Realtime-Solana-Transactions) diff --git a/docs/graphql/capabilities/aggregated_metrics.md b/docs/graphql/capabilities/aggregated_metrics.md index 7f38f7a9..d89f7f58 100644 --- a/docs/graphql/capabilities/aggregated_metrics.md +++ b/docs/graphql/capabilities/aggregated_metrics.md @@ -15,7 +15,7 @@ This type of query is useful in the following cases: 2. get statistics over a large amount of data, for example total number of transactions or transfer volume 3. query integral information about some object, for example, an address -[Example](https://graphql.bitquery.io/ide/Maximum-amounts-of-ETH-transfer-by-date) of query to get maximum ethereum transfer amount by date: +[Example](https://ide.bitquery.io/Maximum-amounts-of-ETH-transfer-by-date) of query to get maximum ethereum transfer amount by date: ```graphql query { diff --git a/docs/graphql/capabilities/query_fact_records.md b/docs/graphql/capabilities/query_fact_records.md index ee45e9ee..ffa43465 100644 --- a/docs/graphql/capabilities/query_fact_records.md +++ b/docs/graphql/capabilities/query_fact_records.md @@ -18,7 +18,7 @@ This type of query is useful in the following cases: 1. query some specific sub-set of the data, with the very well-defined filters. For example, the last token transfers of specific address for today. The more precise filter you define, the better it will run. Date or time filters are essential in this case. 2. define ordering and query just the last records. This type of query should also take care about date / time filtering especially if you query archive data. -[Query example ](https://graphql.bitquery.io/ide/Last-transactions-with-cost) to get the last transactions in the blockchain with the cost of them: +[Query example ](https://ide.bitquery.io/Last-transactions-with-cost) to get the last transactions in the blockchain with the cost of them: ```graphql query { diff --git a/docs/graphql/dataset/EAP.mdx b/docs/graphql/dataset/EAP.mdx index 7581f0cf..017c7593 100644 --- a/docs/graphql/dataset/EAP.mdx +++ b/docs/graphql/dataset/EAP.mdx @@ -13,7 +13,7 @@ Chains from the Early Access Program (EAP) have moved to v2. - **New users**: You must use the v2 endpoint for all blockchains. ::: -# Early Access Program (EAP) +## Early Access Program (EAP) The Early Access Program (EAP) provided users with access to streaming data across various blockchain networks, including Solana, Matic, and more. These chains have now been migrated to the v2 endpoint. diff --git a/docs/ide/private.md b/docs/ide/private.md index 648489fb..21331868 100644 --- a/docs/ide/private.md +++ b/docs/ide/private.md @@ -7,3 +7,11 @@ description: "Private Queries in Bitquery IDE in Bitquery docs with practical se In the IDE you can save your queries privately, so that only you will be able to see that query. To do this you will have to select the `Private` checkbox and then click the `Save` button. ![IDE Query Save Private](/img/ide/query_save_private.png) + +Use private queries for work you don't want surfaced in public search — internal dashboards, client work, or queries containing specific addresses. Leave the checkbox unchecked to share a query publicly so others can find it via [search](/docs/ide/search/). + +## Next steps + +- [Create a query](/docs/ide/query/) +- [Search queries](/docs/ide/search/) +- [Share a query](/docs/ide/share/) diff --git a/docs/ide/query.md b/docs/ide/query.md index abf729a9..59367283 100644 --- a/docs/ide/query.md +++ b/docs/ide/query.md @@ -14,3 +14,5 @@ You can go to the following entries to learn more: - [Share Query](/docs/ide/share) - [Save Query Privately](/docs/ide/private) - [Search Queries](/docs/ide/search) + +Each run shows the **points** it consumed, so you can gauge query cost before scaling up — see [how billing works](/docs/plans/how-billing-works/). Make sure your token targets the V2 endpoint (`streaming.bitquery.io/graphql`); see [how to generate a token](/docs/authorization/how-to-generate/). diff --git a/docs/ide/search.md b/docs/ide/search.md index 95805257..ee70e27a 100644 --- a/docs/ide/search.md +++ b/docs/ide/search.md @@ -8,3 +8,11 @@ description: "Search Queries in Bitquery IDE in Bitquery docs with practical set You will be able to search among the queries shared by users (as well as among your own queries), to do this you must go to the top left corner, see: ![IDE Query Search](/img/ide/query_search.png) + +Search covers both the public queries shared by other users and your own saved queries, so it's a fast way to find a working example before writing a query from scratch. + +## Next steps + +- [Create a query](/docs/ide/query/) +- [Save a query privately](/docs/ide/private/) +- [Share a query](/docs/ide/share/) diff --git a/docs/ide/variables.md b/docs/ide/variables.md index 2afa332f..946898c8 100644 --- a/docs/ide/variables.md +++ b/docs/ide/variables.md @@ -10,7 +10,7 @@ In the IDE there are two boxes that allow you to insert code, the first one is f ![IDE Query Variables](/img/ide/query_variables.png) -> You can obtain the code through this link [Transaction Detail EVM | BSC](https://graphql.bitquery.io/ide/Transaction-Detail-EVM--BSC) +> You can obtain the code through this link [Transaction Detail EVM | BSC](https://ide.bitquery.io/Transaction-Detail-EVM--BSC) ## Variable types diff --git a/docs/schema/evm/arguments.md b/docs/schema/evm/arguments.md index 82776a2e..c87a9a3c 100644 --- a/docs/schema/evm/arguments.md +++ b/docs/schema/evm/arguments.md @@ -2,6 +2,8 @@ title: "EVM Arguments and Returns API" description: "EVM Arguments and Returns API: Bitquery EVM GraphQL schema reference with fields, filters, relationships, and query patterns." --- +# EVM Arguments and Returns API + Smart contract calls and events have arguments. In case the call or event signature is parsed against ABI, the arguments are showing the values, types and names passed to call or event. diff --git a/docs/schema/evm/blocks.md b/docs/schema/evm/blocks.md index c1caa545..fe882105 100644 --- a/docs/schema/evm/blocks.md +++ b/docs/schema/evm/blocks.md @@ -2,6 +2,8 @@ title: "EVM Blocks Schema" description: "Blocks: Bitquery EVM GraphQL schema reference with fields, filters, relationships, and query patterns. Copy GraphQL snippets for production apps." --- +# EVM Blocks Schema + Blocks API provide details on blocks. You can use different [filters](/docs/graphql/filters/) to query data from different dimensions. You can find more examples [here](/docs/blockchain/Ethereum/blocks/blocks-api/) diff --git a/docs/schema/evm/calls.md b/docs/schema/evm/calls.md index 0546bc87..e5874efd 100644 --- a/docs/schema/evm/calls.md +++ b/docs/schema/evm/calls.md @@ -2,6 +2,8 @@ title: "EVM Smart Contract Calls API" description: "EVM Smart Contract Calls API: Bitquery EVM GraphQL schema reference with fields, filters, relationships, and query patterns." --- +# EVM Smart Contract Calls API + Calls API provides details about smart contract calls, arguments, callers, etc. This api gives detailed information about the smart contract calls, including raw data, and supports [Opcodes](https://github.com/crytic/evm-opcodes). diff --git a/docs/schema/evm/dextrades.md b/docs/schema/evm/dextrades.md index a0926e29..5a28f341 100644 --- a/docs/schema/evm/dextrades.md +++ b/docs/schema/evm/dextrades.md @@ -2,6 +2,8 @@ title: "EVM DEX Trades Schema" description: "Explore the EVM DEX Trades schema in Bitquery GraphQL, including trade fields, joins, filters, and example queries for swap analytics." --- +# EVM DEX Trades Schema + DEXTrades api gives trading-related data from different DEXs such as Uniswap, Pancakeswap, 0x, etc. API provides historical and real-time trades and pricing information for tokens. The API allows different filters to query the Smart contract calls details from different dimensions, such as from different DEXs, protocols, tokens, trades, pools, etc. diff --git a/docs/schema/evm/events.md b/docs/schema/evm/events.md index 5c8d81f5..017ec4dc 100644 --- a/docs/schema/evm/events.md +++ b/docs/schema/evm/events.md @@ -2,6 +2,8 @@ title: "EVM Smart Contract Events & logs API" description: "EVM Smart Contract Events & logs API: Bitquery EVM GraphQL schema reference with fields, filters, relationships, and query patterns." --- +# EVM Smart Contract Events & logs API + Smart contract events and logs are an important feature of Ethereum smart contracts that allow developers to track and record specific actions or data on the blockchain. You can retrieve data on blockchain calls and logs from the blockchain network. You can find more examples [here](/docs/blockchain/Ethereum/events/events-api/) diff --git a/docs/schema/evm/miners.md b/docs/schema/evm/miners.md index 1d1ef7b2..453672d6 100644 --- a/docs/schema/evm/miners.md +++ b/docs/schema/evm/miners.md @@ -2,6 +2,8 @@ title: EVM Miner Rewards API description: "EVM Miner Rewards API: Bitquery EVM GraphQL schema reference with fields, filters, relationships, and query patterns. See examples in the Bitquery IDE." --- +# EVM Miner Rewards API + Miner Rewards are the incentives paid out to miners for validating transactions and creating new blocks on the blockchain. You can access Miner Rewards data using the Bitquery API. ```graphql diff --git a/docs/schema/evm/transactions.md b/docs/schema/evm/transactions.md index 704ec837..898d9ab1 100644 --- a/docs/schema/evm/transactions.md +++ b/docs/schema/evm/transactions.md @@ -2,6 +2,8 @@ title: "EVM Transactions Schema API" description: "Transactions API: Bitquery EVM GraphQL schema reference with fields, filters, relationships, and query patterns. Scale further with Kafka or gRPC streams." --- +# EVM Transactions Schema API + The Transactions API provides detailed information on transactions including call count, gas, hash, type, and sender and recipient addresses etc. Here's a sample query to get started. You can see more examples [here](/docs/blockchain/Ethereum/transactions/transaction-api/) query MyQuery \{ diff --git a/docs/schema/evm/transfers.md b/docs/schema/evm/transfers.md index 6502da68..fed92ea2 100644 --- a/docs/schema/evm/transfers.md +++ b/docs/schema/evm/transfers.md @@ -2,6 +2,8 @@ title: "EVM Token Transfers API" description: "EVM Token Transfers API: Bitquery EVM GraphQL schema reference with fields, filters, relationships, and query patterns. See examples in the Bitquery IDE." --- +# EVM Token Transfers API + To retrieve data on token and currency transfers using Bitquery, users can utilize the platform's GraphQL API. The Bitquery API allows users to construct custom queries to retrieve data on a wide range of blockchain events and transactions, including token transfers. You can find more examples [here](/docs/blockchain/Ethereum/transfers/erc20-token-transfer-api/) ```graphql diff --git a/docs/schema/evm/uncles.md b/docs/schema/evm/uncles.md index b976fec4..9b82f9fd 100644 --- a/docs/schema/evm/uncles.md +++ b/docs/schema/evm/uncles.md @@ -2,6 +2,8 @@ title: "EVM Uncle Blocks API" description: "EVM Uncle Blocks API: Bitquery EVM GraphQL schema reference with fields, filters, relationships, and query patterns. See examples in the Bitquery IDE." --- +# EVM Uncle Blocks API + ### What are Uncle Blocks? Uncle blocks, also known as "orphan blocks", are blocks on the blockchain that are not included in the main blockchain. Uncle blocks are still valid blocks, but they were not selected to be included in the main blockchain by the network consensus algorithm. diff --git a/docs/schema/schema-intro.md b/docs/schema/schema-intro.md index df282564..17168a4a 100644 --- a/docs/schema/schema-intro.md +++ b/docs/schema/schema-intro.md @@ -5,4 +5,28 @@ description: "API Schema Overview: Bitquery EVM GraphQL schema reference with fi --- # API Schema Overview -In this section, we will explore the schema for both EVM and non-EVM chains. For a detailed understanding of each cube, such as Transfer, DEXTrade, and others, please refer to the [Cubes section](/docs/category/understanding-cubes/). +This section documents the Bitquery GraphQL **schema** — the fields, filters, and relationships you use to build queries — for both EVM and non-EVM chains. + +## How the schema is organized + +Bitquery models blockchain data as **cubes** — typed collections like `Transfers`, `DEXTrades`, `Balances`, `Events`, and `Calls`. Each cube exposes: + +- **Dimensions** — the fields you select and group by (addresses, tokens, block time, amounts). +- **Filters** — the `where` conditions that narrow results (see [filters](/docs/graphql/filters/)). +- **Metrics** — aggregations like `sum`, `count`, and `uniq` (see [metrics](/docs/graphql/metrics/metrics/)). + +EVM chains (Ethereum, BSC, Base, Arbitrum, …) share one cube shape under the `EVM(...)` root; non-EVM chains (Solana, Tron, Bitcoin) have parallel cubes under their own roots. + +## Browse the schema in the IDE + +The fastest way to explore fields is the schema explorer in the [Bitquery IDE](https://ide.bitquery.io/) — the left panel lists every cube and field for the selected endpoint, with inline types and descriptions. + +## Which dataset a field comes from + +Field availability and history depth depend on the **dataset** (`realtime`, `archive`, `combined`) and the chain — see the [Data Coverage & Retention matrix](/docs/graphql/data-coverage-retention/) before assuming a field has deep history. + +## Next steps + +- [Understanding cubes](/docs/category/understanding-cubes/) +- [Building queries](/docs/graphql/query/) +- [Data Coverage & Retention](/docs/graphql/data-coverage-retention/) diff --git a/docs/start/getting-updates.md b/docs/start/getting-updates.md index 1d096e79..be84426b 100644 --- a/docs/start/getting-updates.md +++ b/docs/start/getting-updates.md @@ -29,7 +29,7 @@ on the result panel: -> Query used: [Real Time Blocks Subscription | BSC](https://graphql.bitquery.io/ide/Real-Time-Blocks-Subscription--BSC) +> Query used: [Real Time Blocks Subscription | BSC](https://ide.bitquery.io/Real-Time-Blocks-Subscription--BSC) To stop updates, press the run button again. diff --git a/docs/usecases/mempool-transaction-fee.md b/docs/usecases/mempool-transaction-fee.md index 635f36d3..31810a00 100644 --- a/docs/usecases/mempool-transaction-fee.md +++ b/docs/usecases/mempool-transaction-fee.md @@ -95,7 +95,7 @@ def main(): st.title("Transaction Fee Analysis Dashboard") ``` -# Fetch data from Mempool API +## Fetch data from Mempool API ```python try: diff --git a/docs/usecases/nft-creator/pages.md b/docs/usecases/nft-creator/pages.md index 0a07743c..90f110de 100644 --- a/docs/usecases/nft-creator/pages.md +++ b/docs/usecases/nft-creator/pages.md @@ -66,3 +66,9 @@ function Home() { export default Home ``` + +## Next steps + +- [Getting started](/docs/usecases/nft-creator/gettingstarted/) +- [Components](/docs/usecases/nft-creator/components/) +- [App](/docs/usecases/nft-creator/app/) diff --git a/src/css/custom.css b/src/css/custom.css index dfd6e9b7..328fc2f3 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -929,3 +929,21 @@ button.copy-md:hover { [data-theme="dark"] button.copy-md:hover { background: var(--bq-berry); } + +/* Auto "Related pages" footer (swizzled DocItem/Content) */ +.related-pages { + margin-top: 3rem; + padding-top: 1.25rem; + border-top: 1px solid var(--ifm-toc-border-color, var(--ifm-color-emphasis-300)); +} +.related-pages__title { + font-weight: 600; + margin-bottom: 0.5rem; +} +.related-pages__list { + margin: 0; + padding-left: 1.1rem; +} +.related-pages__list li { + margin: 0.15rem 0; +} diff --git a/src/theme/DocItem/Content/index.js b/src/theme/DocItem/Content/index.js index 914c01fd..b7859db3 100644 --- a/src/theme/DocItem/Content/index.js +++ b/src/theme/DocItem/Content/index.js @@ -1,11 +1,16 @@ /** - * Swizzled DocItem/Content to add Copy MD button next to the title. + * Swizzled DocItem/Content: + * - "Copy MD" button next to the title (unchanged). + * - Auto "Related pages" footer generated from the sidebar (sibling links in the + * same category). This gives every doc inbound + outbound links with no + * per-page frontmatter, mechanically removing dead-ends. Renders nothing when + * the page has no sidebar category siblings. * No import needed in any .md file - applies to all doc pages. */ import React, {useState, useCallback} from 'react'; import clsx from 'clsx'; import {ThemeClassNames} from '@docusaurus/theme-common'; -import {useDoc} from '@docusaurus/plugin-content-docs/client'; +import {useDoc, useDocsSidebar} from '@docusaurus/plugin-content-docs/client'; import MDXContent from '@theme/MDXContent'; function toRawGitHubUrl(editUrl) { @@ -49,16 +54,63 @@ function CopyMDButton() { }, [metadata.editUrl]); return ( - ); } +// Find the sibling doc-links of the current page within its sidebar category. +function findSiblingLinks(items, permalink) { + for (const item of items || []) { + if (item && item.type === 'category') { + const links = (item.items || []).filter((c) => c && c.type === 'link'); + if (links.some((c) => c.href === permalink)) { + return links; + } + const nested = findSiblingLinks(item.items, permalink); + if (nested) { + return nested; + } + } + } + return null; +} + +function RelatedPages() { + let permalink; + let sidebar; + try { + permalink = useDoc()?.metadata?.permalink; + sidebar = useDocsSidebar(); + } catch { + return null; + } + if (!sidebar || !permalink) { + return null; + } + const siblings = findSiblingLinks(sidebar.items, permalink); + if (!siblings) { + return null; + } + const links = siblings.filter((c) => c.href !== permalink).slice(0, 8); + if (links.length === 0) { + return null; + } + return ( + + ); +} + export default function DocItemContent({children}) { return (
@@ -66,6 +118,7 @@ export default function DocItemContent({children}) {
{children} + ); } From 147948f866604e0a2132021d4cdfdd5a7ff47c25 Mon Sep 17 00:00:00 2001 From: Gaurav agarwal Date: Fri, 24 Jul 2026 20:42:22 +0530 Subject: [PATCH 4/4] Revert auto related-pages swizzle (curated "Next steps" is used instead) Per founder: the manual "Next steps" sections cover related-links, so the auto-generated sidebar-sibling footer isn't needed. Restore DocItem/Content to just the Copy-MD button; remove the .related-pages CSS. (The IDE-link sweep, H1 hygiene, and thin-page expansions from the prior commit are unaffected.) Co-Authored-By: Claude Fable 5 --- src/css/custom.css | 18 -------- src/theme/DocItem/Content/index.js | 67 ++++-------------------------- 2 files changed, 7 insertions(+), 78 deletions(-) diff --git a/src/css/custom.css b/src/css/custom.css index 328fc2f3..dfd6e9b7 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -929,21 +929,3 @@ button.copy-md:hover { [data-theme="dark"] button.copy-md:hover { background: var(--bq-berry); } - -/* Auto "Related pages" footer (swizzled DocItem/Content) */ -.related-pages { - margin-top: 3rem; - padding-top: 1.25rem; - border-top: 1px solid var(--ifm-toc-border-color, var(--ifm-color-emphasis-300)); -} -.related-pages__title { - font-weight: 600; - margin-bottom: 0.5rem; -} -.related-pages__list { - margin: 0; - padding-left: 1.1rem; -} -.related-pages__list li { - margin: 0.15rem 0; -} diff --git a/src/theme/DocItem/Content/index.js b/src/theme/DocItem/Content/index.js index b7859db3..914c01fd 100644 --- a/src/theme/DocItem/Content/index.js +++ b/src/theme/DocItem/Content/index.js @@ -1,16 +1,11 @@ /** - * Swizzled DocItem/Content: - * - "Copy MD" button next to the title (unchanged). - * - Auto "Related pages" footer generated from the sidebar (sibling links in the - * same category). This gives every doc inbound + outbound links with no - * per-page frontmatter, mechanically removing dead-ends. Renders nothing when - * the page has no sidebar category siblings. + * Swizzled DocItem/Content to add Copy MD button next to the title. * No import needed in any .md file - applies to all doc pages. */ import React, {useState, useCallback} from 'react'; import clsx from 'clsx'; import {ThemeClassNames} from '@docusaurus/theme-common'; -import {useDoc, useDocsSidebar} from '@docusaurus/plugin-content-docs/client'; +import {useDoc} from '@docusaurus/plugin-content-docs/client'; import MDXContent from '@theme/MDXContent'; function toRawGitHubUrl(editUrl) { @@ -54,63 +49,16 @@ function CopyMDButton() { }, [metadata.editUrl]); return ( - ); } -// Find the sibling doc-links of the current page within its sidebar category. -function findSiblingLinks(items, permalink) { - for (const item of items || []) { - if (item && item.type === 'category') { - const links = (item.items || []).filter((c) => c && c.type === 'link'); - if (links.some((c) => c.href === permalink)) { - return links; - } - const nested = findSiblingLinks(item.items, permalink); - if (nested) { - return nested; - } - } - } - return null; -} - -function RelatedPages() { - let permalink; - let sidebar; - try { - permalink = useDoc()?.metadata?.permalink; - sidebar = useDocsSidebar(); - } catch { - return null; - } - if (!sidebar || !permalink) { - return null; - } - const siblings = findSiblingLinks(sidebar.items, permalink); - if (!siblings) { - return null; - } - const links = siblings.filter((c) => c.href !== permalink).slice(0, 8); - if (links.length === 0) { - return null; - } - return ( - - ); -} - export default function DocItemContent({children}) { return (
@@ -118,7 +66,6 @@ export default function DocItemContent({children}) {
{children} - ); }