Pricing Methodology
How every USD value in a Cosmos Tax report is priced, published so it's reasonable and consistently applied.
Price sources
- wasm-indexer oracle /price endpoint (chain-registry + scraped IBC/CosmWasm-token price feeds)
Timestamp granularity
daily (UTC calendar day); every event on a given day for a given denom uses that day's single reference price, not an intraday price
Aggregation rule
one reference USD price per (denom, UTC day), read once from the oracle and cached; every row for that denom/day reuses the same value
Fallback order
- wasm-indexer oracle price for the exact denom and day
- no synthetic fallback beyond that: if the oracle has no price for a denom/day, the row is flagged price_missing rather than valued at $0
When a price is missing
rows without a price are flagged price_missing and excluded from USD totals rather than counted as a real zero; report and export summaries surface a count so a gap is never silently understated (see INF-201)
Income recognition policy
Staking rewards and validator commission are income when the recipient has dominion and control over them (Rev. Rul. 2023-14). On Cosmos, earned rewards accrue in the distribution module and are not constructively received until withdrawn: a manual claim, an auto-withdraw triggered by delegate/undelegate/redelegate, or a REStake auto-compound claim. Before that withdrawal the delegator cannot transfer or otherwise exercise control over the reward. We recognize income at that withdrawal event ("at-claim"), valued at its USD price that day. This is the defensible reading of current law for Cosmos, and the architecture is ready for an "at-sale" policy (deferring recognition to disposal) without reindexing, since every reward's own claim date and amount is already stored; only the query-time recognition rule would change. Pending legislation (e.g. the Lummis bill, House Ways & Means drafts) could move staking rewards to taxed-at-sale; if enacted, that will be added as a selectable policy.
ATOM/USD price series
The daily reference price series is generated by this same methodology, not a separate calculation, so it can never drift from what a report actually charged a given day.
