TrueStake
00 / PRODUCTThe whole system, visualized

Audit-defensible
ETH staking financials

Every staking yield verified against the chain. Reconciled to the wei. Audit-ready tax reports. From the chain data in, to the cited report out — the whole system, drawn out one diagram at a time.

01 / PRODUCT

How TrueStake works

The end-to-end pipeline, at a glance: TrueStake's own consensus + execution node and MEV relay data flow into the Reconciliation Engine, which resolves an expected-vs-actual comparison to a pass/fail gate; the same reconciled data then feeds both the Income Dashboard and the Tax Report.

RECONCILIATION_PIPELINE running · nightly · 09:00 UTC
TrueStake Node
Consensus Layer
attestations · withdrawals
Execution Layer
transaction receipts
self-hosted · we run the node
MEV Relays
Proposer-bonus payments
mainstream MEV-Boost relays
Reconciliation Engine
↗ cited on every event
expectedfrom beacon + relays0.041290 ETH
actualfrom execution receipts0.041290 ETH
Δ|expected − actual|0 wei
tolerance: ≤ 100 wei
OUTCOMEcleanwithin_tolerancediscrepancy
Income Dashboard● live
YTD INCOME
1.847ETH
VALIDATORS
14
APR · 7D
3.21%
04-13 · withdraw · 0.0189
Tax Report2026 · 1,847 rows
DATEKINDETH
04-12proposer0.04129
04-13withdraw0.01891
04-13attest0.00118
TOTAL1.847
priced @ Kraken close · USD
  • One pipeline, two outputs. Your dashboard and your tax report are generated from the exact same reconciled data — never two separate calculations that can quietly drift apart.
  • We run our own Ethereum node. Every reward starts as data read directly from our own consensus and execution clients, not a shared or third-party API.
  • Every reward is checked against what actually arrived on-chain. Not just estimated from a formula.
  • The pipeline runs nightly, automatically. Nobody has to remember to update a spreadsheet.
sources: system-architecture.md §§1,3,5,7,8,11 · ADR-0002 · ADR-0025
02 / PRODUCT

Straight from the chain

TrueStake operates its own dedicated Ethereum node (Reth execution client + Lighthouse consensus client) and a purpose-built indexer, ChainFacts, that pre-computes every tracked validator's reward stream — instead of relying on a third-party block-explorer API as the primary data source the way most staking trackers do.

Mainnet
Ethereum L1
the upstream chain
TrueStake Node
Consensus Layer
attestations · withdrawals
Execution Layer
transaction receipts
self-hosted · we run the node
ChainFacts Indexer
Per-validator reward stream
pre-computed
third-party explorer API
the shortcut some tools take
  • We operate our own Ethereum node. A dedicated Reth execution client and Lighthouse consensus client that we run ourselves — not a shared endpoint, not a third-party API.
  • A dedicated indexer pre-computes validator reward history. When you connect a validator, TrueStake doesn't have to fetch and recompute years of history live — it's already indexed and ready.
  • Every chain read routes through one enforced code path. There's no ad-hoc request that can skip the evidence record — every call to the node goes through a single transport layer.
  • Independent data providers stay a second opinion, never the primary source. Once our own node is live, a second, independently-operated source that agrees with ours is a trust signal, not a dependency.
sources: system-architecture.md §5 · ADR-0130 · ADR-0132 · ADR-0056
03 / PRODUCT

What a reward actually is

Every epoch, a validator's performance is scored by the beacon chain across nine distinct reward and penalty components — not a single lump-sum "reward." TrueStake fetches and preserves every one of the nine, rather than reporting a single number the way a simple block-explorer summary would.

