Yield Farming: How to Track Complex Multi-Protocol Positions
Reviewed by Wag3s Editorial Team · Last reviewed April 2026
Yield Farming: How to Track Complex Multi-Protocol Positions
A simple Aave deposit produces three accounting events. A typical Convex farm produces seven. By the time you've layered Pendle on top, you're at twelve. Multiply by months of activity and you see the problem.
Yield farmers chase APY. Their accountants inherit the wreckage. The gap between "I'm making 14% on my stables" and "here's a clean P&L for the year" is wider than most people realize, and it widens every time a new vault, gauge, or principal token enters the stack.
This article walks through how yield farming positions actually decompose into accounting events, protocol by protocol. It is written for active DeFi users who want to keep their books defensible, and for DAO treasury teams that need to report yield without rewriting their close every month.
The yield farming taxonomy: lending, AMM, vault aggregators, points/airdrops
Most yield strategies fall into four families. Each family has its own event signature.
Lending markets (Aave, Compound, Spark, Morpho). You deposit a token, you receive a receipt token, interest accrues against either the receipt token's balance or its exchange rate. You may also borrow against the deposit, which creates a separate liability with its own interest accrual.
AMM liquidity (Uniswap, Curve, Balancer). You deposit two or more tokens, you receive an LP token, fees accrue inside the LP token's redeemable value. Many AMMs add a gauge layer where you stake the LP token to receive emissions.
Vault aggregators (Yearn, Beefy, Convex, Aura). The vault holds the underlying strategy and reinvests rewards on your behalf. From your wallet's perspective there is one receipt token. Inside the vault there are dozens of events you usually never see.
Points and airdrops (EigenLayer, Pendle points campaigns, restaking platforms). No on-chain accrual. A points database off-chain, an eventual airdrop on-chain. The accounting question is when, if ever, the points become a recognizable asset.
Each family demands a different tracking pattern. Lumping them under "DeFi yield" is the first mistake.
Aave/Compound interest accrual
Aave and Compound are the cleanest case, but "clean" is relative.
When you supply USDC to Aave v3, you receive aUSDC. The aUSDC balance rebases upward. If you deposit 100,000 aUSDC at block N, your wallet might show 100,012 aUSDC at block N+30 days, with no on-chain transfer in between. The 12 USDC of interest never appears as a transaction. It appears as a balance delta.
Compound v2 used the opposite model. Your cToken balance stayed constant; the exchange rate to the underlying drifted upward. Compound v3 (Comet) returned to a rebasing model on the supply side.
For accounting, this means:
- Block-level snapshots are required. A daily snapshot misses intraday accrual; a transaction-level snapshot misses anything that isn't a transaction. Most teams settle on a daily mark and accept the rounding.
- Income recognition is continuous in economic substance but discrete in record. Most jurisdictions accept periodic recognition (daily, weekly, monthly) provided the methodology is consistent.
- Borrow-side accrual mirrors the supply side. With a 200,000 USDC supply and a 100,000 ETH borrow, both legs accrue. Your interest expense is real even if you never made a payment.
Curve/Convex: deposit, gauge stake, claim CRV/CVX, restake
This is where event counts explode. A standard Convex position on a Curve stable pool generates this sequence:
- Deposit USDC and USDT into the Curve pool. Receive a Curve LP token.
- Approve Convex to spend the Curve LP token.
- Deposit the Curve LP token into Convex. Receive a Convex deposit token.
- Convex automatically stakes on your behalf in its own gauge.
- Trading fees accrue inside the underlying Curve LP (no transaction).
- CRV emissions accrue, claimable via Convex.
- CVX emissions accrue, claimable via Convex.
- You claim CRV and CVX. Two transfers in.
- You sell CRV for USDC. One swap.
- You re-deposit USDC into the original pool. Back to step 1.
Each cycle generates between four and seven on-chain events plus two off-chain accruals. A position held for a year with monthly claims is somewhere between 60 and 150 events for a single farm.
Sample journal entries for a Convex position
Assume a deposit of 100,000 USDC into the Curve 3pool, then into Convex, with one month of accrual and one claim.
On deposit (day 0):
| Entry | Debit | Credit | Amount |
|---|---|---|---|
| Curve LP token (asset) | X | 99,500 USDC equivalent | |
| Convex deposit token (asset) | X | (offset) | |
| USDC (asset) | X | 100,000 | |
| Slippage / pool fee (expense) | X | 500 |
Daily fee accrual (each day, mark-to-market):
| Entry | Debit | Credit | Amount |
|---|---|---|---|
| Convex deposit token (asset) | X | ~5 USDC | |
| Trading fee income (revenue) | X | ~5 USDC |
On claim (day 30):
| Entry | Debit | Credit | Amount |
|---|---|---|---|
| CRV (asset) | X | 40 CRV at FMV | |
| CVX (asset) | X | 6 CVX at FMV | |
| Reward income — CRV (revenue) | X | 40 CRV at FMV | |
| Reward income — CVX (revenue) | X | 6 CVX at FMV |
On selling CRV to USDC:
| Entry | Debit | Credit | Amount |
|---|---|---|---|
| USDC (asset) | X | proceeds | |
| CRV (asset) | X | cost basis | |
| Realized gain/loss | X or credit | difference |
The journal is not the hard part. The hard part is producing the inputs: knowing the daily fair market value of CRV and CVX, knowing the redemption value of the Convex deposit token at every snapshot date, and reconciling against the protocol's own state.
Pendle: principal vs yield token splits
Pendle is the protocol that breaks the most accounting tools. It tokenizes future yield. When you deposit a yield-bearing asset (say, sUSDe) into Pendle, the protocol mints two tokens: a Principal Token (PT) and a Yield Token (YT). The PT redeems for the underlying at maturity. The YT collects all the yield accrued until maturity.
This is not a swap. It is not a deposit. It is a structural decomposition. Most accounting tools record it as a swap from sUSDe into PT plus YT, which is wrong but tractable.
The cleaner model is:
- The original sUSDe is held in a Pendle vault contract.
- The PT is a debt-like instrument with a fixed maturity.
- The YT is a strip representing variable interest income.
For tax, treatment varies. Some jurisdictions will look through the structure (you still own the underlying yield exposure). Others will treat the PT/YT split as a disposal of the underlying and an acquisition of two new instruments. The disposal interpretation can trigger immediate gains.
If you are running PT loops (buy PT at a discount, hold to maturity, redeem for the underlying), the discount is the yield. It accrues continuously and economically resembles bond interest. Recording it as a single gain at maturity is administratively simpler. Recording it pro-rata is more accurate.
Yearn vaults and other auto-compounders
Yearn vaults look simple from the outside. You deposit a token, you receive a yvToken, the yvToken's price-per-share rises over time. One transaction in, one transaction out, capital gain on exit.
Inside, the vault is doing thirty things you never see: claiming rewards, swapping them, re-depositing into the underlying strategy, paying performance fees. From a tax perspective, the cleanest position is that you do not recognize income until you withdraw, because you never had constructive receipt of the rewards. Some jurisdictions disagree, and treat each internal compound as a taxable event for the underlying holder, even though that holder cannot see the events without indexing the vault contract.
The conservative approach: track the yvToken as a single position, record the entry price-per-share, mark to the redemption price-per-share at each reporting date, recognize the delta as either income or unrealized gain depending on your jurisdiction's read.
The aggressive approach: index the vault contract, recreate every internal compound, recognize income at each. This produces correct economic numbers and a small mountain of journal entries.
Looped strategies: Spark, Morpho, Pendle PT loops
Loops are where the wheels come off. A typical sDAI loop on Spark:
- Deposit 100,000 DAI as sDAI. Earn the DSR.
- Borrow 80,000 DAI against the sDAI.
- Deposit the borrowed 80,000 DAI as sDAI. Earn the DSR on more.
- Borrow 64,000 DAI.
- Repeat until leverage cap.
The position now has multiple supply legs, multiple borrow legs, and a net interest spread that is the actual yield. From an accounting perspective:
- Each supply leg accrues interest income.
- Each borrow leg accrues interest expense.
- Net yield is the difference, but reporting requires recognizing both gross legs.
- Liquidation risk creates a contingent liability that does not show up on a standard balance sheet.
Pendle PT loops layer on top: borrow stables, buy PT at a discount, the PT discount yield must exceed the borrow rate. The accounting events compound accordingly.
For DAO treasuries, looped positions are often misreported as a single net interest line. They should be reported as gross interest income and gross interest expense, with a memo on net yield and leverage ratio. Auditors care about the gross. Tax authorities care about the gross. Only the trader cares about the net.
Tracking method 1: protocol-by-protocol breakdown
The protocol-by-protocol method indexes each protocol independently. You build (or buy) a parser for Aave, a parser for Curve, a parser for Convex, a parser for Pendle. Each parser produces normalized events: deposits, withdrawals, accruals, claims, swaps.
Strengths:
- Highest fidelity. Every event is captured at the protocol level.
- Auditable. You can trace any number on the financial statements back to a specific event.
- Handles new protocols by adding parsers.
Weaknesses:
- Engineering cost is high. Each protocol upgrade (Aave v3 to v4, Compound v2 to v3) requires parser updates.
- Cross-protocol positions (Convex on top of Curve, Aura on top of Balancer) require parsers that understand the layering.
- Edge cases are endless. Curve has factory pools, metapools, crypto pools, ng pools. Each has slightly different math.
This is the approach Wag3s Folio uses. Folio parses each protocol interaction into discrete economic events, including the silent ones (rebasing accruals, internal vault compounds), and ties them to a wallet-level ledger.
Tracking method 2: portfolio-level snapshots
The snapshot method ignores protocols and tracks net wallet balances at the end of each period. You take a daily snapshot of every token balance across every wallet, mark to USD, and reconstruct activity by differencing snapshots.
Strengths:
- Protocol-agnostic. Works on any chain with any contracts.
- Cheap to operate. Just balance reads.
- Captures rebasing automatically (the new balance is the new balance).
Weaknesses:
- No event detail. You see that 100 CRV appeared in the wallet but not why.
- Misses intra-period activity. A claim and a swap on the same day net out.
- Cannot distinguish income from capital gain without supplementary data.
In practice, no serious treasury runs on snapshots alone. The snapshot method is useful as a reconciliation check against the protocol-by-protocol method. If your event-level ledger says you should have 1,247 CRV and the snapshot says 1,210, something is wrong.
The metrics that matter: APY, realized yield, gas-adjusted return
APY is the metric DeFi front-ends advertise. It is rarely the metric a finance team should care about. Three numbers matter more.
Realized yield. Income actually received and (where applicable) sold to a base currency. This is the number that lands in revenue. APY is a forward projection; realized yield is a backward fact.
Gas-adjusted return. Total return after subtracting all gas costs incurred in entering, claiming, compounding, and exiting the position. On Ethereum mainnet, a 12% APY position with weekly claims can lose 200 to 400 bps to gas alone. On L2s, the drag is smaller but never zero.
Risk-adjusted return. Yield divided by some measure of risk. Smart contract risk is hard to quantify; impermanent loss exposure and liquidation distance are easier. Even a rough Sharpe-like ratio is more useful than headline APY.
A typical reporting line for a Convex position should look like:
- Position: cvxFRAX-USDC, $250,000 deposited
- Headline APY (advertised): 8.4%
- Gross yield realized YTD: $14,200
- Gas costs YTD: $620
- Net realized yield YTD: $13,580
- Annualized net return: 6.8%
The gap between 8.4% advertised and 6.8% realized is normal. It's also the gap most reporting hides.
FAQ
Are unclaimed yield farming rewards taxable income? In most jurisdictions, the trigger for income recognition is constructive receipt: when you have the right to claim and could claim, the income is recognized whether or not you actually click the button. Rebasing tokens are generally treated as accruing income continuously. Vault internal rewards are usually only recognized on withdrawal. Confirm with a local adviser.
How do I value reward tokens at the moment of claim? Use the fair market value at the timestamp of the claim transaction. The defensible source is a volume-weighted average across the deepest liquidity pools at that block. Daily closing prices are an acceptable approximation if applied consistently.
How should I track Pendle YT positions for tax? The two clean approaches are: (1) treat the YT as a separate instrument with its own basis equal to the implied price at acquisition, recognize income as the YT decays, or (2) look through the structure and recognize the underlying yield as it accrues. Approach (1) is cleaner administratively. Approach (2) is closer to economic substance. Pick one and apply it consistently.
Do gas fees reduce my yield income or my capital gains? Gas fees on a claim transaction are typically a deductible expense against the yield income. Gas fees on a swap are typically capitalized into the cost basis of the acquired token (or treated as a disposal cost on the sold token). Gas fees on entering or exiting a position are usually capitalized into the position's cost basis. Treatment varies by jurisdiction.
Can I rely on a single dashboard like DeFi Llama for accounting numbers? No. DeFi Llama is excellent for yield discovery and high-level portfolio views. It is not a system of record. It does not produce the per-event detail required for a defensible ledger. Use it for triage, not for the books.
Further reading
- Product: Wag3s Folio, parses each protocol interaction into a wallet-level ledger
- Liquidity Pool Accounting
- DeFi Accounting
- DeFi Llama — yield analytics and protocol coverage data
- AICPA Practice Aid: Accounting for and Auditing of Digital Assets
This article is for informational purposes only and does not constitute financial or tax advice. Yield farming tax treatment varies materially by jurisdiction and continues to evolve. Consult a qualified professional before relying on any approach described here.
Staking Rewards: Tax & Accounting Treatment by Jurisdiction
How major tax authorities treat staking rewards in 2026 — IRS Rev. Rul. 2023-14, HMRC, BMF, and the timing question that decides your tax bill.
Bridges & Wrapped Tokens: The Accounting View Nobody Talks About
When bridging crypto across chains is a taxable event, how to reconcile WBTC and bridged ETH, and the audit-trail gaps that bridges create.