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