Epoch Reward
1 validator · 1 epoch
beacon rewards API
Attestation
Source
Attestation
Target
Attestation
Head
Penalty
Finality-Delay
Duty
Sync Committee
Proposer
Attestation Inclusion
Proposer
Sync Inclusion
Proposer
Slashing Inclusion
Penalty
Inactivity Leak
epoch_rewardsraw payload ↗
attestation_reward_gweireward
sync_committee_reward_gweireward
attestation_penalty_gweipenalty
sync_committee_penalty_gweipenalty
inactivity_penalty_gweipenalty
nine fields tracked and preserved, not nine columns
block_proposalsif proposed
proposer_reward_gweiCL bonus
priority_fee_weiexecution
mev_payload_value_weiMEV
shown only for epochs this validator proposed a block
  • Your reward isn't one number — it's nine. Every epoch, the beacon chain tracks nine separate reward and penalty components for your validator: three attestation votes, a possible timing penalty, sync-committee duty, three separate proposer bonuses, and an inactivity-leak penalty.
  • We fetch every one of the nine directly from the beacon chain's own rewards API. Not an estimate, not a rough formula.
  • The full breakdown is preserved, not just a total. Even where our storage groups components together for efficiency, the original, per-field API response stays on file as the citable record.
  • Sync-committee rewards are captured at the moment they happen. Not reconstructed later — because the chain data needed to compute them after the fact gets pruned.
  • Proposer income is tracked as separate lines. Not one blended "block reward" figure — the consensus-layer bonus, the priority fee, and any MEV payment are each their own number.
sources: TRUESTAKE_REUSABLE_ASSETS.md · eth-consensus-data SKILL.md R3–R4,R6 · ADR-0007
04 / PRODUCT

Reconciled to the wei

For every account, on every nightly run, TrueStake computes an expected reward total (derived from chain data) and compares it to an actual total (real settlement events observed on-chain), then gates the result against a ±100 wei tolerance.

Derived Stream
expected total
attestation · proposal · withdrawal decomposition
Observed Stream
actual total
real settlement events read from the chain
Reconciliation Gate
Δ = |expected − actual|0 wei
tolerance≤ 100 wei
per account
clean
within_tolerance
discrepancy
  • ±100 wei, not "close enough." The default tolerance is 100 wei — a rounding budget for gwei↔wei conversion, not a shrug. Auditors care about the wei.
  • The check runs per account, every night. Not once a year when you remember to look.
  • A mismatch doesn't get quietly averaged away. Every account either passes cleanly or is flagged for review; nothing gets smoothed over.
  • The tolerance can be adjusted per account, but it's never skipped. There's no path through the pipeline that bypasses the check.
sources: system-architecture.md §8 · ADR-0025 · ADR-0026 · ADR-0031
05 / PRODUCT

Every number has a receipt

Each dashboard figure and each tax-report row cites the actual raw upstream API response it was derived from, and carries a per-line audit grade describing how strong that evidence is. The section closes with a generic, explicitly coming-soon tease of a future downloadable, signed export of this same evidence for handing to a third-party auditor or CPA.

Income Dashboard
Apr proposer reward
0.04129 ETH
Raw payloadcited ↗
sourcechain node · verbatim
captured04-12 03:00 UTC
citationraw_api_response_id
the original response, not just our interpretation of it
Chain DerivedOracle DerivedBest-Effort
Signed record kit
auditor-ready export · coming soon
  • Every number cites its source. Behind each dashboard figure and each tax-report row is the actual raw response TrueStake received from the chain — not just a computed number with no paper trail.
  • We keep the original response, not just our interpretation of it. If a number ever needs re-checking, the underlying evidence is still on file.
  • Every account carries a grade for how its numbers were derived. Chain Derived (verified against your own validator's on-chain settlement), Oracle Derived (verified against a liquid-staking protocol's own published accounting), or Best-Effort — so you always know how strong the evidence behind a number is.
  • A downloadable, signed evidence kit for your auditor or CPA is coming. We're building a packaged export of this same evidence chain — cited raw payloads and a signed integrity record — for handing directly to whoever needs to independently check your numbers. Not yet available.
sources: system-architecture.md §§6,9,11 · ADR-0067 · ADR-0073 · ADR-0122
06 / PRODUCT

The edge cases spreadsheets miss

The branching decision pipeline that runs on every block proposal and every withdrawal event before a receipts row (or a documented non-receipt outcome) is written: fee-recipient classification, the credential-type router that keeps EIP-7002 withdrawal requests from double-counting, and the consensus-penalty scanner that records missed attestations and slashing as evidence without touching the reconciled income total.

