Documentation

Reconstruct, then report.

TALLY is a read-only transaction report for Robinhood Chain stock tokens. This page is the operator manual — not tax advice.

Overview

Paste an address. We pull Transfer logs for whitelisted assets (official • Robinhood Token suffix + whitelist), overlay uiMultiplier() at each event, classify corporate actions, match lots in underlying shares, and emit a CSV-ready ledger.

Related: Method · Security · Chain notes

Chunked scan

Block time ≈ 0.102s → ~847,000 blocks/day. A naive full-history eth_getLogs is not viable. TALLY anchors fromBlock at first activity, walks forward in 5,000-block chunks (~8.5 minutes of chain time), caches each slice, and resumes from the last successful chunk when the public RPC throttles.

const CHUNK = 5_000;
// two passes per chunk: address as sender, then recipient
topics: [TRANSFER_TOPIC, padded]
topics: [TRANSFER_TOPIC, null, padded]

Multiplier overlay

For every transfer and at every corporate-action boundary we read uiMultiplier() at that block. Share count is always:

shares(t) = rawAmount × uiMultiplier(t) / 1e18

When the multiplier changes between two events with no transfer, we emit a corporate-action row. Classification uses price movement — see Method.

Lot matching

Default FIFO. HIFO and specific identification are selectable. Basis is per underlying share, never per raw token. If a disposal exceeds tracked acquisitions, the engine throws and the UI shows a flagged row — it does not invent a lot.

Prices

Consensus price is reconstructed as of the event block. If historical pool data is unavailable, the row is marked price unverified. Current prices are never used as a back-fill.

Export

CSV columns: date, asset, action, shares, proceeds, basis, gain/loss, flag reason, explorer URL. Every completed row links to Blockscout.

Limits (MVP)

  • Whitelisted stock tokens + USDG + WETH only
  • Single address (multi-address is paid tier)
  • No wallet write access
  • No jurisdiction-specific tax forms