If you have traded or invested in crypto in 2024, chances are that you have also installed a Phantom wallet, dabbled in the Solana meme-coin casino, or otherwise transacted with the Solana blockchain. But did you know that every transaction on Solana is a taxable event, and you must report this to the tax authority next year? Whether you have set up a Phantom or Solflare wallet on your phone or traded using one of the popular Telegram bots, we have got you covered in this complete guide on calculating and reporting your Solana crypto taxes!
How to get a Solana tax report
There are essentially five steps you must do to generate crypto tax reports for Solana:
- Sign up for a free Coinpanda account
- Connect your Solana wallet(s)
- Review the imported transactions
- Make manual corrections (if required)
- Export your tax forms
Next, we will go through this in more detail and explain how to import your Solana transactions to Coinpanda to ensure you get an accurate tax report.
February 4th, 2025
Our third iteration of the Solana API integration has (finally!) been released today after several months of improvements. The latest integration’s most significant updates are Jupiter limit orders and complete DeFi support for token swaps, LP tokens, and liquidity operations across the 22 most used protocols.
In addition, the new integration now accurately handles NFTs and all NFT-related activities on different marketplaces.
This update is a big step towards becoming the Solana ecosystem’s most complete and accurate portfolio tracker and tax software. If you encounter any bugs or issues or have suggestions for how we can improve the integration, please create a post in our forums.
How to import Solana transactions
The first step to doing your Solana taxes is to connect your wallet to your Coinpanda account. This step is relatively easy since Coinpanda has an API integration with Solana, which only requires you to add your public wallet address to import all transactions. As with every blockchain integration, you DO NOT need to add or reveal your private keys to Coinpanda, so there is no risk of losing your funds.
Once your account is set up, go to the Wallets page, search for Solana, and click the Solana icon to create a new wallet.
Once the modal is open, enter your public wallet address and click Add Wallet Address.
After adding your wallet address, click the Sync Wallet button to start the import process. This can take anywhere from 20 seconds to 10-30 minutes, depending on the number of transactions Coinpanda needs to import. Once completed, you will see a status message displaying the total number of transactions imported.
Supported transaction types
Here is a detailed overview of all supported transaction types.
Supported | |
---|---|
Deposits and withdrawals | |
On-chain swaps | |
Limit orders* | |
Tokens and NFTs | |
NFT listings and delistings | |
LP tokens and add/remove liquidity | |
Staking and yield farming | |
Fees and contract approvals | |
Token account owner transfers | |
Perpetuals and futures** |
** Transactions must be tagged manually for now
Solana tokens
Similar to Ethereum and other L1 blockchains, many tokens on Solana can be traded on centralized exchanges or swapped on a decentralized exchange (DEX) such as Raydium or Orca. Coinpanda fully supports all Solana protocols and automatically imports and identifies all tokens without requiring manual corrections. This includes both tokens sent and received and token swaps on decentralized exchanges.
As seen in the image below, Coinpanda will always import transaction fees separately, which can be viewed directly on the Transactions page. This gives you an accurate overview of how much SOL or tokens were involved in a swap, including the total fees paid for the transaction.
One important feature that separates Solana from other blockchains is Token Accounts, which are used to track and manage ownership of all existing tokens. In simple terms, each token you own has an associated token account that designates your wallet (address) as the owner, giving you the authority to send or transfer the tokens held in the token account.
Although this is not something you need to be aware of when transferring or swapping tokens, it does explain why you will sometimes see an outgoing SOL transfer associated with the same transaction hash from a token swap in your Coinpanda account. This happens because creating token accounts on Solana incurs a fee called “rent” which can be reclaimed when the token account is closed in the future.
The transaction shown in the image below is an example of creating a new token account when this wallet bought Simon’s Cat (CAT
) meme token for the first time. In this example, the token account rent is 0.00203928 SOL
, and is imported as a separate Send transaction to ensure the USDC and CAT tokens swapped are imported as a single Trade transaction for accurate cost basis tracking.
In the Transaction Details tab, you can also see that it says “Contract Function: createAccount
” which tells you that the transaction is related to creating a new token account controlled by your wallet.
Solana NFTs
Different non-fungible token (NFT) marketplaces allow users to place bids and offers for NFTs in the Solana ecosystem, some of the most well-known of which are MagicEden, OpenSea, Solanart, and Tensor. Transactions with NFTs on Solana can sometimes be confusing, so let’s dive more into a few examples.
The most common way to acquire an NFT is to create a new token account when you buy an NFT from a marketplace, similar to creating a token account when purchasing a token for the first time. Using a Solana block explorer, such as Solscan, you can see the balance breakdown before and after the transaction on the “Token Balance Change” tab:
In this example, the wallet address (FrJ...YEK
) has bought an NFT (SolDough #573
) on Magic Eden and created a new token account (Hy3...Tru
) that holds the NFT. This can be seen clearly from the balance change tab:
- Balance Before:
0
- Balance After:
1
This transaction will be imported as a Trade + fee transaction to Coinpanda, as seen below:
Another way to acquire NFTs is to change the account owner of the token account that holds the NFT. In such cases, there is no NFT transfer from account A to account B, as in the previous example, which is also reflected on the Token Balance Change tab on Solscan:
Whenever you acquire an NFT by transferring the ownership rights, there will be a description “NFT ownership transfer” shown on the Transactions page, as seen in the image below.
Depending on the NFT marketplace, you may also see the same description, “NFT ownership transfer,” when listing an NFT for sale. Listing NFTs for sale on Solana usually means transferring the NFT to another address controlled by the marketplace or changing the token account ownership. In the latter case, you may see 1-2 transactions on the Transactions page, similar to the image below.
Coinpanda will fetch the NFT metadata during import and display the NFT image on the Transactions page. This makes it easy to track and verify all transactions imported, and you can also see a free preview of the capital gains for every NFT transaction without upgrading your Coinpanda tax plan.
If you have received an NFT from an airdrop or a free mint, the market value and cost basis will be zero since there are no official prices for NFTs except for the prior trading history. The same applies to NFTs sent – the value displayed will be zero. If a Send transaction is a disposal or otherwise a taxable event, you should change the value manually so that the resulting capital gains will be calculated correctly.
How to fix issues with NFTs not identified correctly
Unfortunately, there are some limitations with the current Solana API, making it challenging to identify which tokens are NFTs. This means you might see an NFT not labeled correctly, or vice versa, regular tokens labeled as NFTs.
However, this can easily be fixed by reporting the issue to Coinpanda customer support, who will update this internally in our system. When updated, you must re-import your transactions from API so that the tokens can be identified and tracked correctly. Please follow these steps to report such issues most effectively:
- Go to the Solana token topic in the Coinpanda forum
- Reply to the topic and include both the token address and a link to Solscan
Our support staff will then look into the specific token, make the necessary adjustments in our system, and report back when the update is completed.
Solana LP tokens
In addition to token swaps, the latest Solana API integration supports add/remove liquidity operations across 22 DeFi protocols. This means LP tokens from any protocol will be automatically identified and tagged as such and can be reviewed by selecting “Liquidity” in the Label filter on the Transactions page.
The image below shows typical liquidity operations where Solana (SOL
) and Wrapped Sollet Bitcoin (SOBTC
) were deposited into a liquidity pool in two transactions (January 6 and 13) before withdrawing the liquidity on March 3.
As seen in the image above, Coinpanda will automatically track the cost basis of LP tokens. This includes single-sided liquidity and when two or more tokens have been deposited to a liquidity pool.
Jupiter limit orders
Limit orders on Jupiter are fully supported, and Coinpanda will import each limit trade individually rather than separate Send/Receive transactions as recorded on the blockchain.
To view all limit order transactions, use the ‘Description’ filter and select ‘Jupiter limit order’.
The transaction details section will also show the transaction hash associated with the outgoing and incoming limit order transfers:
- TxHash: limit order fill(s)
- Associated TxHash: the limit order creation
Canceled limit orders are also fully supported. Coinpanda will not import the outgoing and later incoming token transfer related to the order to ensure accurate cost basis tracking and avoid realizing gains on canceled orders.
NB! Open limit orders are not supported due to limitations with the Jupiter API. If you have open limit orders, you must delete the opening transaction and re-sync your wallet when the order is filled or canceled.
Limitations
Due to different limitations with the Solana APIs, it may happen in rare cases that some transactions cannot be imported accurately or will be imported differently than you would expect. Let’s explore a few of these cases.
Perpetuals and futures
Perpetual trading on Jupiter and other platforms is currently not supported. However, we may add proper support for this in the future if it is possible to track such transactions accurately from a different API.
If you have traded futures on-chain, we recommend tagging any related transactions manually for now.
Complex multi-action transactions
Multi-action transactions with some protocols may not always be imported as expected. Let’s look at the transaction shown in the image below, which can be summarized as follows:
- Tx1: Swap
143.578527841 SOL --> 125.926664258 JITOSOL
via Jupiter - Tx2: Deposit
261.484423745 SOL + 125.926664257 JITOSOL
to a liquidity pool on Kamino - Tx3: Stake
149,291,426.644375 kSOL-JSOL
LP tokens on Kamino
If we go to the Token Balance Change tab, we can see the following:
The net token inflow and outflow is as follows:
- kSOL-JSOL:
0
- JITOSOL:
+0.000000001
- SOL:
-405.073954003
(from “SOL Balance Change”)
The image below shows how this transaction will be imported to Coinpanda. You will see that the imported transaction is identical to the net balance change of each token involved rather than each transaction action separately.
Although this may not be what is expected, it’s strictly not “wrong” either since what matters is the balance change of each token. The net acquired JITOSOL in this transaction (+0.000000001
) will take on an (artificial) high cost-basis value, but when all tokens are disposed of in the future, the net resulting gain/loss won’t be affected.
If you want or need to split multi-action transactions like this into separate transaction actions, the best and only solution is to tag the imported transaction(s) as “Ignored” and import manual transactions using the Generic file template. This is sometimes a necessary step for making manual adjustments and should only take a few minutes.
In the example discussed above, the transaction actions can be added this way to the generic file:
After uploading this file to the Solana wallet, you must mark the already imported transaction from API as “Ignored”. Filtering for the transaction hash, you will see the following transactions:
Please note that at the current time, it’s not possible to tag or merge LP token transactions, so the LP token (KSOL-JSOL
) transactions can only be imported separately, as shown in the image above. We will add support for tag and merge LP transactions in a future update, with the current ETA in early 2025.
Missing market prices
Because of the large number of new tokens created on Solana each day, price aggregator sites such as CoinGecko and CoinMarketCap cannot track the prices of all tokens. Due to this, you might see a Missing Market Price warning for some transactions. This means that Coinpanda does not recognize the token or that no price data exists on this date.
However, in some cases, we can add support for tokens not listed on CoinGecko or CoinMarketCap. One example is shown in the image below for Swim Hexapool LP (swimUSD
), which is pegged to USD.
Adding support so Coinpanda can price this token will require a few manual updates on our side, and the quickest way to send a request is through the chat or in the Missing Currencies section in the forum.
After we have added support for this token, you will see that Coinpanda is now able to price SWIMUSD:
Although not a direct limitation or issue, you must either edit the value manually or ignore the warning and leave the value as zero to avoid showing this warning if we cannot add support for any token.
Ensure accurate tax reports
Here are the most critical steps you must take to ensure your Solana tax reports are as accurate as possible:
Connect all exchanges and wallets
The most critical step is to make sure you have connected all your exchange accounts and wallet addresses to Coinpanda. This is a crucial step for several reasons, the main reason being that Coinpanda needs your transactions from all exchanges and wallets to identify internal transfers and track the cost basis correctly. Coinpanda cannot correctly identify transactions sent between your accounts and which are taxable disposals without all transactions imported.
Verify the wallet balances
After connecting your wallets to Coinpanda, we recommend verifying the wallet balance of all your Solana wallets. This can be done directly from the Wallet page, where you will see a yellow icon if the calculated balance differs from the reported balance. If you don’t see any warning icon, the wallet balance matches, and all transactions have most likely been imported correctly.
Internal transfers
By default, all Send transactions not identified as internal transfers will be treated as disposals and realize the gains or losses. After connecting all your exchange accounts and wallets, you should ensure that all transactions between your wallets are identified as such. There are several ways to do this, but one way is to filter for Receive or Send to see only the transactions not recognized as internal transfers. Next, you can either mark the transaction as an internal transfer, or you need to connect another wallet or exchange account if you forgot this earlier.
Token and NFT values
The last crucial step is to verify that all tokens and NFTs are valued correctly to avoid paying more taxes than required when the assets are disposed of in the future. As mentioned, many Solana tokens don’t have official market rates, so you might need to update the value manually. This can be done on the Transactions page by clicking the Value box and entering the token value on the day of the transaction.
Try Coinpanda for free
Coinpanda is one of very few crypto tax software solutions that can do tax calculations for the Solana ecosystem correctly today. All you need to do is add your Solana wallet address to your Coinpanda account, wait for all transactions to be imported automatically, and verify that tokens and NFTs are tracked and identified correctly.
You can sign up for a 100% free account or read more about how the software can help you report your crypto taxes. Coinpanda supports over 65 countries today, including the US, Canada, Australia, the UK, and almost all other European countries.