PageSourceSearch

https://ethpandaops.io/assets/js/04c19273.43ecc94f.js

js ethpandaops.io collected 2026-10-03 21:44:01 UTC 31,704 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkpublic_docs=globalThis.webpackChunkpublic_docs||[]).push([[844],{15851(e,t,a){a.d(t,{A:()=>s});const s={container:"container_TtSs",loading:"loading_V4Ac",error:"error_LGEH",forkChip:"forkChip_zRCn",preReleaseBadge:"preReleaseBadge_E1Hm",forkBadge:"forkBadge_gImr",finalBadge:"finalBadge_Qc_I",chipRow:"chipRow_Dldu",networkChip:"networkChip_w0VO",filterRow:"filterRow_oOcQ",filterInput:"filterInput_sfAO",facetSelect:"facetSelect_aP7x",expandAllButton:"expandAllButton_BGaZ",resultCount:"resultCount_ywhl",showMoreButton:"showMoreButton_DaH7",tableList:"tableList_pxyz",tableRow:"tableRow_kRur",tableRowOpen:"tableRowOpen_EpJg",tableRowHeader:"tableRowHeader_ZmjA",rowChevron:"rowChevron_kh0M",rowMain:"rowMain_ihmW",rowNameLine:"rowNameLine_JEAp",rowName:"rowName_yfpN",copyButton:"copyButton_g_t5",rowDescription:"rowDescription_UxRo",rowMeta:"rowMeta_vHbT",rowNetworks:"rowNetworks_L8Rv",rowContext:"rowContext_HILB",tableRowBody:"tableRowBody_tO1Z",bodyHeading:"bodyHeading_Np0i",tableCardDescription:"tableCardDescription_osPH",tableCardStats:"tableCardStats_kGTt",callout:"callout_yzTk",columnSearch:"columnSearch_jWCf",columnList:"columnList__dL1",columnRow:"columnRow_bkzz",columnIdent:"columnIdent_hDJ7",columnName:"columnName_LLkM",columnDescription:"columnDescription_mlQc",metaDivider:"metaDivider_woyS",metaToggle:"metaToggle_DhOX",typeChip:"typeChip_cNCD",type_time:"type_time_hDfn",type_number:"type_number_xn7T",type_string:"type_string_bXIa",type_bool:"type_bool_p1Tz",type_net:"type_net_wHl6",type_complex:"type_complex_y_cj",type_other:"type_other_X3q1",partitionKeyBadge:"partitionKeyBadge_ew3E",timeline:"timeline_M8gO",timelineRow:"timelineRow_LP0U",timelineLabel:"timelineLabel_U2ks",timelineTrack:"timelineTrack_sp5C",timelineBar:"timelineBar_im97",timelineRange:"timelineRange_DgIT",panelSwitch:"panelSwitch_njIV",panelButton:"panelButton_hoep",panelButtonActive:"panelButtonActive_od2h",exampleTabs:"exampleTabs_qBPy",tabButtons:"tabButtons_xPOF",tabButton:"tabButton_am8_",tabButtonActive:"tabButtonActive_DFXN",tableWrap:"tableWrap_GQyH",devnetsTable:"devnetsTable_0gYD",linkCell:"linkCell_udV8",forkCards:"forkCards_i3bN",forkCard:"forkCard_SgZY",experimentalCard:"experimentalCard_zcxA",forkCardHeader:"forkCardHeader_EVPj",forkCardTitle:"forkCardTitle__93e",forkCardStats:"forkCardStats_aVK1",datasetCardDescription:"datasetCardDescription_gVOK",forkMeta:"forkMeta_RfWl",detailsBlock:"detailsBlock_v6yq",heroStats:"heroStats_SiBl",statCard:"statCard_Ezhx",statValue:"statValue_GRFX",statLabel:"statLabel_NcB2",heroSearch:"heroSearch_CQwH",heroSearchInput:"heroSearchInput_We3Q",heroSearchButton:"heroSearchButton_ASho",quickLinks:"quickLinks_s4MC",quickLink:"quickLink_HNmF",freshness:"freshness_e245",statusDot:"statusDot_H9ej"}},15872(e){e.exports=JSON.parse('{"permalink":"/data/xatu/forks/fusaka","source":"@site/data/xatu-data/forks/fusaka.md","title":"Xatu - Fusaka experimental data","description":"Devnet-only Xatu tables being tested for the Fusaka network upgrade.","date":"2026-09-30T09:51:02.000Z","tags":[{"inline":true,"label":"xatu","permalink":"/data/tags/xatu"},{"inline":true,"label":"data","permalink":"/data/tags/data"},{"inline":true,"label":"devnets","permalink":"/data/tags/devnets"},{"inline":true,"label":"experimental","permalink":"/data/tags/experimental"},{"inline":true,"label":"fusaka","permalink":"/data/tags/fusaka"}],"hasTruncateMarker":false,"authors":[],"frontMatter":{"hide_hero":true,"title":"Xatu - Fusaka experimental data","slug":"xatu/forks/fusaka","description":"Devnet-only Xatu tables being tested for the Fusaka network upgrade.","image":"/img/blog/xatu-data.jpg","tags":["xatu","data","devnets","experimental","fusaka"]},"unlisted":false,"prevItem":{"title":"Xatu - MEV Relay events","permalink":"/data/xatu/datasets/mev_relay_"},"nextItem":{"title":"Xatu - Glamsterdam experimental data","permalink":"/data/xatu/forks/glamsterdam"}}')},20302(e,t,a){a.d(t,{OA:()=>D,Qv:()=>S,TE:()=>T,i8:()=>k,iD:()=>L,nx:()=>y,oz:()=>b,vT:()=>w,yj:()=>v});var s=a(96540),n=a(28774),r=a(88149),l=a(60023),i=a(15851),o=a(74848);const c="https://raw.githubusercontent.com/ethpandaops/xatu-data/master",d="https://data.ethpandaops.io/xatu",h="/data/xatu/forks",u="https://clickhouse.xatu.ethpandaops.io";
1function m(e){const[t,a]=(0,s.useState)(null),[n,r]=(0,s.useState)(null);return(0,s.useEffect)(()=>{let t=!1;return fetch(e).then(e=>{if(!e.ok)throw new Error(`HTTP ${e.status}`);return e.json()}).then(e=>{t||a(e)}).catch(e=>{t||r(e.message)}),()=>{t=!0}},[e]),{data:t,error:n}}const p=()=>m(`${c}/catalog/index.json`),x=()=>m(`${c}/experimental.json`);function j({error:e,what:t="catalog"}){return e?(0,o.jsxs)("div",{className:i.A.error,children:["Failed to load the ",t,": ",e]}):(0,o.jsxs)("div",{className:i.A.loading,children:["Loading ",t,"\u2026"]})}function b({children:e,className:t}){const a=(0,s.useMemo)(()=>l.xI.parse(e||""),[e]);return e?(0,o.jsx)("div",{className:t,dangerouslySetInnerHTML:{__html:a}}):null}function f({fork:e}){return(0,o.jsx)("code",{className:i.A.forkChip,children:e})}function k({text:e}){const[t,a]=(0,s.useState)(!1);return(0,o.jsx)("button",{type:"button",className:i.A.copyButton,title:`Copy ${e}`,onClick:t=>{t.stopPropagation(),navigator.clipboard?.writeText(e).then(()=>{a(!0),setTimeout(()=>a(!1),1200)})},children:t?(0,o.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:(0,o.jsx)("path",{d:"M2.5 8.5l3.5 3.5 7-8",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})}):(0,o.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[(0,o.jsx)("rect",{x:"5.5",y:"5.5",width:"8",height:"8",rx:"1.5",stroke:"currentColor",strokeWidth:"1.4"}),(0,o.jsx)("path",{d:"M10.5 3.5v-1a1 1 0 00-1-1h-6a1 1 0 00-1 1v6a1 1 0 001 1h1",stroke:"currentColor",strokeWidth:"1.4"})]})})}function g(e){const t=e.replace(/^(Nullable|LowCardinality)\((.*)\)$/,"$2");return/^(DateTime|Date)/.test(t)?"time":/^(UInt|Int|Float|Decimal)/.test(t)?"number":/^(String|FixedString|Enum|UUID)/.test(t)?"string":/^Bool/.test(t)?"bool":/^(IPv4|IPv6)/.test(t)?"net":/^(Array|Map|Tuple|Nested|AggregateFunction)/.test(t)?"complex":"other"}function _({type:e}){return(0,o.jsx)("span",{className:`${i.A.typeChip} ${i.A[`type_${g(e)}`]}`,children:e})}function N({col:e,isPartitionKey:t}){return(0,o.jsxs)("div",{className:i.A.columnRow,children:[(0,o.jsxs)("div",{className:i.A.columnIdent,children:[(0,o.jsx)("span",{className:i.A.columnName,children:e.name}),(0,o.jsx)(_,{type:e.type}),t&&(0,o.jsx)("span",{className:i.A.partitionKeyBadge,title:"Partition key \u2014 always filter on this column",children:"partition key"})]}),(0,o.jsx)("div",{className:i.A.columnDescription,children:e.description})]})}function v({columns:e,partitionColumn:t}){const[a,n]=(0,s.useState)(""),[r,l]=(0,s.useState)(!0),c=a.toLowerCase(),d=e=>!c||e.name.toLowerCase().includes(c)||e.type.toLowerCase().includes(c),h=e.filter(e=>!e.name.startsWith("meta_")&&d(e)),u=e.filter(e=>e.name.startsWith("meta_")&&d(e)),m=r||""!==c;return(0,o.jsxs)("div",{children:[e.length>8&&(0,o.jsx)("input",{type:"search",className:i.A.columnSearch,placeholder:"Search columns\u2026",value:a,onChange:e=>n(e.target.value)}),(0,o.jsxs)("div",{className:i.A.columnList,children:[h.map(e=>(0,o.jsx)(N,{col:e,isPartitionKey:e.name===t},e.name)),u.length>0&&!m&&(0,o.jsxs)("button",{type:"button",className:i.A.metaToggle,onClick:()=>l(!0),children:["\u25b8 Show ",u.length," meta_* columns (sentry/client metadata)"]}),m&&u.length>0&&(0,o.jsx)("div",{className:i.A.metaDivider,children:"meta_* \u2014 sentry/client metadata"}),m&&u.map(e=>(0,o.jsx)(N,{col:e,isPartitionKey:e.name===t},e.name)),m&&u.length>0&&!c&&(0,o.jsx)("button",{type:"button",className:i.A.metaToggle,onClick:()=>l(!1),children:"\u25b4 Hide meta_* columns"})]})]})}function y({networks:e}){const t=Object.entries(e).filter(([,e])=>e&&void 0!==e.from&&void 0!==e.to);if(0===t.length)return null;const a=t.every(([,e])=>isNaN(Number(e.from))),s=e=>a?Date.parse(e):Number(e),n=e=>a?String(e):Number(e).toLocaleString(),r=Math.min(...t.map(([,e])=>s(e.from))),l=Math.max(...t.map(([,e])=>s(e.to)))-r||1;return(0,o.jsx)("div",{className:i.A.timeline,children:t.map(([e,t])=>{const a=(s(t.from)-r)/l*100,c=Math.max((s(t.to)-s(t.from))/l*100,1.5);return(0,o.jsxs)("div",{className:i.A.timelineRow,children:[(0,o.jsx)("span",{className:i.A.timelineLabel,children:e}),(0,o.jsx)("div",{className:i.A.timelineTrack,children:(0,o.jsx)("div",{className:i.A.timelineBar,style:{left:`${a}%`,width:`${c}%`}})}),(0,o.jsxs)("span",{className:i.A.timelineRange,children:[n(t.from)," \u2192 ",n(t.to)]})]},e)})})}function w({table:e,prerelease:t}){const a=t?(e.devnets||[])[0]:e.cbt_table?"mainnet":e.database,n=/[^a-zA-Z0-9_]/.test(a||"")?`\`${a}\``:a,{partitioning:l={}}=e;let c="";if("datetime"===l.type&&l.column)c=`\nWHERE\n    ${l.column} >= NOW() - INTERVAL 1 DAY`,e.cbt_table||t||(c+="\n    AND meta_network_name = 'mainnet'");else if("integer"===l.type&&l.column){const e=Number(l.interval)||1e3;c=`\nWHERE\n    ${l.column} BETWEEN ${50*e} AND ${51*e}`}const h=`SELECT\n    *\nFROM ${n}.${e.name}${e.should_use_final?" FINAL":""}${c}\nLIMIT 3`,m=h.replaceAll("`","\\`"),p=[{key:"sql",label:"SQL",language:"sql",code:h},{key:"panda",label:"panda",language:"bash",code:`# ethPandaOps CLI: https://github.com/ethpandaops/panda\npanda clickhouse query ${e.cbt_table?"clickhouse-refined":"clickhouse-raw"} "\n${m}\n"`},{key:"curl",label:"curl",language:"bash",code:`echo """\n${m}\n    FORMAT Pretty\n""" | curl "${u}" -u "$CLICKHOUSE_USER:$CLICKHOUSE_PASSWORD" --data-binary @-`}],x=t?null:function(e){const{partitioning:t={},database:a,networks:s={}}=e,n=s.mainnet||{};if(!t.type||e.cbt_table)return null;if("datetime"===t.type){const s="hourly"===t.interval?`${d}/NETWORK/databases/${a}/${e.name}/YYYY/M/D/H.parquet`:`${d}/NETWORK/databases/${a}/${e.name}/YYYY/MM/DD.parquet`,r=(n.to||"2024-04-01").replaceAll("-","/");return{pattern:s,example:"hourly"===t.interval?`${d}/mainnet/databases/${a}/${e.name}/${r}/0.parquet`:`${d}/mainnet/databases/${a}/${e.name}/${r}.parquet`}}if("integer"===t.type){const s=Number(t.interval)||1e3,r=Number(n.from)||50*s,l=Math.floor(r/s);return{pattern:`${d}/NETWORK/databases/${a}/${e.name}/${s}/CHUNK_NUMBER.parquet`,example:`${d}/mainnet/databases/${a}/${e.name}/${s}/${l*s}.parquet`}}return null}(e);x&&p.push({key:"parquet",label:"Parquet",language:"bash",code:`# ${x.pattern}\ndocker run --rm -it clickhouse/clickhouse-server clickhouse local --query="\n    SELECT * FROM url('${x.example}
1', 'Parquet') LIMIT 10\n    FORMAT Pretty\n"`});const[j,b]=(0,s.useState)(p[0].key),f=p.find(e=>e.key===j)||p[0];return(0,o.jsxs)("div",{className:i.A.exampleTabs,children:[(0,o.jsx)("div",{className:i.A.tabButtons,children:p.map(e=>(0,o.jsx)("button",{type:"button",className:`${i.A.tabButton} ${j===e.key?i.A.tabButtonActive:""}`,onClick:()=>b(e.key),children:e.label},e.key))}),(0,o.jsx)(r.A,{language:f.language,children:f.code})]})}function A(){const{data:e,error:t}=p(),{data:a}=x();if(!e)return(0,o.jsx)(j,{error:t});const s=a?a.forks.reduce((e,t)=>e+t.tables.length,0):null;return(0,o.jsx)("div",{className:i.A.container,children:(0,o.jsxs)("div",{className:i.A.forkCards,children:[e.datasets.map(e=>(0,o.jsxs)(n.A,{to:`/data/xatu/datasets/${e.key}`,className:i.A.forkCard,children:[(0,o.jsx)("div",{className:i.A.forkCardHeader,children:(0,o.jsx)("span",{className:i.A.forkCardTitle,children:e.name})}),(0,o.jsxs)("div",{className:i.A.forkCardStats,children:[(0,o.jsxs)("span",{children:[(0,o.jsx)("strong",{children:e.tables.length})," tables"]}),e.prefix&&(0,o.jsxs)("code",{className:i.A.forkChip,children:[e.prefix,"*"]})]}),(0,o.jsx)("p",{className:i.A.datasetCardDescription,children:e.description})]},e.key)),(0,o.jsxs)(n.A,{to:h,className:`${i.A.forkCard} ${i.A.experimentalCard}`,children:[(0,o.jsx)("div",{className:i.A.forkCardHeader,children:(0,o.jsx)("span",{className:i.A.forkCardTitle,children:"Experimental"})}),(0,o.jsx)("div",{className:i.A.forkCardStats,children:(0,o.jsx)("span",{children:null!==s?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("strong",{children:s})," pre-release tables"]}):"Devnet-only tables"})}),(0,o.jsx)("p",{className:i.A.datasetCardDescription,children:"Data from devnets testing upcoming network upgrades \u2014 tables that don't exist on production networks yet."})]})]})})}function C(e){return e.clickhouse_endpoint||u}function $({data:e,exampleDatabase:t}){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("p",{children:["Devnet data lives on the same ClickHouse endpoint as production networks: ",(0,o.jsx)("code",{children:C(e)}),". Each devnet gets its"," ",(0,o.jsx)("strong",{children:"own database"}),", named after the network \u2014 unlike production tables in the ",(0,o.jsx)("code",{children:"default"})," database, there is no"," ",(0,o.jsx)("code",{children:"meta_network_name"})," filter. The database ",(0,o.jsx)("em",{children:"is"})," the network:"]}),(0,o.jsx)(r.A,{language:"sql",children:`SELECT * FROM \`${t}\`.beacon_api_eth_v1_events_block LIMIT 3`}),(0,o.jsx)("div",{className:i.A.callout,children:"Devnets are ephemeral: databases disappear when a devnet is deprovisioned, and schemas drift between devnets. Always check what a devnet actually has before relying on it."})]})}function S(){const{data:e,error:t}=x();if(!e)return(0,o.jsx)(j,{error:t,what:"experimental catalog"});const a=e.networks[0]?.name||"glamsterdam-devnet-6";return(0,o.jsxs)("div",{className:i.A.container,children:[(0,o.jsx)("p",{children:"Xatu also collects data from short-lived devnets that test upcoming network upgrades. Devnets run xatu from a fork branch, so their schema is ahead of the main catalog: they carry tables for the upgrade being tested that don't exist on production networks yet."}),(0,o.jsx)("h2",{children:"Network upgrades"}),(0,o.jsx)("div",{className:i.A.forkCards,children:e.forks.map(e=>(0,o.jsxs)(n.A,{to:`${h}/${e.slug}`,className:i.A.forkCard,children:[(0,o.jsxs)("div",{className:i.A.forkCardHeader,children:[(0,o.jsx)("span",{className:i.A.forkCardTitle,children:e.display_name}),(0,o.jsx)(f,{fork:e.name})]}),(0,o.jsxs)("div",{className:i.A.forkCardStats,children:[(0,o.jsxs)("span",{children:[(0,o.jsx)("strong",{children:e.tables.length})," devnet-only tables"]}),(0,o.jsxs)("span",{children:[(0,o.jsx)("strong",{children:e.merged_tables.length})," in main catalog"]})]}),(0,o.jsx)("div",{className:i.A.chipRow,children:e.networks.map(e=>(0,o.jsx)("span",{className:i.A.networkChip,children:e.name},e.name))})]},e.name))}),(0,o.jsx)("h2",{children:"Active devnets"}),(0,o.jsx)("div",{className:i.A.tableWrap,children:(0,o.jsxs)("table",{className:i.A.devnetsTable,children:[(0,o.jsx)("thead",{children:(0,o.jsxs)("tr",{children:[(0,o.jsx)("th",{children:"Network"}),(0,o.jsx)("th",{children:"Upgrade"}),(0,o.jsx)("th",{children:"Fork-specific tables"}),(0,o.jsx)("th",{children:"Links"})]})}),(0,o.jsx)("tbody",{children:e.networks.map(t=>{const a=e.forks.find(e=>e.name===t.fork);return(0,o.jsxs)("tr",{children:[(0,o.jsx)("td",{children:(0,o.jsx)("code",{children:t.name})}),(0,o.jsx)("td",{children:a?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.A,{to:`${h}/${a.slug}`,children:a.display_name})," ",(0,o.jsx)(f,{fork:a.name})]}):"-"}),(0,o.jsx)("td",{children:t.new_tables.length}),(0,o.jsxs)("td",{className:i.A.linkCell,children:[(0,o.jsx)(n.A,{to:`https://github.com/${t.repository}`,children:"GitHub"}),t.dora&&(0,o.jsx)(n.A,{to:t.dora,children:"Dora"})]})]},t.name)}
1)})]})}),(0,o.jsx)("h2",{children:"Querying devnet data"}),(0,o.jsx)($,{data:e,exampleDatabase:a})]})}function L(){const{data:e,error:t}=p(),{data:a}=x(),[n,r]=(0,s.useState)(null);(0,s.useEffect)(()=>{if(!e)return;let t=!1;return Promise.all(e.datasets.map(e=>fetch(`${c}/catalog/${e.key}.json`).then(e=>e.ok?e.json():null).catch(()=>null))).then(a=>{if(t)return;const s={};e.datasets.forEach((e,t)=>{a[t]&&(s[e.key]=a[t])}),r(s)}),()=>{t=!0}},[e]);const l=(0,s.useMemo)(()=>{if(!e||!n)return null;const t=[];for(const a of e.datasets){const e=n[a.key];if(e)for(const s of e.tables)t.push({table:s,datasetKey:a.key,datasetName:a.name})}if(a)for(const e of a.forks)for(const a of e.tables)t.push({table:{...a,devnets:a.networks,networks:void 0,partitioning:a.partitioning||{}},datasetKey:"experimental",datasetName:`${e.display_name} (pre-release)`,prerelease:!0,forkInfo:e});return t},[e,n,a]);return{index:e,experimental:a,rows:l,error:t}}function T(){const{experimental:e,rows:t,error:a}=L();if(a)return(0,o.jsx)(j,{error:a});if(!t)return(0,o.jsx)(j,{});const s={};for(const n of t)if(!n.prerelease&&!n.table.cbt_table)for(const[e,t]of Object.entries(n.table.networks||{})){const a=s[e]=s[e]||{tables:0,from:null,to:null};a.tables+=1,t?.from&&isNaN(Number(t.from))&&((!a.from||t.from<a.from)&&(a.from=t.from),(!a.to||t.to>a.to)&&(a.to=t.to))}return(0,o.jsxs)("div",{className:i.A.container,children:[(0,o.jsxs)("p",{children:["Xatu collects from long-lived production networks and from short-lived devnets testing upcoming upgrades. Production data lives in the"," ",(0,o.jsx)("code",{children:"default"})," database (filter with ",(0,o.jsx)("code",{children:"meta_network_name"}),"); each devnet gets its own database on the same endpoint,"," ",(0,o.jsx)("code",{children:u}),"."]}),(0,o.jsx)("h2",{children:"Production networks"}),(0,o.jsx)("div",{className:i.A.tableWrap,children:(0,o.jsxs)("table",{className:i.A.devnetsTable,children:[(0,o.jsx)("thead",{children:(0,o.jsxs)("tr",{children:[(0,o.jsx)("th",{children:"Network"}),(0,o.jsx)("th",{children:"Tables"}),(0,o.jsx)("th",{children:"Coverage"}),(0,o.jsx)("th",{children:"Explore"})]})}),(0,o.jsx)("tbody",{children:Object.entries(s).sort(([,e],[,t])=>t.tables-e.tables).map(([e,t])=>(0,o.jsxs)("tr",{children:[(0,o.jsx)("td",{children:(0,o.jsx)("code",{children:e})}),(0,o.jsx)("td",{children:t.tables}),(0,o.jsx)("td",{className:i.A.timelineRange,children:t.from?`${t.from} \u2192 ${t.to}`:"-"}),(0,o.jsx)("td",{children:(0,o.jsxs)(n.A,{to:`/data/xatu/tables?network=${e}`,children:["Tables on ",e]})})]},e))})]})}),(0,o.jsx)("h2",{children:"Devnets"}),e?(0,o.jsx)("div",{className:i.A.tableWrap,children:(0,o.jsxs)("table",{className:i.A.devnetsTable,children:[(0,o.jsx)("thead",{children:(0,o.jsxs)("tr",{children:[(0,o.jsx)("th",{children:"Network"}),(0,o.jsx)("th",{children:"Upgrade"}),(0,o.jsx)("th",{children:"Xatu branch"}),(0,o.jsx)("th",{children:"Tables"}),(0,o.jsx)("th",{children:"Links"})]})}),(0,o.jsx)("tbody",{children:e.networks.map(t=>{const a=e.forks.find(e=>e.name===t.fork);return(0,o.jsxs)("tr",{children:[(0,o.jsx)("td",{children:(0,o.jsx)("code",{children:t.name})}),(0,o.jsx)("td",{children:a?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.A,{to:`${h}/${a.slug}`,children:a.display_name})," ",(0,o.jsx)(f,{fork:a.name})]}):"-"}),(0,o.jsx)("td",{children:t.xatu_branch?(0,o.jsx)(n.A,{to:`https://github.com/ethpandaops/xatu/tree/${t.xatu_branch}`,children:(0,o.jsx)("code",{children:t.xatu_branch})}):"-"}),(0,o.jsxs)("td",{children:[t.tables_total,t.new_tables.length>0&&` (${t.new_tables.length} fork-specific)`]}),(0,o.jsxs)("td",{className:i.A.linkCell,children:[(0,o.jsx)(n.A,{to:`https://github.com/${t.repository}`,children:"GitHub"}),t.dora&&(0,o.jsx)(n.A,{to:t.dora,children:"Dora"})]})]},t.name)})})]})}):(0,o.jsx)(j,{what:"experimental catalog"})]})}function D(){const{data:e}=p(),{data:t}=x(),[a,r]=(0,s.useState)(""),l=e?e.datasets.reduce((e,t)=>e+t.tables.length,0):null,c=t?t.forks.reduce((e,t)=>e+t.tables.length,0):null;return(0,o.jsxs)("div",{className:i.A.container,children:[(0,o.jsxs)("div",{className:i.A.heroStats,children:[(0,o.jsxs)("div",{className:i.A.statCard,children:[(0,o.jsx)("span",{className:i.A.statValue,children:e?e.datasets.length:"\u2026"}),(0,o.jsx)("span",{className:i.A.statLabel,children:"datasets"})]}),(0,o.jsxs)("div",{className:i.A.statCard,children:[(0,o.jsx)("span",{className:i.A.statValue,children:l??"\u2026"}),(0,o.jsx)("span",{className:i.A.statLabel,children:"tables"})]}),(0,o.jsxs)("div",{className:i.A.statCard,children:[(0,o.jsx)("span",{className:i.A.statValue,children:t?t.networks.length:"\u2026"}),(0,o.jsx)("span",{className:i.A.statLabel,children:"active devnets"})]}),(0,o.jsxs)("div",{className:i.A.statCard,children:[(0,o.jsx)("span",{className:i.A.statValue,children:c??"\u2026"}),(0,o.jsx)("span",{className:i.A.statLabel,children:"pre-release tables"})]})]}),(0,o.jsxs)("form",{className:i.A.heroSearch,onSubmit:e=>{e.preventDefault(),window.location.href="/data/xatu/tables"+(a?`?q=${encodeURIComponent(a)}`:"")},children:[(0,o.jsx)("input",{type:"search",className:i.A.heroSearchInput,placeholder:"Search every table \u2014 by name, column, or description\u2026",value:a,onChange:e=>r(e.target.value)}),(0,o.jsx)("button",{type:"submit",className:i.A.heroSearchButton,children:"Search"})]}),(0,o.jsxs)("div",{className:i.A.quickLinks,children:[(0,o.jsx)(n.A,{to:"/data/xatu/tables",className:i.A.quickLink,children:"Table explorer"}),(0,o.jsx)(n.A,{to:"/data/xatu/networks",className:i.A.quickLink,children:"Networks"}),(0,o.jsx)(n.A,{to:"/data/xatu/getting-started",className:i.A.quickLink,children:"Getting started"}),(0,o.jsx)(n.A,{to:"/data/xatu/contribute",className:i.A.quickLink,children:"Contribute data"}),(0,o.jsx)(n.A,{to:"/docs/guides/data-analysts/xatu-stack/clickhouse/intro",className:i.A.quickLink,children:"ClickHouse guide"})]}),(0,o.jsx)("h2",{children:"Datasets"}),(0,o.jsx)(A,{}),t&&t.generated_at&&(0,o.jsxs)("p",{className:i.A.freshness,children:["Catalog generated ",t.generated_at.slice(0,10)," \u2014 data is licensed"," ",(0,o.jsx)(n.A,{to:"https://creativecommons.org/licenses/by/4.0/deed.en",children:"CC BY 4.0"}),", free for everyone via"," ",(0,o.jsx)(n.A,{to:"/data/xatu/getting-started",children:"public parquet files"}),"."]})]})}},46999(e,t,a){a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var s=a(15872),n=a(74848),r=a(28453),l=a(93752);const i={hide_hero:!0,title:"Xatu - Fusaka experimental data",slug:"xatu/forks/fusaka",description:"Devnet-only Xatu tables being tested for the Fusaka network upgrade.",image:"/img/blog/xatu-data.jpg",tags:["xatu","data","devnets","experimental","fusaka"]},o=void 0,c={authorsImageUrls:[]},d=[];function h(e){return(0,n.jsx)(l.A,{dataset:"fork:fusaka"})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h()}},93752(e,t,a){a.d(t,{A:()=>O});var s=a(96540),n=a(28774),r=a(20302);const l="app_rfD_",i="status_F8yS",o="topbar_YR4V",c="breadcrumb_VBhs",d="breadcrumbSep_iiQH",h="search_PkH7",u="panes_ztNQ",m="sidebar_hABx",p="groupRow_up8s",x="groupName_rap9",j="groupCount_Zain",b="tableRow_rvhV",f="active_jc2i",k="prerelease_vhaT",g="main_ZcFd",_="paneTitle_DQJu",N="tableName_Q7ex",v="description_kN83",y="metaLine_KDyd",w="facts_nFP6",A="factRow_qUlS",C="factLabel_fpmL",$="factValue_udmx",S="factNote_MnIh",L="panelTabs_lXcZ",T="panelTab_rwQB",D="panelTabActive_uz9y",B="resultList_UTwr",R="resultRow_gz70",M="resultName_HUQC",F="resultMeta_mVKt";var E=a(15851),I=a(74848);
1function q(e){return"undefined"==typeof window?"":new URLSearchParams(window.location.search).get(e)||""}function H({open:e}){return(0,I.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",style:{transform:e?"rotate(90deg)":"none",transition:"transform 0.1s ease"},children:(0,I.jsx)("path",{d:"M5.5 3l5 5-5 5",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function O({dataset:e}){const{index:t,experimental:a,rows:_,error:N}=(0,r.iD)(),[v,y]=(0,s.useState)(()=>q("q")),[w,A]=(0,s.useState)(()=>({dataset:q("dataset")||e||"",table:q("table")||""})),[C,$]=(0,s.useState)(()=>({[q("dataset")||e||""]:!0}));(0,s.useEffect)(()=>{if("undefined"==typeof window)return;const t=new URLSearchParams;v&&t.set("q",v),w.dataset&&w.dataset!==e&&t.set("dataset",w.dataset),w.table&&t.set("table",w.table);const a=t.toString();window.history.replaceState(null,"",window.location.pathname+(a?`?${a}`:""))},[v,w,e]);const S=(0,s.useMemo)(()=>{if(!t)return[];const e=t.datasets.map(e=>({key:e.key,name:e.name,prefix:e.prefix||"",tables:e.tables.map(e=>({name:e}))}));if(a)for(const t of a.forks)0!==t.tables.length&&e.push({key:`fork:${t.slug}`,name:`${t.display_name} \xb7 pre-release`,prefix:"",prerelease:!0,fork:t,tables:t.tables.map(e=>({name:e.name,prerelease:!0}))});return e},[t,a]),L=(0,s.useMemo)(()=>{if(!_)return new Map;const e=new Map;for(const t of _)e.has(t.table.name)&&t.prerelease||e.set(t.table.name,t);return e},[_]);if(N)return(0,I.jsxs)("div",{className:i,children:["Failed to load the catalog: ",N]});if(!_||!t)return(0,I.jsx)("div",{className:i,children:"Loading catalog\u2026"});const T=v.trim().toLowerCase(),D=T?_.filter(e=>e.table.name.toLowerCase().includes(T)||(e.table.columns||[]).some(e=>e.name.toLowerCase().includes(T))):null,B=e=>{y(""),A(t=>({...t,table:e}))},R=w.table?L.get(w.table):null,M=S.find(e=>e.key===w.dataset)||S[0];return(0,I.jsxs)("div",{className:`${l} ${E.A.container}`,children:[(0,I.jsxs)("div",{className:o,children:[(0,I.jsxs)("nav",{className:c,"aria-label":"Breadcrumb",children:[(0,I.jsx)(n.A,{to:"/data/",children:"Data"}),(0,I.jsx)("span",{className:d,children:"/"}),(0,I.jsx)(n.A,{to:"/data/xatu/",children:"Xatu"}),R&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)("span",{className:d,children:"/"}),(0,I.jsx)("span",{children:R.datasetName})]})]}),(0,I.jsx)("input",{type:"search",className:h,placeholder:"Search tables and columns",value:v,onChange:e=>y(e.target.value)})]}),(0,I.jsxs)("div",{className:u,children:[(0,I.jsx)("nav",{className:m,"aria-label":"Datasets and tables",children:S.map(e=>{const t=!!C[e.key];return(0,I.jsxs)("div",{children:[(0,I.jsxs)("button",{type:"button",className:`${p} ${w.dataset!==e.key||w.table?"":f}`,onClick:()=>{var a;$(a=>({...a,[e.key]:!t})),e.prerelease||(a=e.key,y(""),A({dataset:a,table:""}),$(e=>({...e,[a]:!0})))},children:[(0,I.jsx)(H,{open:t}),(0,I.jsx)("span",{className:x,children:e.name}),(0,I.jsx)("span",{className:j,children:e.tables.length})]}),t&&e.tables.map(t=>{return(0,I.jsx)("button",{type:"button",className:`${b} ${w.table===t.name?f:""} ${t.prerelease?k:""}`,onClick:()=>B(t.name),title:t.name,children:(a=t.name,s=e.prefix,s&&a.startsWith(s)?a.slice(s.length):a)},t.name);var a,s})]},e.key)})}),(0,I.jsx)("main",{className:g,children:D?(0,I.jsx)(P,{results:D,query:T,onSelect:B}):R?(0,I.jsx)(U,{row:R}):(0,I.jsx)(W,{group:M,onSelect:B})})]})]})}function P({results:e,query:t,onSelect:a}){return(0,I.jsxs)("div",{children:[(0,I.jsxs)("p",{className:y,children:[e.length," table",1===e.length?"":"s"," matching"," ",(0,I.jsx)("strong",{children:t})]}),(0,I.jsx)("div",{className:B,children:e.map(e=>{const s=(e.table.columns||[]).filter(e=>e.name.toLowerCase().includes(t)).slice(0,3);return(0,I.jsxs)("button",{type:"button",className:R,onClick:()=>a(e.table.name),children:[(0,I.jsx)("span",{className:M,children:e.table.name}),(0,I.jsxs)("span",{className:F,children:[e.datasetName,s.length>0&&(0,I.jsxs)(I.Fragment,{children:[" \xb7 columns: ",s.map(e=>e.name).join(", ")]})]})]},`${e.datasetKey}:${e.table.name}`)})})]})}function W({group:e,onSelect:t}){const{rows:a}=(0,r.iD)();if(!e)return null;return(0,I.jsxs)("div",{children:[(0,I.jsx)("h1",{className:_,children:e.name}),e.fork&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)("p",{className:y,children:["Tables being tested for the ",e.fork.display_name," upgrade (",(0,I.jsx)("code",{children:e.fork.name})," fork) \u2014 not yet merged to xatu master, only available on devnets."]}),e.fork.xatu_branch&&(0,I.jsxs)("p",{className:y,children:["Collected by xatu branch"," ",(0,I.jsx)(n.A,{to:`https://github.com/ethpandaops/xatu/tree/${e.fork.xatu_branch}`,children:(0,I.jsx)("code",{children:e.fork.xatu_branch})})]}),(0,I.jsxs)("p",{className:y,children:["Devnets:"," ",e.fork.networks.map((e,t)=>(0,I.jsxs)("span",{children:[t>0&&" \xb7 ",(0,I.jsx)("code",{children:e.name})," ",(0,I.jsx)(n.A,{to:`https://github.com/${e.repository}`,children:"repo"}),e.dora&&(0,I.jsxs)(I.Fragment,{children:[" ",(0,I.jsx)(n.A,{to:e.dora,children:"explorer"})]})]},e.name))]}),(0,I.jsxs)("p",{className:y,children:["Each devnet is its own database on"," ",(0,I.jsx)("code",{children:"clickhouse.xatu.ethpandaops.io"})," \u2014 query as"," ",(0,I.jsx)("code",{children:`\`${e.fork.networks[0]?.name}\`.table_name`}),", no"," ",(0,I.jsx)("code",{children:"meta_network_name"})," filter."]})]}),(0,I.jsx)("div",{className:B,children:e.tables.map(e=>{const s=(n=e.name,a?.find(e=>e.table.name===n));var n;return(0,I.jsxs)("button",{type:"button",className:R,onClick:()=>t(e.name),children:[(0,I.jsx)("span",{className:M,children:e.name}),(0,I.jsx)("span",{className:F,children:s?String(s.table.description||"").split("\n")[0]:""})]},e.name)})})]})}function U({row:e}
1){const[t,a]=(0,s.useState)("columns"),{table:n,prerelease:l,forkInfo:i}=e,o=n.networks||{},c=!l&&!n.cbt_table&&Object.values(o).some(e=>e&&void 0!==e.from),d=(n.columns||[]).length,h=[];return l&&i&&h.push(["Status",(0,I.jsxs)(I.Fragment,{children:["Pre-release \u2014 being tested for the ",i.display_name," upgrade (",(0,I.jsx)("code",{children:i.name}),"), not yet on production networks."]})]),!l&&n.fork&&h.push(["Fork",(0,I.jsxs)(I.Fragment,{children:["Introduced in the ",n.fork_display_name||n.fork," upgrade."]})]),n.partitioning?.column&&h.push(["Partitioning",(0,I.jsxs)(I.Fragment,{children:[n.partitioning.interval||"chunked"," on"," ",(0,I.jsx)("code",{children:n.partitioning.column})," \u2014 always filter on it."]})]),n.should_use_final&&h.push(["Querying",(0,I.jsxs)(I.Fragment,{children:["Use ",(0,I.jsx)("code",{children:"FINAL"})," \u2014 this table deduplicates on merge."]})]),l?h.push(["Databases",(0,I.jsxs)(I.Fragment,{children:[(n.devnets||[]).map((e,t)=>(0,I.jsxs)("span",{children:[t>0&&" \xb7 ",(0,I.jsx)("code",{children:e})]},e))," ","\u2014 one database per devnet, no ",(0,I.jsx)("code",{children:"meta_network_name"})," filter."]})]):n.cbt_table?h.push(["Databases",(0,I.jsxs)(I.Fragment,{children:[Object.keys(o).map((e,t)=>(0,I.jsxs)("span",{children:[t>0&&" \xb7 ",(0,I.jsx)("code",{children:e})]},e))," ","\u2014 one database per network, no ",(0,I.jsx)("code",{children:"meta_network_name"})," filter."]})]):h.push(["Database",(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)("code",{children:"default"})," \u2014 filter with ",(0,I.jsx)("code",{children:"meta_network_name"}),"."]})]),c&&h.push(["Availability",(0,I.jsx)(r.nx,{networks:o})]),n.quirks&&h.push(["Note",(0,I.jsx)(r.oz,{className:S,children:n.quirks})]),(0,I.jsxs)("article",{children:[(0,I.jsxs)("h1",{className:N,children:[n.name,(0,I.jsx)(r.i8,{text:n.name})]}),(0,I.jsx)(r.oz,{className:v,children:n.description}),(0,I.jsx)("dl",{className:w,children:h.map(([e,t])=>(0,I.jsxs)("div",{className:A,children:[(0,I.jsx)("dt",{className:C,children:e}),(0,I.jsx)("dd",{className:$,children:t})]},e))}),(0,I.jsxs)("div",{className:L,role:"tablist",children:[d>0&&(0,I.jsxs)("button",{type:"button",role:"tab","aria-selected":"columns"===t,className:`${T} ${"columns"===t?D:""}`,onClick:()=>a("columns"),children:["Columns (",d,")"]}),(0,I.jsx)("button",{type:"button",role:"tab","aria-selected":"examples"===t,className:`${T} ${"examples"===t?D:""}`,onClick:()=>a("examples"),children:"Examples"})]}),"columns"===t&&d>0?(0,I.jsx)(r.yj,{columns:n.columns,partitionColumn:n.partitioning?.column}):(0,I.jsx)(r.vT,{table:n,prerelease:l})]})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.