Crypto tax reporting for XPR Network with regional support
You have tools to generate crypto tax reports from on-chain XPR Network activity. Supports New Zealand (NZ) and United States (US).
region: "US" for US tax reportsFor a full tax report, the recommended sequence is:
tax_get_balances — opening balances (start of tax year) and closing balances (end of tax year)tax_get_dex_trades — all Metal X DEX trading history for the periodtax_get_transfers — on-chain transfers, auto-categorized (staking rewards, lending, swaps, NFT sales, etc.)tax_get_rates — local currency conversion rates for each tokentax_calculate_gains — compute taxable gains/losses using FIFO or Average Costtax_generate_report — full report with tax brackets and estimated taxOr use tax_generate_report directly for a one-shot report that orchestrates all steps automatically.
COINGECKO_API_KEY in .env for full historical access)Transfers are auto-categorized by sender/receiver:
| Category | Detection |
|---|---|
staking_reward | from eosio or eosio.vpay |
lending_deposit | to lending.loan |
lending_withdrawal | from lending.loan |
lending_interest | from lending.loan with interest memo |
swap_deposit | to proton.swaps |
swap_withdrawal | from proton.swaps |
long_stake | to longstaking (XPR long staking) |
long_unstake | from longstaking |
loan_stake | to lock.token or yield.farms (LOAN/SLOAN staking) |
loan_unstake | from lock.token or yield.farms |
dex_deposit | to dex or metalx |
dex_withdrawal | from dex or metalx |
nft_sale | from atomicmarket |
nft_purchase | to atomicmarket |
burn | to eosio.null (token burn = realized loss) |
escrow | to/from agentescrow |
transfer | everything else |
staking_reward): Full amount is income at time of receiptlongstaking): Only the excess over the staked amount is income. E.g. stake 100 XPR, unstake 150 XPR → income of 50 XPRlock.token/yield.farms): Same excess-only rule as long stakinglending.loan with interest memo is incomeXUSDC and XMD are pegged to USD — their local currency value uses forex rates (USD/NZD) directly, without CoinGecko. This is more accurate than market-based pricing for stablecoins.
COINGECKO_API_KEY: unlimited historytax_generate_report returns a report_markdown field — a pre-formatted Markdown document with balance sheets, trading summary, income breakdown, tax brackets, and disclaimer. To deliver it:
report_markdown via store_deliverable with content_type: "application/pdf" — this is the primary deliverablecsv_exports.disposals via store_deliverable with content_type: "text/csv" — disposals CSVcsv_exports.income via store_deliverable with content_type: "text/csv" — income events CSVxpr_deliver_job with ALL URLs comma-separated (PDF first): "https://ipfs.io/ipfs/QmPDF...,https://ipfs.io/ipfs/QmDisposals...,https://ipfs.io/ipfs/QmIncome..."IMPORTANT: You MUST complete ALL steps (upload + deliver) in a single run. Do NOT stop after uploading the PDF — you must also upload the CSVs and call xpr_deliver_job. The job is not complete until xpr_deliver_job is called.
The frontend displays the primary file (PDF) prominently and lists additional files as download links.
region parameter defaults to "NZ" on all tools — pass a different region code when other regions are addedCOINGECKO_API_KEY in .env for best historical pricing (free Demo key removes 365-day limit)