Staking and farming tokens
R
Written by Robin Singh
Updated today

Staking refers to sending coins to a third party and receiving rewards in return. This third party is commonly called a "Staking Pool". You still have control over the coins sent into the staking pool so for the most part such sends/receives are not taxable.

You will most often participate in staking when:

  • Delegating your tokens to secure the network

  • Locking governance tokens for voting power (common in decentralized exchanges)

  • Farming your LP tokens (shares in liquidity pools) for additional rewards. Note that most LP farming is handled automatically as of February 2024

☝ If you were participating in liquidity pools, be sure to check out our article about Liquidity Providing (LPing) - Liquidity in/out as well

Receiving (claiming) staking rewards

Whenever you receive a reward, you should tag the Deposit transaction as a "Reward". This way Koinly will be able to summarize all reward transactions in your Income report so you can declare it in your tax returns.

☝ Staking rewards should be tagged with the "Reward" tag, not "Remove from Pool"

Sending coins into a staking pool

For most blockchains with native staking (Zilliqa, Cosmos, etc.) and staking on centralized exchanges (Binance, Kraken) Koinly will not import such transactions since these are not taxable.

However, in most DeFi-related staking (on Ethereum or Binance Smart Chain) these transactions will get imported as withdrawals. You need to locate these and tag them as "Add to Pool" to prevent gains from being realized on them.

Receiving coins from a staking pool

Similar to the add-to-pool transactions, Koinly will avoid importing these transactions for most blockchains since they are simply returning your own coins back to you and the transaction is unlikely to be taxable.

Similarly, for DeFi transactions involving ERC-20, BEP-20, etc. these transactions will get imported as deposits. You should find and tag such transactions as "Remove from Pool".

The Pool wallet

After you use the pool tag for the first time, a special wallet is created in Koinly - it will have the same name as your wallet, but a different, blue icon.

The "Add to/Remove from Pool" tags should be used when you "set aside" your assets - meaning that they are leaving your wallet now, but you will get back the same asset in the same amount in the future.

That is why you can only "Remove from Pool" as much as you "Add to Pool", not more. If you take out from the pool wallet more than you sent there, you will see a Missing purchase history warning.

FAQ

How to handle auto-compounding pools?

Some staking pools (i.e. PancakeSwap's CAKE pool) are accumulating rewards (reward payments are received from the pool along with initial investment). This complicates things as the accumulating rewards are not reported as transactions on the blockchain, so Koinly cannot import them automatically.

πŸ”΅ Example: You've sent 1 ETH into a pool and received 1.10 ETH back from the pool. If you were to mark the first transaction as Add to Pool and the second one as Remove from Pool then you would see a missing purchase history error for the 0.10 ETH:

image.png

🟒 Solution: To resolve this error, you need to add a deposit equal to the missing amount (the accumulated rewards) into the pool wallet (🟦 blue icon) right before the "Remove from Pool" transaction.

image.png

After adding this transaction, the "Missing purchase history" warning disappears:

image.png

How to handle AAVE staking tokens like STKAAVE?

When you stake coins with the AAVE protocol, it will give you back a new token that represents your ownership of the staked token (this type of token is often called liquid staking derivative, LSD).

Because you are receiving a token representing your staked asset, such transactions will appear in Koinly as trades (which may result in taxable gains). You can tag them as Swaps to remove any gains from them (if you believe they are exempt from taxes).

How to handle crowdloans?

Polkadot's crowd loans, since you are "lending" your tokens to the protocol and will get your tokens back in the future, should use "Add/Remove from Pool" tags just like other staking transactions.

Did this answer your question?