Prompt
How do I set up on-chain accounting software for reconciling LP positions, staking rewards, and wallet balances?
Latest observation
To set up on-chain accounting software for reconciling LP positions, staking rewards, and wallet balances, think of it as a pipeline with 5 layers:
- Data sources
- Transaction/event ingestion
- Position and reward valuation
- Accounting rules and reconciliation
- Reporting and audit trail
Here’s a practical setup approach.
1) Define your accounting scope first
Before choosing software, decide:
- Chains you use: Ethereum, Arbitrum, Solana, etc.
- Protocols:
- LP / AMM positions: Uniswap, Curve, Balancer, Aerodrome, etc.
- Staking: native staking, liquid staking, protocol staking
- Wallet balances: spot wallets, treasury wallets, hot wallets, custodial accounts
- Accounting basis:
- Cash basis: simpler, tracks realized movements
- Accrual basis: better for rewards, yield, unrealized LP value changes
- Reporting needs:
- Tax
- Internal management accounting
- Treasury reporting
- Financial statements
This determines how strict your reconciliation needs to be.
2) Choose an accounting stack
You typically need 3 components:
A. On-chain data indexer
Pulls transactions, token transfers, LP events, staking events.
Options:
- Covalent
- The Graph
- Alchemy / Infura / QuickNode
- Dune / Flipside for analytics
- Custom ETL using RPC + event logs if you need full control
B. Wallet/accounting engine
Normalizes blockchain activity into accounting objects:
- deposits
- withdrawals
- swaps
- LP mint/burn
- staking deposits/unstakes
- reward accruals
- fee income
- gas fees
Common approaches:
- Cryptio
- Bitwave
- CoinTracker (more tax-focused)
- Koinly (tax-focused)
- Ledgible
- Catana / Tactic / similar treasury tools depending on your needs
C. General ledger / ERP
Where the accounting entries live:
- QuickBooks
- Xero
- NetSuite
- Sage
- Custom GL if you’re crypto-native
If you’re serious about LP/staking accounting, the best setup is usually:
- On-chain ingestion + accounting engine + GL export
3) Build your chart of accounts around crypto assets
You’ll want separate accounts for:
Assets
- Operating wallet cash-equivalent tokens
- Treasury tokens
- LP token receipts
- Staking derivative tokens
- Locked/unlocked staked assets
- Reward receivable / accrued rewards
Liabilities / equity
- If applicable, customer liabilities or obligations
- Treasury equity buckets
- Realized/unrealized gains accounts
Income
- Staking reward income
- Liquidity mining rewards
- Swap fee income
- Referral incentives / airdrops if recognized as income
Expenses
- Gas fees
- Impermanent loss / revaluation impacts if you track them operationally
- Protocol fees
- Losses on depegs / write-downs if needed
4) Reconcile wallet balances first
Start with the simplest reconciliation: wallet-level balances.
Steps
- Import all wallet addresses
- Pull native token and ERC-20 balances at each snapshot date
- Match:
- opening balance
- on-chain inflows
- on-chain outflows
- ending balance
- Investigate:
- untracked internal transfers
- bridged assets
- dust balances
- wrapped assets
- token decimals issues
Key tip
Use a daily snapshot of balances, not just transaction history.
That makes it much easier to catch missing events and reorg-like discrepancies.
5) Reconcile LP positions properly
LP positions are usually the hardest part because they are not just a token balance—they represent a claim on a pool.
For classic AMMs
Track:
- LP token minted
- LP token burned
- underlying token amounts added/removed
- fees accrued
- pool share / position NFT if applicable
For concentrated liquidity positions
You need to track:
- position NFT
- tick range
- liquidity amount
- fee growth inside range
- collected fees
- current underlying token claim
Accounting treatment
Depending on your policy, LP positions may be treated as:
- a single asset
- a bundle of underlying assets
- a deployed investment position
For reconciliation, the important thing is:
- the LP token/NFT balance agrees with the wallet
- the underlying position value agrees with protocol data
- fees earned are captured separately or included in fair value
Operational approach
For each LP position:
- Identify deposit transaction
- Record tokens contributed
- Record LP receipt/NFT receipt
- Track withdrawals and fee claims
- Mark to market using pool data at each close date
6) Reconcile staking rewards
Staking often creates accruals before rewards are claimed.
Track separately:
- Staked principal
- Reward tokens accrued but unclaimed
- Claimed rewards
- Restaked rewards
- Slashing events or penalties
- Lock-up periods / vesting if applicable
Two common accounting methods
A. Recognize when claimed
Simpler:
- record income when rewards are received in wallet
B. Recognize when earned/accrued
Better for accrual accounting:
- estimate and book reward income as it is earned
- reverse or true-up when claimed
Practical rule
If you need accurate period reporting, use:
- earned date for accrual
- claim date for cash movement
This prevents misstatement if rewards are accumulated but not yet harvested.
7) Use market pricing and valuation rules
You need consistent pricing for:
- wallet assets
- LP positions
- reward tokens
- staked derivatives
- wrapped assets
Pricing sources
- CoinGecko
- CoinMarketCap
- exchange VWAP
- Chainlink oracle where appropriate
- protocol-specific valuation for LP shares
Valuation guidance
At minimum, define:
- timestamp for pricing
- source hierarchy
- fallback source if price missing
- treatment for illiquid tokens
- treatment for LP position valuation
For LP positions, use:
- pool reserves
- position liquidity
- current tick / price
- fee accrual data
- total position claim
8) Set up reconciliation logic
A good reconciliation engine should compare:
Wallet balances
- on-chain balance vs accounting balance
Token movements
- on-chain transfers vs ledger entries
LP positions
- deposited tokens + minted LP vs tracked position
- withdrawn tokens + burned LP vs closed position
Staking
- staked amount vs protocol state
- accrued rewards vs claimed rewards
Exception types to flag
- missing transaction
- duplicate transaction
- incorrect token classification
- wrong decimal handling
- internal transfer misread as external
- bridge in/out not linked
- fee event missing
- reward token not priced
9) Automate internal transfers and bridges
A lot of “breaks” are really just internal movements.
Make sure the software can identify:
- transfers between your own wallets
- multisig movements
- bridge transactions
- CEX deposits/withdrawals
- contract interactions that are not income/expense
Without this, reconciliations will be noisy.
10) Establish an operating cadence
Daily
- ingest new transactions
- update balances
- price tokens
- flag exceptions
Monthly close
- reconcile wallet balances
- reconcile LP positions
- accrue staking rewards
- book unrealized changes if needed
- export to GL
Quarterly / annual
- audit support package
- tax lots / realized gains
- impairment or fair value treatment review
- policy review for new protocols
11) Make your policies explicit
This is critical for consistency.
Document policies for:
- asset classification
- LP valuation method
- staking reward recognition
- gas fee treatment
- wrapped asset treatment
- airdrop treatment
- bridge treatment
- internal transfer treatment
- realized vs unrealized gains
- threshold for manual adjustments
This avoids month-to-month drift.
12) Recommended implementation path
If you want fast setup
- Connect wallets to a crypto accounting platform
- Import all chain data
- Categorize wallets and protocol addresses
- Configure pricing
- Map accounts to GL
- Reconcile one wallet and one protocol first
- Expand to all wallets and positions
If you want more control
- Build an ETL from RPC/indexers
- Normalize into a unified transaction table
- Create position tables for LP/staking
- Add a pricing service
- Add reconciliation rules
- Export journal entries to your GL
13) What “good” looks like
You know it’s working when you can produce:
- Exact wallet balances by day
- LP position inventory with cost basis and current value
- Staking reward accruals and claims
- Realized/unrealized P&L
- A clear audit trail from on-chain event to ledger entry
- Month-end close with few manual adjustments
14) Common mistakes to avoid
- Treating LP tokens as plain ERC-20 balances only
- Ignoring accrued but unclaimed staking rewards
- Using inconsistent token prices across systems
- Not linking internal transfers
- Missing bridge transactions
- Forgetting decimals and token redenominations
- Mixing custody wallets with operating wallets
- Booking rewards twice: once on accrual and again on claim
15) A simple practical stack example
For a mid-sized crypto treasury:
- Data ingestion: Alchemy + The Graph
- Accounting engine: Cryptio or Bitwave
- Pricing: CoinGecko + oracle fallback
- Ledger: NetSuite or QuickBooks
- Analytics / audit: Dune + spreadsheet controls
Workflow:
- Ingest wallets and protocol activity
- Classify LP and staking transactions
- Revalue daily
- Reconcile monthly
- Export journals to GL
If you want, I can also give you:
- a step-by-step setup checklist,
- a sample chart of accounts for crypto treasury accounting, or
- a recommended data model/schema for tracking LP positions and staking rewards.
Observation history
Unlock observation history
Create a free Obsurfable account to unlock historical responses, model comparisons, and deeper brand intelligence.
How did Obsurfable measure this prompt?
Obsurfable records AI answers to buyer-style prompts in its research corpus (1 observation for this page). Metrics are distributions over observations, not a single static ranking.
Which AI systems does Obsurfable collect answers from?
OpenAI, ChatGPT, Google, Gemini, Google AI Mode, Anthropic, Claude, Perplexity, Grok, DeepSeek, Mistral, Copilot, and Meta AI.