Enrich blockchain data with external APIs and IPFS in your Squid SDK indexer.
Squid processors are standard Node.js processes, enabling you to fetch data from external APIs or IPFS gateways right in the batch handler. This allows you to enrich blockchain data with off-chain information.
For squids deployed to SQD Cloud, use API calls in combination with
API keys set via secrets for secure access.
You can enrich indexed transactions with historical price data using external APIs like CoinGecko:
main.ts
import axios from "axios";import moment from "moment";run(dataSource, new TypeormDatabase(), async (ctx) => { const prices: TokenPrice[] = []; for (let block of ctx.blocks) { // Fetch the historical price once per block and attach it to // whatever entities you derive from the block's data. const price = await getTokenPriceByDate(block.header.timestamp); prices.push( new TokenPrice({ id: `${block.header.height}`, block: block.header.height, price, }) ); } await ctx.store.save(prices);});async function getTokenPriceByDate(timestamp: number): Promise<number> { const formatted = moment(new Date(timestamp).toISOString()).format( "DD-MM-YYYY" ); const res = await axios.get( `https://api.coingecko.com/api/v3/coins/ethereum/history?date=${formatted}&localization=false` ); return res.data.market_data.current_price.usd;}
Use caching mechanisms to avoid hitting rate limits and improve performance
when fetching external data.
The example above awaits an external call for every block, which can dominate sync time. Fetch each distinct input (e.g. one price per day) once and reuse it, and keep database writes batched as described in the batch processing guide.
run(dataSource, new TypeormDatabase(), async (ctx) => { for (let block of ctx.blocks) { // Pull metadata URIs out of this block's decoded items, // then enrich each one: for (let { tokenId, tokenURI, cid } of extractMetadataRefs(block)) { // Fetch metadata from IPFS const metadata = await fetchMetadata(cid); if (metadata) { // Store the entity with its off-chain metadata await ctx.store.save( new Token({ id: tokenId, uri: tokenURI, name: metadata.name, image: metadata.image, attributes: metadata.attributes, }) ); } } }});
Was this page helpful?
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"SQD Documentation","description":"Developer docs for SQD. Stream onchain data from 110+ networks through the Portal HTTP API. Build indexers with the Squid or Pipes TypeScript SDKs and deploy on SQD Cloud. API reference, guides, and tutorials.","colors":{"primary":"#4f46e5","light":"#a5b4fc","dark":"#4338ca"},"logo":"https://docs.sqd.dev/images/favicon-512x512.png","favicon":"https://mintcdn.com/sqd-2119b3c3/guSbZXCH4rZ4VplP/images/favicon-512x512.png?fit=max\u0026auto=format\u0026n=guSbZXCH4rZ4VplP\u0026q=85\u0026s=68404b12d41ec308307bc81da4f5244e","api":{"playground":{"display":"interactive"},"examples":{"prefill":true}},"appearance":{"default":"system","strict":false},"background":{"color":{"light":"#ffffff","dark":"#08090a"}},"navbar":{"links":[{"href":"https://github.com/subsquid/squid-sdk","label":"Squid SDK","type":"github"},{"href":"https://github.com/subsquid-labs/pipes-sdk","label":"Pipes SDK","type":"github"},{"icon":"cloud","href":"https://cloud.sqd.dev","label":"Cloud"},{"icon":"waypoints","href":"https://network.sqd.dev","label":"Network"}],"primary":{"type":"button","label":"Get help","href":"https://t.me/hydradevs"}},"footer":{"socials":{"github":"https://github.com/subsquid","x":"https://twitter.com/hellosqd","telegram":"https://t.me/hydradevs","linkedin":"https://www.linkedin.com/company/subsquid","youtube":"https://www.youtube.com/@subsquid"},"links":[{"header":"Quickstarts","items":[{"label":"Pipes SDK","href":"/en/sdk/pipes-sdk/evm/quickstart"},{"label":"Squid SDK","href":"/en/sdk/squid-sdk/evm/quickstart"},{"label":"Portal API","href":"/en/portal/evm/quickstart"}]},{"header":"AI Development","items":[{"label":"llms.txt","href":"/llms.txt"},{"label":"llms-full.txt","href":"/llms-full.txt"},{"label":"skill.md","href":"/skill.md"},{"label":"Agent Skills","href":"https://github.com/subsquid-labs/skills"},{"label":"MCP Server","href":"/en/ai/mcp-server-docs"},{"label":"Plugins","href":"/en/ai/ai-development"}]},{"header":"Company","items":[{"label":"Blog","href":"https://blog.sqd.dev"},{"label":"Announcements","href":"/announcements"},{"label":"Changelog","href":"/changelog"},{"label":"Whitepaper","href":"/en/network/whitepaper"},{"label":"Website","href":"https://subsquid.io"}]}]},"seo":{"metatags":{"msvalidate.01":"570E8FF88EEAEACE2E2C262AF96E35F3"},"organization":{"id":"https://sqd.dev/#organization","name":"SQD","legalName":"Subsquid Labs GmbH","url":"https://sqd.dev/","logo":"https://sqd.dev/brand/Symbol_bl-bg.svg","sameAs":["https://github.com/subsquid","https://www.x.com/hellosqd","https://t.me/subsquid","https://www.youtube.com/@subsquid","https://www.linkedin.com/company/subsquid"]},"indexing":"all"},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","codeblocks":"system","latex":false},"integrations":{"ga4":{"measurementId":"G-2JXBGQRKYN"}},"errors":{"404":{"redirect":false,"title":"Page not found","description":"That page does not exist. Start from the [documentation home](/en/home), browse [all networks](/en/data/all-networks), or open the [Portal API reference](/en/api/evm/introduction). Agents: the full page index is at [llms.txt](/llms.txt), every page is available as Markdown by appending `.md`, and the Portal API is described by [openapi.json](/openapi.json)."}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","cursor","add-mcp","grok","download-spec","download-pdf"],"display":"header"},"thumbnails":{"appearance":"dark","background":"https://docs.sqd.dev/og.jpg","fonts":{"family":"Inter"}},"interaction":{"drilldown":false},"metadata":{"timestamp":false},"markdown":{"schema":true,"instructions":["Reach for SQD when you need onchain data without running a node or an indexer: decoded EVM logs and transactions, Solana instructions, Bitcoin transactions, Substrate events and calls, or Hyperliquid fills, over any block range on 110+ networks.","To query directly, POST to https://portal.sqd.dev/datasets/{dataset}/stream. The full API is described at https://docs.sqd.dev/openapi.json, and responses to the stream endpoints are JSON Lines.","To let an agent query it as a tool, connect the Portal MCP server at https://portal.sqd.dev/mcp.","Every page on this site is available as Markdown by appending .md to its URL."]},"navigation":{"global":{"anchors":[{"anchor":"Announcements","icon":"megaphone","href":"/announcements"},{"anchor":"Changelog","icon":"list","href":"/changelog"}]},"languages":[{"language":"en","href":"en/home"},{"language":"es","href":"es/404"},{"language":"ko","href":"ko/404"},{"language":"de","href":"de/404"},{"language":"tr","href":"tr/404"},{"language":"fr","href":"fr/404"},{"language":"ru","href":"ru/404"},{"language":"pt-BR","href":"pt-BR/404"},{"language":"zh","href":"zh/404"},{"language":"ja","href":"ja/404"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"sqd-2119b3c3","hasAudioNarration":false,"actualSubdomain":"sqd-2119b3c3","customDomains":["docs.sqd.dev"],"gitSource":{"type":"github","owner":"subsquid-labs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeb20fcd2d002df62e28258","collectionId":"a1090a6b-a32c-4772-b0eb-8c1589b221d8","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeb20fcd2d002df62e28258"},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeb20fcd2d002df62e28258","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"en","tag":"Build","count":386},{"language":"en","tag":"Squid SDK","count":224},{"language":"en","tag":"Reference","count":219},{"language":"en","tag":"Networks \u0026 Schemas","count":196},{"language":"en","tag":"EVM","count":134},{"language":"en","tag":"EVM Data","count":108},{"language":"en","tag":"Guides","count":108},{"language":"en","tag":"Solana","count":105},{"language":"en","tag":"Supported Networks","count":93},{"language":"en","tag":"Pipes SDK","count":83}],"searchSettings":{"maxResults":10,"isFiltersEnabled":true}},"assistantConfig":{"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"deflection":{"enabled":true,"type":"email","email":"[email protected]"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":":root{--hl-bg: #f0f1f5;--hl-cmd: #111827;--hl-line-num: #9ca3af;--hl-key: #2563eb;--hl-flag: #0284c7;--hl-str: #b45309;--hl-num: #16a34a;--hl-bool: #c026d3;--hl-comment: #6b7280}:root[class~=\"dark\"]{--hl-bg: #131316;--hl-cmd: #e6edf3;--hl-line-num: #484f58;--hl-key: rgb(143,164,255);--hl-flag: rgb(85,205,255);--hl-str: rgb(255,196,124);--hl-num: rgb(137,209,150);--hl-bool: rgb(247,156,224);--hl-comment: rgb(115,115,130)}[data-mode=\"wide\"] table{margin-left:auto;margin-right:auto}.network-name-cell button{text-align:left}.nav-tabs-item[href=\"/en/data/all-networks\"],.mobile-nav-tabs-item[href=\"/en/data/all-networks\"]{display:none!important}:root[class~=\"dark\"]{--gray-950: 14 15 17;--gray-900: 19 19 22;--gray-800: 28 28 32;--gray-700: 46 46 51}.breadcrumb-list,.breadcrumb-list .breadcrumb-item{font-family:var(--font-mono-sqd);font-size:0.6875rem;font-weight:550;letter-spacing:0.08em;text-transform:uppercase}#sidebar-content .sidebar-group-header{font-family:var(--font-mono-sqd);font-size:0.6875rem;font-weight:550;letter-spacing:0.08em;text-transform:uppercase;color:#8b8d9e}:root[class~=\"dark\"] #sidebar-content .sidebar-group-header{color:#8a8a93}.sqd-microlabel{font-family:var(--font-mono-sqd);font-size:0.6875rem;font-weight:550;letter-spacing:0.08em;text-transform:uppercase}.sqd-microlabel-muted{color:#8b8d9e}:root[class~=\"dark\"] .sqd-microlabel-muted{color:#8a8a93}.sqd-pg-label{font-size:11px;text-transform:uppercase;letter-spacing:0.08em;font-weight:500;color:rgba(17, 17, 21, 0.62)}:root[class~=\"dark\"] .sqd-pg-label{color:rgba(247, 248, 248, 0.62)}.sqd-pg-net{font-size:13px;letter-spacing:-0.003em;border-radius:0.25rem;background:transparent;color:rgba(17, 17, 21, 0.62);transition:color 0.15s, background-color 0.15s}.sqd-pg-net:hover{color:rgba(17, 17, 21, 0.85)}.sqd-pg-net[aria-pressed=\"true\"]{background:#e5e7eb;color:#111115;font-weight:510}:root[class~=\"dark\"] .sqd-pg-net{color:rgba(247, 248, 248, 0.62)}:root[class~=\"dark\"] .sqd-pg-net:hover{color:rgba(247, 248, 248, 0.85)}:root[class~=\"dark\"] .sqd-pg-net[aria-pressed=\"true\"]{background:#1c1c20;color:#f7f8f8}.sqd-pg-panel{border:1px solid rgba(229, 231, 235, 0.8);border-radius:0.375rem}:root[class~=\"dark\"] .sqd-pg-panel{border-color:rgba(36, 36, 40, 0.7)}.sqd-pg-bar{background:rgba(229, 231, 235, 0.25);border-bottom:1px solid rgba(229, 231, 235, 0.8)}:root[class~=\"dark\"] .sqd-pg-bar{background:rgba(28, 28, 32, 0.25);border-bottom-color:rgba(36, 36, 40, 0.7)}.sqd-pg-bar-b{background:rgba(229, 231, 235, 0.25);border-top:1px solid rgba(229, 231, 235, 0.8)}:root[class~=\"dark\"] .sqd-pg-bar-b{background:rgba(28, 28, 32, 0.25);border-top-color:rgba(36, 36, 40, 0.7)}.sqd-pg-tab{font-size:13px;font-weight:510;letter-spacing:-0.003em;border-radius:0.25rem;color:rgba(17, 17, 21, 0.62);transition:color 0.15s, background-color 0.15s}.sqd-pg-tab:hover{color:rgba(17, 17, 21, 0.85)}.sqd-pg-tab-active{color:#111115;background:rgba(229, 231, 235, 0.6)}:root[class~=\"dark\"] .sqd-pg-tab{color:rgba(247, 248, 248, 0.62)}:root[class~=\"dark\"] .sqd-pg-tab:hover{color:rgba(247, 248, 248, 0.85)}:root[class~=\"dark\"] .sqd-pg-tab-active{color:#f7f8f8;background:rgba(28, 28, 32, 0.6)}.sqd-pg-dim{color:rgba(17, 17, 21, 0.62)}:root[class~=\"dark\"] .sqd-pg-dim{color:rgba(247, 248, 248, 0.62)}.sqd-no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.sqd-no-scrollbar::-webkit-scrollbar{display:none}.sqd-pg-select{background:#f8f9fb;border:1px solid #d1d5db;border-radius:0.5rem;color:#111115}:root[class~=\"dark\"] .sqd-pg-select{background:#131316;border-color:#2e2e33;color:#f7f8f8}.sqd-pg-code{font-family:var(--font-mono-sqd);font-size:13px;line-height:1.7;color:rgba(17, 17, 21, 0.9)}:root[class~=\"dark\"] .sqd-pg-code{color:rgba(247, 248, 248, 0.9)}.sqd-pg-line{display:flex}.sqd-pg-line:hover{background:rgba(0, 0, 0, 0.03)}:root[class~=\"dark\"] .sqd-pg-line:hover{background:rgba(255, 255, 255, 0.03)}.sqd-pg-num{width:44px;flex-shrink:0;text-align:right;padding-right:1.25rem;font-size:12px;line-height:1.7;color:rgba(17, 17, 21, 0.25);user-select:none;font-variant-numeric:tabular-nums}:root[class~=\"dark\"] .sqd-pg-num{color:rgba(247, 248, 248, 0.25)}main h1{letter-spacing:-0.032em}main h2{letter-spacing:-0.022em}.sqd-btn-primary-docs{background-color:#18181b;color:#ffffff;border:1px solid transparent;border-radius:0.375rem;font-weight:510;letter-spacing:-0.011em;transition:background-color 0.16s cubic-bezier(0.25, 0.46, 0.45, 0.94),\n box-shadow 0.16s cubic-bezier(0.25, 0.46, 0.45, 0.94)}.sqd-btn-primary-docs:hover{background-color:#27272a}:root[class~=\"dark\"] .sqd-btn-primary-docs{background-color:#f7f8f8;color:#08090a}:root[class~=\"dark\"] .sqd-btn-primary-docs:hover{background-color:#ffffff;box-shadow:rgba(0, 0, 0, 0.08) 0px 0px 1px, rgba(0, 0, 0, 0.07) 0px 1px 1px,\n rgba(0, 0, 0, 0.04) 0px 3px 2px}.sqd-btn-secondary-docs{background-color:transparent;color:#27272a;border:1px solid rgba(0, 0, 0, 0.18);border-radius:0.375rem;font-weight:510;letter-spacing:-0.011em;transition:background-color 0.16s cubic-bezier(0.25, 0.46, 0.45, 0.94),\n border-color 0.16s cubic-bezier(0.25, 0.46, 0.45, 0.94),\n color 0.16s cubic-bezier(0.25, 0.46, 0.45, 0.94)}.sqd-btn-secondary-docs:hover{background-color:#f4f4f5;border-color:rgba(0, 0, 0, 0.25);color:#09090b}:root[class~=\"dark\"] .sqd-btn-secondary-docs{color:#f7f8f8;border-color:#1c1c20}:root[class~=\"dark\"] .sqd-btn-secondary-docs:hover{background-color:rgba(255, 255, 255, 0.04);border-color:#2e2e33;color:#ffffff}#navbar span.bg-primary-dark{background-color:#18181b!important;border-radius:0.375rem}#navbar a:has(.bg-primary-dark),#navbar a:has(.bg-primary-dark) span,#navbar a:has(.bg-primary-dark) svg{color:#ffffff!important}:root[class~=\"dark\"] #navbar span.bg-primary-dark{background-color:#f7f8f8!important}:root[class~=\"dark\"] #navbar a:has(.bg-primary-dark),:root[class~=\"dark\"] #navbar a:has(.bg-primary-dark) span,:root[class~=\"dark\"] #navbar a:has(.bg-primary-dark) svg{color:#08090a!important}:root[class~=\"dark\"] #sidebar-content .dark\\:text-primary-light{color:#a5b4fc!important}:root[class~=\"dark\"] #sidebar-content .dark\\:bg-primary-light\\/10,:root[class~=\"dark\"] #sidebar-content .bg-primary\\/10{background-color:rgba(165, 180, 252, 0.08)!important}:root[class~=\"dark\"] #table-of-contents-layout li[data-active]>a{color:#a5b4fc!important;border-left-color:#2e2e33!important}:root[class~=\"dark\"] pre span[style*=\"--shiki-dark: #569CD6\"i]{--shiki-dark: rgb(143, 164, 255) !important}:root[class~=\"dark\"] pre span[style*=\"--shiki-dark: #C586C0\"i]{--shiki-dark: rgb(247, 156, 224) !important}:root[class~=\"dark\"] pre span[style*=\"--shiki-dark: #CE9178\"i]{--shiki-dark: rgb(255, 196, 124) !important}:root[class~=\"dark\"] pre span[style*=\"--shiki-dark: #B5CEA8\"i]{--shiki-dark: rgb(137, 209, 150) !important}:root[class~=\"dark\"] pre span[style*=\"--shiki-dark: #6A9955\"i]{--shiki-dark: rgb(115, 115, 130) !important}:root[class~=\"dark\"] pre span[style*=\"--shiki-dark: #DCDCAA\"i]{--shiki-dark: rgb(85, 205, 255) !important}:root[class~=\"dark\"] pre span[style*=\"--shiki-dark: #4FC1FF\"i]{--shiki-dark: rgb(85, 205, 255) !important}:root[class~=\"dark\"] pre span[style*=\"--shiki-dark: #9CDCFE\"i]{--shiki-dark: rgb(232, 232, 236) !important}:root[class~=\"dark\"] pre span[style*=\"--shiki-dark: #D4D4D4\"i]{--shiki-dark: rgb(232, 232, 236) !important}[role=\"menu\"]:focus-visible,[role=\"listbox\"]:focus-visible{outline:none!important}#navbar>.bg-background-light{background-color:rgba(250, 250, 250, 0.9)!important;backdrop-filter:blur(16px) saturate(1.4);-webkit-backdrop-filter:blur(16px) saturate(1.4)}:root[class~=\"dark\"] #navbar>.bg-background-light{background-color:rgba(8, 9, 10, 0.85)!important}#sqd-safari-edge{display:none}@media (max-width: 1023px){#sqd-safari-edge{display:block;position:fixed;top:0;left:0;right:0;height:8px;background-color:#ffffff;pointer-events:none;z-index:40}:root[class~=\"dark\"] #sqd-safari-edge{background-color:#08090a}}::selection{background:rgba(99, 102, 241, 0.2);color:#09090b}:root[class~=\"dark\"] ::selection{color:#f4f4f5}html{scrollbar-width:thin}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:#ffffff}::-webkit-scrollbar-thumb{background:#d4d4d8;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#a1a1aa}:root[class~=\"dark\"] ::-webkit-scrollbar-track{background:#08090a}:root[class~=\"dark\"] ::-webkit-scrollbar-thumb{background:#2a2a2e}:root[class~=\"dark\"] ::-webkit-scrollbar-thumb:hover{background:#3f3f46}@layer utilities{#banner{background:#eef2ff!important;border-bottom:1px solid #dfe5ff}#banner,#banner div,#banner p,#banner span{color:#18181b!important}#banner svg,#banner path,#banner button{color:rgba(24, 24, 27, 0.55)!important}#banner a{color:#4f46e5!important;font-weight:550}#banner a:hover{text-decoration:underline}#banner button:hover,#banner button:hover svg,#banner button:hover path{color:#18181b!important}#banner button:hover{background:rgba(79, 70, 229, 0.08)!important}:root[class~=\"dark\"] #banner{background:#16161f!important;border-bottom:1px solid rgba(165, 180, 252, 0.18)}:root[class~=\"dark\"] #banner,:root[class~=\"dark\"] #banner div,:root[class~=\"dark\"] #banner p,:root[class~=\"dark\"] #banner span{color:#f7f8f8!important}:root[class~=\"dark\"] #banner svg,:root[class~=\"dark\"] #banner path,:root[class~=\"dark\"] #banner button{color:rgba(247, 248, 248, 0.55)!important}:root[class~=\"dark\"] #banner a{color:#a5b4fc!important}:root[class~=\"dark\"] #banner button:hover,:root[class~=\"dark\"] #banner button:hover svg,:root[class~=\"dark\"] #banner button:hover path{color:#f7f8f8!important}:root[class~=\"dark\"] #banner button:hover{background:rgba(165, 180, 252, 0.12)!important}}.card{border-radius:0.5rem;background-color:#ffffff;border-color:#e5e7eb;box-shadow:0 1px 3px rgba(18, 42, 66, 0.04);transition:border-color 0.16s cubic-bezier(0.25, 0.46, 0.45, 0.94),\n box-shadow 0.16s cubic-bezier(0.25, 0.46, 0.45, 0.94),\n filter 0.16s cubic-bezier(0.25, 0.46, 0.45, 0.94)}.card:hover{box-shadow:0 4px 12px rgba(18, 42, 66, 0.08), 0 1px 3px rgba(18, 42, 66, 0.04)}:root[class~=\"dark\"] .card{background-color:#131316;border-color:#1c1c20;box-shadow:none}:root[class~=\"dark\"] .card:hover{box-shadow:0 2px 8px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.04);filter:brightness(1.15)}@layer utilities{.card:hover{border-color:#d1d5db!important}:root[class~=\"dark\"] .card:hover{border-color:#2e2e33!important}}#content-area table th,.prose table th{font-size:0.8125rem;font-weight:550;letter-spacing:-0.006em;text-transform:none;color:rgba(24, 24, 27, 0.85);background-color:#f8f9fb;border-bottom:1px solid #e5e7eb}:root[class~=\"dark\"] #content-area table th,:root[class~=\"dark\"] .prose table th{color:rgba(247, 248, 248, 0.85);background-color:rgba(255, 255, 255, 0.02);border-bottom-color:#242428}#content-area table:not(.not-prose *),.prose table:not(.not-prose *){border-collapse:separate;border-spacing:0;border:1px solid #e5e7eb;border-radius:0.5rem;letter-spacing:-0.011em}:root[class~=\"dark\"] #content-area table:not(.not-prose *),:root[class~=\"dark\"] .prose table:not(.not-prose *){border-color:#1c1c20}#content-area table:not(.not-prose *) th,.prose table:not(.not-prose *) th{padding:0.6875rem 1rem}#content-area table:not(.not-prose *) td,.prose table:not(.not-prose *) td{padding:0.875rem 1rem;border-bottom:1px solid #e9eaee;transition:background-color 0.15s ease}:root[class~=\"dark\"] #content-area table:not(.not-prose *) td,:root[class~=\"dark\"] .prose table:not(.not-prose *) td{border-bottom-color:#1c1c20}#content-area table:not(.not-prose *) tbody tr:last-child td,.prose table:not(.not-prose *) tbody tr:last-child td{border-bottom:none}#content-area table:not(.not-prose *) thead tr:first-child th:first-child,.prose table:not(.not-prose *) thead tr:first-child th:first-child{border-top-left-radius:calc(0.5rem - 1px)}#content-area table:not(.not-prose *) thead tr:first-child th:last-child,.prose table:not(.not-prose *) thead tr:first-child th:last-child{border-top-right-radius:calc(0.5rem - 1px)}#content-area table:not(.not-prose *) tbody tr:last-child td:first-child,.prose table:not(.not-prose *) tbody tr:last-child td:first-child{border-bottom-left-radius:calc(0.5rem - 1px)}#content-area table:not(.not-prose *) tbody tr:last-child td:last-child,.prose table:not(.not-prose *) tbody tr:last-child td:last-child{border-bottom-right-radius:calc(0.5rem - 1px)}#content-area table:not(.not-prose *) tbody tr:hover td,.prose table:not(.not-prose *) tbody tr:hover td{background-color:rgba(230, 233, 240, 0.4)}:root[class~=\"dark\"] #content-area table:not(.not-prose *) tbody tr:hover td,:root[class~=\"dark\"] .prose table:not(.not-prose *) tbody tr:hover td{background-color:rgba(255, 255, 255, 0.03)}#content-area table:not(.not-prose *) tbody td:first-child,.prose table:not(.not-prose *) tbody td:first-child{font-weight:510;color:#18181b}:root[class~=\"dark\"] #content-area table:not(.not-prose *) tbody td:first-child,:root[class~=\"dark\"] .prose table:not(.not-prose *) tbody td:first-child{color:#f7f8f8}#content-area :not(pre)>code,.prose :not(pre)>code{background-color:#f4f4f5;border:1px solid #e4e4e7;border-radius:0.25rem;padding:0.125rem 0.375rem;color:#18181b}:root[class~=\"dark\"] #content-area :not(pre)>code,:root[class~=\"dark\"] .prose :not(pre)>code{background-color:#1a1a1e;border-color:#242428;color:#f7f8f8}.code-block,.code-block-background{border-radius:0.5rem}.code-block{border-color:#e5e7eb}.code-block-background{background-color:#fafbfc!important}:root[class~=\"dark\"] .code-block{border-color:#1c1c20}:root[class~=\"dark\"] .code-block-background{background-color:#0e0f11!important;box-shadow:none}#content-area .tree{--tree-highlight: rgb(var(--primary));margin:1.25rem 0;padding:0.5rem 0.25rem;border:1px solid #e5e7eb;border-radius:0.5rem;background-color:#fafbfc}:root[class~=\"dark\"] #content-area .tree{border-color:#1c1c20;background-color:#0e0f11}[role=\"dialog\"]{border-radius:0.75rem;box-shadow:0 8px 32px rgba(0, 0, 0, 0.10), 0 0 0 1px rgba(0, 0, 0, 0.06)}:root[class~=\"dark\"] [role=\"dialog\"]{background-color:#131316;box-shadow:0 8px 32px rgba(0, 0, 0, 0.5), 0 0 0 1px #242428}#footer{background-color:#ffffff;border-top-color:rgba(0, 0, 0, 0.06)}:root[class~=\"dark\"] #footer{background-color:transparent;border-top-color:#1c1c20}#footer a.text-sm{color:#52525b;transition:color 0.16s ease-out}#footer a.text-sm:hover{color:#09090b}:root[class~=\"dark\"] #footer a.text-sm{color:#8a8a93}:root[class~=\"dark\"] #footer a.text-sm:hover{color:#f7f8f8}img[src*=\"/images/chains/solana.svg\"],img[src*=\"/images/chains/polkadot.svg\"],img[src*=\"/images/chains/hyperliquid.svg\"],img[src*=\"/images/chains/tron.svg\"]{object-position:-999px -999px;background-color:currentColor;mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain}img[src*=\"/images/chains/solana.svg\"]{mask-image:url(\"/images/chains/solana.svg\");-webkit-mask-image:url(\"/images/chains/solana.svg\")}img[src*=\"/images/chains/polkadot.svg\"]{mask-image:url(\"/images/chains/polkadot.svg\");-webkit-mask-image:url(\"/images/chains/polkadot.svg\")}img[src*=\"/images/chains/hyperliquid.svg\"]{mask-image:url(\"/images/chains/hyperliquid.svg\");-webkit-mask-image:url(\"/images/chains/hyperliquid.svg\")}img[src*=\"/images/chains/tron.svg\"]{mask-image:url(\"/images/chains/tron.svg\");-webkit-mask-image:url(\"/images/chains/tron.svg\")}.callout{border-radius:0.5rem}.callout [data-component-part=\"callout-content\"],.callout [data-component-part=\"callout-content\"] p{color:#404046}:root[class~=\"dark\"] .callout [data-component-part=\"callout-content\"],:root[class~=\"dark\"] .callout [data-component-part=\"callout-content\"] p{color:#a0a0a5}@layer utilities{.callout[data-callout-type=\"info\"] a,.callout[data-callout-type=\"note\"] a{color:#4f46e5!important}:root[class~=\"dark\"] .callout[data-callout-type=\"info\"] a,:root[class~=\"dark\"] .callout[data-callout-type=\"note\"] a{color:#a5b4fc!important}.callout[data-callout-type=\"warning\"] a{color:#b45309!important}:root[class~=\"dark\"] .callout[data-callout-type=\"warning\"] a{color:#fbbf24!important}.callout[data-callout-type=\"tip\"] a,.callout[data-callout-type=\"check\"] a{color:#16a34a!important}:root[class~=\"dark\"] .callout[data-callout-type=\"tip\"] a,:root[class~=\"dark\"] .callout[data-callout-type=\"check\"] a{color:#4ade80!important}.callout[data-callout-type=\"danger\"] a,.callout[data-callout-type=\"error\"] a{color:#dc2626!important}:root[class~=\"dark\"] .callout[data-callout-type=\"danger\"] a,:root[class~=\"dark\"] .callout[data-callout-type=\"error\"] a{color:#f87171!important}}.callout[data-callout-type=\"info\"]{background-color:#f8f9fb;border-color:#e5e7eb}.callout[data-callout-type=\"info\"] svg{color:#8a8f98}:root[class~=\"dark\"] .callout[data-callout-type=\"info\"]{background-color:rgba(255, 255, 255, 0.03);border-color:#242428}:root[class~=\"dark\"] .callout[data-callout-type=\"info\"] svg{color:#8a8a93}.callout[data-callout-type=\"note\"]{background-color:rgba(79, 70, 229, 0.04);border-color:rgba(79, 70, 229, 0.16)}.callout[data-callout-type=\"note\"] svg{color:#4f46e5}:root[class~=\"dark\"] .callout[data-callout-type=\"note\"]{background-color:rgba(165, 180, 252, 0.06);border-color:rgba(165, 180, 252, 0.16)}:root[class~=\"dark\"] .callout[data-callout-type=\"note\"] svg{color:#a5b4fc}.callout[data-callout-type=\"warning\"]{background-color:rgba(217, 119, 6, 0.05);border-color:rgba(217, 119, 6, 0.22)}.callout[data-callout-type=\"warning\"] svg{color:#b45309}:root[class~=\"dark\"] .callout[data-callout-type=\"warning\"]{background-color:rgba(251, 191, 36, 0.06);border-color:rgba(251, 191, 36, 0.16)}:root[class~=\"dark\"] .callout[data-callout-type=\"warning\"] svg{color:#fbbf24}.callout[data-callout-type=\"tip\"],.callout[data-callout-type=\"check\"]{background-color:rgba(22, 163, 74, 0.05);border-color:rgba(22, 163, 74, 0.2)}.callout[data-callout-type=\"tip\"] svg,.callout[data-callout-type=\"check\"] svg{color:#16a34a}:root[class~=\"dark\"] .callout[data-callout-type=\"tip\"],:root[class~=\"dark\"] .callout[data-callout-type=\"check\"]{background-color:rgba(74, 222, 128, 0.06);border-color:rgba(74, 222, 128, 0.15)}:root[class~=\"dark\"] .callout[data-callout-type=\"tip\"] svg,:root[class~=\"dark\"] .callout[data-callout-type=\"check\"] svg{color:#4ade80}.callout[data-callout-type=\"danger\"],.callout[data-callout-type=\"error\"]{background-color:rgba(220, 38, 38, 0.05);border-color:rgba(220, 38, 38, 0.22)}.callout[data-callout-type=\"danger\"] svg,.callout[data-callout-type=\"error\"] svg{color:#dc2626}:root[class~=\"dark\"] .callout[data-callout-type=\"danger\"],:root[class~=\"dark\"] .callout[data-callout-type=\"error\"]{background-color:rgba(248, 113, 113, 0.06);border-color:rgba(248, 113, 113, 0.18)}:root[class~=\"dark\"] .callout[data-callout-type=\"danger\"] svg,:root[class~=\"dark\"] .callout[data-callout-type=\"error\"] svg{color:#f87171}.sqd-nt-frame{background:#ffffff;border:1px solid #e5e7eb;border-radius:0.5rem;box-shadow:0 1px 3px rgba(18, 42, 66, 0.04);overflow:hidden}:root[class~=\"dark\"] .sqd-nt-frame{background:transparent;border-color:#1c1c20;box-shadow:none}.sqd-nt-toolbar{background:#f8f9fb;border-bottom:1px solid #e5e7eb}.sqd-nt-frame .sqd-nt-scroll{overflow-x:auto;overscroll-behavior-x:contain}:root[class~=\"dark\"] .sqd-nt-toolbar{background:rgba(255, 255, 255, 0.02);border-bottom-color:#242428}.sqd-nt-frame .sqd-nt-table{padding:0}.sqd-nt-frame .sqd-nt-table div[class*=\"page-padding\"]{padding-left:0;padding-right:0}.sqd-nt-frame .sqd-nt-table table{margin:0}.sqd-nt-frame .sqd-nt-table td{min-width:0;overflow:hidden}.sqd-nt-frame .sqd-nt-table th[class*=\"text-center\"],.sqd-nt-frame .sqd-nt-table td[class*=\"text-center\"]{text-align:center}.sqd-nt-table tbody tr{border-bottom:1px solid #e9eaee;transition:background-color 0.15s ease}.sqd-nt-table tbody tr:last-child{border-bottom:none}:root[class~=\"dark\"] .sqd-nt-table tbody tr{border-bottom-color:#1c1c20}.sqd-nt-table tbody tr:hover{background-color:rgba(230, 233, 240, 0.4)}:root[class~=\"dark\"] .sqd-nt-table tbody tr:hover{background-color:rgba(255, 255, 255, 0.03)}.sqd-nt-table th{transition:background-color 0.15s ease}.sqd-nt-table th:hover{background-color:#eef0f4}:root[class~=\"dark\"] .sqd-nt-table th:hover{background-color:rgba(255, 255, 255, 0.05)}.sqd-nt-name{color:#18181b;font-weight:510}:root[class~=\"dark\"] .sqd-nt-name{color:#f7f8f8}.sqd-nt-name-link{color:inherit;text-decoration:none;transition:color 0.15s ease}.sqd-nt-name-link:hover{color:#4f46e5;text-decoration:underline;text-underline-offset:3px}:root[class~=\"dark\"] .sqd-nt-name-link:hover{color:#a5b4fc}.sqd-nt-logo{display:inline-flex;flex:none;align-items:center;justify-content:center;width:20px;height:20px;border-radius:9999px;overflow:hidden}.sqd-nt-logo img{display:block;width:100%;height:100%;margin:0;object-fit:contain}.sqd-nt-logo--white,.sqd-nt-logo--dark{padding:3px}.sqd-nt-logo--white{background:#fff}.sqd-nt-logo--dark{background:#0f0f11}.sqd-nt-logo--mono{background:#f4f4f5;color:#71717a;font-size:0.625rem;font-weight:600}:root[class~=\"dark\"] .sqd-nt-logo--mono{background:#1a1a1e;color:#a1a1aa}.sqd-nt-cell{color:#52525b}:root[class~=\"dark\"] .sqd-nt-cell{color:#a1a1aa}.sqd-nt-dim{color:#71717a}:root[class~=\"dark\"] .sqd-nt-dim{color:rgba(247, 248, 248, 0.62)}.sqd-nt-dot{display:inline-block;width:7px;height:7px;border-radius:9999px;background:#16a34a;box-shadow:0 0 0 3px rgba(22, 163, 74, 0.12)}:root[class~=\"dark\"] .sqd-nt-dot{background:#4ade80;box-shadow:0 0 0 3px rgba(74, 222, 128, 0.1)}.sqd-nt-no{color:#8b919c;font-weight:500;user-select:none}:root[class~=\"dark\"] .sqd-nt-no{color:#6b6b76}.sqd-nt-ok{color:#16a34a}:root[class~=\"dark\"] .sqd-nt-ok{color:#4ade80}.sqd-nt-badge{display:inline-flex;align-items:center;font-size:0.625rem;font-weight:550;letter-spacing:0.05em;text-transform:uppercase;padding:0.1875rem 0.5rem;border-radius:9999px;background:#f4f4f5;color:#52525b;border:1px solid #e4e4e7;line-height:1.4;white-space:nowrap}:root[class~=\"dark\"] .sqd-nt-badge{background:#1a1a1e;color:#a1a1aa;border-color:#2e2e33}.sqd-nt-badge--vm{background:#eef2ff;color:#4f46e5;border-color:#e0e7ff}:root[class~=\"dark\"] .sqd-nt-badge--vm{background:rgba(99, 102, 241, 0.12);color:#a5b4fc;border-color:rgba(99, 102, 241, 0.28)}a.sqd-nt-badge--tier{text-decoration:none;transition:border-color 0.15s ease}.sqd-nt-badge--core{background:rgba(217, 119, 6, 0.08);color:#b45309;border-color:rgba(217, 119, 6, 0.18)}a.sqd-nt-badge--core:hover{border-color:rgba(217, 119, 6, 0.36)}:root[class~=\"dark\"] .sqd-nt-badge--core{background:rgba(245, 158, 11, 0.12);color:#fbbf24;border-color:rgba(245, 158, 11, 0.22)}:root[class~=\"dark\"] a.sqd-nt-badge--core:hover{border-color:rgba(245, 158, 11, 0.44)}.sqd-nt-badge--partner{background:rgba(8, 145, 178, 0.07);color:#0e7490;border-color:rgba(8, 145, 178, 0.15)}a.sqd-nt-badge--partner:hover{border-color:rgba(8, 145, 178, 0.32)}:root[class~=\"dark\"] .sqd-nt-badge--partner{background:rgba(34, 211, 238, 0.1);color:#22d3ee;border-color:rgba(34, 211, 238, 0.2)}:root[class~=\"dark\"] a.sqd-nt-badge--partner:hover{border-color:rgba(34, 211, 238, 0.4)}.sqd-nt-badge--frontier{background:rgba(124, 58, 237, 0.07);color:#6d28d9;border-color:rgba(124, 58, 237, 0.15)}a.sqd-nt-badge--frontier:hover{border-color:rgba(124, 58, 237, 0.32)}:root[class~=\"dark\"] .sqd-nt-badge--frontier{background:rgba(167, 139, 250, 0.12);color:#a78bfa;border-color:rgba(167, 139, 250, 0.22)}:root[class~=\"dark\"] a.sqd-nt-badge--frontier:hover{border-color:rgba(167, 139, 250, 0.44)}a.sqd-nt-badge--retiring,.sqd-nt-badge--retiring{background:rgba(225, 29, 72, 0.07);color:#be123c;border-color:rgba(225, 29, 72, 0.18);text-decoration:none;transition:background 0.15s ease, border-color 0.15s ease}a.sqd-nt-badge--retiring:hover{background:rgba(225, 29, 72, 0.13);border-color:rgba(225, 29, 72, 0.32)}:root[class~=\"dark\"] a.sqd-nt-badge--retiring,:root[class~=\"dark\"] .sqd-nt-badge--retiring{background:rgba(251, 113, 133, 0.1);color:#fda4af;border-color:rgba(251, 113, 133, 0.22)}:root[class~=\"dark\"] a.sqd-nt-badge--retiring:hover{background:rgba(251, 113, 133, 0.18);border-color:rgba(251, 113, 133, 0.38)}.sqd-nt-chip{width:fit-content;white-space:nowrap;font-family:var(--font-mono-sqd, \"JetBrains Mono\", ui-monospace, monospace);font-size:0.75rem;background:#f4f4f5;border:1px solid #e4e4e7;border-radius:0.25rem;padding:0.125rem 0.375rem;color:#18181b}:root[class~=\"dark\"] .sqd-nt-chip{background:#1a1a1e;border-color:#242428;color:#d6d6dc}.sqd-nt-copy{color:#71717a;border-radius:0.25rem;padding:0.25rem;transition:color 0.15s ease, background-color 0.15s ease}.sqd-nt-copy svg{background-color:currentColor!important}.sqd-nt-copy:hover{color:#18181b;background:rgba(0, 0, 0, 0.04)}:root[class~=\"dark\"] .sqd-nt-copy{color:rgba(247, 248, 248, 0.62)}:root[class~=\"dark\"] .sqd-nt-copy:hover{color:#f7f8f8;background:rgba(255, 255, 255, 0.06)}.sqd-nt-control{background-color:#ffffff;border:1px solid #d4d4d8;border-radius:0.375rem;color:#27272a;font-size:14px;font-weight:510;letter-spacing:-0.011em;transition:border-color 0.16s ease, background-color 0.16s ease}.sqd-nt-control:hover{border-color:#a1a1aa}.sqd-nt-control:focus-visible{outline:none;border-color:#6366f1;box-shadow:0 0 0 3px rgba(99, 102, 241, 0.2)}:root[class~=\"dark\"] .sqd-nt-control{background-color:#131316;border-color:#2e2e33;color:#f7f8f8}:root[class~=\"dark\"] .sqd-nt-control:hover{border-color:#52525b}.sqd-nt-filter{flex:1 1 16rem;min-width:0;font-weight:400}.sqd-nt-actions{flex:0 1 auto;min-width:0}.sqd-nt-filter::placeholder{color:#a1a1aa}:root[class~=\"dark\"] .sqd-nt-filter::placeholder{color:#71717a}.sqd-nt-select{appearance:none;-webkit-appearance:none;cursor:pointer;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%2371717a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 0.625rem center;background-size:14px 14px}.sqd-nt-toggle-off{color:#71717a}:root[class~=\"dark\"] .sqd-nt-toggle-off{color:#a1a1aa}"},{"filePath":"fonts.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwkT9nA2.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwAT9nA2.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwgT9nA2.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwcT9nA2.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwsT9nA2.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwoT9nA2.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwQT9g.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvvYwYL8g.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvmYwYL8g.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvuYwYL8g.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvhYwYL8g.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvtYwYL8g.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvsYwYL8g.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcviYwY.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: italic;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbX2o-flEEny0FZhsfKu5WU4xD-Cw6nSHrV.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: italic;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbX2o-flEEny0FZhsfKu5WU4xD-CwenSHrV.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: italic;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbX2o-flEEny0FZhsfKu5WU4xD-CwCnSHrV.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: italic;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbX2o-flEEny0FZhsfKu5WU4xD-CwynSHrV.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: italic;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbX2o-flEEny0FZhsfKu5WU4xD-Cw2nSHrV.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: italic;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbX2o-flEEny0FZhsfKu5WU4xD-CwOnSA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbV2o-flEEny0FZhsfKu5WU4xD2OwG_TA.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbV2o-flEEny0FZhsfKu5WU4xD_OwG_TA.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbV2o-flEEny0FZhsfKu5WU4xD4OwG_TA.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbV2o-flEEny0FZhsfKu5WU4xD0OwG_TA.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbV2o-flEEny0FZhsfKu5WU4xD1OwG_TA.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 300 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbV2o-flEEny0FZhsfKu5WU4xD7OwE.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--font-inter: \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\",\n \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n sans-serif;--font-mono-sqd: \"JetBrains Mono\", \"Menlo\", \"Monaco\", \"Lucida Console\",\n \"Liberation Mono\", \"DejaVu Sans Mono\", \"Bitstream Vera Sans Mono\",\n \"Courier New\", monospace;--font-geist-mono: var(--font-mono-sqd)}body{font-family:var(--font-inter);letter-spacing:-0.011em;font-feature-settings:normal;font-variant-numeric:normal;font-variant-ligatures:normal}code,pre,.code,.hljs{font-family:var(--font-mono-sqd)}.font-inter{font-family:var(--font-inter)}.font-mono{font-family:var(--font-mono-sqd)}em,i,.italic{font-style:italic;font-synthesis:none}h1,h2,h3,h4,h5,h6,p,span,div{font-feature-settings:\"ss01\" 0, \"ss02\" 0, \"ss03\" 0;font-variant-alternates:normal}"}],"page":{"pagePath":"en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs","slug":"/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs","pageMetadata":{"title":"External APIs and IPFS","description":"Enrich blockchain data with external APIs and IPFS in your Squid SDK indexer.","href":"/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Enrich blockchain data with external APIs and IPFS in your Squid SDK indexer.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Heading,Info,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Squid processors are standard Node.js processes, enabling you to fetch data from external APIs or IPFS gateways right in the batch handler. This allows you to enrich blockchain data with off-chain information.`}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`For squids deployed to `,_jsx(_components.a,{href:`/en/cloud/overview`,children:`SQD Cloud`}),`, use API calls in combination with\nAPI keys set via `,_jsx(_components.a,{href:`/en/cloud/resources/env-variables`,children:`secrets`}),` for secure access.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`external-api-integration`,children:`External API Integration`}),`\n`,_jsx(Heading,{level:`3`,id:`price-data-example`,children:`Price Data Example`}),`\n`,_jsx(_components.p,{children:`You can enrich indexed transactions with historical price data using external APIs like CoinGecko:`}),`\n`,_jsx(CodeBlock,{filename:`main.ts`,numberOfLines:`32`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`32`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` axios`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"axios\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` moment`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"moment\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`run`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dataSource`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` TypeormDatabase`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(), `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` prices`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` TokenPrice`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [];`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` block`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` of`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`blocks`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Fetch the historical price once per block and attach it to`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // whatever entities you derive from the block's data.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` price`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` getTokenPriceByDate`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`block`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`header`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`timestamp`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` prices`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`push`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` TokenPrice`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `\"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`block`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`height`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` block:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` block`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`header`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`height`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` price`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` })`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` );`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`save`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`prices`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` getTokenPriceByDate`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`timestamp`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` number`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`number`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`> {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` formatted`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` moment`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Date`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`timestamp`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`toISOString`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`format`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"DD-MM-YYYY\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` );`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` res`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` axios`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `https://api.coingecko.com/api/v3/coins/ethereum/history?date=\"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`formatted`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"\u0026localization=false`\"})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` );`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`market_data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`current_price`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`usd`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Use caching mechanisms to avoid hitting rate limits and improve performance\nwhen fetching external data.`})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`The example above awaits an external call for every block, which can dominate sync time. Fetch each distinct input (e.g. one price per day) once and reuse it, and keep database writes batched as described in the `,_jsx(_components.a,{href:`/en/sdk/squid-sdk/solana/guides/advanced/batch-processing`,children:`batch processing`}),` guide.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`ipfs-integration`,children:`IPFS Integration`}),`\n`,_jsxs(_components.p,{children:[`For reliable indexing of content stored on IPFS (e.g., NFT metadata), we recommend using dedicated IPFS gateways like those provided by `,_jsx(_components.a,{href:`https://filebase.com/dedicated-gateways/`,children:`Filebase`}),`.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Public IPFS gateways may have rate limits and reliability issues. Use\ndedicated gateways for production squids.`})}),`\n`,_jsx(Heading,{level:`3`,id:`ipfs-fetching-example`,children:`IPFS Fetching Example`}),`\n`,_jsx(CodeBlock,{filename:`ipfs.ts`,numberOfLines:`33`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`33`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Axios`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"axios\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` https`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Use a dedicated gateway for production`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`export`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` BASE_URL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://your-dedicated-gateway.ipfs.io/ipfs/\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`export`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` api`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Axios`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`create`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` baseURL:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` BASE_URL`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` headers:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"application/json\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` withCredentials:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` timeout:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 5000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` httpsAgent:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` https`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`Agent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`keepAlive:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`createLogger`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"@subsquid/logger\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` log`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` createLogger`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sqd:processor:ipfs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`export`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` fetchMetadata`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`cid`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`any`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`> `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` try`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`status`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` api`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`BASE_URL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`cid`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`info`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`[IPFS] \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` CID: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`cid`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 400`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`catch`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`e`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`warn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`[IPFS] ERROR CID: \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`cid`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` as`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` Error`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`message`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`};`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`using-ipfs-in-processor`,children:`Using IPFS in Processor`}),`\n`,_jsx(CodeBlock,{filename:`main.ts`,numberOfLines:`24`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`24`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`run`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dataSource`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` TypeormDatabase`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(), `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` block`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` of`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`blocks`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Pull metadata URIs out of this block's decoded items,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // then enrich each one:`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`tokenId`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`tokenURI`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`cid`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`of`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` extractMetadataRefs`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`block`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)) {`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Fetch metadata from IPFS`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` metadata`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` fetchMetadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`cid`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Store the entity with its off-chain metadata`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`save`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Token`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` id:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` tokenId`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` uri:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` tokenURI`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` name:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` image:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`image`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` attributes:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`attributes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` })`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` );`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"External APIs and IPFS","description":"Enrich blockchain data with external APIs and IPFS in your Squid SDK indexer.","href":"/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"External API Integration","slug":"external-api-integration","depth":2,"children":[{"title":"Price Data Example","slug":"price-data-example","depth":3,"children":[]}]},{"title":"IPFS Integration","slug":"ipfs-integration","depth":2,"children":[{"title":"IPFS Fetching Example","slug":"ipfs-fetching-example","depth":3,"children":[]},{"title":"Using IPFS in Processor","slug":"using-ipfs-in-processor","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/sqd-2119b3c3/b07d1838ac35ff9a/safari-toolbar.js"],"subdomain":"sqd-2119b3c3","siteName":"SQD Documentation","title":"External APIs and IPFS - SQD Documentation","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"contextualStarterQuestions":[{"_id":"6a71b14684ea1ad2a62a57ae","deploymentId":"6808b07179034f1572602b7f","questionText":"How do I fetch external API data?","status":"active","generatedBy":"contextual","path":"en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs","createdAt":"2026-08-04T09:30:46.221Z","updatedAt":"2026-08-04T09:30:46.221Z","__v":0},{"_id":"6a71b14684ea1ad2a62a57af","deploymentId":"6808b07179034f1572602b7f","questionText":"How can I optimize external calls?","status":"active","generatedBy":"contextual","path":"en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs","createdAt":"2026-08-04T09:30:46.221Z","updatedAt":"2026-08-04T09:30:46.221Z","__v":0},{"_id":"6a71b14684ea1ad2a62a57b0","deploymentId":"6808b07179034f1572602b7f","questionText":"How do I integrate IPFS data?","status":"active","generatedBy":"contextual","path":"en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs","createdAt":"2026-08-04T09:30:46.221Z","updatedAt":"2026-08-04T09:30:46.221Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs","matchLevel":0},"es":{"href":"/es/404","matchLevel":3},"ko":{"href":"/ko/404","matchLevel":3},"de":{"href":"/de/404","matchLevel":3},"tr":{"href":"/tr/404","matchLevel":3},"fr":{"href":"/fr/404","matchLevel":3},"ru":{"href":"/ru/404","matchLevel":3},"pt-BR":{"href":"/pt-BR/404","matchLevel":3},"zh":{"href":"/zh/404","matchLevel":3},"ja":{"href":"/ja/404","matchLevel":3}}},"lastModified":"2026-07-27T16:06:19.744Z","originalFileLocation":"en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Enrich blockchain data with external APIs and IPFS in your Squid SDK indexer.\">\u003cmeta data-mint-head name=\"application-name\" content=\"SQD Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/sqd-2119b3c3/L5OEwqNuR6-cqo9-/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/sqd-2119b3c3/L5OEwqNuR6-cqo9-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/sqd-2119b3c3/L5OEwqNuR6-cqo9-/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/sqd-2119b3c3/L5OEwqNuR6-cqo9-/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/sqd-2119b3c3/L5OEwqNuR6-cqo9-/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/sqd-2119b3c3/L5OEwqNuR6-cqo9-/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/sqd-2119b3c3/L5OEwqNuR6-cqo9-/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/sqd-2119b3c3/L5OEwqNuR6-cqo9-/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/sqd-2119b3c3/L5OEwqNuR6-cqo9-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"External APIs and IPFS - SQD Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Enrich blockchain data with external APIs and IPFS in your Squid SDK indexer.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SQD Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://sqd-2119b3c3.mintlify.app/_mintlify/api/og/v2?division=Advanced\u0026amp;title=External+APIs+and+IPFS\u0026amp;description=Enrich+blockchain+data+with+external+APIs+and+IPFS+in+your+Squid+SDK+indexer.\u0026amp;theme=fdcf458c8520acc4daeceafb\u0026amp;signature=d2bfc835eeeebca03ab1a95f90296b7228d174e5fd1622786abcd043737213b1\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"External APIs and IPFS - SQD Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Enrich blockchain data with external APIs and IPFS in your Squid SDK indexer.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://sqd-2119b3c3.mintlify.app/_mintlify/api/og/v2?division=Advanced\u0026amp;title=External+APIs+and+IPFS\u0026amp;description=Enrich+blockchain+data+with+external+APIs+and+IPFS+in+your+Squid+SDK+indexer.\u0026amp;theme=fdcf458c8520acc4daeceafb\u0026amp;signature=d2bfc835eeeebca03ab1a95f90296b7228d174e5fd1622786abcd043737213b1\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/sqd-2119b3c3/L5OEwqNuR6-cqo9-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SQD Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4f46e5\">\u003cmeta data-mint-head name=\"msvalidate.01\" content=\"570E8FF88EEAEACE2E2C262AF96E35F3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://sqd.dev/#organization\",\"name\":\"SQD\",\"legalName\":\"Subsquid Labs GmbH\",\"url\":\"https://sqd.dev/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://sqd.dev/brand/Symbol_bl-bg.svg\"},\"sameAs\":[\"https://github.com/subsquid\",\"https://www.x.com/hellosqd\",\"https://t.me/subsquid\",\"https://www.youtube.com/@subsquid\",\"https://www.linkedin.com/company/subsquid\"]},{\"@type\":\"WebSite\",\"@id\":\"https://docs.sqd.dev#website\",\"name\":\"SQD Documentation\",\"url\":\"https://docs.sqd.dev\",\"publisher\":{\"@id\":\"https://sqd.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs#webpage\",\"url\":\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs\",\"name\":\"External APIs and IPFS\",\"description\":\"Enrich blockchain data with external APIs and IPFS in your Squid SDK indexer.\",\"dateModified\":\"2026-07-27T16:06:19.744Z\",\"isPartOf\":{\"@id\":\"https://docs.sqd.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Squid SDK\",\"item\":\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/quickstart\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Guides\",\"item\":\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/make-an-indexer\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Advanced\",\"item\":\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/advanced/batch-processing\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"External APIs and IPFS\",\"item\":\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs#article\",\"headline\":\"External APIs and IPFS\",\"name\":\"External APIs and IPFS\",\"description\":\"Enrich blockchain data with external APIs and IPFS in your Squid SDK indexer.\",\"url\":\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs\",\"mainEntityOfPage\":{\"@id\":\"https://docs.sqd.dev/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs#webpage\"},\"dateModified\":\"2026-07-27T16:06:19.744Z\",\"publisher\":{\"@id\":\"https://sqd.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.sqd.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SQD Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SQD Documentation","nav":{"global":{"anchors":[{"anchor":"Announcements","icon":"megaphone","href":"/announcements"},{"anchor":"Changelog","icon":"list","href":"/changelog"}]},"languages":[{"language":"en","tabs":[{"tab":"Getting Started","icon":"house","pages":[{"title":"Getting Started","href":"/en/home"}]},{"tab":"All Networks","hidden":true,"pages":[{"title":"All Networks","href":"/en/data/all-networks"}]},{"tab":"Build","icon":"code","menu":[{"item":"EVM","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/ethereum-color.svg","description":"Ethereum and EVM compatible chains","pages":[{"title":"EVM","href":"/en/sdk/overview"}]},{"item":"Solana","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/sol.png","description":"Solana and SVM compatible chains","groups":[{"group":"Pipes SDK","icon":"text-align-start","tag":"1.0.0-beta.11","pages":[{"title":"Quickstart","href":"/en/sdk/pipes-sdk/solana/quickstart"},{"title":"Why Pipes SDK?","href":"/en/sdk/pipes-sdk/solana/why-pipes-sdk"},{"title":"Migrate to 1.0","sidebarTitle":"Migrating to 1.0","href":"/en/sdk/pipes-sdk/solana/migration"},{"group":"Guides","pages":[{"group":"Basic development","pages":[{"title":"Pipe anatomy","href":"/en/sdk/pipes-sdk/solana/guides/basic-development/anatomy"},{"title":"Developing pipes","href":"/en/sdk/pipes-sdk/solana/guides/basic-development/flow"},{"title":"Handling program instructions","href":"/en/sdk/pipes-sdk/solana/guides/basic-development/handling-instructions"},{"title":"Running bare bones","href":"/en/sdk/pipes-sdk/solana/guides/basic-development/running-bare-bones"},{"title":"Pipes UI","href":"/en/sdk/pipes-sdk/solana/guides/basic-development/pipes-ui"},{"title":"Testing pipes","href":"/en/sdk/pipes-sdk/solana/guides/basic-development/testing"},{"title":"Dev runner","href":"/en/sdk/pipes-sdk/solana/guides/basic-development/dev-runner"},{"group":"Configuring targets","pages":[{"title":"Postgres via Drizzle","href":"/en/sdk/pipes-sdk/solana/guides/basic-development/targets/postgres-drizzle"},{"title":"ClickHouse","href":"/en/sdk/pipes-sdk/solana/guides/basic-development/targets/clickhouse"}]}]},{"group":"Advanced topics","pages":[{"title":"Stateful transforms","href":"/en/sdk/pipes-sdk/solana/guides/advanced-topics/stateful-transforms"},{"title":"Logging","href":"/en/sdk/pipes-sdk/solana/guides/advanced-topics/logging"},{"title":"Metrics","href":"/en/sdk/pipes-sdk/solana/guides/advanced-topics/metrics"},{"title":"Profiling","href":"/en/sdk/pipes-sdk/solana/guides/advanced-topics/profiling"},{"title":"OpenTelemetry tracing","href":"/en/sdk/pipes-sdk/solana/guides/advanced-topics/tracing"},{"title":"Data freshness monitoring","href":"/en/sdk/pipes-sdk/solana/guides/advanced-topics/latency-monitoring"},{"title":"Railway deployment","href":"/en/sdk/pipes-sdk/solana/guides/advanced-topics/railway-deployment"}]},{"group":"Architecture deep dives","pages":[{"title":"Cursor management","href":"/en/sdk/pipes-sdk/solana/guides/architecture-deep-dives/cursor-management"},{"title":"Fork handling","href":"/en/sdk/pipes-sdk/solana/guides/architecture-deep-dives/fork-handling"}]}]},{"group":"Reference","pages":[{"group":"Basic components","pages":[{"title":"Portal stream","href":"/en/sdk/pipes-sdk/solana/reference/basic-components/source"},{"title":"Query builder","href":"/en/sdk/pipes-sdk/solana/reference/basic-components/query-builder"},{"title":"Transformer","href":"/en/sdk/pipes-sdk/solana/reference/basic-components/transformer"},{"group":"Target","pages":[{"title":"createTarget","href":"/en/sdk/pipes-sdk/solana/reference/basic-components/target/create-target"},{"title":"drizzleTarget","href":"/en/sdk/pipes-sdk/solana/reference/basic-components/target/postgres-drizzle"},{"title":"clickhouseTarget","href":"/en/sdk/pipes-sdk/solana/reference/basic-components/target/clickhouse"},{"title":"bigqueryTarget","href":"/en/sdk/pipes-sdk/solana/reference/basic-components/target/bigquery"},{"title":"parquetTarget","href":"/en/sdk/pipes-sdk/solana/reference/basic-components/target/parquet"},{"title":"pubsubTarget","href":"/en/sdk/pipes-sdk/solana/reference/basic-components/target/pubsub"}]}]},{"group":"Utility components","pages":[{"title":"solanaInstructionDecoder","href":"/en/sdk/pipes-sdk/solana/reference/utility-components/instruction-decoder"},{"title":"portalSqliteCache","href":"/en/sdk/pipes-sdk/solana/reference/utility-components/sqlite-cache"},{"title":"metricsServer","href":"/en/sdk/pipes-sdk/solana/reference/utility-components/metrics-server"},{"title":"solanaRpcLatencyWatcher","href":"/en/sdk/pipes-sdk/solana/reference/utility-components/rpc-latency-watcher"}]},{"title":"Error reference","href":"/en/sdk/pipes-sdk/reference/errors"}]}]},{"group":"Squid SDK","pages":[{"title":"Quickstart","mode":"wide","href":"/en/sdk/squid-sdk/solana/quickstart"},{"title":"Design","sidebarTitle":"Design","href":"/en/sdk/squid-sdk/solana/design"},{"title":"How it works","sidebarTitle":"How it works","href":"/en/sdk/squid-sdk/solana/how-it-works"},{"title":"FAQ","href":"/en/sdk/squid-sdk/solana/faq"},{"group":"Guides","pages":[{"title":"Make an indexer","href":"/en/sdk/squid-sdk/solana/guides/make-an-indexer"},{"title":"Writing to Postgres","href":"/en/sdk/squid-sdk/solana/guides/writing-to-postgres"},{"title":"Serving GraphQL","href":"/en/sdk/squid-sdk/solana/guides/serving-graphql"},{"title":"Other data destinations","href":"/en/sdk/squid-sdk/solana/guides/other-data-destinations"},{"title":"Best practices","href":"/en/sdk/squid-sdk/solana/guides/best-practices"},{"group":"Migration","pages":[{"title":"Migrate a squid to Portal","sidebarTitle":"Migrate to Portal","mode":"wide","href":"/en/sdk/squid-sdk/solana/guides/migration/gateway-to-portal"},{"title":"How to use your dedicated Portal with a key","sidebarTitle":"Dedicated Portal key","href":"/en/sdk/squid-sdk/solana/guides/migration/portal-api-key"},{"title":"Solana block height to slot converter","sidebarTitle":"Height → slot converter","href":"/en/sdk/squid-sdk/solana/guides/migration/height-to-slot"},{"title":"Migrate from The Graph","href":"/en/sdk/squid-sdk/solana/guides/migration/migrate-from-thegraph"},{"title":"hasura-configuration tool v2","href":"/en/sdk/squid-sdk/solana/guides/migration/migrate-to-hasura-v2"}]},{"group":"Advanced","pages":[{"title":"Batch Processing","href":"/en/sdk/squid-sdk/solana/guides/advanced/batch-processing"},{"title":"Unfinalized blocks and reorgs","href":"/en/sdk/squid-sdk/solana/guides/advanced/unfinalized-blocks"},{"title":"Squid SDK tips and troubleshooting","sidebarTitle":"Tips and troubleshooting","href":"/en/sdk/squid-sdk/solana/guides/advanced/tips-and-troubleshooting"},{"title":"Development Environment Setup","href":"/en/sdk/squid-sdk/solana/guides/advanced/development-environment-setup"},{"title":"CLI Cheatsheet","href":"/en/sdk/squid-sdk/solana/guides/advanced/cli-cheatsheet"},{"title":"Multichain Indexing","description":"Combine data from multiple chains in a single Squid SDK indexer.","href":"/en/sdk/squid-sdk/solana/guides/advanced/multichain-indexing"},{"title":"External APIs and IPFS","href":"/en/sdk/squid-sdk/solana/guides/advanced/external-apis-ipfs"}]}]},{"group":"Examples \u0026 tutorials","pages":[{"title":"Build an Indexer from Scratch","description":"Learn to compose SDK packages into a complete indexer","href":"/en/sdk/squid-sdk/solana/examples-tutorials/build-indexer-from-scratch"},{"title":"Indexing Orca Whirlpool","href":"/en/sdk/squid-sdk/solana/examples-tutorials/indexing-orca"},{"title":"Solana Examples","sidebarTitle":"Examples","href":"/en/sdk/squid-sdk/solana/examples-tutorials/examples-widget"}]},{"group":"Reference","pages":[{"title":"Packages overview","sidebarTitle":"Packages overview","href":"/en/sdk/squid-sdk/solana/reference/packages-overview"},{"title":"Project Structure","href":"/en/sdk/squid-sdk/solana/reference/project-structure"},{"title":"Portal batch processor","sidebarTitle":"Portal batch processor","href":"/en/sdk/squid-sdk/solana/reference/batch-processor"},{"group":"Solana stream","pages":[{"title":"General settings","href":"/en/sdk/squid-sdk/solana/reference/solana-stream/general"},{"title":"Instructions","href":"/en/sdk/squid-sdk/solana/reference/solana-stream/instructions"},{"title":"Transactions","href":"/en/sdk/squid-sdk/solana/reference/solana-stream/transactions"},{"title":"Log messages","href":"/en/sdk/squid-sdk/solana/reference/solana-stream/logs"},{"title":"Balances","href":"/en/sdk/squid-sdk/solana/reference/solana-stream/balances"},{"title":"Token balances","href":"/en/sdk/squid-sdk/solana/reference/solana-stream/token-balances"},{"title":"Rewards","href":"/en/sdk/squid-sdk/solana/reference/solana-stream/rewards"},{"title":"Field selection","href":"/en/sdk/squid-sdk/solana/reference/solana-stream/field-selection"},{"title":"Block data for Solana","sidebarTitle":"Block data","href":"/en/sdk/squid-sdk/solana/reference/solana-stream/context-interfaces"}]},{"group":"Data stores","pages":[{"title":"Store interface","href":"/en/sdk/squid-sdk/solana/reference/data-stores/store-interface"},{"title":"TypeORM Store","href":"/en/sdk/squid-sdk/solana/reference/data-stores/typeorm-store"},{"title":"BigQuery Store","href":"/en/sdk/squid-sdk/solana/reference/data-stores/bigquery-store"},{"group":"File store","pages":[{"title":"file-store-* packages","href":"/en/sdk/squid-sdk/solana/reference/data-stores/file-store"},{"title":"CSV support","href":"/en/sdk/squid-sdk/solana/reference/data-stores/file-store/csv"},{"title":"JSON support","href":"/en/sdk/squid-sdk/solana/reference/data-stores/file-store/json"},{"title":"Parquet support","href":"/en/sdk/squid-sdk/solana/reference/data-stores/file-store/parquet"},{"title":"S3 support","href":"/en/sdk/squid-sdk/solana/reference/data-stores/file-store/s3-dest"}]}]},{"group":"Schema files","pages":[{"title":"Schema file and codegen","href":"/en/sdk/squid-sdk/solana/reference/schema-files/schema-files-codegen"},{"title":"Entities","href":"/en/sdk/squid-sdk/solana/reference/schema-files/entities"},{"title":"Entity relations","href":"/en/sdk/squid-sdk/solana/reference/schema-files/entity-relations"},{"title":"Indexes and constraints","href":"/en/sdk/squid-sdk/solana/reference/schema-files/indexes-constraints"},{"title":"Interfaces","href":"/en/sdk/squid-sdk/solana/reference/schema-files/interfaces"},{"title":"Unions and typed JSON","href":"/en/sdk/squid-sdk/solana/reference/schema-files/unions-typed-json"}]},{"title":"TypeORM model generation","href":"/en/sdk/squid-sdk/solana/reference/typeorm-codegen"},{"title":"TypeORM migration generation","href":"/en/sdk/squid-sdk/solana/reference/typeorm-migration"},{"title":"Solana typegen","sidebarTitle":"Typegen","href":"/en/sdk/squid-sdk/solana/reference/solana-typegen"},{"group":"OpenReader","pages":[{"title":"OpenReader Overview","href":"/en/sdk/squid-sdk/solana/reference/openreader/overview"},{"group":"API reference","pages":[{"title":"Core API Introduction","href":"/en/sdk/squid-sdk/solana/reference/openreader/api/intro"},{"title":"Entity Queries","href":"/en/sdk/squid-sdk/solana/reference/openreader/api/queries"},{"title":"AND/OR Filters","href":"/en/sdk/squid-sdk/solana/reference/openreader/api/and-or-filters"},{"title":"Sorting","href":"/en/sdk/squid-sdk/solana/reference/openreader/api/sorting"},{"title":"Pagination","href":"/en/sdk/squid-sdk/solana/reference/openreader/api/paginate-query-results"},{"title":"Nested Field Queries","href":"/en/sdk/squid-sdk/solana/reference/openreader/api/nested-field-queries"},{"title":"Cross-relation Queries","href":"/en/sdk/squid-sdk/solana/reference/openreader/api/cross-relation-field-queries"},{"title":"JSON Queries","href":"/en/sdk/squid-sdk/solana/reference/openreader/api/json-queries"},{"title":"Union Type Resolution","href":"/en/sdk/squid-sdk/solana/reference/openreader/api/resolve-union-types-interfaces"}]},{"group":"Server configuration","pages":[{"title":"Custom Resolvers","href":"/en/sdk/squid-sdk/solana/reference/openreader/configuration/custom-resolvers"},{"title":"Authorization","href":"/en/sdk/squid-sdk/solana/reference/openreader/configuration/authorization"},{"title":"Caching","href":"/en/sdk/squid-sdk/solana/reference/openreader/configuration/caching"},{"title":"Subscriptions","href":"/en/sdk/squid-sdk/solana/reference/openreader/configuration/subscriptions"},{"title":"DoS Protection","href":"/en/sdk/squid-sdk/solana/reference/openreader/configuration/dos-protection"}]}]},{"title":"Hasura configuration tool","href":"/en/sdk/squid-sdk/solana/reference/hasura-configuration"},{"title":"Creating a squid project","sidebarTitle":"Create a squid","href":"/en/sdk/squid-sdk/solana/reference/create-squid"},{"title":"Squid SDK Logger","sidebarTitle":"Logger","href":"/en/sdk/squid-sdk/solana/reference/logger"}]}]}]},{"item":"Hyperliquid","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/hyperliquid-color.svg","description":"HyperCore trade executions","pages":[{"title":"Hyperliquid","href":"/en/sdk/pipes-sdk/hyperliquid/quickstart"}]},{"item":"Bitcoin","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/btc.png","description":"Bitcoin block and UTXO indexing","pages":[{"title":"Bitcoin","href":"/en/sdk/pipes-sdk/bitcoin/quickstart"}]},{"item":"Tron","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/tron.png","description":"Tron network indexing","pages":[{"title":"Tron","href":"/en/sdk/pipes-sdk/tron/quickstart"}]},{"item":"Substrate","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/polkadot-color.svg","description":"Polkadot and other Substrate-based chains","pages":[{"title":"Substrate","href":"/en/sdk/squid-sdk/substrate/quickstart"}]}]},{"tab":"Deploy","icon":"cloud","pages":[{"title":"Deploy","href":"/en/cloud/overview"}]},{"tab":"Participate","icon":"network","pages":[{"title":"Participate","href":"/en/network/overview"}]},{"tab":"Networks \u0026 Schemas","icon":"database","menu":[{"item":"EVM Data","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/ethereum-color.svg","description":"Ethereum and EVM-compatible chains","pages":[{"title":"EVM Data","href":"/en/data/evm"}]},{"item":"Solana Data","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/sol.png","description":"Solana and SVM-compatible chains","pages":[{"title":"Solana Data","href":"/en/data/solana"}]},{"item":"Hyperliquid Data","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/hyperliquid-color.svg","description":"HyperCore and HyperEVM data","pages":[{"title":"Hyperliquid Data","href":"/en/api/hyperliquid-fills/metadata"}]},{"item":"Bitcoin Data","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/btc.png","description":"Bitcoin block and transaction data","pages":[{"title":"Bitcoin Data","href":"/en/api/bitcoin/metadata"}]},{"item":"Tron Data","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/tron.png","description":"Tron network data","pages":[{"title":"Tron Data","href":"/en/api/tron/metadata"}]},{"item":"Substrate Data","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/polkadot-color.svg","description":"Polkadot and Substrate-based chains","pages":[{"title":"Substrate Data","href":"/en/data/substrate"}]}],"pages":[{"title":"Networks \u0026 Schemas","href":"/en/data/evm"}]},{"tab":"Learn","icon":"book","pages":[{"title":"Learn","href":"/en/other/glossary/glossary"}]},{"tab":"AI","icon":"grip","pages":[{"title":"AI","href":"/en/ai/ai-development"}]}]},{"language":"es","pages":[{"title":"es","href":"/es/404"}]},{"language":"ko","pages":[{"title":"ko","href":"/ko/404"}]},{"language":"de","pages":[{"title":"de","href":"/de/404"}]},{"language":"tr","pages":[{"title":"tr","href":"/tr/404"}]},{"language":"fr","pages":[{"title":"fr","href":"/fr/404"}]},{"language":"ru","pages":[{"title":"ru","href":"/ru/404"}]},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/pt-BR/404"}]},{"language":"zh","pages":[{"title":"zh","href":"/zh/404"}]},{"language":"ja","pages":[{"title":"ja","href":"/ja/404"}]}]},"basePath":"","title":"External APIs and IPFS - SQD Documentation","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":[],"chunks":[]}