1"use strict";(globalThis.webpackChunkpublic_docs=globalThis.webpackChunkpublic_docs||[]).push([[5987],{1388(e){e.exports=JSON.parse('{"permalink":"/data/xatu/datasets/beacon_api_","source":"@site/data/xatu-data/datasets/beacon_api_.md","title":"Xatu - Beacon API events","description":"Events derived from the Beacon API event stream. This data is usually useful for \'timing\' events, such as when a block was seen by a sentry.","date":"2026-08-17T04:05:48.000Z","tags":[{"inline":true,"label":"xatu","permalink":"/data/tags/xatu"},{"inline":true,"label":"data","permalink":"/data/tags/data"},{"inline":true,"label":"beacon-api","permalink":"/data/tags/beacon-api"},{"inline":true,"label":"mainnet","permalink":"/data/tags/mainnet"},{"inline":true,"label":"sepolia","permalink":"/data/tags/sepolia"},{"inline":true,"label":"hoodi","permalink":"/data/tags/hoodi"}],"hasTruncateMarker":false,"authors":[],"frontMatter":{"hide_hero":true,"title":"Xatu - Beacon API events","slug":"xatu/datasets/beacon_api_","description":"Events derived from the Beacon API event stream. This data is usually useful for \'timing\' events, such as when a block was seen by a sentry.","image":"/img/blog/xatu-data.jpg","tags":["xatu","data","beacon-api","mainnet","sepolia","hoodi"]},"unlisted":false,"prevItem":{"title":"Xatu - Network upgrades","permalink":"/data/xatu/forks"},"nextItem":{"title":"Xatu - Canonical Beacon chain events","permalink":"/data/xatu/datasets/canonical_beacon_"}}')}
1,15851(e,a,t){t.d(a,{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"}},20302(e,a,t){t.d(a,{OA:()=>B,Qv:()=>S,TE:()=>T,i8:()=>k,iD:()=>L,nx:()=>y,oz:()=>j,vT:()=>w,yj:()=>v});var s=t(96540),n=t(28774),r=t(88149),l=t(60023),i=t(15851),o=t(74848);const c="https://raw.githubusercontent.com/ethpandaops/xatu-data/master",d="https://data.ethpandaops.io/xatu",h="/data/xatu/forks",m="https://clickhouse.xatu.ethpandaops.io";function u(e){const[a,t]=(0,s.useState)(null),[n,r]=(0,s.useState)(null);return(0,s.useEffect)(()=>{let a=!1;return fetch(e).then(e=>{if(!e.ok)throw new Error(`HTTP ${e.status}`);return e.json()}).then(e=>{a||t(e)}).catch(e=>{a||r(e.message)}),()=>{a=!0}},[e]),{data:a,error:n}}const p=()=>u(`${c}/catalog/index.json`),x=()=>u(`${c}/experimental.json`);function b({error:e,what:a="catalog"}){return e?(0,o.jsxs)("div",{className:i.A.error,children:["Failed to load the ",a,": ",e]}):(0,o.jsxs)("div",{className:i.A.loading,children:["Loading ",a,"\u2026"]})}function j({children:e,className:a}){const t=(0,s.useMemo)(()=>l.xI.parse(e||""),[e]);return e?(0,o.jsx)("div",{className:a,dangerouslySetInnerHTML:{__html:t}}):null}function f({fork:e}){return(0,o.jsx)("code",{className:i.A.forkChip,children:e})}function k({text:e}){const[a,t]=(0,s.useState)(!1);return(0,o.jsx)("button",{type:"button",className:i.A.copyButton,title:`Copy ${e}`,onClick:a=>{a.stopPropagation(),navigator.clipboard?.writeText(e).then(()=>{t(!0),setTimeout(()=>t(!1),1200)})},children:a?(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",he
1ight:"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 a=e.replace(/^(Nullable|LowCardinality)\((.*)\)$/,"$2");return/^(DateTime|Date)/.test(a)?"time":/^(UInt|Int|Float|Decimal)/.test(a)?"number":/^(String|FixedString|Enum|UUID)/.test(a)?"string":/^Bool/.test(a)?"bool":/^(IPv4|IPv6)/.test(a)?"net":/^(Array|Map|Tuple|Nested|AggregateFunction)/.test(a)?"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:a}){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}),a&&(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:a}){const[t,n]=(0,s.useState)(""),[r,l]=(0,s.useState)(!0),c=t.toLowerCase(),d=e=>!c||e.name.toLowerCase().includes(c)||e.type.toLowerCase().includes(c),h=e.filter(e=>!e.name.startsWith("meta_")&&d(e)),m=e.filter(e=>e.name.startsWith("meta_")&&d(e)),u=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:t,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===a},e.name)),m.length>0&&!u&&(0,o.jsxs)("button",{type:"button",className:i.A.metaToggle,onClick:()=>l(!0),children:["\u25b8 Show ",m.length," meta_* columns (sentry/client metadata)"]}),u&&m.length>0&&(0,o.jsx)("div",{className:i.A.metaDivider,children:"meta_* \u2014 sentry/client metadata"}),u&&m.map(e=>(0,o.jsx)(N,{col:e,isPartitionKey:e.name===a},e.name)),u&&m.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 a=Object.entries(e).filter(([,e])=>e&&void 0!==e.from&&void 0!==e.to);if(0===a.length)return null;const t=a.every(([,e])=>isNaN(Number(e.from))),s=e=>t?Date.parse(e):Number(e),n=e=>t?String(e):Number(e).toLocaleString(),r=Math.min(...a.map(([,e])=>s(e.from))),l=Math.max(...a.map(([,e])=>s(e.to)))-r||1;return(0,o.jsx)("div",{className:i.A.timeline,children:a.map(([e,a])=>{const t=(s(a.from)-r)/l*100,c=Math.max((s(a.to)-s(a.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:`${t}%`,width:`${c}%`}})}),(0,o.jsxs)("span",{className:i.A.timelineRange,children:[n(a.from)," \u2192 ",n(a.to)]})]},e)})})}function w({table:e,prerelease:a}){const t=a?(e.devnets||[])[0]:e.cbt_table?"mainnet":e.database,n=/[^a-zA-Z0-9_]/.test(t||"")?`\`${t}\``:t,{partitioning:l={}}=e;let c="";if("datetime"===l.type&&l.column)c=`\nWHERE\n ${l.column} >= NOW() - INTERVAL 1 DAY`,e.cbt_table||a||(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`,u=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${u}\n"`},{key:"curl",label:"curl",language:"bash",code:`echo """\n${u}\n FORMAT Pretty\n""" | curl "${m}" -u "$CLICKHOUSE_USER:$CLICKHOUSE_PASSWORD" --data-binary @-`}],x=a?null:function(e){const{partitioning:a={},database:t,networks:s={}}=e,n=s.mainnet||{};if(!a.type||e.cbt_table)return null;if("datetime"===a.type){const s="hourly"===a.interval?`${d}/NETWORK/databases/${t}/${e.name}/YYYY/M/D/H.parquet`:`${d}/NETWORK/databases/${t}/${e.name}/YYYY/MM/DD.parquet`,r=(n.to||"2024-04-01").replaceAll("-","/");return{pattern:s,example:"hourly"===a.interval?`${d}/mainnet/databases/${t}/${e.name}/${r}/0.parquet`:`${d}/mainnet/databases/${t}/${e.name}/${r}.parquet`}}if("integer"===a.type){const s=Number(a.interval)||1e3,r=Number(n.from)||50*s,l=Math.floor(r/s);return{pattern:`${d}/NETWORK/databases/${t}/${e.name}/${s}/CHUNK_NUMBER.parquet`,example:`${d}/mainnet/databases/${t}/${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[b,j]=(0,s.useState)(p[0].key),f=p.find(e=>e.key===b)||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} ${b===e.key?i.A.tabButtonActive:""}`,onClick:()=>j(e.key),children:e.label},e.key))}),(0,o.jsx)(r.A,{language:f.language,children:f.code})]})}function A(){const{data:e,error:a}=p(),{data:t}=x();if(!e)return(0,o.jsx)(b,{error:a});const s=t?t.forks.reduce((e,a)=>e+a.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||m}function $({data:e,exampleDatabase:a}){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 \`${a}\`.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:a}=x();if(!e)return(0,o.jsx)(b,{error:a,what:"experimental catalog"});const t=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(a=>{const t=e.forks.find(e=>e.name===a.fork);return(0,o.jsxs)("tr",{children:[(0,o.jsx)("td",{children:(0,o.jsx)("code",{children:a.name})}),(0,o.jsx)("td",{children:t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.A,{to:`${h}/${t.slug}`,children:t.display_name})," ",(0,o.jsx)(f,{fork:t.name})]}):"-"}),(0,o.jsx)("td",{children:a.new_tables.length}),(0,o.jsxs)("td",{className:i.A.linkCell,children:[(0,o.jsx)(n.A,{to:`https://github.com/${a.repository}`,children:"GitHub"}),a.dora&&(0,o.jsx)(n.A,{to:a.dora,children:"Dora"})]})]},a.name)})})]})}),(0,o.jsx)("h2",{children:"Querying devnet data"}),(0,o.jsx)($,{data:e,exampleDatabase:t})]})}function L(){const{data:e,error:a}=p(),{data:t}
1=x(),[n,r]=(0,s.useState)(null);(0,s.useEffect)(()=>{if(!e)return;let a=!1;return Promise.all(e.datasets.map(e=>fetch(`${c}/catalog/${e.key}.json`).then(e=>e.ok?e.json():null).catch(()=>null))).then(t=>{if(a)return;const s={};e.datasets.forEach((e,a)=>{t[a]&&(s[e.key]=t[a])}),r(s)}),()=>{a=!0}},[e]);const l=(0,s.useMemo)(()=>{if(!e||!n)return null;const a=[];for(const t of e.datasets){const e=n[t.key];if(e)for(const s of e.tables)a.push({table:s,datasetKey:t.key,datasetName:t.name})}if(t)for(const e of t.forks)for(const t of e.tables)a.push({table:{...t,devnets:t.networks,networks:void 0,partitioning:t.partitioning||{}},datasetKey:"experimental",datasetName:`${e.display_name} (pre-release)`,prerelease:!0,forkInfo:e});return a},[e,n,t]);return{index:e,experimental:t,rows:l,error:a}}function T(){const{experimental:e,rows:a,error:t}=L();if(t)return(0,o.jsx)(b,{error:t});if(!a)return(0,o.jsx)(b,{});const s={};for(const n of a)if(!n.prerelease&&!n.table.cbt_table)for(const[e,a]of Object.entries(n.table.networks||{})){const t=s[e]=s[e]||{tables:0,from:null,to:null};t.tables+=1,a?.from&&isNaN(Number(a.from))&&((!t.from||a.from<t.from)&&(t.from=a.from),(!t.to||a.to>t.to)&&(t.to=a.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:m}),"."]}),(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],[,a])=>a.tables-e.tables).map(([e,a])=>(0,o.jsxs)("tr",{children:[(0,o.jsx)("td",{children:(0,o.jsx)("code",{children:e})}),(0,o.jsx)("td",{children:a.tables}),(0,o.jsx)("td",{className:i.A.timelineRange,children:a.from?`${a.from} \u2192 ${a.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(a=>{const t=e.forks.find(e=>e.name===a.fork);return(0,o.jsxs)("tr",{children:[(0,o.jsx)("td",{children:(0,o.jsx)("code",{children:a.name})}),(0,o.jsx)("td",{children:t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.A,{to:`${h}/${t.slug}`,children:t.display_name})," ",(0,o.jsx)(f,{fork:t.name})]}):"-"}),(0,o.jsx)("td",{children:a.xatu_branch?(0,o.jsx)(n.A,{to:`https://github.com/ethpandaops/xatu/tree/${a.xatu_branch}`,children:(0,o.jsx)("code",{children:a.xatu_branch})}):"-"}),(0,o.jsxs)("td",{children:[a.tables_total,a.new_tables.length>0&&` (${a.new_tables.length} fork-specific)`]}),(0,o.jsxs)("td",{className:i.A.linkCell,children:[(0,o.jsx)(n.A,{to:`https://github.com/${a.repository}`,children:"GitHub"}),a.dora&&(0,o.jsx)(n.A,{to:a.dora,children:"Dora"})]})]},a.name)})})]})}):(0,o.jsx)(b,{what:"experimental catalog"})]})}function B(){const{data:e}=p(),{data:a}=x(),[t,r]=(0,s.useState)(""),l=e?e.datasets.reduce((e,a)=>e+a.tables.length,0):null,c=a?a.forks.reduce((e,a)=>e+a.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:a?a.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"+(t?`?q=${encodeURIComponent(t)}`:"")},children:[(0,o.jsx)("input",{type:"search",className:i.A.heroSearchInput,placeholder:"Search every table \u2014 by name, column, or description\u2026",value:t,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,{}),a&&a.generated_at&&(0,o.jsxs)("p",{className:i.A.freshness,children:["Catalog generated ",a.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"}),"."]})]})}},23514(e,a,t){t.r(a),t.d(a,{assets:()=>c,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var s=t(1388),n=t(74848),r=t(28453),l=t(93752);const i={hide_hero:!0,title:"Xatu - Beacon API events",slug:"xatu/datasets/beacon_api_",description:"Events derived from the Beacon API event stream. This data is usually useful for 'timing' events, such as when a block was seen by a sentry.",image:"/img/blog/xatu-data.jpg",tags:["xatu","data","beacon-api","mainnet","sepolia","hoodi"]},o=void 0,c={authorsImageUrls:[]},d=[];function h(e){return(0,n.jsx)(l.A,{dataset:"beacon_api_"})}function m(e={}){const{wrapper:a}={...(0,r.R)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(h,{...e})}):h()}},93752(e,a,t){t.d(a,{A:()=>P});var s=t(96540),n=t(28774),r=t(20302);const l="app_rfD_",i="status_F8yS",o="topbar_YR4V",c="breadcrumb_VBhs",d="breadcrumbSep_iiQH",h="search_PkH7",m="panes_ztNQ",u="sidebar_hABx",p="groupRow_up8s",x="groupName_rap9",b="groupCount_Zain",j="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",B="panelTabActive_uz9y",D="resultList_UTwr",R="resultRow_gz70",I="resultName_HUQC",M="resultMeta_mVKt";var E=t(15851),q=t(74848);
1function F(e){return"undefined"==typeof window?"":new URLSearchParams(window.location.search).get(e)||""}function H({open:e}){return(0,q.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,q.jsx)("path",{d:"M5.5 3l5 5-5 5",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function P({dataset:e}){const{index:a,experimental:t,rows:_,error:N}=(0,r.iD)(),[v,y]=(0,s.useState)(()=>F("q")),[w,A]=(0,s.useState)(()=>({dataset:F("dataset")||e||"",table:F("table")||""})),[C,$]=(0,s.useState)(()=>({[F("dataset")||e||""]:!0}));(0,s.useEffect)(()=>{if("undefined"==typeof window)return;const a=new URLSearchParams;v&&a.set("q",v),w.dataset&&w.dataset!==e&&a.set("dataset",w.dataset),w.table&&a.set("table",w.table);const t=a.toString();window.history.replaceState(null,"",window.location.pathname+(t?`?${t}`:""))},[v,w,e]);const S=(0,s.useMemo)(()=>{if(!a)return[];const e=a.datasets.map(e=>({key:e.key,name:e.name,prefix:e.prefix||"",tables:e.tables.map(e=>({name:e}))}));if(t)for(const a of t.forks)0!==a.tables.length&&e.push({key:`fork:${a.slug}`,name:`${a.display_name} \xb7 pre-release`,prefix:"",prerelease:!0,fork:a,tables:a.tables.map(e=>({name:e.name,prerelease:!0}))});return e},[a,t]),L=(0,s.useMemo)(()=>{if(!_)return new Map;const e=new Map;for(const a of _)e.has(a.table.name)&&a.prerelease||e.set(a.table.name,a);return e},[_]);if(N)return(0,q.jsxs)("div",{className:i,children:["Failed to load the catalog: ",N]});if(!_||!a)return(0,q.jsx)("div",{className:i,children:"Loading catalog\u2026"});const T=v.trim().toLowerCase(),B=T?_.filter(e=>e.table.name.toLowerCase().includes(T)||(e.table.columns||[]).some(e=>e.name.toLowerCase().includes(T))):null,D=e=>{y(""),A(a=>({...a,table:e}))},R=w.table?L.get(w.table):null,I=S.find(e=>e.key===w.dataset)||S[0];return(0,q.jsxs)("div",{className:`${l} ${E.A.container}`,children:[(0,q.jsxs)("div",{className:o,children:[(0,q.jsxs)("nav",{className:c,"aria-label":"Breadcrumb",children:[(0,q.jsx)(n.A,{to:"/data/",children:"Data"}),(0,q.jsx)("span",{className:d,children:"/"}),(0,q.jsx)(n.A,{to:"/data/xatu/",children:"Xatu"}),R&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)("span",{className:d,children:"/"}),(0,q.jsx)("span",{children:R.datasetName})]})]}),(0,q.jsx)("input",{type:"search",className:h,placeholder:"Search tables and columns",value:v,onChange:e=>y(e.target.value)})]}),(0,q.jsxs)("div",{className:m,children:[(0,q.jsx)("nav",{className:u,"aria-label":"Datasets and tables",children:S.map(e=>{const a=!!C[e.key];return(0,q.jsxs)("div",{children:[(0,q.jsxs)("button",{type:"button",className:`${p} ${w.dataset!==e.key||w.table?"":f}`,onClick:()=>{var t;$(t=>({...t,[e.key]:!a})),e.prerelease||(t=e.key,y(""),A({dataset:t,table:""}),$(e=>({...e,[t]:!0})))},children:[(0,q.jsx)(H,{open:a}),(0,q.jsx)("span",{className:x,children:e.name}),(0,q.jsx)("span",{className:b,children:e.tables.length})]}),a&&e.tables.map(a=>{return(0,q.jsx)("button",{type:"button",className:`${j} ${w.table===a.name?f:""} ${a.prerelease?k:""}`,onClick:()=>D(a.name),title:a.name,children:(t=a.name,s=e.prefix,s&&t.startsWith(s)?t.slice(s.length):t)},a.name);var t,s})]},e.key)})}),(0,q.jsx)("main",{className:g,children:B?(0,q.jsx)(O,{results:B,query:T,onSelect:D}):R?(0,q.jsx)(U,{row:R}):(0,q.jsx)(W,{group:I,onSelect:D})})]})]})}function O({results:e,query:a,onSelect:t}){return(0,q.jsxs)("div",{children:[(0,q.jsxs)("p",{className:y,children:[e.length," table",1===e.length?"":"s"," matching"," ",(0,q.jsx)("strong",{children:a})]}),(0,q.jsx)("div",{className:D,children:e.map(e=>{const s=(e.table.columns||[]).filter(e=>e.name.toLowerCase().includes(a)).slice(0,3);return(0,q.jsxs)("button",{type:"button",className:R,onClick:()=>t(e.table.name),children:[(0,q.jsx)("span",{className:I,children:e.table.name}),(0,q.jsxs)("span",{className:M,children:[e.datasetName,s.length>0&&(0,q.jsxs)(q.Fragment,{children:[" \xb7 columns: ",s.map(e=>e.name).join(", ")]})]})]},`${e.datasetKey}:${e.table.name}`)})})]})}function W({group:e,onSelect:a}){const{rows:t}=(0,r.iD)();if(!e)return null;return(0,q.jsxs)("div",{children:[(0,q.jsx)("h1",{className:_,children:e.name}
1),e.fork&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)("p",{className:y,children:["Tables being tested for the ",e.fork.display_name," upgrade (",(0,q.jsx)("code",{children:e.fork.name})," fork) \u2014 not yet merged to xatu master, only available on devnets."]}),e.fork.xatu_branch&&(0,q.jsxs)("p",{className:y,children:["Collected by xatu branch"," ",(0,q.jsx)(n.A,{to:`https://github.com/ethpandaops/xatu/tree/${e.fork.xatu_branch}`,children:(0,q.jsx)("code",{children:e.fork.xatu_branch})})]}),(0,q.jsxs)("p",{className:y,children:["Devnets:"," ",e.fork.networks.map((e,a)=>(0,q.jsxs)("span",{children:[a>0&&" \xb7 ",(0,q.jsx)("code",{children:e.name})," ",(0,q.jsx)(n.A,{to:`https://github.com/${e.repository}`,children:"repo"}),e.dora&&(0,q.jsxs)(q.Fragment,{children:[" ",(0,q.jsx)(n.A,{to:e.dora,children:"explorer"})]})]},e.name))]}),(0,q.jsxs)("p",{className:y,children:["Each devnet is its own database on"," ",(0,q.jsx)("code",{children:"clickhouse.xatu.ethpandaops.io"})," \u2014 query as"," ",(0,q.jsx)("code",{children:`\`${e.fork.networks[0]?.name}\`.table_name`}),", no"," ",(0,q.jsx)("code",{children:"meta_network_name"})," filter."]})]}),(0,q.jsx)("div",{className:D,children:e.tables.map(e=>{const s=(n=e.name,t?.find(e=>e.table.name===n));var n;return(0,q.jsxs)("button",{type:"button",className:R,onClick:()=>a(e.name),children:[(0,q.jsx)("span",{className:I,children:e.name}),(0,q.jsx)("span",{className:M,children:s?String(s.table.description||"").split("\n")[0]:""})]},e.name)})})]})}function U({row:e}){const[a,t]=(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,q.jsxs)(q.Fragment,{children:["Pre-release \u2014 being tested for the ",i.display_name," upgrade (",(0,q.jsx)("code",{children:i.name}),"), not yet on production networks."]})]),!l&&n.fork&&h.push(["Fork",(0,q.jsxs)(q.Fragment,{children:["Introduced in the ",n.fork_display_name||n.fork," upgrade."]})]),n.partitioning?.column&&h.push(["Partitioning",(0,q.jsxs)(q.Fragment,{children:[n.partitioning.interval||"chunked"," on"," ",(0,q.jsx)("code",{children:n.partitioning.column})," \u2014 always filter on it."]})]),n.should_use_final&&h.push(["Querying",(0,q.jsxs)(q.Fragment,{children:["Use ",(0,q.jsx)("code",{children:"FINAL"})," \u2014 this table deduplicates on merge."]})]),l?h.push(["Databases",(0,q.jsxs)(q.Fragment,{children:[(n.devnets||[]).map((e,a)=>(0,q.jsxs)("span",{children:[a>0&&" \xb7 ",(0,q.jsx)("code",{children:e})]},e))," ","\u2014 one database per devnet, no ",(0,q.jsx)("code",{children:"meta_network_name"})," filter."]})]):n.cbt_table?h.push(["Databases",(0,q.jsxs)(q.Fragment,{children:[Object.keys(o).map((e,a)=>(0,q.jsxs)("span",{children:[a>0&&" \xb7 ",(0,q.jsx)("code",{children:e})]},e))," ","\u2014 one database per network, no ",(0,q.jsx)("code",{children:"meta_network_name"})," filter."]})]):h.push(["Database",(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)("code",{children:"default"})," \u2014 filter with ",(0,q.jsx)("code",{children:"meta_network_name"}),"."]})]),c&&h.push(["Availability",(0,q.jsx)(r.nx,{networks:o})]),n.quirks&&h.push(["Note",(0,q.jsx)(r.oz,{className:S,children:n.quirks})]),(0,q.jsxs)("article",{children:[(0,q.jsxs)("h1",{className:N,children:[n.name,(0,q.jsx)(r.i8,{text:n.name})]}),(0,q.jsx)(r.oz,{className:v,children:n.description}),(0,q.jsx)("dl",{className:w,children:h.map(([e,a])=>(0,q.jsxs)("div",{className:A,children:[(0,q.jsx)("dt",{className:C,children:e}),(0,q.jsx)("dd",{className:$,children:a})]},e))}),(0,q.jsxs)("div",{className:L,role:"tablist",children:[d>0&&(0,q.jsxs)("button",{type:"button",role:"tab","aria-selected":"columns"===a,className:`${T} ${"columns"===a?B:""}`,onClick:()=>t("columns"),children:["Columns (",d,")"]}),(0,q.jsx)("button",{type:"button",role:"tab","aria-selected":"examples"===a,className:`${T} ${"examples"===a?B:""}`,onClick:()=>t("examples"),children:"Examples"})]}),"columns"===a&&d>0?(0,q.jsx)(r.yj,{columns:n.columns,partitionColumn:n.partitioning?.column}):(0,q.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.