A DeFi transaction can move tokens into a contract, create a position, and leave behind a claim that changes over time. A wallet balance alone does not explain that sequence. Good records need to answer both what happened and what remains open.
Use a transaction journal for events and a position register for continuing balances, claims, and obligations. The DeFi altcoin ledger guide describes the overall framework. Here, the focus is on connecting swaps, liquidity provision, and lending into a record that a second person could reconstruct without relying on a dashboard screenshot.
Define what your ledger is measuring
Choose the wallets, networks, protocols, and review period before importing activity. Write down whether your report covers token quantities, estimated values, outstanding debt, or all three. A report with an undefined scope can look complete while omitting an entire position on another chain.
Keep asset identity explicit: network plus contract or other chain-specific identifier. Add protocol version, market or pool address, and a position identifier when applicable. A ticker and an application name are helpful labels, but neither is a reliable key.
Separate custody from recordkeeping. The ledger records a claim or obligation involving a contract; it does not hold the deposited assets or guarantee that the position can be withdrawn. A successful import is evidence that data loaded, not evidence that every protocol interaction is understood.
Record swaps as connected asset movements
For a swap, preserve the transaction hash, status, input token and quantity, output token and quantity, and the network fee. Capture actual execution evidence after confirmation. The amount displayed in a quote describes a proposal, while the confirmed record describes the result.
Group the relevant movements under one economic event so the input is not mistaken for a standalone payment and the output is not mistaken for an unexplained deposit. Preserve the underlying movement rows as well. This lets reviewers inspect a route that passed through intermediate assets without reporting every routing step as a separate user decision.
An earlier token approval belongs in the permission history. It is not another swap input. If approval and execution occurred in different transactions, record their fees separately and link both to the same intended operation. The wallet permission article explains how to preserve that relationship.
When the exported data is ambiguous, retain an unresolved classification. A neat label such as swap should follow the evidence, not substitute for it.
Track liquidity as a position with a lifecycle
A liquidity record should start with the assets contributed and the representation received. Depending on the protocol, that representation may be a fungible receipt, a position token, or a contract-level balance. Do not assume every pool uses the same model.
For concentrated liquidity, save the pool, asset pair, fee configuration, range boundaries, and position identifier. Uniswap's developer documentation describes liquidity concentrated within a chosen price range. The recordkeeping implication is that a pool name alone cannot distinguish two positions with different ranges.
Maintain separate events for opening the position, adding liquidity, removing liquidity, and collecting fees. If a transaction combines actions, retain the components and tie them to a common hash. This prevents collected fees from being counted again inside a withdrawal total.
At a review boundary, save an observed position state and the method used to interpret it. Underlying token quantities can differ from the original deposit mix. Keep the original contributions as historical facts and the current quantities as a dated observation; overwriting one with the other destroys the explanation of change.
A value comparison also needs a defined benchmark. Comparing the position with the original token quantities held separately answers a different question from comparing it with the initial currency value. State the comparison explicitly before discussing any difference.
Keep supplied assets and borrowed assets distinct
Lending positions require at least two sides: assets supplied and debt owed. Record collateral status separately, since depositing an asset and designating it as collateral are different attributes. For each side, identify the market, underlying asset, relevant position representation, and observation time.
Aave's health factor documentation explains that its health factor relates collateral value, liquidation thresholds, and borrowing value, with a value below one indicating liquidation risk. This is a protocol-specific measure. Preserve the value and its timestamp instead of treating it as a permanent property of the account.
For a liquidation event, capture the debt repaid, collateral removed, additional charges or rewards shown by the protocol, and the remaining position. A dashboard label cannot replace these quantities. The ledger should explain the event without presenting liquidation as a planned sale.
Interest-related changes may become visible in position state between your own transactions. Reconcile the observed debt using the protocol's accounting model and a consistent block reference. Do not create a fictional wallet transfer merely to make debt growth fit a payment-only spreadsheet.
A worked example across two activities
Consider an illustrative wallet that supplies 400 units of token A to a lending market and borrows 100 units of token B. It later swaps 40 units of B for token C. These are hypothetical quantities for explaining record structure.
The supply event records A leaving the wallet and the resulting supply position. The borrow event records 100 B arriving alongside a debt obligation. Calling the arrival income would obscure the obligation that explains it.
The swap then records 40 B leaving and the actual C received. Ignoring other activity, the wallet now contains 60 B, but the original borrow was 100 B. The difference is explained by the swap; it does not reduce the borrowing obligation.
At the review boundary, inspect the live supplied position and debt separately from the wallet's B balance. Any difference between initial and observed debt requires evidence of repayment, accrual, liquidation, or another protocol event. Keep network fees in their actual fee asset so they do not silently change A, B, or C quantities.
Keep the deposit, borrowing, and swap descriptions in plain language beside their identifiers. That short narrative helps someone distinguish a planned sequence of actions from unrelated activity imported into the same reporting period.
Reconcile events against dated snapshots
Take an opening snapshot and a closing snapshot using consistent network references. Between them, gather successful transactions, protocol events, and documented position changes. Compare like with like: a wallet token balance should not be compared directly with a receipt token count or a dashboard's currency estimate.
Investigate exceptions in an ordered way. Check asset identity and decimals, duplicate imports, failed transactions, missing wallets, position transfers, then protocol-specific accrual. Write the unresolved difference in units before attaching an estimated price. A valuation can distract from a simple quantity mismatch.
Preserve the snapshot's block, retrieval time, source, and interpretation method. If one source updates later than another, the records may describe different states. Repeating both observations at an aligned boundary is more useful than averaging their numbers.
The DeFi ledger framework provides the organizing principles, while the reconciliation guide covers a wider exception review workflow.
Practical questions about DeFi records
Is a receipt token the same as the deposited token?
Record them as different assets linked by a position relationship. The conversion or claim depends on the protocol. Treating their unit counts as interchangeable can create false gains, losses, or missing-balance alerts.
Can I reconstruct everything from my wallet's transfer list?
It is a starting point. Position state, internal protocol events, and debt accounting may require additional evidence. Document what your source covers before describing the result as complete.
Should an advertised rate go in the transaction journal?
If retained, label it as a dated quotation with its source and assumptions. It is separate from actual accrual, collected fees, and realized asset movements. A displayed rate does not establish what a position earned.
Make every open position explainable
A useful DeFi ledger connects each position to its origin, subsequent changes, and latest verified state. Preserve quantities before values, obligations alongside assets, and permission events alongside the operations they supported. The result is a record you can question and improve, even when the interface changes or a position behaves differently from your initial expectation.



