Which rows can still change, and how to read near the head safely.
Bloklake serves blocks up to the chain head. The newest blocks can still be replaced by a
reorg: the chain switches to a different version of its recent history, and blocks you
already read are replaced by others with different hashes and contents.
The simplest correct approach. Cap every range at finalized_block:
status = requests.get(f"{BASE}/status").json()end = status["finalized_block"]for tables in read_range(body, start, end): store(tables) # never needs to be undone
Your data lags the head by the finality delay, and you never handle a reorg.
Strategy 2: read to the head, re-check the unfinalized tail
For live data:
Read up to the head. Store rows at or below finalized_block as final.
Keep rows above it as tentative, together with the response’s to_block and
to_block_hash.
On the next poll, re-read from the first tentative block. If the block at the old
to_block now has a different hash, a reorg replaced it: drop your tentative rows and use
the new ones.
The complete loop, tested against a reorg, is in Following the head.Replacing the tentative rows on every poll is the simplest correct implementation: you never
need to diff, because you always re-read everything that could have changed.
A reorg can change blocks without changing archive_height: same height, different block.
Don’t detect reorgs by watching the height. Compare to_block_hash, or re-read the
unfinalized range as above.
Two requests can see different heads. A block visible in one response might not exist yet, or
might have been replaced, in the next. If you need a stable, repeatable view, pin toBlock to a
block at or below finalized_block: the same request then always returns the same rows.
Poll about once per block time: every 12 seconds on Ethereum, every second or so on Robinhood
Chain. Polling faster returns mostly empty responses, which still count toward your rate limit
and are billed at the 10 KB minimum. See
Following the head for a complete loop.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Bloklake","description":"Historical blockchain data over HTTP: filter logs, transactions and blocks across any block range and get them back as Apache Arrow or JSON.","colors":{"primary":"#155DFC","light":"#5B8DEF","dark":"#155DFC"},"logo":{"light":"https://mintcdn.com/my-company-7009db77/AEOzPZjunXHOKyLs/logo/light.svg?fit=max\u0026auto=format\u0026n=AEOzPZjunXHOKyLs\u0026q=85\u0026s=e35836064fc974b118e53f0b9fab7ed5","dark":"https://mintcdn.com/my-company-7009db77/AEOzPZjunXHOKyLs/logo/dark.svg?fit=max\u0026auto=format\u0026n=AEOzPZjunXHOKyLs\u0026q=85\u0026s=ba4d4816883fd716d501f7a04392fa60"},"favicon":"https://mintcdn.com/my-company-7009db77/AEOzPZjunXHOKyLs/favicon.svg?fit=max\u0026auto=format\u0026n=AEOzPZjunXHOKyLs\u0026q=85\u0026s=08187e2c7d019c8676cdf87e91fd19cd","navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"}],"primary":{"type":"button","label":"Get an API key","href":"https://dashboard.bloklake.com"}},"footer":{"links":[{"header":"Bloklake","items":[{"label":"Dashboard","href":"https://dashboard.bloklake.com"},{"label":"Pricing","href":"/billing/pricing"},{"label":"Support","href":"mailto:[email protected]"}]}]},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Dashboard","icon":"gauge","href":"https://dashboard.bloklake.com"},{"anchor":"Chain status","icon":"signal","href":"https://dashboard.bloklake.com/chains"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"my-company-7009db77","hasAudioNarration":false,"actualSubdomain":"my-company-7009db77","customDomains":["docs.bloklake.com"],"gitSource":{"type":"github","owner":"nikbhintade","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae20e8160416b77ca6b9f99","collectionId":"2fdf09bf-4255-43cb-83dd-8f44c820bec3","liveDeploymentHistoryId":"6ae20e8160416b77ca6b9f99","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ae20e8160416b77ca6b9f99","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"Documentation","count":43},{"language":"default","tag":"API reference","count":14},{"language":"default","tag":"Querying","count":12},{"language":"default","tag":"Guides","count":7},{"language":"default","tag":"Billing","count":6},{"language":"default","tag":"Production","count":5},{"language":"default","tag":"Responses","count":5},{"language":"default","tag":"Sets and prepared queries","count":4},{"language":"default","tag":"Get started","count":4},{"language":"default","tag":"Account","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"querying/finality-and-reorgs","slug":"/querying/finality-and-reorgs","pageMetadata":{"title":"Finality and reorgs","description":"Which rows can still change, and how to read near the head safely.","href":"/querying/finality-and-reorgs"},"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: \"Which rows can still change, and how to read near the head safely.\"\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`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._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:[_jsxs(_components.p,{children:[`Bloklake serves blocks up to the chain head. The newest blocks can still be replaced by a\n`,_jsx(_components.strong,{children:`reorg`}),`: the chain switches to a different version of its recent history, and blocks you\nalready read are replaced by others with different hashes and contents.`]}),`\n`,_jsx(Heading,{level:`2`,id:`three-numbers-in-every-response`,children:`Three numbers in every response`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`archive_height`})}),_jsx(_components.td,{children:`the newest block you can query right now`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`finalized_block`})}),_jsx(_components.td,{children:`the newest block that can no longer change`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`to_block_hash`})}),_jsxs(_components.td,{children:[`the hash of the response’s last block, `,_jsx(_components.strong,{children:`only`}),` when that block is above `,_jsx(_components.code,{children:`finalized_block`})]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Rows at or below `,_jsx(_components.code,{children:`finalized_block`}),` are final. Rows between `,_jsx(_components.code,{children:`finalized_block`}),` and\n`,_jsx(_components.code,{children:`archive_height`}),` might still be replaced.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Chain`}),_jsx(_components.th,{children:`Finalized after`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Ethereum`}),_jsx(_components.td,{children:`the beacon chain finalizes the epoch, ~13 minutes`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Robinhood Chain`}),_jsx(_components.td,{children:`64 blocks, ~7 seconds`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`strategy-1-only-read-finalized-data`,children:`Strategy 1: only read finalized data`}),`\n`,_jsxs(_components.p,{children:[`The simplest correct approach. Cap every range at `,_jsx(_components.code,{children:`finalized_block`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`python`,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:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`status `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` requests.get(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`BASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).json()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`end `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` status[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"finalized_block\"`}),_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:` tables `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`in`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` read_range(body, start, end):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` store(tables) `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# never needs to be undone`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Your data lags the head by the finality delay, and you never handle a reorg.`}),`\n`,_jsx(Heading,{level:`2`,id:`strategy-2-read-to-the-head-re-check-the-unfinalized-tail`,children:`Strategy 2: read to the head, re-check the unfinalized tail`}),`\n`,_jsx(_components.p,{children:`For live data:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Read up to the head. Store rows at or below `,_jsx(_components.code,{children:`finalized_block`}),` as final.`]}),`\n`,_jsxs(_components.li,{children:[`Keep rows above it as `,_jsx(_components.strong,{children:`tentative`}),`, together with the response’s `,_jsx(_components.code,{children:`to_block`}),` and\n`,_jsx(_components.code,{children:`to_block_hash`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`On the next poll, re-read from the first tentative block. If the block at the old\n`,_jsx(_components.code,{children:`to_block`}),` now has a different hash, a reorg replaced it: drop your tentative rows and use\nthe new ones.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The complete loop, tested against a reorg, is in `,_jsx(_components.a,{href:`/guides/follow-the-head`,children:`Following the head`}),`.`]}),`\n`,_jsx(_components.p,{children:`Replacing the tentative rows on every poll is the simplest correct implementation: you never\nneed to diff, because you always re-read everything that could have changed.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`A reorg can change blocks `,_jsxs(_components.strong,{children:[`without changing `,_jsx(_components.code,{children:`archive_height`})]}),`: same height, different block.\nDon’t detect reorgs by watching the height. Compare `,_jsx(_components.code,{children:`to_block_hash`}),`, or re-read the\nunfinalized range as above.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`no-snapshot-isolation`,children:`No snapshot isolation`}),`\n`,_jsxs(_components.p,{children:[`Two requests can see different heads. A block visible in one response might not exist yet, or\nmight have been replaced, in the next. If you need a stable, repeatable view, pin `,_jsx(_components.code,{children:`toBlock`}),` to a\nblock at or below `,_jsx(_components.code,{children:`finalized_block`}),`: the same request then always returns the same rows.`]}),`\n`,_jsx(Heading,{level:`2`,id:`polling-cadence`,children:`Polling cadence`}),`\n`,_jsxs(_components.p,{children:[`Poll about once per block time: every 12 seconds on Ethereum, every second or so on Robinhood\nChain. Polling faster returns mostly empty responses, which still count toward your rate limit\nand are `,_jsx(_components.a,{href:`/billing/how-billing-works#minimum-per-request`,children:`billed at the 10 KB minimum`}),`. See\n`,_jsx(_components.a,{href:`/guides/follow-the-head`,children:`Following the head`}),` for a complete loop.`]})]})}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":{"config":{},"pageMetadata":{"title":"Finality and reorgs","description":"Which rows can still change, and how to read near the head safely.","href":"/querying/finality-and-reorgs"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Three numbers in every response","slug":"three-numbers-in-every-response","depth":2,"children":[]},{"title":"Strategy 1: only read finalized data","slug":"strategy-1-only-read-finalized-data","depth":2,"children":[]},{"title":"Strategy 2: read to the head, re-check the unfinalized tail","slug":"strategy-2-read-to-the-head-re-check-the-unfinalized-tail","depth":2,"children":[]},{"title":"No snapshot isolation","slug":"no-snapshot-isolation","depth":2,"children":[]},{"title":"Polling cadence","slug":"polling-cadence","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"my-company-7009db77","siteName":"Bloklake","title":"Finality and reorgs - Bloklake","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-19T03:50:30.673Z","originalFileLocation":"querying/finality-and-reorgs.mdx"},"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=\"Which rows can still change, and how to read near the head safely.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Bloklake\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/my-company-7009db77/ZZq8wWyTTsLus1zT/_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/my-company-7009db77/ZZq8wWyTTsLus1zT/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/my-company-7009db77/ZZq8wWyTTsLus1zT/_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/my-company-7009db77/ZZq8wWyTTsLus1zT/_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/my-company-7009db77/ZZq8wWyTTsLus1zT/_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/my-company-7009db77/ZZq8wWyTTsLus1zT/_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/my-company-7009db77/ZZq8wWyTTsLus1zT/_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/my-company-7009db77/ZZq8wWyTTsLus1zT/_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/my-company-7009db77/ZZq8wWyTTsLus1zT/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Finality and reorgs - Bloklake\">\u003cmeta data-mint-head property=\"og:description\" content=\"Which rows can still change, and how to read near the head safely.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Bloklake\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.bloklake.com/querying/finality-and-reorgs\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://my-company-7009db77.mintlify.app/_mintlify/api/og/v2?division=Querying\u0026amp;title=Finality+and+reorgs\u0026amp;description=Which+rows+can+still+change%2C+and+how+to+read+near+the+head+safely.\u0026amp;theme=20a4be7d56b4aeb125dec394\u0026amp;signature=4f56e7cb83410e455fd9a56272027dc9c6314c325adbf8f905d6f27e9c448411\">\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=\"Finality and reorgs - Bloklake\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Which rows can still change, and how to read near the head safely.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://my-company-7009db77.mintlify.app/_mintlify/api/og/v2?division=Querying\u0026amp;title=Finality+and+reorgs\u0026amp;description=Which+rows+can+still+change%2C+and+how+to+read+near+the+head+safely.\u0026amp;theme=20a4be7d56b4aeb125dec394\u0026amp;signature=4f56e7cb83410e455fd9a56272027dc9c6314c325adbf8f905d6f27e9c448411\">\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/my-company-7009db77/ZZq8wWyTTsLus1zT/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Bloklake\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#155DFC\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.bloklake.com/querying/finality-and-reorgs\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/querying/finality-and-reorgs.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.bloklake.com/#organization\",\"name\":\"Bloklake\",\"url\":\"https://docs.bloklake.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/my-company-7009db77/AEOzPZjunXHOKyLs/logo/light.svg?fit=max\u0026auto=format\u0026n=AEOzPZjunXHOKyLs\u0026q=85\u0026s=e35836064fc974b118e53f0b9fab7ed5\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.bloklake.com#website\",\"name\":\"Bloklake\",\"url\":\"https://docs.bloklake.com\",\"publisher\":{\"@id\":\"https://docs.bloklake.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.bloklake.com/querying/finality-and-reorgs#webpage\",\"url\":\"https://docs.bloklake.com/querying/finality-and-reorgs\",\"name\":\"Finality and reorgs\",\"description\":\"Which rows can still change, and how to read near the head safely.\",\"dateModified\":\"2026-10-19T03:50:30.673Z\",\"isPartOf\":{\"@id\":\"https://docs.bloklake.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.bloklake.com/querying/finality-and-reorgs#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.bloklake.com/querying/finality-and-reorgs#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Querying\",\"item\":\"https://docs.bloklake.com/querying/request-body\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Finality and reorgs\",\"item\":\"https://docs.bloklake.com/querying/finality-and-reorgs\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.bloklake.com/querying/finality-and-reorgs#article\",\"headline\":\"Finality and reorgs\",\"name\":\"Finality and reorgs\",\"description\":\"Which rows can still change, and how to read near the head safely.\",\"url\":\"https://docs.bloklake.com/querying/finality-and-reorgs\",\"mainEntityOfPage\":{\"@id\":\"https://docs.bloklake.com/querying/finality-and-reorgs#webpage\"},\"dateModified\":\"2026-10-19T03:50:30.673Z\",\"publisher\":{\"@id\":\"https://docs.bloklake.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.bloklake.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Bloklake\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Bloklake","nav":{"global":{"anchors":[{"anchor":"Dashboard","icon":"gauge","href":"https://dashboard.bloklake.com"},{"anchor":"Chain status","icon":"signal","href":"https://dashboard.bloklake.com/chains"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","pages":[{"title":"Bloklake","mode":"wide","href":""},{"title":"Quickstart","href":"/quickstart"},{"title":"Client libraries","href":"/clients"},{"title":"Core concepts","href":"/concepts"}]},{"group":"Chains","pages":[{"title":"Chains","href":"/chains/overview"},{"title":"Ethereum","href":"/chains/ethereum"},{"title":"Robinhood Chain","href":"/chains/robinhood-chain"}]},{"group":"Querying","pages":[{"title":"Request body","href":"/querying/request-body"},{"title":"Filters","href":"/querying/filters"},{"title":"Selecting fields","href":"/querying/fields"},{"title":"Blocks","href":"/querying/blocks"},{"title":"Joining logs to transactions","href":"/querying/join-transactions"},{"title":"Pagination","href":"/querying/pagination"},{"title":"Sets","href":"/querying/sets"},{"title":"Prepared queries","description":"Send a filter once, then re-run it by id over different ranges.","href":"/querying/prepared-queries"},{"title":"Finality and reorgs","href":"/querying/finality-and-reorgs"},{"title":"Fields a chain doesn't have","description":"Why some columns are always null on some chains, and how to tell them from real nulls.","href":"/querying/unavailable-fields"}]},{"group":"Responses","pages":[{"title":"Arrow vs JSON","href":"/responses/arrow-vs-json"},{"title":"Reading Arrow","href":"/responses/reading-arrow"},{"title":"The JSON format","href":"/responses/json"},{"title":"Response metadata","href":"/responses/metadata"},{"title":"Data types","href":"/responses/data-types"}]},{"group":"Guides","pages":[{"title":"Index ERC-20 transfers","href":"/guides/erc20-transfers"},{"title":"Wallet activity","href":"/guides/wallet-activity"},{"title":"Factory contracts","href":"/guides/factory-contracts"},{"title":"Following the head","href":"/guides/follow-the-head"},{"title":"Decoding logs","href":"/guides/decode-logs"},{"title":"Export to Parquet and DuckDB","href":"/guides/export-to-parquet"},{"title":"Sampling blocks","href":"/guides/sampling-blocks"}]},{"group":"Account","pages":[{"title":"Projects and the dashboard","href":"/account/projects"},{"title":"API keys","href":"/account/api-keys"},{"title":"Team and roles","href":"/account/team"}]},{"group":"Billing","pages":[{"title":"Pricing","href":"/billing/pricing"},{"title":"How billing works","href":"/billing/how-billing-works"},{"title":"Estimating costs","href":"/billing/estimating-costs"},{"title":"Pay-as-you-go","href":"/billing/pay-as-you-go"},{"title":"Subscriptions","href":"/billing/subscriptions"},{"title":"Statements and receipts","href":"/billing/statements-and-receipts"}]},{"group":"Production","pages":[{"title":"Production checklist","href":"/production/best-practices"},{"title":"Rate limits","href":"/production/rate-limits"},{"title":"Errors and retries","href":"/production/errors-and-retries"},{"title":"Limits","href":"/production/limits"},{"title":"Troubleshooting and FAQ","href":"/production/troubleshooting"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Finality and reorgs - Bloklake","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":[],"chunks":[]}