A cryptocurrency can undergo many different types of transformations / swaps. Here is how they are handled in Koinly:
When a token changes its symbol
Name and symbol changes are common in the crypto space so Koinly only maintains a single currency even if the names or symbols for a coin were changed. Ex. if a coin was previously called ABC and changed its symbol to XYZ then you might continue to see ABC in Koinly. You can report such cases to us and we will update the symbol to the new one.
Note that this does not affect your taxes as long as the new symbol is trading at the same price as the old one and did not rebase the quantity (i.e. go from 1 ABC to 100 XYZ). We will go over how rebased tokens are handled later on in this article.
When a token migrates to a new address (NOIA, OCEAN etc)
Koinly keeps track of a single token irrespective of its token address so when a token decides to migrate to a new address, you might see an airdrop of tokens equal to your balance of the old tokens. In Koinly this will result in you having twice as much of a token. Sometimes your old tokens might also get "burnt" so you see a withdrawal of your tokens as well.
Here's how to handle such cases:
Find and delete the Deposit (airdrop) transaction
Find and delete the Withdrawal (burn) transaction (if present)
This way your original cost basis for the coins will be tracked correctly.
Note: In some cases you might actually see the new tokens being deposited as a completely different currency, report this to us and we will merge the new currency back into the old one.
When a token migrates to the mainnet (EOS, TRX etc)
Most currencies start off as a token on the Ethereum blockchain and then transition to their own mainnets when they become popular. EOS and TRX are popular examples of these.
If you still see an old token lingering around in your ETH wallet then you should:
Add the public address for the mainnet wallet.
Find the first airdrop in this mainnet wallet and change it to a Transfer where the Sent side will be your ETH wallet.
This ensures that the cost basis for your tokens carries over to the new coins in your mainnet wallet and will also remove the excess tokens from your ETH wallet.
When a token swaps to a new ticker at 1:X ratio (VEN -> VET, LEND -> AAVE, NPXS -> PUNDIX etc)
In these cases you will normally only have a deposit transaction in your account equal to the new coins balance. Most exchanges don't create a "withdrawal" transaction to burn the old tokens, the old tokens simply disappear from your exchange account. However, because Koinly calculates balances from your transaction history, you will still see the old coins in your Koinly account.
Here's how to handle this:
Find the "airdrop" transaction for the new tokens
Change it to a Trade and set the "Sent" part to equal the old token and balance
This will turn it into a taxable trade. However, if you believe that this trade should not be taxable then you can tag it as a "Swap" which removes any gains from it and moves your cost basis from the old token into the new one.
When a token goes through a rebase (DOT, AMPL, REBASE etc)
For these cases you will need to add some manual transactions.
Create a manual withdrawal transaction for the total balance of this coin in your wallet (before the rebase) and mark this withdrawal as 'Lost' so that no gains are realized.
Create a manual deposit equal to the new quantity (after the rebase)
Edit the value of the deposit transaction to match the cost-basis displayed by Koinly on the withdrawal transaction.
Here's a more in-depth article which shows how this works with screenshots (this article is for ICO's but swaps are handled in the same way): https://help.koinly.io/en/articles/3732271-how-do-i-enter-ico-transactions
This will ensure that your cost-basis is tracked correctly after the rebase. This method works well for DOT rebases but for currencies like AMPL that undergo a rebase every day, this might become too time consuming. We are working on adding support for such elastic supply tokens.