Non-Custodial Wallet Accounting

(This post does not apply to custodial accounts where the user does not control the private key, like Coinbase. Any custodial account holder will probably have to resort to traditional FIFO treatment of their cryptocurrency sales because the transactions are into and out of the collective darkpool)

Mike Hearn’s Library Chooses Your Basis

When you use wallet software, you can choose your receiving address but you cannot choose what address you send crypto from. Your wallet software will select one or several receiving addresses using an algorithm, and send the crypto. The sending address is not visible in the interface during the transaction. (Some sophisticated users can use manual versions of wallet software and select it.)

Mike Hearn’s open source library gives users the ability to communicate with the blockchain. It has the preset sending address selection algorithm. The algorithm is designed to optimize the efficiency of the network (make it easier for miners) by selecting older crypto. Therefore, the default for software developed using Mike Hearn’s library is FIFO – first in, first out. This is frequently the worst tax result, because the first crypto acquired using that wallet are probably the cheapest crypto. Users typically prefer LIFO – last in, first out.

Tax law permits you to select which “lots” of assets you sell, and therefore to select which cost basis you want to apply to each transaction. In the future, hopefully, wallet software will run a “tax optimized” version of the sending address selection algorithm, which compromises between the miner’s FIFO preference and the user’s LIFO preference.

Obtaining Your Basis from the Software

Wallet software  may provide a CSV (comma separated values database) listing all the transactions conducted using the private keys held in the wallet. These can include transactions executed inside the wallet but also transactions executed using other software under the same private key. The CSV files contain several pieces of information, including the transaction identification number, the receiving address, and the date and time. However, it does not give information about the other half of the story: the sending address, and the date and time that address received the coins. That half of the information is important because it forms the most important part of this equation, the part that reduces the gain recognized:

Amount realized (fair market value or actual sale price) – Cost basis (fair market value upon receipt for products and services or actual purchase price) = Gain Recognized


Gain Recognized * Tax Rate = Tax Due

You cannot fill out Form 8949 to calculate your tax without both pieces of information. To get the sending address, which gives you the time and date you received the crypto so you can estimate its cost basis, you have to enter the transaction ID into a website like or and you can see the sending address that was automatically chosen. Then, you can derive the other information. Once you have the sending address and the date and time it received coins, and the receiving address and the date and time of your transaction, you apply a valuation method (typically – one exchange’s pricing and stick to it) and download the data about the cost basis and the amount realized. Then, you can generate Form 8949.

This additional work can and MUST be automated for heavy users. If wallet software provided the sending address, it could be automated much more easily. Please contact your wallet software provider, make a donation, and ask for them to add this data.

Please note: additional accounting advice regarding “pooling” strategies can be found in this post: Accounting for Cryptocurrency Gains.