- [Prior Art & Alternatives](#prior-art-alternatives)
- [Implementations](#implementations)
- [Feedback & Reviews](#feedback--reviews)
- [Acknowledgments](#acknowledgements)
- [Changelog](#changelog)
- [Copyright](#copyright)
</details>
## Summary
A method and approach to allow Bitcoin Cash transactions to have sub-satoshi's. In other words, more digits behind the separator.
## Deployment
This proposal requires multi-stage deployment for full nodes, wallets and likely all infrastructure.
## Motivation
The original design that Satoshi put in place has the famous 21 million bitcoin as a maximum amount that will ever be in circulation. The rollout of the system has been less than flawless and it is estimated that Satoshi themselves already burned a million bitcoin. The move from BTC to BCH has likely left a lot of coins dead and forgotten as well.
If we look forward a decade or more, the chance of the world population to reach 9 or even 10 billion humans is not impossible.
All in all, the amount of smallest-indivisible-units that each human would have access to may simply be too little to allow Bitcoin Cash to become a world currency.
## Benefits
The idea, as tested in economics and concepts like stock-splits, is that we simply multiply the amount of money stored in any users wallet. Or, maybe easier to understand. We add a couple of digits behind the comma. Instead of owning $100.00, you now own $100.0000. Which is, exactly the same amount. But with more zeros behind the separator.
The benefit is that as the value rises due to Bitcoin Cash absorbing more and more of the worlds economy, it becomes possible to start giving out sub-satoshi prices or payments. We can also split the money over more people than before. Essentially it allows us to keep growing whereas otherwise the system may hit a glass ceiling where it simply can't on-board more people.
### Multi-year approach
The nicest approach would be where we, overnight, change all the amounts of a person's wallet and multiply them by a factor. Lets assume 10 for now. Suddenly that person would not have 100 [units], but they would have 1000 [units] in their wallet. But at the same time the prices of anything they would buy is also multiplied by 10. Sound economic change.
The 'amount' field in a transaction is capable of expansion. We today use only 6 out of the 8 available bytes. So without any real changes to the transaction format we could simply change from one day to the next and it would work.
Except, naturally, in a decentralized system we need something a bit smarter. We can not change everything overnight. We need to do this in steps.
The simplest idea here is that we can use the transaction version. We can define that all transactions with version up until v2 have the current amount of 8 digits behind the separator. We then define that a transaction with version 3 will have all its values multiplied by 10. Which adds that extra zero behind the separator.
The effect of such an approach is what we want, a gradual changing of all of the value on-chain as people spend that money with v3 transactions. The only downside is that we can likely never drop support for the pre-v3 transaction-type.
We can take a multi-year approach to make the roll-out happen smoothly because it is not just full nodes but all sending and receiving wallets that need to support this in order for it to work.
What we can do:
1. We forbid the network from accepting transactions with versions higher than 2. (done in May 2023)
2. We introduce version 3 transactions. Making full nodes process them with their extra zeros behind the separator.
The full nodes, however, do NOT allow those extra digits to be anything but zero. This allows transparent conversion between v2 and v3, but also to allow it to go back lossless.
The point of this phase is to allow new wallets to build v3 transactions, but go back without loss to a v2 transaction if a receiver requests that.
3. Full nodes remove the restriction on usage of the new digits, we expect all wallets to support v3 by this point.
As pointed out, we can never move to stop supporting v2 transactions on full nodes as it is impossible to say if all stored money that may be used in future has been converted. Wallets, on the other hand, benefit from the decentralized world. Some wallets may support older transaction types, some may not and users just pick and choose. A wallet can simply stop supporting older transactions when their users no longer spend any v2 transactions.
The 'amount' field in a transaction is capable of expansion. It it an 8-byte number and after 33 halving we'd get 20 999 999.976 900 00 BCH. Or, in Satoshi, the same but without that dot. In absolute storage this is 6 bytes. Hex: 0xBEFE6F6399A8
So if we repeatedly multiply by 10, stopping when the total amount no longer fits in 8 bytes, we get to the following that is possible:
* An extra 3 digits behind the separator.
* The blockreward doesn't stop after 33 halvings, but after 42.
* The extra blockreward add a total of 0.02307 BCH to the entire supply.
The total amount is then 2099999999997060000, or in hexadecimal: 0x1d24b2dfac2523a0
Practically speaking there is no known case where the entire possible supply will ever be in a single transaction utxo, as such we could theoretically add even more zeros, but the author doesn't see that as needed and better safe than sorry.
## Implementations
This is a 'research' level document, the idea good enough to write down but its not really ready to be made into an actual proposal yet simply because the need for this is so far in the future.
## Feedback & Reviews
## Changelog
## Copyright
Copyright (C) 2023 Tom Zander
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.