BLOCK PROPOSAL
Proposed slot
one per validator per slot
FEE-RECIPIENT CLASSIFIER
Ours
no MEV — standard receipt
Builder (MEV)
checked against the on-chain tx
Known Smoothing Pool
quarantined below
ON-CHAIN CHECK
Receiptcited
typeMEV payment
attributionon-chain verified
attribution mode recorded on the receipt
Quarantine finding
pool payment left unbooked until it reaches your wallet
WITHDRAWAL EVENT
Settlement
beacon-chain withdrawal
CREDENTIAL ROUTER
BLS-only
no withdrawal credential set
Auto-sweep
direct Capella settlement
EL-triggered
request, then settlement
EIP-7002 Request
Capella Settlementcited
receipt bookedhere only
requestnever double-counted
only the settlement that moves funds is booked as income
PENALTY EVENT
Consensus layer
missed duty or slashing
CONSENSUS PENALTY SCANNER
Inactivity leak
Attestation penalty
Slashing
Evidence Ledgerseparate table
kept separate fromreconciled income
visibilitycited, never netted
excluded from the reconciliation sum
Every path above ends in a cited Receipt, a cited quarantine finding, or a cited evidence-ledger row — never a silent drop.
  • Every MEV payment is checked against the actual on-chain transaction that moved the funds. Not just self-reported by the block builder — and the check method is recorded on the receipt itself.
  • When a proposal pays a known smoothing pool, TrueStake does not invent a per-validator number. The pool's aggregate payment is deliberately left unbooked until it reaches your wallet as its own event.
  • A withdrawal request and its eventual on-chain settlement are never counted twice. Only the settlement that actually moves funds is booked as income.
  • Missed attestations and slashing penalties get their own permanent record, kept separate from your reconciled income total. Visible and cited, never silently netted away.
  • One validator's edge case never stalls the rest of your account. Every check runs in isolation, and a failure quarantines just that validator.
sources: system-architecture.md §8 · ADR-0021 · ADR-0117 · ADR-0141
07 / PRODUCT

Facts first, tax computed at report time

An immutable on-chain receipts fact record flows into JurisdictionAdapter.classify() and JurisdictionAdapter.valueAtReceipt(), both computed fresh at report/export time — never stored back onto the fact record.

RECEIPT
On-chain settlement event
one per event
fact · immutable — carries no recognition stamp
classify()
receipt type → tax type
+ subtype + citation
valueAtReceipt()
fair-market value at receipt date
{ valuation, findings } — never throws
US Jurisdictioncomputed today
Next Jurisdictionunlit
Next Jurisdictionunlit
  • Your tax treatment is computed fresh from the same on-chain fact every time you generate a report. Never pre-baked into the record itself.
  • If the tax rule for a receipt type changes, TrueStake recomputes from the original fact. It does not need to go back and rewrite history.
  • A missing price never means a silently wrong number. A valuation gap shows up as a flagged, citable row instead of a guess.
  • Every recognized income line traces back to one immutable on-chain receipt. And the jurisdiction rule that classified it.
  • Today's tax computation covers US jurisdiction. The same fact-first design is what lets a second jurisdiction plug in without touching the underlying record.
sources: ADR-0025 · ADR-0028 · system-architecture.md §4,§8
08 / PRODUCT

The machine that never sleeps

The single global 09:00 UTC orchestration pipeline that refreshes every account's data once per day: a criticality-classified step chain, an external dead-man's-switch heartbeat that pages on silence, and a boot-time catch-up replay that self-heals a missed night.

