Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Running a tally

audience: operators

Tally is the refund accounting organism. It watches the chain for inclusion of the lattice’s winning blocks, attributes the captured MEV back to the order-flow providers and searchers that contributed, and signs an Attestation that integrators can present to an on-chain settlement contract.

Role in the lattice

Tally is the last organism in the pipeline. It subscribes to relay::AcceptedHeaders, watches the chain RPC for inclusion, joins with zipnet::Broadcasts / unseal::UnsealedPool / offer::AuctionOutcome / atelier::Candidates to compute attribution evidence, and commits one Refunds entry per included block.

Committee sizing

  • 3 members minimum; 5 members recommended.

Majority-honest trust model. A majority can misattribute, but the on-chain settlement contract is the ultimate arbiter — an Attestation whose evidence does not verify is simply not paid out.

Hardware

  • Modest cloud. 2 vCPU / 4 GiB RAM suffices.
  • No TDX required in v1. The settlement contract, not the committee’s hardware, is the ground truth.
  • Chain RPC access from every committee member, for the inclusion watcher. Pick a provider with good historical block coverage — missed blocks mean missed attributions.

systemd unit example

# /etc/builder/tally-member.env
LATTICE_INSTANCE=acme.ethereum.mainnet
LATTICE_CHAIN_ID=1
LATTICE_CONFIG_HEX=7f3a9b1c...

TALLY_COMMITTEE_SECRET_FILE=/etc/builder/secrets/acme.ethereum.mainnet.tally.secret
TALLY_ECDSA_SECRET_FILE=/etc/builder/secrets/acme.ethereum.mainnet.tally.member-03.ecdsa
TALLY_SECRET_FILE=/etc/builder/secrets/acme.ethereum.mainnet.tally.member-03.peer

TALLY_CHAIN_RPC=https://eth-mainnet.g.alchemy.com/v2/...
TALLY_SETTLEMENT_ADDR=0x1234...

The settlement contract

Tally’s attestations are only useful if a settlement contract on-chain accepts them. The contract:

  • Verifies t-of-n ECDSA signatures from the tally committee’s published public keys.
  • Checks that the block_hash in the attestation matches a real on-chain block at the given slot.
  • Pays out the claimed amount to the recipient.

The contract address is pinned in tally::Config.settlement_addr and ships in the lattice’s LatticeConfig. The contract’s code is the operator’s responsibility to deploy and audit; the tally organism does not deploy it for you.

What this organism does not do

  • It does not change the winning block. Atelier committed it; the chain included it or not.
  • It does not collect funds. On-chain balances belong to the block builder / proposer; the settlement contract is the mechanism by which some of those funds route to order-flow providers.
  • It does not judge whether a refund is “fair”. The attribution is a deterministic function of the upstream commits; the policy lives in the committee’s state machine, the same policy is applied to every block.

Observing

  • tally_blocks_attributed_total — rate of successful attributions.
  • tally_attestation_latency_seconds — time from on-chain inclusion to Attestations commit.
  • tally_evidence_failures_total — attribution attempts where the upstream evidence did not line up. Any sustained rate is a cross-organism integration bug and an incident.
  • tally_chain_rpc_lag_seconds — how far behind the head the committee’s RPC feed is.