DeFi positions and double counting
Why a receipt token such as stETH could count twice in the net worth, and how Conta Finance counts it once.
Where to find it:your-organization.conta.financePositions
Conta Finance values what your organization holds in two ways. Account holdings are the tokens your accountsA wallet or an exchange account your organization controls. hold. DeFi positions are the assets your accounts put inside protocols or in staking. Some value is in both, and Conta Finance takes it out once so the net worthThe value of everything your organization holds: the account holdings plus the DeFi positions. A value in both counts once. counts it once.
Why a value can count twice
Many protocols give you a receipt token when you deposit. The receipt stays in your account and stands for the assets inside the protocol.
- Stake ETH through a liquid staking protocol and you get stETH.
- Supply USDC to a lending market and you can get a token such as aUSDC.
- Add two tokens to a liquidity pool and you get an LP token.
The receipt token is a token like any other. Your account holds it, so it is in your account holdings. The protocol also reports the stake as a position. If Conta Finance added both, the same money would count twice.
How Conta Finance counts it once
For each position, Conta Finance checks if the contract of the position is a token your account holds. For a liquid staking protocol, the contract of the position is the receipt token itself. When it matches, the smaller of the two values is the part counted in both.
The pages show that part with its own name:
- On the Portfolio page, the band under the net worth reads Account holdings + DeFi positions − Counted in both.
- On the Positions page, the band reads Gross value − Debt = Net value, and the line under the gross value names the part already in holdings. A protocol with an overlap shows the In your holdings badge.
A worked example
Your accounts hold $50 000 of tokens. Among them are 10 stETH, worth $20 000. Your accounts also have three positions:
| Position | Custody | Value | Already in holdings |
|---|---|---|---|
| 10 ETH staked through a liquid staking protocol | In protocol | $20 000 | $20 000 |
| A loan: $18 000 of USDC supplied, $3 000 borrowed | In protocol | $15 000 | $0 |
| Native staking on a Cosmos chain | Chain-held | $5 000 | $0 |
| Total | $40 000 | $20 000 |
The staked ETH is the stETH your account holds. The other two positions leave no receipt token in the account in this example.
The Portfolio page then reads:
| Amount | |
|---|---|
| Account holdings | $50 000 |
| + DeFi positions | $40 000 |
| − Counted in both | $20 000 |
| = Net worth | $70 000 |
Without the correction, the net worth would read $90 000.
The Positions page shows the same result from the side of the protocols: Gross value $43 000 − Debt $3 000 = Net value $40 000, of which $20 000 is already in holdings and $20 000 adds to net worth. The net worth is the account holdings plus that: $50 000 + $20 000 = $70 000.
Where it sits on the Portfolio page splits the same $70 000: $30 000 In accounts, $25 000 Staked and $15 000 Lent and pooled. The stETH counts under Staked, not under In accounts.
Custody is a different question
The custody badge, Chain-held or In protocol, says where the assets are. It does not say if they are in your holdings.
- A chain-held stake, such as native staking on a Cosmos chain, is usually not in the balance of the account. The balance shows only what you can spend. So it adds to the net worth.
- An in-protocol stake can be in your holdings, through its receipt token.
Where the correction stops
Conta Finance only takes out an overlap it can point at. Removing value that was not counted twice would hide real money, which is the worse error.
- Some protocols give a receipt token at another address than the one they report. The aTokens of a lending market are an example. The overlap is then not detected, and the position counts as additional value.
- A receipt token with no price adds nothing to the account holdings, so there is nothing to take out. A pool share on Osmosis is an example: the account holds the share, nothing prices it, and the position shows the assets it redeems for. So the position adds its full value to the net worth.
- A receipt token that the ledger cannot read adds nothing to the account holdings. The CW20 tokens of Terra (ampLUNA, bLUNA, Astroport LP) are an example. The position then adds its full value to the net worth.
- A Stride token (stATOM, stTIA) is a receipt token that the account holds and the catalog usually prices. The position reads Already in holdings and takes out the full value of the token. If the catalog has no price for the token, the account holdings do not count it, so the position adds the value of the coins it redeems for.
- A redemption that is not finished, and a tokenized share of the Cosmos Hub, are not counted in the account holdings. They add their full value to the net worth.
- On Sui, many positions have a receipt coin that sits in the account: a liquid staking coin (haSUI, vSUI, afSUI, sSUI), an sCoin of Scallop, the coin of a Cetus vault, an Aftermath pool token and the receipt of an Ember vault. Each one reads Already in holdings, because the coin type of the position is the coin type of the ledger. A lending account, a debt position, a Cetus or Bluefin position (an NFT, not a coin), a farm stake and an unstake ticket leave no coin in the account. They add their full value.
- On Aptos, a liquid staking token (amAPT, stAPT, thAPT, sthAPT, truAPT) that sits in the account reads Already in holdings when the catalog prices it. An Aave Aptos aToken, an LP coin and a Decibel DLP share are not worth what the position redeems for, so the position shows the assets inside. It takes out the smaller of the two values, and nothing when the token has no price. The LP coins of PancakeSwap and Liquidswap have no price, so they add their value. An Amnis ticket, an unstake request, a lending account, a Hyperion or ThalaSwap v3 position and a Decibel perp account leave no token in the account. They add their full value.
- On NEAR, a liquid staking token (stNEAR of Meta Pool, LiNEAR, rNEAR of Rhea LST) that sits in the account reads Already in holdings when the catalog prices it. When it does not, the position adds the NEAR the token redeems for. An unstake that waits in the contract, your shares of the Meta Pool liquidity pool, a Rhea Lend market, a Rhea Dex pool or concentrated position, the tokens you left in Rhea Dex and the balances you hold in NEAR Intents leave no token in the account. They add their full value. Rhea Lend and NEAR Intents keep your tokens in their own contracts, so these amounts are additional to the account balance.
- A balance of zero or less adds nothing either.
- One balance answers for one position only, so two positions never take out the same receipt twice.
If the net worth looks too high, compare the receipt tokens on the Tokens page with the protocols on the Positions page.
Positions never change the books
The correction is for display only. Positions never feed the ledger, the cost basisWhat you paid for the assets you hold or disposed of., the P&L or the reconciliationThe daily check that the balance in your books matches the balance on the platform.. The ledger already records the movements that opened and closed each position, and the receipt token is a holding like any other.