Ok, I've successfully transferred my .000047 BTC to my other wallet using the Bitcoin Core client. Aussie's information was pretty much critical to me figuring out how to do it. Basically, I sent myself a significant amount of bitcoins, waited a couple days, then transferred everything back to my other wallet.
Because it requires the use of sending bitcoins there first, and transferring those bitcoins to another wallet, it will only work if you're sending bitcoins to yourself. But you could use this technique to basically aggregate bitcoins into one transaction, which can then be used to send small amounts of bitcoins to someone else. Here's the method:
- Decide how in-a-rush you are - how many days you want to wait to be able to transfer the money.
- Calculate how many bitcoins it would take to make your transaction reach a priority above 57,600,000 in that amount of time
- Send that many bitcoins to the wallet with a very small amount of BTC
- Wait the number of days you decided in step 1
- Send the bitcoins where ever you want with no fee!
The bitcoin wiki page on Transaction Fees describes how to calculate the priority of a transaction. Here's my embellishment to that:
- priority = sum(inputValue_t * inputAge_t)/sizeInBytes
- inputValue_t = numberOfBitcoins_t*100'000'000
- sizeInBytes = 78+148*numberOfTransactions
- sum is the sum over all the transaction inputs.
- _t indicates the value is for a particular transaction in the sum
- inputValue_t is the amount of bitcoin in base units in a given transaction to one of your wallets
- inputAge_t is the number of confirmations that transaction input has undergone
- numberOfBitcoins_t is the raw number of bitcoins of a transaction input (this can be seen if you enable Coin Control Features and click on the "Inputs" button in the Send view of Bitcoin Core)
- sizeInBytes is the number of bytes the whole new outgoing transaction takes up.
- numberOfTransactions is the number of transactions in the sum
So that priority that you calculate must be greater than 57.6 million in order to send without a fee. So if you have a small number of bitcoins stuck somewhere, you need to add a new larger transaction that can pull them out essentially.
Calcuating how many new bitcoins you need
Here's a simplified equation solved for that new larger transaction's amount of bitcoins:
- newTransaction = (.576 * (78 + 148*numberOfTransactions) - sum(inputBitcoins_t * inputAge_t)) / (144 * days)
- numberOfTransactions is the number of old transactions you have plus 1 (the new transaction you'll need)
- inputBitcoins_t is the number of bitcoins (not "base units" - just the raw number of bitcoins)
- inputAge_t is the number of confirmations of each old transaction
- days is the number of days you're willing to wait
There's a confirmation about once every 10 minutes, which adds up to 144 confirmations per day. and .576 comes from 57.6 million divided by the ratio of base units to raw bitcoins (100 million)
Lets say you have the following two inputs
- .00004 bitcions with 400 confirmations
- .00001 bitcoins with 95000 confirmations
The priority is slightly less than 2500000 ~= (.00004*400+.0001*95000)*100*1000*1000/(78+148*2)
The number of new bitcoins you would need to send the transaction in 2 days is slightly less than 1.011 bitcoins ~= (.576*(78+148*3) - (.00004*400+.0001*95000))/(144*2)