BryanLabsBryanLabs

Pricing Methodology

How every USD value in a Cosmos Tax report is priced, published so it's reasonable and consistently applied.

Version v7Effective 2026-09-16

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

  1. 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
  2. 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
  3. wasm-indexer oracle price for the exact denom and day
  4. documented $1 USD peg for exact allowlisted USDC denominations when the oracle has no price
  5. 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

at-claimEffective 2026-07-04

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.