PageSourceSearch

https://ethpandaops.io/assets/js/f529e041.479ba682.js

js ethpandaops.io collected 2026-10-03 21:47:00 UTC 20,210 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkpublic_docs=globalThis.webpackChunkpublic_docs||[]).push([[4729],{28453(e,n,t){t.d(n,{R:()=>s,x:()=>d});var a=t(96540);const o={},i=a.createContext(o);function s(e){const n=a.useContext(i);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(i.Provider,{value:n},e.children)}},34733(e,n,t){t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>c,default:()=>u,frontMatter:()=>d,metadata:()=>a,toc:()=>l});var a=t(98880),o=t(74848),i=t(28453),s=t(60966);const d={title:"Xatu - Contribute data",slug:"xatu/contribute",description:"Contribute to the Xatu dataset by running xatu sentry against your beacon node, with privacy levels you control.",image:"/img/blog/xatu-data.jpg",tags:["xatu","data","contribute"]},c=void 0,r={authorsImageUrls:[]},l=[{value:"Contribute to Xatu data",id:"contribute-to-xatu-data",level:2},{value:"Data Collection",id:"data-collection",level:3},{value:"Overview",id:"overview",level:4},{value:"Events Collected",id:"events-collected",level:4},{value:"Metadata",id:"metadata",level:4},{value:"Client Metadata",id:"client-metadata",level:5},{value:"Server Metadata",id:"server-metadata",level:5},{value:"Privacy groups",id:"privacy-groups",level:3},{value:"No additional Geo/ASN data",id:"no-additional-geoasn-data",level:4},{value:"With ASN data",id:"with-asn-data",level:4},{value:"Without ASN data",id:"without-asn-data",level:4},{value:"Get Started",id:"get-started",level:3},{value:"Docker",id:"docker",level:3},{value:"Binary",id:"binary",level:3}];function h(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"contribute-to-xatu-data",children:"Contribute to Xatu data"}),"\n",(0,o.jsx)(n.p,{children:"We're excited to announce that we are opening up the Xatu data collection pipeline to the Ethereum community! This initiative enables community members to contribute valuable data to the Xatu dataset."}),"\n",(0,o.jsxs)(n.p,{children:["As discussions regarding the potential increase in maximum blob count continue ",(0,o.jsx)(n.strong,{children:"we hope to shed light on the perspective of Ethereum's most crucial participants - home stakers."})]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Summary:"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Privacy focused. Multiple privacy levels that allow contributors to only disclose data they're comfortable with"}),"\n",(0,o.jsx)(n.li,{children:"Initially restricted to known community members"}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/data/xatu/getting-started",children:"Data is published daily by the EthPandaOps team"})}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"data-collection",children:"Data Collection"}),"\n",(0,o.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,o.jsxs)(n.p,{children:["Data is collected by running a Beacon node and the ",(0,o.jsx)(n.code,{children:"xatu sentry"})," sidecar. The data is then sent to a pipeline that we run, which further anonymizes and redacts the data."]}),"\n",(0,o.jsx)("img",{alt:"Data Collection",class:"rounded",src:"https://github.com/ethpandaops/xatu-data/blob/master/assets/data-collection.jpg?raw=true"}),"\n",(0,o.jsx)(n.h4,{id:"events-collected",children:"Events Collected"}),"\n",(0,o.jsx)(n.p,{children:"The following events will be collected:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.a,{href:"/data/xatu/tables?table=beacon_api_eth_v1_events_head",children:"beacon_api_eth_v1_events_head"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"When the beacon node has a new head block"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Example payload"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:'data:\nblock: "0x43d85cfa70181f60971dbc59d60c0e82e2ff8aea995bc942dc9c27bb16a055ca"\ncurrent_duty_depen
1dent_root: "0xc59a164bf477f138363db57e34f5b0e561c8bb1d30a0526f195b5575b2137513"\nprevious_duty_dependent_root: "0xbdbad239bcde3aa281edb7067a86ddba41f7f0a2e55b7ca61d628e57b6f1695f"\nslot: "10098904"\nstate: "0xbcf7bbd9f5da8b88d09e3876834e93945edd98a258091339caedad2ec6764576"\nevent:\ndate_time: "2024-10-04T03:01:13.245589039Z"\nid: "b6b13f23-6412-4e74-aa62-8639fc2fa04e"\nname: "BEACON_API_ETH_V1_EVENTS_HEAD_V2"\nadditional_data:\nepoch:\n    number: "315590"\n    start_date_time: "2024-10-04T02:56:23Z"\npropagation:\n    slot_start_diff: "2245"\nslot:\n    start_date_time: "2024-10-04T03:01:11Z"\n'})})]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.a,{href:"/data/xatu/tables?table=beacon_api_eth_v1_events_block",children:"beacon_api_eth_v1_events_block"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"When the beacon node has a new block"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Example payload"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:'data:\nblock: "0x7bb7f9e703896d516a0ee56d273dbe8fd71fd994a2f36cc489b8e1b825d74d44"\nslot: "10098966"\nevent:\ndate_time: "2024-10-04T03:13:37.703055591Z"\nid: "58ccd540-81c2-44ce-820d-e73b5af0bea7"\nname: "BEACON_API_ETH_V1_EVENTS_BLOCK_V2"\nadditional_data:\nepoch:\n    number: "315592"\n    start_date_time: "2024-10-04T03:09:11Z"\npropagation:\n    slot_start_diff: "2703"\nslot:\n    number: "10098966"\n    start_date_time: "2024-10-04T03:13:35Z"\n'})})]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.a,{href:"/data/xatu/tables?table=beacon_api_eth_v1_events_blob_sidecar",children:"beacon_api_eth_v1_events_blob_sidecar"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"When the beacon node has recieved a blob sidecar that passes gossip validation."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Example payload"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"data:\nblock_root: '0xc78adbc7ce7ab828bed85fedc6429989b4f4451d41aac8dc0c40b9f57839a3d7'\nindex: '0'\nkzg_commitment: '0xa8de65da8d07703217d6879c75165a36973ff3ddace933907e7d400662b90e575812bb1302bfd4bb24691a550a0dc02a'\nslot: '10099003'\nversioned_hash: '0x0196e5bc26c289ff58a37c75f72b6824507d67ab0e43577495d1ad7b74716601'\nevent:\ndate_time: '2024-10-04T03:21:00.752889196Z'\nid: adbf1ecb-4e52-404f-b3ba-6f83f6ffc4db\nname: BEACON_API_ETH_V1_EVENTS_BLOB_SIDECAR\nadditional_data:\nepoch:\n    number: '315593'\n    start_date_time: '2024-10-04T03:15:35Z'\npropagation:\n    slot_start_diff: '1752'\nslot:\n    number: '10099003'\n    start_date_time: '2024-10-04T03:20:59Z'\n"})})]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.a,{href:"/data/xatu/tables?table=beacon_api_eth_v1_events_chain_reorg",children:"beacon_api_eth_v1_events_chain_reorg"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"When the beacon node has reorganized its chain"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Example payload"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"data:\ndepth: '3'\nepoch: '83615'\nnew_head_block: '0x4a99bc2dbb2c5640cf0798102588dcbc3c02d15989c7652bbcf4647e24a14881'\nnew_head_state: '0x3e5af57c5c3bd8fa394c21edd8ac5b07378ef1e143ed18a9ff695090c970b23f'\nold_head_block: '0x28e85b3e33721ad20b86c671f35686c8c91b5a29c6fd0cb41698872048d1b8ed'\nold_head_state: '0x00f61794f1da3817bb8ae4591bbc0bc9cc0c72f4a422d5fdda5cd584ee147cd3'\nslot: '2675702'\nevent:\ndate_time: '2024-10-04T03:00:36.161478913Z'\nid: b0db9607-a862-4dd2-b7e6-4faf77e3a949\nname: BEACON_API_ETH_V1_EVENTS_CHAIN_REORG_V2\nadditional_data:\nepoch:\n    number: '83615'\n    start_date_time: '2024-10-04T02:56:00Z'\npropagation:\n    slot_start_diff: '12161'\nslot:\n    start_date_time: '2024-10-04T03:00:24Z'\n"})})]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.a,{href:"/data/xatu/tables?table=beacon_api_eth_v1_events_finalized_checkpoint",children:"beacon_api_eth_v1_events_finalized_checkpoint"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"When the beacon node's finalized checkpoint has been updated"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Example payload"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"data:\nblock: '0x418645de30f82a71b7470dfc9831602f750a3b8e14e507e112791d53b3d3842e'\nepoch: '188220'\nstate: '0x195dcdf004596c7afd999c39ff6f718f5bb631f3c8838b445fe87ea8f4f6de52'\nevent:\ndate_time: '2024-10-04T03:00:47.506914227Z'\nid: 57e595a9-c79a-458c-be83-0d6dd58ee81c\nname: BEACON_API_ETH_V1_EVENTS_FINALIZED_CHECKPOINT_V2\na
1dditional_data:\nepoch:\n    number: '188220'\n    start_date_time: '2024-10-04T02:48:00Z'\n"})})]}),"\n",(0,o.jsx)(n.h4,{id:"metadata",children:"Metadata"}),"\n",(0,o.jsx)(n.p,{children:"The following additional metadata is sent with every event:"}),"\n",(0,o.jsx)(n.h5,{id:"client-metadata",children:"Client Metadata"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"clock_drift: '2' # Clock drift of the host machine\nethereum:\n    consensus:\n        implementation: lighthouse # Beacon node implementation\n        version: Lighthouse/v5.3.0-d6ba8c3/x86_64-linux # Beacon node version\n    network:\n        id: '11155111' # Ethereum network ID\n        name: sepolia # Ethereum network name\nid: 98df53c0-3de0-477c-a7c9-4ea9b17981c3 # Session ID. Resets on restart\nimplementation: Xatu\nmodule_name: SENTRY\nname: b538bfd92sdv3 # Name of the sentry. Hash of the Beacon Node's node ID.\nos: linux # Operating system of the host running sentry\nversion: v0.0.202-3645eb8 # Xatu version\n"})}),"\n",(0,o.jsx)(n.h5,{id:"server-metadata",children:"Server Metadata"}),"\n",(0,o.jsx)(n.p,{children:"Once we recieve the event, we do some additional processing to get the server metadata. The data that is added to the event is configurable per-user and allows users to only disclose data they're comfortable with. Geo location data is very useful for understanding how data is propagated through the network, but is not required."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:'server:\nclient:\n    geo:\n    # OPTIONAL FIELDS\n    ## Data about ISP\n    autonomous_system_number: 24940 # Autonomous system number of the client\n    autonomous_system_organization: "Hetzner Online GmbH" # Organization associated with the autonomous system\n    \n    ## Data about location\n    city: "Helsinki" # City where the client is located\n    continent_code: "EU" # Continent code of the client\'s location\n    country: "Finland" # Country where the client is located\n    country_code: "FI" # Country code of the client\'s location\n    \n    ### ALWAYS REDACTED\n    latitude: REDACTED # Latitude coordinate of the client\'s location\n    longitude: REDACTED # Longitude coordinate of the client\'s location\n    group: "asn-city" # Group the client belongs to\n    user: "simplefrog47" # Pseudo username that sent the event\n    # ALWAYS REDACTED\n    ip: "REDACTED" # IP address of the client that sent the event\nevent:\n    received_date_time: "2024-10-04T03:00:48.533351629Z" # Timestamp when the event was received\n'})}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Note:"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["The ",(0,o.jsx)(n.code,{children:"client.name"})," field is re-hashed with a salt that only the EthPandaOps team has access to. This means that the original name of the client is not disclosed, and there is no way to map events back to a specific node id."]}),"\n",(0,o.jsxs)(n.li,{children:["The ",(0,o.jsx)(n.code,{children:"client.ip"}),", ",(0,o.jsx)(n.code,{children:"client.geo.latitude"}),", and ",(0,o.jsx)(n.code,{children:"client.geo.longitude"})," fields are ALWAYS redacted."]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"privacy-groups",children:"Privacy groups"}),"\n",(0,o.jsx)(n.p,{children:"Privacy is a top priority for us. We have created privacy groups to allow users to only disclose data they're comfortable with."}),"\n",(0,o.jsx)(n.h4,{id:"no-additional-geoasn-data",children:"No additional Geo/ASN data"}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"No additional Geo/ASN data"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:'autonomous_system_number: REDACTED # REDACTED\nautonomous_system_organization: REDACTED # REDACTED\ncity: "REDACTED" # REDACTED\ncountry: "REDACTED" # REDACTED\ncountry_code: "REDACTED" # REDACTED\ncontinent_code: "REDACTED"\n'})})]}),"\n",(0,o.jsx)(n.h4,{id:"with-asn-data",children:"With ASN data"}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Share geo location down to the city level"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:'autonomous_system_number: 24940\nautonomous_system_organization: "Hetzner Online GmbH"\
1ncity: "Helsinki"\ncontinent_code: "EU"\ncountry: "Finland"\ncountry_code: "FI"\n'})})]}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Share geo location down to the country level"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:'autonomous_system_number: 24940\nautonomous_system_organization: "Hetzner Online GmbH"\ncontinent_code: "EU"\ncountry: "Finland"\ncountry_code: "FI"\ncity: "REDACTED" # REDACTED\n'})})]}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Share geo location down to the continent level"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:'autonomous_system_number: 24940\nautonomous_system_organization: "Hetzner Online GmbH"\ncontinent_code: "EU"\ncity: "REDACTED" # REDACTED\ncountry: "REDACTED" # REDACTED\ncountry_code: "REDACTED" # REDACTED\n'})})]}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Share no geo location data"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:'autonomous_system_number: 24940\nautonomous_system_organization: "Hetzner Online GmbH"\ncontinent_code: "EU"\ncity: "REDACTED" # REDACTED\ncountry: "REDACTED" # REDACTED\ncountry_code: "REDACTED" # REDACTED\n'})})]}),"\n",(0,o.jsx)(n.h4,{id:"without-asn-data",children:"Without ASN data"}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Share geo location down to the city level without ASN"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:'city: "Helsinki"\ncontinent_code: "EU"\ncountry: "Finland"\ncountry_code: "FI"\nautonomous_system_number: REDACTED # REDACTED\nautonomous_system_organization: REDACTED # REDACTED\n'})})]}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Share geo location down to the country level without ASN"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:'continent_code: "EU"\ncountry: "Finland"\ncountry_code: "FI"\nautonomous_system_number: REDACTED # REDACTED\nautonomous_system_organization: REDACTED # REDACTED\ncity: "REDACTED" # REDACTED\n'})})]}),"\n",(0,o.jsxs)(s.B_,{children:[(0,o.jsx)(s.BD,{children:"Share geo location down to the continent level without ASN"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:'continent_code: "EU"\nautonomous_system_number: REDACTED # REDACTED\nautonomous_system_organization: REDACTED # REDACTED\ncity: "REDACTED" # REDACTED\ncountry: "REDACTED" # REDACTED\ncountry_code: "REDACTED" # REDACTED\n'})})]}),"\n",(0,o.jsx)(n.h3,{id:"get-started",children:"Get Started"}),"\n",(0,o.jsx)(n.p,{children:"Contributing to the Xatu dataset is currently restricted to known community members. We have plans to open this up to the public in the future, but for now, we want to ensure that the data remains high quality and relevant to the home staker community (read: we need to make sure our pipeline can handle the increased load \ud83d\ude02)"}),"\n",(0,o.jsxs)(n.p,{children:["If you'd like to contribute to the Xatu dataset, please\n",(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.a,{href:"/contribute-data/",children:"apply for access here"})})]}),"\n",(0,o.jsxs)(n.p,{children:["Once you've been granted access, you'll receive instructions on how exactly to run ",(0,o.jsx)(n.code,{children:"xatu sentry"})," and start contributing to the dataset."]}),"\n",(0,o.jsx)(n.h3,{id:"docker",children:"Docker"}),"\n",(0,o.jsxs)(n.p,{children:["If you're already running a beacon node, running ",(0,o.jsx)(n.code,{children:"xatu sentry"})," is as simple as running a docker container on your node. For example:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:'docker run -d \\\n--name xatu-sentry \\\n--restart unless-stopped \\\n--cpus="0.5" \\\n--memory="1g" \\\n--read-only \\\nethpandaops/xatu:latest sentry \\\n--preset ethpandaops \\\n--beacon-node-url=http://localhost:5052 \\\n--output-authorization=REDACTED\n'})}),"\n",(0,o.jsx)(n.h3,{id:"binary",children:"Binary"}),"\n",(0,o.jsxs)(n.p,{children:["You can download the binary from our ",(0,o.jsx)(n.a,{href:"https://github.com/ethpandaops/xatu/releases",children:"GitHub Releases"})," page or use the ",(0,o.jsx)(n.a,{href:"https://github.com/ethpandaops/xatu?tab=readme-ov-file#install-via-bash-script",children:"install script"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["Once you have the ",(0,o.jsx)(n.code,{children:"xatu"})," binary, you can run it with the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"xatu sentry \\\n--preset ethpandaops \\\n--beacon-node-url=http://localhost:5052 \\\n--output-authorization=REDACTED\n"})})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},60966(e,n,t){t.d(n,{B_:()=>u,BD:()=>m});var a=t(96540);const o="details_bdAo",i="summary_dHHT",s="open_cntL",d="summaryIcon_sZ_e",c="summaryTitle_e1Hx",r="detailsContent_Jcqq";var l=t(34164),h=t(74848);function u({children:e,summary:n,open:t=!1}){const[u,m]=(0,a.useState)(t);let b=n,_=e;if(!b&&Array.isArray(e)){const n=e.find(e=>"Summary"===e?.type?.name||"string"==typeof e?.type&&"summary"===e?.type?.toLowerCase());n&&(b=n.props.children,_=e.filter(e=>"Summary"!==e?.type?.name&&("string"!=typeof e?.type||"summary"!==e?.type?.toLowerCase())))}return(0,h.jsxs)("div",{className:o,children:[(0,h.jsxs)("div",{className:(0,l.A)(i,u&&s),onClick:()=>{m(!u)},children:[(0,h.jsx)("span",{className:d,children:u?"\u25bc":"\u25ba"}),(0,h.jsx)("span",{className:c,children:b})]}),(0,h.jsx)("div",{className:(0,l.A)(r,u&&s),children:_})]})}function m({children:e}){return(0,h.jsx)(h.Fragment,{children:e})}},98880(e){e.exports=JSON.parse('{"permalink":"/data/xatu/contribute","source":"@site/data/xatu-data/contribute.md","title":"Xatu - Contribute data","description":"Contribute to the Xatu dataset by running xatu sentry against your beacon node, with privacy levels you control.","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":"contribute","permalink":"/data/tags/contribute"}],"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Xatu - Contribute data","slug":"xatu/contribute","description":"Contribute to the Xatu dataset by running xatu sentry against your beacon node, with privacy levels you control.","image":"/img/blog/xatu-data.jpg","tags":["xatu","data","contribute"]},"unlisted":false,"prevItem":{"title":"Ethereum Client Snapshots","permalink":"/data/snapsh
1ots"},"nextItem":{"title":"Xatu - Getting started","permalink":"/data/xatu/getting-started"}}')}}]);

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.