Cron trigger · 09:00 UTC daily
pricing-daily-close
CRITICAL
oracle-indexer
NON-CRITICAL
fan-outReceipt Ingest → Rollover → Reconciliation → Freshness Stamp
CRITICAL
recon-staleness
NON-CRITICAL
revenue-snapshot
NON-CRITICAL
paid-unprovisioned-drafts sweep
NON-CRITICAL
upgrade-canary
NON-CRITICAL
backup
ALWAYS RUNS
Heartbeat — pings “up” on success, “fail” immediately on partial/error; a tick that never runs sends no ping, so silence itself pages.
CATCH-UP REPLAY
catch-up capped at 14 days
  • Every account's data refreshes on the same nightly cycle. Reconciled once a day, every day, whether or not anything else in the pipeline had a problem.
  • A failure in a non-critical step, like the Liquid-staking oracle check, never blocks your account's reconciliation. Or that night's backup.
  • The nightly backup runs even on a night something upstream failed. It is the one step designed to always fire.
  • If the pipeline goes silent instead of failing loudly, an external watchdog notices the missing signal and pages immediately. Silence is treated as a failure, not a pass.
  • Miss a night entirely. And the pipeline catches itself back up automatically, in order, capped at two weeks of missed days.
sources: system-architecture.md §7 · ADR-0037 · ADR-0114
09 / PRODUCT

Private by architecture

The data-protection chain that runs on every PII field (validator public keys, withdrawal addresses, fee recipients): encryption at rest via deterministic AEAD, a keyed lookup token that supports equality search without decrypting, database-enforced row-level tenant isolation, and an audit-logged decrypt-read seam where the audit write is a hard precondition for delivering decrypted data.

PII FIELD AT WRITE
validator pubkey
withdrawal address · fee recipient
ENCRYPTpgsodium AEAD · service_role
Encrypted column (bytea)unreadable without decrypting
Keyed fingerprintlookup only — not reversible
READ ATTEMPT
customer or operator
requests a row
RLS GATEown rows only
This account's rows onlyenforced by the database
DECRYPT-READ REQUEST
needs the plaintext value
guardedRead() SEAM
① unlock
decrypt happens first
② audit stamp
required before delivery
access_audit_logon success
audit writesucceeded
decrypted value delivered
if the audit stamp failswithheld — never delivered
NO KYCNO EXCHANGE API KEYSBy permanent design, not by omission — ever.
  • Validator pubkeys, withdrawal addresses, and fee recipients are encrypted before they ever reach the database. Unreadable without the decryption path itself, not just protected by permissions.
  • The lookup token used to match a stored address is keyed, not a plain hash. A stolen copy of that column can't be reverse-matched against the public address space offline.
  • Every table enforces that a customer can only ever read their own rows. And it's enforced by the database itself, not just by application code.
  • Every time TrueStake decrypts your data to show or export it, that access is logged first. If the log write fails, the decrypted value is never delivered.
  • No KYC, no exchange API keys — ever. TrueStake never asks for government ID or your exchange credentials, by permanent design, not by omission.
sources: system-architecture.md §13 · ADR-0032 · ADR-0111 · ADR-0120
10 / PRODUCT

Built to expand

The three independent, orthogonally-composing adapter axes that let TrueStake add a chain, a staking system, or a jurisdiction as one new adapter file, without core-engine changes.

live today
SoloSaaS-managedNext Staking System
empty by design
empty by design
empty by design
ADAPTER REGISTRYlookup, not a hard-coded switch
Named candidates (not yet built): Gnosis · Rocket Pool · Lido / Liquid Staking
  • Today, TrueStake runs exactly one composition end-to-end: Ethereum, Solo or SaaS-managed staking, US tax jurisdiction. Every other cell on this grid is empty by design, not by accident.
  • Adding a new chain, staking system, or jurisdiction is architected to be one new adapter file. The reconciliation engine and tax engine don't need to change to read it.
  • We've already named our leading candidates for the next blockchain and the next staking system. Naming a candidate isn't the same as building it, and neither is live yet.
  • Have a chain or jurisdiction you want us to build next? Tell us — every candidate on our list started as a named target before it started as code. contact us →
sources: system-architecture.md §4,§9 · ADR-0002 · ADR-0146 · ADR-0147
11 / GET STARTED

See it running
on your validators.

Add a withdrawal address and watch your own staking history reconcile to the wei — no KYC, no exchange API keys.

get_started →
Priced by validators reconciled, never by ETH held or position value — see pricing →
Product — TrueStake · TrueStake