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
- asset review first: suspected-spam receipts remain unreviewed until the user explicitly excludes them or supplies token identity, quantity, value and basis; no default exclusion or override
- for an explicit override, use the user's exact total USD value and basis with their chosen token and acquisition date, not a guessed native ATOM price
- wasm-indexer oracle price for the exact denom and day
- documented $1 USD peg for exact allowlisted USDC denominations when the oracle has no price
- no synthetic fallback for any other asset: 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)
Staking rewards versus principal
Delegator reward income includes only executed withdraw_rewards events, split by validator and denomination. Delegated, undelegated and redelegated principal is not income. Auto-withdrawals during staking operations, including both redelegation validators, are included. Fees are separate.
Validator attribution
The operator address comes from the withdrawal event. Monikers are current chain REST labels at report generation, not historical names or evidence of validator jurisdiction. CoinTracker's fixed import schema has no metadata field; use the Generic or Income CSV for validator attribution.
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.