Before changing RPC settings or scaling the database, measure where time is
spent. Temporarily replace the body of the
batch handler
with a block counter:
import {run} from '@subsquid/batch-processor'import {createLogger} from '@subsquid/logger'import {TypeormDatabase} from '@subsquid/typeorm-store'const log = createLogger('sqd:processor')run( dataSource, new TypeormDatabase({ stateSchema: 'squid_ingestion_probe' }), async (ctx) => { log.info({ blocks: ctx.blocks.length }, 'ingestion probe') })
Run the probe over the same block range and in the same environment as the slow
run:
If throughput stays similar, investigate the data source, network connection,
RPC rate limits, and RPC provider. If the source is unreliable rather than slow,
a fallback data source with an RPC standby keeps the squid
indexing through outages — see High availability.
An empty handler still advances processor status. Use a disposable database or
a unique stateSchema, as shown above. Do not replace a production handler and
reuse its processor status.
Compare like with like. A historical range served by the SQD Network and a
near-head range served in real time have different performance characteristics.
Narrow requests by contract, topic, and block range whenever possible. Disable optional
fields that are not used — this reduces data transfer and the amount of data
held in each batch.For factory contracts, consider the
two-pass indexing pattern
so that most historical requests can use a known address list.setFields()
controls the shape of returned items. It does not request transactions, logs,
traces, or state diffs by itself. For example:
Here, include: { transaction: true } requests each matching log’s parent
transaction and adds it to block.transactions. The transaction selector in
setFields() only adds input to those requested transaction items. Request
related collections such as transaction logs, traces, or state diffs explicitly
when they are also required.
Batch boundaries are an implementation detail and can change between runs. The
same block range can arrive as several different batch groupings.
Do not let results depend on mutable module-level or global state carried from
one batch to the next.
Persist correctness-critical state in the database, or derive it again from
the current batch and durable data.
Keep in-memory caches bounded and safe to rebuild after a restart.
Test important changes with multiple clean syncs and compare the resulting
rows or a stable export.
Batch handlers should also be safe to retry. TypeormDatabase can run a
handler more than once for the same data when a transaction is retried or the
chain reorganizes. See the
typeorm-store transaction notes.
Processors can receive large batches, and the number of blocks and selected
items per batch varies. Keep memory and CPU use close to linear in the number
of selected items:
collect IDs in a Set, then load matching rows with one findBy() call;
update entities in a Map, then save them as an array;
avoid nested scans over the complete batch;
clear temporary collections at the end of each handler call;
load test with realistic event density, not only a short quiet range.
Do not replace batching with a database read or write per event. The
batch-processing patterns
show how to load and persist entities in groups.
By default, a processor fetches only blocks that contain requested items. Add
includeAllBlocks() when logic must run on every block:
const dataSource = new DataSourceBuilder() // ...data requests... .includeAllBlocks() .build()run(dataSource, new TypeormDatabase(), async (ctx) => { for (const block of ctx.blocks) { if (block.header.height % 100 === 0) { await updatePeriodicState(ctx, block) } }})
includeAllBlocks()
accepts an optional block range, so limit it when the requirement is historical
only. Fetching every block increases work. If the periodic work performs
multiple EVM state reads, use
Multicall.
When a reorg replaces unfinalized blocks, a compatible database rolls back SQL
changes made for orphaned blocks and the processor runs the handler again on
the canonical chain. Messages already sent to Kafka, HTTP requests, and other
external effects are not rolled back.For effects derived from unfinalized blocks:
include block height and block hash in the external record;
make writes idempotent;
let consumers replace or retract provisional data when the canonical hash at
a height changes;
delay irreversible actions until the required confirmation or finality
threshold has been reached.
Usually this means that you’re using the decoder on the wrong data. Make sure that the decoder receives only the data you intend it to.Example: suppose you want to add the processing of a Mint event to a squid that is currently processing only Transfer events. You change the processor configuration to get the Mint events for you, but you forget to sort the events in the batch handler and a data item with a Mint event finds its way into a decoder of Transfers.
Another common source of this error is faulty RPC endpoints. If your EVM processor crashes during RPC ingestion on a log with '0x' in its data field, try switching to another RPC provider or, if you are developing locally, to another Ethereum network emulator.
This error can occur for a variety of reasons, but one common cause is choosing a Multicall deployment that is newer than the oldest blocks that have to be indexed. When batch state queries are performed on historical chain state older than the Multicall deployment, EVM detects that and refuses to run.Solutions:
Use an older Multicall deployment.
Delay your chain state queries until a later block.
It is likely that the generated migrations in the db/migrations folder are outdated and do not match the schema file.
Recreate the migrations from scratch as detailed on this page. The relevant commands are listed in the squid-typeorm-migration reference.
Query runner already released. Cannot run queries anymore, or too late to perform db updates, make sure you haven't forgot to await on db query
If your squid saves its data to a database, all operations with ctx.store are asynchronous. Make sure you await on all store operations like upsert, update, find, save etc.You may find the require-await eslint rule to be helpful.
QueryFailedError: invalid byte sequence for encoding "UTF8": 0x00
PostgreSQL doesn’t support storing NULL (\0x00) characters in text fields. Usually the error occurs when a raw bytes string (like UIntArray or Bytes) is inserted into a String field. If this is the case, use hex encoding, e.g. using util-internal-hex library. For addresses, use appropriate encoding for your chain type.
Make sure the input query has limits set or the entities are decorated with @cardinality. We recommend using XXXConnection queries for pagination. For configuring limits and max response sizes, see DoS protection.
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":"6ae90cd803d366123a8ebaea","collectionId":"99da8d5e-d9f2-4343-a51c-d9f4b1604bfb","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae90cd803d366123a8ebaea"},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae90cd803d366123a8ebaea","clientVersion":"0.0.4045","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":199},{"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":"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":"byok-sep-25","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":"billing-updated-9-15","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}.mobile-nav-tabs-item[href=\"/en/data/all-networks\"],.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}#sidebar-content .sidebar-group-header,.breadcrumb-list,.breadcrumb-list .breadcrumb-item,.sqd-microlabel{font-family:var(--font-mono-sqd);font-size:.6875rem;font-weight:550;letter-spacing:.08em;text-transform:uppercase}#sidebar-content .sidebar-group-header{color:#8b8d9e}:root[class~=dark] #sidebar-content .sidebar-group-header,:root[class~=dark] .sqd-microlabel-muted{color:#8a8a93}.sqd-microlabel-muted{color:#8b8d9e}.sqd-pg-label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;font-weight:500;color:rgba(17,17,21,.62)}:root[class~=dark] .sqd-pg-label,:root[class~=dark] .sqd-pg-net{color:rgba(247,248,248,.62)}.sqd-pg-net{font-size:13px;letter-spacing:-.003em;border-radius:.25rem;background:0 0;color:rgba(17,17,21,.62);transition:color .15s,background-color .15s}.sqd-pg-net:hover{color:rgba(17,17,21,.85)}.sqd-pg-net[aria-pressed=true]{background:#e5e7eb;color:#111115;font-weight:510}:root[class~=dark] .sqd-pg-net:hover{color:rgba(247,248,248,.85)}:root[class~=dark] .sqd-pg-net[aria-pressed=true]{background:#1c1c20;color:#f7f8f8}.sqd-pg-panel{border:1px solid rgba(229,231,235,.8);border-radius:.375rem}:root[class~=dark] .sqd-pg-panel{border-color:rgba(36,36,40,.7)}.sqd-pg-bar{background:rgba(229,231,235,.25);border-bottom:1px solid rgba(229,231,235,.8)}:root[class~=dark] .sqd-pg-bar{background:rgba(28,28,32,.25);border-bottom-color:rgba(36,36,40,.7)}.sqd-pg-bar-b{background:rgba(229,231,235,.25);border-top:1px solid rgba(229,231,235,.8)}:root[class~=dark] .sqd-pg-bar-b{background:rgba(28,28,32,.25);border-top-color:rgba(36,36,40,.7)}.sqd-pg-tab{font-size:13px;font-weight:510;letter-spacing:-.003em;border-radius:.25rem;color:rgba(17,17,21,.62);transition:color .15s,background-color .15s}.sqd-pg-tab:hover{color:rgba(17,17,21,.85)}.sqd-pg-tab-active{color:#111115;background:rgba(229,231,235,.6)}:root[class~=dark] .sqd-pg-tab{color:rgba(247,248,248,.62)}:root[class~=dark] .sqd-pg-tab:hover{color:rgba(247,248,248,.85)}:root[class~=dark] .sqd-pg-tab-active{color:#f7f8f8;background:rgba(28,28,32,.6)}.sqd-pg-dim{color:rgba(17,17,21,.62)}:root[class~=dark] .sqd-pg-dim{color:rgba(247,248,248,.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:.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,.9)}:root[class~=dark] .sqd-pg-code{color:rgba(247,248,248,.9)}.sqd-pg-line{display:flex}.sqd-pg-line:hover{background:rgba(0,0,0,.03)}:root[class~=dark] .sqd-pg-line:hover{background:rgba(255,255,255,.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,.25);user-select:none;font-variant-numeric:tabular-nums}:root[class~=dark] .sqd-pg-num{color:rgba(247,248,248,.25)}main h1{letter-spacing:-.032em}main h2{letter-spacing:-.022em}.sqd-btn-primary-docs{background-color:#18181b;color:#fff;border:1px solid transparent;border-radius:.375rem;font-weight:510;letter-spacing:-.011em;transition:background-color .16s cubic-bezier(.25,.46,.45,.94),box-shadow .16s cubic-bezier(.25,.46,.45,.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:#fff;box-shadow:rgba(0,0,0,.08) 0 0 1px,rgba(0,0,0,.07) 0 1px 1px,rgba(0,0,0,.04) 0 3px 2px}.sqd-btn-secondary-docs{background-color:transparent;color:#27272a;border:1px solid rgba(0,0,0,.18);border-radius:.375rem;font-weight:510;letter-spacing:-.011em;transition:background-color .16s cubic-bezier(.25,.46,.45,.94),border-color .16s cubic-bezier(.25,.46,.45,.94),color .16s cubic-bezier(.25,.46,.45,.94)}.sqd-btn-secondary-docs:hover{background-color:#f4f4f5;border-color:rgba(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,.04);border-color:#2e2e33;color:#fff}#navbar span.bg-primary-dark{background-color:#18181b!important;border-radius:.375rem}#navbar a:has(.bg-primary-dark),#navbar a:has(.bg-primary-dark) span,#navbar a:has(.bg-primary-dark) svg{color:#fff!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 .bg-primary\\/10,:root[class~=dark] #sidebar-content .dark\\:bg-primary-light\\/10{background-color:rgba(165,180,252,.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: #4FC1FF\"i],: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: #9CDCFE\"i],:root[class~=dark] pre span[style*=\"--shiki-dark: #D4D4D4\"i]{--shiki-dark:rgb(232, 232, 236)!important}[role=listbox]:focus-visible,[role=menu]:focus-visible{outline:0!important}#navbar>.bg-background-light{background-color:rgba(250,250,250,.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,.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:#fff;pointer-events:none;z-index:40}:root[class~=dark] #sqd-safari-edge{background-color:#08090a}}::selection{background:rgba(99,102,241,.2);color:#09090b}:root[class~=dark] ::selection{color:#f4f4f5}html{scrollbar-width:thin}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:#fff}::-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 button:hover,#banner button:hover path,#banner button:hover svg,#banner div,#banner p,#banner span{color:#18181b!important}#banner button,#banner path,#banner svg{color:rgba(24,24,27,.55)!important}#banner a{color:#4f46e5!important;font-weight:550}#banner a:hover{text-decoration:underline}#banner button:hover{background:rgba(79,70,229,.08)!important}:root[class~=dark] #banner{background:#16161f!important;border-bottom:1px solid rgba(165,180,252,.18);color:#f7f8f8!important}:root[class~=dark] #banner button:hover,:root[class~=dark] #banner button:hover path,:root[class~=dark] #banner button:hover svg,:root[class~=dark] #banner div,:root[class~=dark] #banner p,:root[class~=dark] #banner span{color:#f7f8f8!important}:root[class~=dark] #banner button,:root[class~=dark] #banner path,:root[class~=dark] #banner svg{color:rgba(247,248,248,.55)!important}:root[class~=dark] #banner a{color:#a5b4fc!important}:root[class~=dark] #banner button:hover{background:rgba(165,180,252,.12)!important}}.card{border-radius:.5rem;background-color:#fff;border-color:#e5e7eb;box-shadow:0 1px 3px rgba(18,42,66,.04);transition:border-color .16s cubic-bezier(.25,.46,.45,.94),box-shadow .16s cubic-bezier(.25,.46,.45,.94),filter .16s cubic-bezier(.25,.46,.45,.94)}.card:hover{box-shadow:0 4px 12px rgba(18,42,66,.08),0 1px 3px rgba(18,42,66,.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,.4),0 0 0 1px rgba(255,255,255,.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:.8125rem;font-weight:550;letter-spacing:-.006em;text-transform:none;color:rgba(24,24,27,.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,.85);background-color:rgba(255,255,255,.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:.5rem;letter-spacing:-.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:.6875rem 1rem}#content-area table:not(.not-prose *) td,.prose table:not(.not-prose *) td{padding:.875rem 1rem;border-bottom:1px solid #e9eaee;transition:background-color .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(.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(.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(.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(.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,.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,.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:.25rem;padding:.125rem .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:.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:.5rem .25rem;border:1px solid #e5e7eb;border-radius:.5rem;background-color:#fafbfc}:root[class~=dark] #content-area .tree{border-color:#1c1c20;background-color:#0e0f11}[role=dialog]{border-radius:.75rem;box-shadow:0 8px 32px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.06)}:root[class~=dark] [role=dialog]{background-color:#131316;box-shadow:0 8px 32px rgba(0,0,0,.5),0 0 0 1px #242428}#footer{background-color:#fff;border-top-color:rgba(0,0,0,.06)}:root[class~=dark] #footer{background-color:transparent;border-top-color:#1c1c20}#footer a.text-sm{color:#52525b;transition:color .16s ease-out}#footer a.text-sm:hover{color:#09090b}:root[class~=dark] #footer a.text-sm,:root[class~=dark] .callout[data-callout-type=info] svg{color:#8a8a93}:root[class~=dark] #footer a.text-sm:hover{color:#f7f8f8}img[src*=\"/images/chains/hyperliquid.svg\"],img[src*=\"/images/chains/polkadot.svg\"],img[src*=\"/images/chains/solana.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:.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=check] a,.callout[data-callout-type=tip] a{color:#16a34a!important}:root[class~=dark] .callout[data-callout-type=check] a,:root[class~=dark] .callout[data-callout-type=tip] 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,.03);border-color:#242428}.callout[data-callout-type=note]{background-color:rgba(79,70,229,.04);border-color:rgba(79,70,229,.16)}.callout[data-callout-type=note] svg{color:#4f46e5}:root[class~=dark] .callout[data-callout-type=note]{background-color:rgba(165,180,252,.06);border-color:rgba(165,180,252,.16)}:root[class~=dark] .callout[data-callout-type=note] svg{color:#a5b4fc}.callout[data-callout-type=warning]{background-color:rgba(217,119,6,.05);border-color:rgba(217,119,6,.22)}.callout[data-callout-type=warning] svg{color:#b45309}:root[class~=dark] .callout[data-callout-type=warning]{background-color:rgba(251,191,36,.06);border-color:rgba(251,191,36,.16)}:root[class~=dark] .callout[data-callout-type=warning] svg{color:#fbbf24}.callout[data-callout-type=check],.callout[data-callout-type=tip]{background-color:rgba(22,163,74,.05);border-color:rgba(22,163,74,.2)}.callout[data-callout-type=check] svg,.callout[data-callout-type=tip] svg{color:#16a34a}:root[class~=dark] .callout[data-callout-type=check],:root[class~=dark] .callout[data-callout-type=tip]{background-color:rgba(74,222,128,.06);border-color:rgba(74,222,128,.15)}:root[class~=dark] .callout[data-callout-type=check] svg,:root[class~=dark] .callout[data-callout-type=tip] svg{color:#4ade80}.callout[data-callout-type=danger],.callout[data-callout-type=error]{background-color:rgba(220,38,38,.05);border-color:rgba(220,38,38,.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,.06);border-color:rgba(248,113,113,.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:#fff;border:1px solid #e5e7eb;border-radius:.5rem;box-shadow:0 1px 3px rgba(18,42,66,.04);overflow:hidden}:root[class~=dark] .sqd-nt-frame{background:0 0;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,.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 td[class*=text-center],.sqd-nt-frame .sqd-nt-table th[class*=text-center]{text-align:center}.sqd-nt-table tbody tr{border-bottom:1px solid #e9eaee;transition:background-color .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,.4)}:root[class~=dark] .sqd-nt-table tbody tr:hover{background-color:rgba(255,255,255,.03)}.sqd-nt-table th{transition:background-color .15s ease}.sqd-nt-table th:hover{background-color:#eef0f4}:root[class~=dark] .sqd-nt-table th:hover{background-color:rgba(255,255,255,.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 .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--dark,.sqd-nt-logo--white{padding:3px}.sqd-nt-logo--white{background:#fff}.sqd-nt-logo--dark{background:#0f0f11}.sqd-nt-logo--mono{background:#f4f4f5;color:#71717a;font-size:.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,.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,.12)}:root[class~=dark] .sqd-nt-dot{background:#4ade80;box-shadow:0 0 0 3px rgba(74,222,128,.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:.625rem;font-weight:550;letter-spacing:.05em;text-transform:uppercase;padding:.1875rem .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,.12);color:#a5b4fc;border-color:rgba(99,102,241,.28)}a.sqd-nt-badge--tier{text-decoration:none;transition:border-color .15s ease}.sqd-nt-badge--core{background:rgba(217,119,6,.08);color:#b45309;border-color:rgba(217,119,6,.18)}a.sqd-nt-badge--core:hover{border-color:rgba(217,119,6,.36)}:root[class~=dark] .sqd-nt-badge--core{background:rgba(245,158,11,.12);color:#fbbf24;border-color:rgba(245,158,11,.22)}:root[class~=dark] a.sqd-nt-badge--core:hover{border-color:rgba(245,158,11,.44)}.sqd-nt-badge--partner{background:rgba(8,145,178,.07);color:#0e7490;border-color:rgba(8,145,178,.15)}a.sqd-nt-badge--partner:hover{border-color:rgba(8,145,178,.32)}:root[class~=dark] .sqd-nt-badge--partner{background:rgba(34,211,238,.1);color:#22d3ee;border-color:rgba(34,211,238,.2)}:root[class~=dark] a.sqd-nt-badge--partner:hover{border-color:rgba(34,211,238,.4)}.sqd-nt-badge--frontier{background:rgba(124,58,237,.07);color:#6d28d9;border-color:rgba(124,58,237,.15)}a.sqd-nt-badge--frontier:hover{border-color:rgba(124,58,237,.32)}:root[class~=dark] .sqd-nt-badge--frontier{background:rgba(167,139,250,.12);color:#a78bfa;border-color:rgba(167,139,250,.22)}:root[class~=dark] a.sqd-nt-badge--frontier:hover{border-color:rgba(167,139,250,.44)}.sqd-nt-badge--retiring,a.sqd-nt-badge--retiring{background:rgba(225,29,72,.07);color:#be123c;border-color:rgba(225,29,72,.18);text-decoration:none;transition:background .15s ease,border-color .15s ease}a.sqd-nt-badge--retiring:hover{background:rgba(225,29,72,.13);border-color:rgba(225,29,72,.32)}:root[class~=dark] .sqd-nt-badge--retiring,:root[class~=dark] a.sqd-nt-badge--retiring{background:rgba(251,113,133,.1);color:#fda4af;border-color:rgba(251,113,133,.22)}:root[class~=dark] a.sqd-nt-badge--retiring:hover{background:rgba(251,113,133,.18);border-color:rgba(251,113,133,.38)}.sqd-nt-chip{width:fit-content;white-space:nowrap;font-family:var(--font-mono-sqd, \"JetBrains Mono\", ui-monospace, monospace);font-size:.75rem;background:#f4f4f5;border:1px solid #e4e4e7;border-radius:.25rem;padding:.125rem .375rem;color:#18181b}:root[class~=dark] .sqd-nt-chip{background:#1a1a1e;border-color:#242428;color:#d6d6dc}.sqd-nt-copy{color:#71717a;border-radius:.25rem;padding:.25rem;transition:color .15s ease,background-color .15s ease}.sqd-nt-copy svg{background-color:currentColor!important}.sqd-nt-copy:hover{color:#18181b;background:rgba(0,0,0,.04)}:root[class~=dark] .sqd-nt-copy{color:rgba(247,248,248,.62)}:root[class~=dark] .sqd-nt-copy:hover{color:#f7f8f8;background:rgba(255,255,255,.06)}.sqd-nt-control{background-color:#fff;border:1px solid #d4d4d8;border-radius:.375rem;color:#27272a;font-size:14px;font-weight:510;letter-spacing:-.011em;transition:border-color .16s ease,background-color .16s ease}.sqd-nt-control:hover{border-color:#a1a1aa}.sqd-nt-control:focus-visible{outline:0;border-color:#6366f1;box-shadow:0 0 0 3px rgba(99,102,241,.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 .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{letter-spacing:-.011em;font-feature-settings:normal;font-variant-numeric:normal;font-variant-ligatures:normal}.code,.hljs,code,pre{font-family:var(--font-mono-sqd)}.font-inter,body{font-family:var(--font-inter)}.font-mono{font-family:var(--font-mono-sqd)}.italic,em,i{font-style:italic;font-synthesis:none}div,h1,h2,h3,h4,h5,h6,p,span{font-feature-settings:\"ss01\" 0,\"ss02\" 0,\"ss03\" 0;font-variant-alternates:normal}"}],"page":{"pagePath":"en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting","slug":"/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting","pageMetadata":{"title":"Squid SDK tips and troubleshooting","sidebarTitle":"Tips and troubleshooting","description":"Diagnose slow indexing, batch behavior, reorgs, and Squid SDK resource use.","href":"/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting"},"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: \"Diagnose slow indexing, batch behavior, reorgs, and Squid SDK resource use.\"\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`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Use this guide when a squid works but is slow, consumes unpredictable resources,\nor behaves differently after a restart or reorg.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Symptom`}),_jsx(_components.th,{children:`First check`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Historical sync is slow`}),_jsx(_components.td,{children:`Run the same processor configuration with an empty batch handler to separate ingestion time from processing and database time.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Memory rises suddenly`}),_jsx(_components.td,{children:`Check for mutable global state, unbounded collections, and operations that grow faster than linearly with the batch size.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Results differ between clean syncs`}),_jsx(_components.td,{children:`Remove any correctness state that survives only in process memory and compare clean runs again.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`block.transactions`}),` or another collection is empty`]}),_jsxs(_components.td,{children:[`Add a data request or related-data flag. `,_jsx(_components.code,{children:`setFields()`}),` only controls fields on items that were requested.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`An external consumer sees duplicate or replaced blocks`}),_jsx(_components.td,{children:`Treat messages from unfinalized blocks as provisional and reconcile them by block height and hash.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A processor appears stuck`}),_jsx(_components.td,{children:`Enable processor debug logs for a short reproduction near the chain head.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`The squid fails with a specific error message`}),_jsxs(_components.td,{children:[`Look it up in `,_jsx(_components.a,{href:`#common-errors`,children:`Common errors`}),`.`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`separate-ingestion-from-processing`,children:`Separate ingestion from processing`}),`\n`,_jsxs(_components.p,{children:[`Before changing RPC settings or scaling the database, measure where time is\nspent. Temporarily replace the body of the\n`,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/batch-processor#run-and-processor`,children:`batch handler`}),`\nwith a block counter:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`13`,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:`13`,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\":`#D4D4D4`},children:` {`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`run`}),_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/batch-processor'`})]}),`\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'`})]}),`\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:`TypeormDatabase`}),_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/typeorm-store'`})]}),`\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'`}),_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:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` dataSource`}),_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:` TypeormDatabase`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`stateSchema:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'squid_ingestion_probe'`}),_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:` 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:`#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:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`blocks:`}),_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:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:`length`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'ingestion probe'`}),_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`]})})}),`\n`,_jsx(_components.p,{children:`Run the probe over the same block range and in the same environment as the slow\nrun:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`If throughput improves substantially, optimize transformations and database\naccess. Start with `,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/guides/advanced/batch-processing`,children:`batch processing`}),`\nand `,_jsx(_components.a,{href:`/en/cloud/resources/query-optimization`,children:`query optimization`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`If throughput stays similar, investigate the data source, network connection,\nRPC rate limits, and RPC provider. If the source is unreliable rather than slow,\na `,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/evm-fallback`,children:`fallback data source`}),` with an RPC standby keeps the squid\nindexing through outages — see `,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/guides/advanced/high-availability`,children:`High availability`}),`.`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`An empty handler still advances processor status. Use a disposable database or\na unique `,_jsx(_components.code,{children:`stateSchema`}),`, as shown above. Do not replace a production handler and\nreuse its processor status.`]})}),`\n`,_jsx(_components.p,{children:`Compare like with like. A historical range served by the SQD Network and a\nnear-head range served in real time have different performance characteristics.`}),`\n`,_jsx(Heading,{level:`2`,id:`request-only-data-you-use`,children:`Request only data you use`}),`\n`,_jsx(_components.p,{children:`Narrow requests by contract, topic, and block range whenever possible. Disable optional\nfields that are not used — this reduces data transfer and the amount of data\nheld in each batch.`}),`\n`,_jsxs(_components.p,{children:[`For factory contracts, consider the\n`,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/guides/advanced/factory-contracts#two-pass-indexing-for-factory-contracts`,children:`two-pass indexing pattern`}),`\nso that most historical requests can use a known address list.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/evm-stream/field-selection`,children:_jsx(_components.code,{children:`setFields()`})}),`\ncontrols the shape of returned items. It does not request transactions, logs,\ntraces, or state diffs by itself. For example:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`16`,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:`16`,children:[_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:` dataSource`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--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:` DataSourceBuilder`}),_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:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setFields`}),_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:` transaction:`}),_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:` input:`}),_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`,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:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`addLog`}),_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:` where:`}),_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:` address:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`CONTRACT_ADDRESS`}),_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:` topic0:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`EVENT_TOPIC`}),_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:` include:`}),_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:` transaction:`}),_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`,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:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`build`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Here, `,_jsx(_components.code,{children:`include: { transaction: true }`}),` requests each matching log’s parent\ntransaction and adds it to `,_jsx(_components.code,{children:`block.transactions`}),`. The `,_jsx(_components.code,{children:`transaction`}),` selector in\n`,_jsx(_components.code,{children:`setFields()`}),` only adds `,_jsx(_components.code,{children:`input`}),` to those requested transaction items. Request\nrelated collections such as transaction logs, traces, or state diffs explicitly\nwhen they are also required.`]}),`\n`,_jsx(Heading,{level:`2`,id:`make-batch-handlers-deterministic`,children:`Make batch handlers deterministic`}),`\n`,_jsx(_components.p,{children:`Batch boundaries are an implementation detail and can change between runs. The\nsame block range can arrive as several different batch groupings.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Do not let results depend on mutable module-level or global state carried from\none batch to the next.`}),`\n`,_jsx(_components.li,{children:`Persist correctness-critical state in the database, or derive it again from\nthe current batch and durable data.`}),`\n`,_jsx(_components.li,{children:`Keep in-memory caches bounded and safe to rebuild after a restart.`}),`\n`,_jsx(_components.li,{children:`Test important changes with multiple clean syncs and compare the resulting\nrows or a stable export.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Batch handlers should also be safe to retry. `,_jsx(_components.code,{children:`TypeormDatabase`}),` can run a\nhandler more than once for the same data when a transaction is retried or the\nchain reorganizes. See the\n`,_jsxs(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/data-stores/typeorm-store#store-interface`,children:[_jsx(_components.code,{children:`typeorm-store`}),` transaction notes`]}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`keep-batch-work-bounded`,children:`Keep batch work bounded`}),`\n`,_jsx(_components.p,{children:`Processors can receive large batches, and the number of blocks and selected\nitems per batch varies. Keep memory and CPU use close to linear in the number\nof selected items:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`collect IDs in a `,_jsx(_components.code,{children:`Set`}),`, then load matching rows with one `,_jsx(_components.code,{children:`findBy()`}),` call;`]}),`\n`,_jsxs(_components.li,{children:[`update entities in a `,_jsx(_components.code,{children:`Map`}),`, then save them as an array;`]}),`\n`,_jsx(_components.li,{children:`avoid nested scans over the complete batch;`}),`\n`,_jsx(_components.li,{children:`clear temporary collections at the end of each handler call;`}),`\n`,_jsx(_components.li,{children:`load test with realistic event density, not only a short quiet range.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Do not replace batching with a database read or write per event. The\n`,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/guides/advanced/batch-processing#implementation-patterns`,children:`batch-processing patterns`}),`\nshow how to load and persist entities in groups.`]}),`\n`,_jsx(Heading,{level:`2`,id:`run-periodic-work-intentionally`,children:`Run periodic work intentionally`}),`\n`,_jsxs(_components.p,{children:[`By default, a processor fetches only blocks that contain requested items. Add\n`,_jsx(_components.code,{children:`includeAllBlocks()`}),` when logic must run on every block:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,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:`12`,children:[_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:` dataSource`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--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:` DataSourceBuilder`}),_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:` // ...data requests...`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`includeAllBlocks`}),_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:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`build`}),_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\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},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`,_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:`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:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` %`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 100`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ===`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_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:` await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` updatePeriodicState`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_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:`block`}),_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`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/evm-stream#include-all-blocks`,children:_jsx(_components.code,{children:`includeAllBlocks()`})}),`\naccepts an optional block range, so limit it when the requirement is historical\nonly. Fetching every block increases work. If the periodic work performs\nmultiple EVM state reads, use\n`,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/evm-typegen/direct-rpc-queries#batch-state-queries`,children:`Multicall`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`make-external-side-effects-reorg-safe`,children:`Make external side effects reorg-safe`}),`\n`,_jsx(_components.p,{children:`When a reorg replaces unfinalized blocks, a compatible database rolls back SQL\nchanges made for orphaned blocks and the processor runs the handler again on\nthe canonical chain. Messages already sent to Kafka, HTTP requests, and other\nexternal effects are not rolled back.`}),`\n`,_jsx(_components.p,{children:`For effects derived from unfinalized blocks:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`include block height and block hash in the external record;`}),`\n`,_jsx(_components.li,{children:`make writes idempotent;`}),`\n`,_jsx(_components.li,{children:`let consumers replace or retract provisional data when the canonical hash at\na height changes;`}),`\n`,_jsx(_components.li,{children:`delay irreversible actions until the required confirmation or finality\nthreshold has been reached.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/guides/advanced/unfinalized-blocks`,children:`unfinalized blocks and reorgs guide`}),`\nexplains which blocks are considered hot and how database rollback works.`]}),`\n`,_jsx(Heading,{level:`2`,id:`debug-a-processor-near-the-failure`,children:`Debug a processor near the failure`}),`\n`,_jsx(_components.p,{children:`Use a narrow debug namespace before enabling all logs:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`SQD_DEBUG`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`sqd:processor*`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Debug output can be large. If the issue occurs near the chain head, first sync\nclose to the head with the normal log level, then restart with debug logging for\na short reproduction. See\n`,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/logger#overriding-the-log-level`,children:`overriding the log level`}),`\nand `,_jsx(_components.a,{href:`/en/cloud/resources/logging`,children:`Cloud logging`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`For slow or oversized GraphQL requests, use the\n`,_jsx(_components.a,{href:`/en/cloud/resources/query-optimization`,children:`query optimization procedure`}),`, add\n`,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/schema-files/indexes-constraints`,children:`schema indexes`}),`, paginate\ncollections, and configure\n`,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/openreader/configuration/dos-protection`,children:`OpenReader DoS protection`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`common-errors`,children:`Common errors`}),`\n`,_jsx(Heading,{level:`3`,id:`processor-errors`,children:`Processor errors`}),`\n`,_jsxs(Heading,{level:`4`,id:`error-data-out-of-bounds-ethers-errors-on-evm`,children:[_jsx(_components.code,{children:`Error: data out-of-bounds`}),` `,_jsx(_components.code,{children:`ethers`}),` errors on EVM`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Usually this means that you’re using the decoder on the wrong data. Make sure that the decoder receives `,_jsx(_components.em,{children:`only`}),` the data you intend it to.`]}),`\n`,_jsxs(_components.p,{children:[`Example: suppose you want to add the processing of a `,_jsx(_components.code,{children:`Mint`}),` event to a squid that is currently processing only `,_jsx(_components.code,{children:`Transfer`}),` events. You change the processor configuration to get the `,_jsx(_components.code,{children:`Mint`}),` events for you, but you forget to sort the events in the batch handler and a data item with a `,_jsx(_components.code,{children:`Mint`}),` event finds its way into a decoder of `,_jsx(_components.code,{children:`Transfer`}),`s.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Another common source of this error is faulty RPC endpoints. If your EVM processor crashes during RPC ingestion on a log with `,_jsx(_components.code,{children:`'0x'`}),` in its data field, try switching to another RPC provider or, if you are developing locally, to another Ethereum network emulator.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(Heading,{level:`4`,id:`bad_data-when-using-a-multicall-contract`,children:[_jsx(_components.code,{children:`BAD_DATA`}),` when using a Multicall contract`]}),`\n`,_jsxs(_components.p,{children:[`This error can occur for a variety of reasons, but one common cause is choosing a Multicall deployment that is newer than the oldest blocks that have to be indexed. When `,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/evm-typegen/direct-rpc-queries#batch-state-queries`,children:`batch state queries`}),` are performed on historical chain state older than the Multicall deployment, EVM detects that and refuses to run.`]}),`\n`,_jsx(_components.p,{children:`Solutions:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Use an older Multicall deployment.`}),`\n`,_jsx(_components.li,{children:`Delay your chain state queries until a later block.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`These issues are explored in `,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/examples-tutorials/bayc/step-four-optimizations`,children:`Part 4 of the BAYC tutorial`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`database-errors`,children:`Database errors`}),`\n`,_jsx(Heading,{level:`4`,id:`queryfailederror-relation---does-not-exist`,children:_jsx(_components.code,{children:`QueryFailedError: relation \"...\" does not exist`})}),`\n`,_jsxs(_components.p,{children:[`It is likely that the generated migrations in the `,_jsx(_components.code,{children:`db/migrations`}),` folder are outdated and do not match the schema file.\nRecreate the migrations from scratch as detailed on `,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/guides/writing-to-postgres#updating-after-schema-changes`,children:`this page`}),`. The relevant commands are listed in the `,_jsxs(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/typeorm-migration`,children:[_jsx(_components.code,{children:`squid-typeorm-migration`}),` reference`]}),`.`]}),`\n`,_jsxs(Heading,{level:`4`,id:`query-runner-already-released-cannot-run-queries-anymore-or-too-late-to-perform-db-updates-make-sure-you-havent-forgot-to-await-on-db-query`,children:[_jsx(_components.code,{children:`Query runner already released. Cannot run queries anymore`}),`, or `,_jsx(_components.code,{children:`too late to perform db updates, make sure you haven't forgot to await on db query`})]}),`\n`,_jsxs(_components.p,{children:[`If your squid `,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/guides/writing-to-postgres`,children:`saves its data to a database`}),`, all operations with `,_jsx(_components.code,{children:`ctx.store`}),` are asynchronous. Make sure you `,_jsx(_components.code,{children:`await`}),` on all `,_jsx(_components.code,{children:`store`}),` operations like `,_jsx(_components.code,{children:`upsert`}),`, `,_jsx(_components.code,{children:`update`}),`, `,_jsx(_components.code,{children:`find`}),`, `,_jsx(_components.code,{children:`save`}),` etc.`]}),`\n`,_jsxs(_components.p,{children:[`You may find the `,_jsx(_components.a,{href:`https://eslint.org/docs/latest/rules/require-await`,children:`require-await`}),` eslint rule to be helpful.`]}),`\n`,_jsx(Heading,{level:`4`,id:`queryfailederror-invalid-byte-sequence-for-encoding-utf8-0x00`,children:_jsx(_components.code,{children:`QueryFailedError: invalid byte sequence for encoding \"UTF8\": 0x00`})}),`\n`,_jsxs(_components.p,{children:[`PostgreSQL doesn’t support storing `,_jsx(_components.code,{children:`NULL (\\\\0x00)`}),` characters in text fields. Usually the error occurs when a raw bytes string (like `,_jsx(_components.code,{children:`UIntArray`}),` or `,_jsx(_components.code,{children:`Bytes`}),`) is inserted into a `,_jsx(_components.code,{children:`String`}),` field. If this is the case, use hex encoding, e.g. using `,_jsx(_components.a,{href:`https://github.com/subsquid/squid/tree/master/util/util-internal-hex`,children:_jsx(_components.code,{children:`util-internal-hex`})}),` library. For addresses, use appropriate encoding for your chain type.`]}),`\n`,_jsx(Heading,{level:`3`,id:`graphql-errors`,children:`GraphQL errors`}),`\n`,_jsx(Heading,{level:`4`,id:`response-might-exceed-the-size-limit`,children:_jsx(_components.code,{children:`response might exceed the size limit`})}),`\n`,_jsxs(_components.p,{children:[`Make sure the input query has limits set or the entities are decorated with `,_jsx(_components.code,{children:`@cardinality`}),`. We recommend using `,_jsx(_components.code,{children:`XXXConnection`}),` queries for pagination. For configuring limits and max response sizes, see `,_jsx(_components.a,{href:`/en/sdk/squid-sdk/evm/reference/openreader/configuration/dos-protection`,children:`DoS protection`}),`.`]})]})}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":"Squid SDK tips and troubleshooting","sidebarTitle":"Tips and troubleshooting","description":"Diagnose slow indexing, batch behavior, reorgs, and Squid SDK resource use.","href":"/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Separate ingestion from processing","slug":"separate-ingestion-from-processing","depth":2,"children":[]},{"title":"Request only data you use","slug":"request-only-data-you-use","depth":2,"children":[]},{"title":"Make batch handlers deterministic","slug":"make-batch-handlers-deterministic","depth":2,"children":[]},{"title":"Keep batch work bounded","slug":"keep-batch-work-bounded","depth":2,"children":[]},{"title":"Run periodic work intentionally","slug":"run-periodic-work-intentionally","depth":2,"children":[]},{"title":"Make external side effects reorg-safe","slug":"make-external-side-effects-reorg-safe","depth":2,"children":[]},{"title":"Debug a processor near the failure","slug":"debug-a-processor-near-the-failure","depth":2,"children":[]},{"title":"Common errors","slug":"common-errors","depth":2,"children":[{"title":"Processor errors","slug":"processor-errors","depth":3,"children":[]},{"title":"Error: data out-of-bounds ethers errors on EVM","slug":"error-data-out-of-bounds-ethers-errors-on-evm","depth":4,"children":[]},{"title":"BAD_DATA when using a Multicall contract","slug":"bad_data-when-using-a-multicall-contract","depth":4,"children":[]},{"title":"Database errors","slug":"database-errors","depth":3,"children":[]},{"title":"QueryFailedError: relation \"...\" does not exist","slug":"queryfailederror-relation---does-not-exist","depth":4,"children":[]},{"title":"Query runner already released. Cannot run queries anymore, or too late to perform db updates, make sure you haven't forgot to await on db query","slug":"query-runner-already-released-cannot-run-queries-anymore-or-too-late-to-perform-db-updates-make-sure-you-havent-forgot-to-await-on-db-query","depth":4,"children":[]},{"title":"QueryFailedError: invalid byte sequence for encoding \"UTF8\": 0x00","slug":"queryfailederror-invalid-byte-sequence-for-encoding-utf8-0x00","depth":4,"children":[]},{"title":"GraphQL errors","slug":"graphql-errors","depth":3,"children":[]},{"title":"response might exceed the size limit","slug":"response-might-exceed-the-size-limit","depth":4,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/sqd-2119b3c3/b07d1838ac35ff9a/safari-toolbar.js"],"subdomain":"sqd-2119b3c3","siteName":"SQD Documentation","title":"Squid SDK tips and troubleshooting - SQD Documentation","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"contextualStarterQuestions":[{"_id":"6a71b13384ea1ad2a62a536d","deploymentId":"6808b07179034f1572602b7f","questionText":"What causes duplicate blocks?","status":"active","generatedBy":"contextual","path":"en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting","createdAt":"2026-08-04T09:30:27.778Z","updatedAt":"2026-08-04T09:30:27.778Z","__v":0},{"_id":"6a71b13384ea1ad2a62a536b","deploymentId":"6808b07179034f1572602b7f","questionText":"Why is my squid indexing slow?","status":"active","generatedBy":"contextual","path":"en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting","createdAt":"2026-08-04T09:30:27.778Z","updatedAt":"2026-08-04T09:30:27.778Z","__v":0},{"_id":"6a71b13384ea1ad2a62a536c","deploymentId":"6808b07179034f1572602b7f","questionText":"How do I fix memory issues?","status":"active","generatedBy":"contextual","path":"en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting","createdAt":"2026-08-04T09:30:27.778Z","updatedAt":"2026-08-04T09:30:27.778Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting","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-08-03T12:32:14.266Z","originalFileLocation":"en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting.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=\"Diagnose slow indexing, batch behavior, reorgs, and Squid SDK resource use.\">\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=\"Squid SDK tips and troubleshooting - SQD Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Diagnose slow indexing, batch behavior, reorgs, and Squid SDK resource use.\">\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/evm/guides/advanced/tips-and-troubleshooting\">\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=Squid+SDK+tips+and+troubleshooting\u0026amp;description=Diagnose+slow+indexing%2C+batch+behavior%2C+reorgs%2C+and+Squid+SDK+resource+use.\u0026amp;theme=fdcf458c8520acc4daeceafb\u0026amp;signature=94ec64ae76d6ec2eaa073fa3ab13ac3e68de66d2d7c3131f49f75355394852d1\">\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=\"Squid SDK tips and troubleshooting - SQD Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Diagnose slow indexing, batch behavior, reorgs, and Squid SDK resource use.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://sqd-2119b3c3.mintlify.app/_mintlify/api/og/v2?division=Advanced\u0026amp;title=Squid+SDK+tips+and+troubleshooting\u0026amp;description=Diagnose+slow+indexing%2C+batch+behavior%2C+reorgs%2C+and+Squid+SDK+resource+use.\u0026amp;theme=fdcf458c8520acc4daeceafb\u0026amp;signature=94ec64ae76d6ec2eaa073fa3ab13ac3e68de66d2d7c3131f49f75355394852d1\">\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/evm/guides/advanced/tips-and-troubleshooting\">\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/evm/guides/advanced/tips-and-troubleshooting.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/evm/guides/advanced/tips-and-troubleshooting#webpage\",\"url\":\"https://docs.sqd.dev/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting\",\"name\":\"Squid SDK tips and troubleshooting\",\"description\":\"Diagnose slow indexing, batch behavior, reorgs, and Squid SDK resource use.\",\"dateModified\":\"2026-08-03T12:32:14.266Z\",\"isPartOf\":{\"@id\":\"https://docs.sqd.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.sqd.dev/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.sqd.dev/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Squid SDK\",\"item\":\"https://docs.sqd.dev/en/sdk/squid-sdk/evm/quickstart\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Guides\",\"item\":\"https://docs.sqd.dev/en/sdk/squid-sdk/evm/guides/make-an-indexer\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Advanced\",\"item\":\"https://docs.sqd.dev/en/sdk/squid-sdk/evm/guides/advanced/batch-processing\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Squid SDK tips and troubleshooting\",\"item\":\"https://docs.sqd.dev/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.sqd.dev/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting#article\",\"headline\":\"Squid SDK tips and troubleshooting\",\"name\":\"Squid SDK tips and troubleshooting\",\"description\":\"Diagnose slow indexing, batch behavior, reorgs, and Squid SDK resource use.\",\"url\":\"https://docs.sqd.dev/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting\",\"mainEntityOfPage\":{\"@id\":\"https://docs.sqd.dev/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting#webpage\"},\"dateModified\":\"2026-08-03T12:32:14.266Z\",\"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","groups":[{"group":"Overview","pages":[{"title":"Build with SQD","sidebarTitle":"Overview","mode":"wide","href":"/en/sdk/overview"},{"title":"Choosing your tool","sidebarTitle":"Choosing a Tool","href":"/en/sdk/options-comparison"},{"title":"SQD vs The Graph","href":"/en/sdk/subsquid-vs-thegraph"},{"title":"Getting started with Portal","mode":"wide","href":"/en/portal/migration"}]},{"group":"Pipes SDK","icon":"text-align-start","tag":"1.0.0-beta.11","pages":[{"title":"Quickstart","href":"/en/sdk/pipes-sdk/evm/quickstart"},{"title":"Why Pipes SDK?","href":"/en/sdk/pipes-sdk/evm/why-pipes-sdk"},{"title":"Migrate to 1.0","sidebarTitle":"Migrating to 1.0","href":"/en/sdk/pipes-sdk/evm/migration"},{"group":"Guides","pages":[{"group":"Basic development","pages":[{"title":"Pipe anatomy","href":"/en/sdk/pipes-sdk/evm/guides/basic-development/anatomy"},{"title":"Developing pipes","href":"/en/sdk/pipes-sdk/evm/guides/basic-development/flow"},{"title":"Handling contract events","href":"/en/sdk/pipes-sdk/evm/guides/basic-development/handling-events"},{"title":"Running bare bones","href":"/en/sdk/pipes-sdk/evm/guides/basic-development/running-bare-bones"},{"title":"Pipes UI","href":"/en/sdk/pipes-sdk/evm/guides/basic-development/pipes-ui"},{"title":"Testing pipes","href":"/en/sdk/pipes-sdk/evm/guides/basic-development/testing"},{"title":"Dev runner","href":"/en/sdk/pipes-sdk/evm/guides/basic-development/dev-runner"},{"group":"Configuring targets","pages":[{"title":"Postgres via Drizzle","href":"/en/sdk/pipes-sdk/evm/guides/basic-development/targets/postgres-drizzle"},{"title":"ClickHouse","href":"/en/sdk/pipes-sdk/evm/guides/basic-development/targets/clickhouse"}]}]},{"group":"Advanced topics","pages":[{"title":"Factory transformers","href":"/en/sdk/pipes-sdk/evm/guides/advanced-topics/factory-transformers"},{"title":"Stateful transforms","href":"/en/sdk/pipes-sdk/evm/guides/advanced-topics/stateful-transforms"},{"title":"Logging","href":"/en/sdk/pipes-sdk/evm/guides/advanced-topics/logging"},{"title":"Metrics","href":"/en/sdk/pipes-sdk/evm/guides/advanced-topics/metrics"},{"title":"Profiling","href":"/en/sdk/pipes-sdk/evm/guides/advanced-topics/profiling"},{"title":"OpenTelemetry tracing","href":"/en/sdk/pipes-sdk/evm/guides/advanced-topics/tracing"},{"title":"Data freshness monitoring","href":"/en/sdk/pipes-sdk/evm/guides/advanced-topics/latency-monitoring"},{"title":"Railway deployment","href":"/en/sdk/pipes-sdk/evm/guides/advanced-topics/railway-deployment"}]},{"group":"Architecture deep dives","pages":[{"title":"Cursor management","href":"/en/sdk/pipes-sdk/evm/guides/architecture-deep-dives/cursor-management"},{"title":"Fork handling","href":"/en/sdk/pipes-sdk/evm/guides/architecture-deep-dives/fork-handling"}]}]},{"group":"Reference","pages":[{"group":"Basic components","pages":[{"title":"Portal stream","href":"/en/sdk/pipes-sdk/evm/reference/basic-components/source"},{"title":"Query builder","href":"/en/sdk/pipes-sdk/evm/reference/basic-components/query-builder"},{"title":"Transformer","href":"/en/sdk/pipes-sdk/evm/reference/basic-components/transformer"},{"group":"Target","pages":[{"title":"createTarget","href":"/en/sdk/pipes-sdk/evm/reference/basic-components/target/create-target"},{"title":"drizzleTarget","href":"/en/sdk/pipes-sdk/evm/reference/basic-components/target/postgres-drizzle"},{"title":"clickhouseTarget","href":"/en/sdk/pipes-sdk/evm/reference/basic-components/target/clickhouse"},{"title":"bigqueryTarget","href":"/en/sdk/pipes-sdk/evm/reference/basic-components/target/bigquery"},{"title":"parquetTarget","href":"/en/sdk/pipes-sdk/evm/reference/basic-components/target/parquet"},{"title":"pubsubTarget","href":"/en/sdk/pipes-sdk/evm/reference/basic-components/target/pubsub"}]}]},{"group":"Utility components","pages":[{"title":"evmEventDecoder","href":"/en/sdk/pipes-sdk/evm/reference/utility-components/evm-decoder"},{"title":"contractFactory","href":"/en/sdk/pipes-sdk/evm/reference/utility-components/factory"},{"title":"portalSqliteCache","href":"/en/sdk/pipes-sdk/evm/reference/utility-components/sqlite-cache"},{"title":"metricsServer","href":"/en/sdk/pipes-sdk/evm/reference/utility-components/metrics-server"},{"title":"evmRpcLatencyWatcher","href":"/en/sdk/pipes-sdk/evm/reference/utility-components/evm-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/evm/quickstart"},{"title":"Design","sidebarTitle":"Design","href":"/en/sdk/squid-sdk/evm/design"},{"title":"How it works","sidebarTitle":"How it works","href":"/en/sdk/squid-sdk/evm/how-it-works"},{"title":"FAQ","href":"/en/sdk/squid-sdk/evm/faq"},{"group":"Guides","pages":[{"title":"Make an indexer","href":"/en/sdk/squid-sdk/evm/guides/make-an-indexer"},{"title":"Writing to Postgres","href":"/en/sdk/squid-sdk/evm/guides/writing-to-postgres"},{"title":"Serving GraphQL","href":"/en/sdk/squid-sdk/evm/guides/serving-graphql"},{"title":"Other data destinations","href":"/en/sdk/squid-sdk/evm/guides/other-data-destinations"},{"title":"Best practices","href":"/en/sdk/squid-sdk/evm/guides/best-practices"},{"group":"Migration","pages":[{"title":"Migrate a squid to Portal","sidebarTitle":"Migrate to Portal","mode":"wide","href":"/en/sdk/squid-sdk/evm/guides/migration/gateway-to-portal"},{"title":"How to use your dedicated Portal with a key","sidebarTitle":"Dedicated Portal key","href":"/en/sdk/squid-sdk/evm/guides/migration/portal-api-key"},{"title":"Add an API key for legacy gateways","sidebarTitle":"Gateway API key","href":"/en/sdk/squid-sdk/evm/guides/migration/gateway-api-key"},{"title":"Migrate from The Graph","href":"/en/sdk/squid-sdk/evm/guides/migration/migrate-from-thegraph"},{"title":"hasura-configuration tool v2","href":"/en/sdk/squid-sdk/evm/guides/migration/migrate-to-hasura-v2"}]},{"group":"Advanced","pages":[{"title":"Batch Processing","href":"/en/sdk/squid-sdk/evm/guides/advanced/batch-processing"},{"title":"Unfinalized blocks and reorgs","description":"How Squid SDK handles unfinalized blocks and reorgs.","href":"/en/sdk/squid-sdk/evm/guides/advanced/unfinalized-blocks"},{"title":"Squid SDK tips and troubleshooting","sidebarTitle":"Tips and troubleshooting","href":"/en/sdk/squid-sdk/evm/guides/advanced/tips-and-troubleshooting"},{"title":"High availability","sidebarTitle":"High availability","description":"Keep an EVM squid indexing through Portal or RPC outages with the fallback data source.","href":"/en/sdk/squid-sdk/evm/guides/advanced/high-availability"},{"title":"Development Environment Setup","href":"/en/sdk/squid-sdk/evm/guides/advanced/development-environment-setup"},{"title":"CLI Cheatsheet","href":"/en/sdk/squid-sdk/evm/guides/advanced/cli-cheatsheet"},{"title":"Proxy contracts","href":"/en/sdk/squid-sdk/evm/guides/advanced/proxy-contracts"},{"title":"Factory Contracts","href":"/en/sdk/squid-sdk/evm/guides/advanced/factory-contracts"},{"title":"Multichain Indexing","href":"/en/sdk/squid-sdk/evm/guides/advanced/multichain-indexing"},{"title":"External APIs and IPFS","href":"/en/sdk/squid-sdk/evm/guides/advanced/external-apis-ipfs"}]}]},{"group":"Examples \u0026 tutorials","pages":[{"title":"Build an Indexer from Scratch","href":"/en/sdk/squid-sdk/evm/examples-tutorials/build-indexer-from-scratch"},{"group":"BAYC tutorial","pages":[{"title":"Step 1: Transfer events","href":"/en/sdk/squid-sdk/evm/examples-tutorials/bayc/step-one-indexing-transfers"},{"title":"Step 2: Owners \u0026 tokens","href":"/en/sdk/squid-sdk/evm/examples-tutorials/bayc/step-two-deriving-owners-and-tokens"},{"title":"Step 3: External data","href":"/en/sdk/squid-sdk/evm/examples-tutorials/bayc/step-three-adding-external-data"},{"title":"Step 4: Optimization","href":"/en/sdk/squid-sdk/evm/examples-tutorials/bayc/step-four-optimizations"}]},{"title":"Processor in action","href":"/en/sdk/squid-sdk/evm/examples-tutorials/batch-processor-in-action"},{"title":"Use with Ganache or Hardhat","href":"/en/sdk/squid-sdk/evm/examples-tutorials/use-with-ganache-hardhat"},{"title":"Index to local CSV files","href":"/en/sdk/squid-sdk/evm/examples-tutorials/file-csv"},{"title":"Index to Parquet files","href":"/en/sdk/squid-sdk/evm/examples-tutorials/file-parquet"},{"title":"Automatically generate an indexer","href":"/en/sdk/squid-sdk/evm/examples-tutorials/auto-generate-indexer"},{"title":"EVM Examples","sidebarTitle":"Examples","href":"/en/sdk/squid-sdk/evm/examples-tutorials/examples-widget"}]},{"group":"Reference","pages":[{"title":"Packages overview","sidebarTitle":"Packages overview","href":"/en/sdk/squid-sdk/evm/reference/packages-overview"},{"title":"Project Structure","href":"/en/sdk/squid-sdk/evm/reference/project-structure"},{"group":"Data sources","pages":[{"title":"Portal batch processor","sidebarTitle":"Portal batch processor","href":"/en/sdk/squid-sdk/evm/reference/batch-processor"},{"group":"EVM Portal stream","pages":[{"title":"EVM Portal stream","sidebarTitle":"EVM Portal stream","href":"/en/sdk/squid-sdk/evm/reference/evm-stream"},{"title":"Event logs","sidebarTitle":"Event logs","href":"/en/sdk/squid-sdk/evm/reference/evm-stream/logs"},{"title":"EVM transactions","sidebarTitle":"Transactions","href":"/en/sdk/squid-sdk/evm/reference/evm-stream/transactions"},{"title":"Traces","sidebarTitle":"Traces","href":"/en/sdk/squid-sdk/evm/reference/evm-stream/traces"},{"title":"Storage state diffs","sidebarTitle":"State diffs","href":"/en/sdk/squid-sdk/evm/reference/evm-stream/state-diffs"},{"title":"Field selection","sidebarTitle":"Field selection","href":"/en/sdk/squid-sdk/evm/reference/evm-stream/field-selection"},{"title":"Block data for EVM","sidebarTitle":"Block data","href":"/en/sdk/squid-sdk/evm/reference/evm-stream/context-interfaces"}]},{"title":"EVM RPC data source","sidebarTitle":"EVM RPC source","href":"/en/sdk/squid-sdk/evm/reference/evm-rpc-stream"},{"title":"EVM fallback data source","sidebarTitle":"EVM fallback source","href":"/en/sdk/squid-sdk/evm/reference/evm-fallback"}]},{"group":"Data stores","pages":[{"title":"Store interface","href":"/en/sdk/squid-sdk/evm/reference/data-stores/store-interface"},{"title":"TypeORM Store","href":"/en/sdk/squid-sdk/evm/reference/data-stores/typeorm-store"},{"title":"BigQuery Store","href":"/en/sdk/squid-sdk/evm/reference/data-stores/bigquery-store"},{"group":"File store","pages":[{"title":"file-store-* packages","href":"/en/sdk/squid-sdk/evm/reference/data-stores/file-store"},{"title":"CSV support","href":"/en/sdk/squid-sdk/evm/reference/data-stores/file-store/csv"},{"title":"JSON support","href":"/en/sdk/squid-sdk/evm/reference/data-stores/file-store/json"},{"title":"Parquet support","href":"/en/sdk/squid-sdk/evm/reference/data-stores/file-store/parquet"},{"title":"S3 support","href":"/en/sdk/squid-sdk/evm/reference/data-stores/file-store/s3-dest"}]}]},{"group":"Schema files","pages":[{"title":"Schema file and codegen","href":"/en/sdk/squid-sdk/evm/reference/schema-files/schema-files-codegen"},{"title":"Entities","href":"/en/sdk/squid-sdk/evm/reference/schema-files/entities"},{"title":"Entity relations","href":"/en/sdk/squid-sdk/evm/reference/schema-files/entity-relations"},{"title":"Indexes and constraints","href":"/en/sdk/squid-sdk/evm/reference/schema-files/indexes-constraints"},{"title":"Interfaces","href":"/en/sdk/squid-sdk/evm/reference/schema-files/interfaces"},{"title":"Unions and typed JSON","href":"/en/sdk/squid-sdk/evm/reference/schema-files/unions-typed-json"}]},{"title":"TypeORM model generation","href":"/en/sdk/squid-sdk/evm/reference/typeorm-codegen"},{"title":"TypeORM migration generation","href":"/en/sdk/squid-sdk/evm/reference/typeorm-migration"},{"group":"EVM typegen","pages":[{"title":"Generating utility modules","href":"/en/sdk/squid-sdk/evm/reference/evm-typegen/generating-utility-modules"},{"title":"Data decoding","href":"/en/sdk/squid-sdk/evm/reference/evm-typegen/data-decoding"},{"title":"Direct RPC queries","href":"/en/sdk/squid-sdk/evm/reference/evm-typegen/direct-rpc-queries"}]},{"group":"OpenReader","pages":[{"title":"OpenReader Overview","href":"/en/sdk/squid-sdk/evm/reference/openreader/overview"},{"group":"API reference","pages":[{"title":"Core API Introduction","href":"/en/sdk/squid-sdk/evm/reference/openreader/api/intro"},{"title":"Entity Queries","href":"/en/sdk/squid-sdk/evm/reference/openreader/api/queries"},{"title":"AND/OR Filters","href":"/en/sdk/squid-sdk/evm/reference/openreader/api/and-or-filters"},{"title":"Sorting","href":"/en/sdk/squid-sdk/evm/reference/openreader/api/sorting"},{"title":"Pagination","href":"/en/sdk/squid-sdk/evm/reference/openreader/api/paginate-query-results"},{"title":"Nested Field Queries","href":"/en/sdk/squid-sdk/evm/reference/openreader/api/nested-field-queries"},{"title":"Cross-relation Queries","href":"/en/sdk/squid-sdk/evm/reference/openreader/api/cross-relation-field-queries"},{"title":"JSON Queries","href":"/en/sdk/squid-sdk/evm/reference/openreader/api/json-queries"},{"title":"Union Type Resolution","href":"/en/sdk/squid-sdk/evm/reference/openreader/api/resolve-union-types-interfaces"}]},{"group":"Server configuration","pages":[{"title":"Custom Resolvers","href":"/en/sdk/squid-sdk/evm/reference/openreader/configuration/custom-resolvers"},{"title":"Authorization","href":"/en/sdk/squid-sdk/evm/reference/openreader/configuration/authorization"},{"title":"Caching","href":"/en/sdk/squid-sdk/evm/reference/openreader/configuration/caching"},{"title":"Subscriptions","href":"/en/sdk/squid-sdk/evm/reference/openreader/configuration/subscriptions"},{"title":"DoS Protection","href":"/en/sdk/squid-sdk/evm/reference/openreader/configuration/dos-protection"}]}]},{"title":"Hasura configuration tool","href":"/en/sdk/squid-sdk/evm/reference/hasura-configuration"},{"title":"Creating a squid project","sidebarTitle":"Create a squid","href":"/en/sdk/squid-sdk/evm/reference/create-squid"},{"title":"Squid SDK Logger","sidebarTitle":"Logger","href":"/en/sdk/squid-sdk/evm/reference/logger"}]}]},{"group":"Alternative clients","pages":[{"group":"Ponder","tag":"0.17.8","expanded":true,"pages":[{"title":"Use Portal with Ponder","sidebarTitle":"Overview","href":"/en/sdk/alternative-clients/ponder"},{"title":"Run the Ponder and Portal example","sidebarTitle":"Quickstart","href":"/en/sdk/alternative-clients/ponder/quickstart"},{"title":"Migrate a Ponder app to Portal","sidebarTitle":"Migrate an app","href":"/en/sdk/alternative-clients/ponder/guides/migrate"},{"title":"Ponder and Portal examples","sidebarTitle":"Examples","href":"/en/sdk/alternative-clients/ponder/examples"},{"title":"Configure Ponder with Portal","sidebarTitle":"Configuration","href":"/en/sdk/alternative-clients/ponder/configuration"},{"title":"Ponder benchmarks and validation","sidebarTitle":"Benchmarks and validation","href":"/en/sdk/alternative-clients/ponder/benchmarks-and-validation"}]},{"title":"sqd-go","tag":"Community","href":"/en/sdk/alternative-clients/sqd-go"},{"title":"DipDup","href":"/en/sdk/alternative-clients/dipdup"},{"title":"SQD Firehose","href":"/en/sdk/alternative-clients/subgraphs-support"},{"title":"ApeWorx plugin","href":"/en/sdk/alternative-clients/apeworx"}]}]},{"item":"Solana","icon":"https://mintlify.s3.us-west-1.amazonaws.com/sqd-2119b3c3/images/chains/sol.png","description":"Solana and SVM compatible chains","pages":[{"title":"Solana","href":"/en/sdk/pipes-sdk/solana/quickstart"}]},{"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":"Squid SDK tips and troubleshooting - SQD Documentation","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":[],"chunks":[]}