- How do you properly handle the transactions into and out of a liquidity pool?
- Why isn’t ACCOINTING.com tracking my LP Token’s value?
- How do I classify the interest I received for providing liquidity?
If you’ve ever had any of these questions relating to liquidity pool transactions or their associated token, then this article is for you. In this article, we will try to answer these questions, and more. We do so, so you don’t have to worry about overpaying your taxes.
If you live in a jurisdiction that taxes your liquidity pool transactions as separate buy/sell events, like Germany, take notice. Your transactions are already being handled correctly by default. The only thing you would need to do is ignore the Liquidity Pool Token, and classify interest received as “Income” or “Liquidity Pool”. If you would like to learn more about these topics, you can read the associated sections below.
The Interest Received From The Liquidity Pool
The interest received from providing liquidity is simple to handle. Receiving interest from a liquidity pool creates a taxable event, so its transaction would need to be classified. To do so, all you need to do is to classify the interest deposits as “Liquidity Pool”. The screenshot below provides an example of what this would look like.
Example of an interest deposit being classified as “Liquidity Pool”
Entering / Exiting The Liquidity Pool
By default, ACCOINTING.com already handles the transactions into and out of a liquidity pool. The default method may or may not be the right way for you. If you’d like to find out if it is and to see the proposed way, you can read more about them in the following sections.
To show you the difference between these two methods, we will follow an example of entering a liquidity pool with 300 USDT and 1 BNB.
Using The Default Method
The default way is for any jurisdiction that taxes your liquidity pool transactions as separate buy/sell events. Therefore, if your jurisdiction doesn’t tax those transactions in that way, you will overpay on your taxes. The following is how to manage your transactions using the default method.
Entering a Liquidity Pool
When entering a liquidity pool, you are selling the coins you are using to provide that liquidity. You also receive a token that represents your stake in the pool. But, this token has no trackable value. Therefore, getting your tokens out of the pool upon exiting is its only function. The following screenshot will show you an example of what this would look like.
Example of transactions entering a liquidity pool using the default method
Exiting a Liquidity Pool
When exiting a liquidity pool, you are buying back the coins used to provide liquidity. You use the Liquidity pool token received earlier to get your coins back. Using this method, the amounts received when exiting could differ from the amounts put in when entering and it wouldn’t make a difference. Following the example in this section, the screenshot below will show what it would look like when exiting with discrepancies between the original coin amounts.
Using The Proposed Method
The proposed method of handling your transactions entering/exiting a liquidity pool is by classifying them as internal transactions. By doing so, the coins never leave your possession for tax reasons and have the benefit of holding their value in your portfolio. The following are some changes that need to be made to handle your transactions in this way.
- Create a new wallet that represents the liquidity pool.
- Create transactions into the new wallet that correspond with the transactions from your real wallet.
- Fix any discrepancies between the coin amounts that were created when exiting the liquidity pool.
- Classify the transactions as internal.
Read the following sections to learn how to handle this process.
Creating The Liquidity Pool Wallet
Creating a new wallet that represents the pool is easy. The only thing you need to do is go to the “Add Wallet” section of the web app. Once there, give it a name that represents your pool. In our case, we’ll name it “BNB/USDT LP” or something similar. In the screenshot below, you can see what that would look like.
Example of creating a new wallet representing the liquidity pool
Once you click on “Create manual wallet <YOUR WALLET NAME>”, you’re all done by creating your new wallet. You can close that window or click on the form to add your transactions in the next section.
Creating The Corresponding Transactions
We then just need to add the corresponding transactions to the new wallet. To do so, we need to look at the transactions in our real wallet and get the timestamp, transaction type, and coin amount. Then match up every deposit with a corresponding withdraw and vice versa. The screenshot below will show you what those transactions will look like following our example from the section.
Example of transactions corresponding to the transactions from the real wallet
Notice two things from the above example. First, we are not creating transactions for the Liquidity Pool Token. Second, there are discrepancies between the deposit and withdrawal amounts. In the next section, we will learn how to fix that problem.
There are a few different ways you can fix any discrepancies in your transactions. The way you deal with them depends on if the coin amounts are more or less than the initial amounts. In our example, we have one coin that is more and one coin that is less. Any coin that is fewer needs a corresponding withdrawal classified as a “Fee”. Any coin that is more needs a corresponding deposit transaction classified as “liquidity pool”. The screenshot below will show what this would look like.
Example of fixing the discrepancies when exiting the liquidity pool
That example shows how to handle discrepancies over and under the starting amount. If the amounts are both over the starting amount, you would create both transactions as deposits classified as interest. If the amounts are both under the starting amount, you would then create both transactions as withdraws classified as a “Fee”.
Alternatively, we can instead use an order transaction to take care of both discrepancies at the same time. I do this when one amount is over and the other is under, like in our example above. The screenshot below will show what that would look like.
A simplified example of fixing the discrepancies when exiting the liquidity pool
As you can see, both examples do the same thing, the latter is just easier to read. The only thing left now is to classify the internals.
Classifying the Internal Transactions
Finally, once you have unclassified all of your transactions that need to be reclassified as internal, you can continue. To classify the transactions as internal, you just go to the “Identify Internals” section of the review process and select the ones you want to change, and click “Approve”. The example below shows what it looks like when transactions are ready to be classified as internal.
Example of transactions ready to be classified as internal
Once completed, the transactions in your liquidity pool wallet should now look like the following.
Example of the transactions in your liquidity pool wallet after using the proposed method
Continue on to the next section to learn what to do with the Liquidity Pool Token and its transactions.
The Liquidity Pool Token
The Liquidity Pool (LP) Token is the same as a receipt for the deposit into a Liquidity Pool. Removing liquidity from the associated liquidity pool is the LP Token’s only function. Therefore, we can’t track its value. If you would like to make the transactions of the LP Token more clear, make the following change listed in this section.
Classifying The Liquidity Pool Token
We need to ignore the LP Token because we can’t track or identify the token properly. You can do so in the “Unknown Currencies” section of the review process. Just mark “Yes” and you’re done. The example below shows what that would look like.
Example of Ignored LP Token
Handling The Liquidity Pool Token Transactions
The transaction may or may not include a transaction fee. To account for that fee, the transactions would need to be handled differently. Read the sections below to learn how to deal with each kind of transaction.
Transactions Without Fees
If the transaction does not have a transaction fee, we can safely ignore it. Doing so would make your transaction look like this;
Example of ignored LP Token Deposit
Transactions With Fees
To account for the transaction fee associated with the Withdraw of your Liquidity Pool Token, you would just need to classify that transaction as a “Fee”. An example of this would like the following.
Example of an LP Token Withdraw Classified as a “Fee”
If the transaction of the liquidity pool token was a deposit, then you would need to add a manual withdrawal that includes the fee. Doing so would let you classify it as a “Fee”.
When creating the manual withdrawal transaction, set the amount transferred to “0”. Also, make sure the timestamp and transaction fee match the original token deposit. By doing so, it would look like the following.
Example of Ignored LP Token Deposit with Transaction Fee
Putting It All Together
By now, you should have learned how to manage your liquidity pool transactions, the liquidity pool token, and the interest received from providing liquidity. If you were following along with the examples, your transactions should look like the following.
Complete set of transactions made from our examples
If you need to add several staking transactions, it may be best to use the Accointing Template.