Bitcoin is divisible down to the eighth decimal place. These subunits are called “satoshis” or just “sats.” One satoshi is 0.00000001 btc. Unfortunately this is impossible to read for small sat values. And as time goes on, we all expect bitcoin to keep appreciating to the point where smaller sat-denominated transactions will become the norm. So I’m generally on team #SatsTheStandard; instead of 0.00001042 btc, we can instead display:
1,042 sats
But for large amounts we have the opposite problem. Imagine setting up a transaction for 615,395,023 sats! At a quick glance, did I just type in 61 btc, 6.15 btc or 0.61 btc? I really don’t want to be off by a factor of ten here! If I slow down and concentrate a bit and remember that 1 btc is 100,000,000 sats, carry the decimal place, and… ah, 6.15 btc! But even that little bit of extra effort is disconcerting to have to expend when I’m moving this much value. No good.
If you’re a wholecoiner (i.e., you hold at least one full bitcoin in value) or close to it, you have the same readability problem when reviewing your total balance.
But all bitcoin wallets I’ve seen force you to decide on one denomination or the other, no matter how ill-suited either might be in certain cases.
Btc-Sats Hybrid To The Rescue!
I propose a display compromise:
₿6.15 | 395,023 sats
The first two digits after the decimal point still have so much value that they should stay on the btc-denominated side. The remaining six digits of sat value will cover the typical range of day-to-day, sat-denominated amounts that we’ll get used to seeing in our future hyperbitcoinized lives.
No information is thrown away. The large btc-denominated side would always use two decimal places like we’re all already accustomed to with our local fiat currencies. And on the sats-denominated side, a hundred thousand sats is visually very easy to discern from a thousand sats or a few hundred sats.
Simple. Easy to read. Elegant, even.
That divider is the “vertical bar” character or “pipe” in programmer-speak. Look just above your return key. It’s part of the standard ASCII character set. It’s not exotic. It’s already on your keyboard and on your phone. Your Coldcard can already display it. And, as in the mockup above, it can be colored for added effect. Programmers will gripe that the pipe character already has special meaning in code, but this ain’t code, nerds!
Whether the ₿ symbol should come before or after the amount is debatable, but I think having it in front offers the best clarity and it immediately conveys what the upcoming numbers mean. If the font being used can’t display the ₿ symbol, we can fall back to “btc:”
6.15 btc | 395,023 sats
If the sat-denominated side is less than 100,000, there’s no reason to display leading zeros:
₿6.15 | 4,820 sats
₿6.15 | 74 sats
When the total amount is less than 10 million sats, the btc-denominated side can be eliminated entirely:
4,820 sats
Though critical sticklers may prefer explicitly seeing the zeroed-out btc-denominated side:
₿0.00 | 4,820 sats
All good.
If space is at an absolute premium, the “sats” can be dropped but the space should be preserved before and after the pipe character (otherwise it’s too hard to distinguish it from a one):
₿6.15 | 395,023
Localization
There are at least 80 infuriating countries that swap their periods and commas. A Big Mac in Germany is 5,16 € (the space between the amount and the symbol is annoying, too). Really, Eurozone? Fine. I don’t love it but the btc-sats hybrid display can accommodate decimal dividers the way they’re used to seeing them:
₿6,15 | 395.023 sats
For all non-Michael Saylor transactions, we’ll only see one comma and one period in this display format. So the locale-specific confusion will be pretty limited. And if I’m being honest, I’m not even that mad about how this looks since the left-right division provided by the pipe character is doing so much heavy lifting; my eye barely registers that the comma and period are swapped.
And if they really need to move the ₿ symbol and add an unnecessary space, okay:
6,15 ₿ | 395.023 sats
Have at it, Europe.
The Japanese counting system naturally lends itself to four-digit separators. This is obviously a huge mess. But, if they so choose, they can group the sats-denominated side that way with minimal confusion for the rest of the world:
₿6.15 | 39,5023 sats
Data Input Considerations
So when we type in our transaction amount, the first six digits could first fill the sat-denominated side:
6 sats
61 sats
615 sats
6,153 sats
61,539 sats
615,395 sats
₿0.06 | 153,950 sats
This last row that suddenly bumps out to the btc-denominated side is our “oh shit!” moment if we’ve mistyped our amount. It’s screaming: “Yo, at this amount — 0.01 or more of a bitcoin — start paying super-close attention!”
Or perhaps more likely, UI implementations can explicitly separate the two sides, like the way a web form isolates birth day, month and year. So you can confidently start typing the large bitcoin-denominated side:
₿__ | __ sats
₿6.15 | __ sats
And then subsequent digit entries automatically jump to the other side:
₿6.15 | 3 sats
₿6.15 | 39 sats
₿6.15 | 395 sats
₿6.15 | 3,950 sats
₿6.15 | 39,502 sats
₿6.15 | 395,023 sats
Other Approaches
Now, of course, there have been other suggestions. Bitcoin Magazine recently published the “Satcomma Standard” which adds three-decimal groupings on the sats side:
₿6.15,395,023
The comma at a million satoshis here essentially serves the same purpose as my pipe character. And satcomma has the advantage of helping people see that 99,999,999 sats will round up to 1 bitcoin. But for my eyes there’s just too much crammed together here. And math teachers will just straight up refuse to teach students to read denominated values this way. It also keeps the localization bugaboo alive and well:
6,15.395.023 ₿
As a tech nerd that looks to me like an invalid IP address.
Others have argued for just using a space to separate the four digits on the sats side:
₿6.1539 5023
Or to use spaces in lieu of the satcomma’s commas:
These approaches are dead on arrival as far as I’m concerned. It orphans and unanchors those digit groupings. There’s a reason why phone numbers (867-5309) link their groups.
Another approach that I do support is just to set a display threshold. Above, say, 0.01 btc, show the amount in btc terms. Below the threshold, show it as sats. And let the user set their own threshold. I still don’t like seeing all eight digits after the decimal point in a pure btc-denominated display but this dynamic threshold-based approach is still an improvement over a btc-only or sats-only global setting.
Are We Go For Launch?
I contribute code to the awesome Specter Desktop open source multisig wallet project as well as to the world’s coolest little open-source hardware wallet, SeedSigner. If there’s enough enthusiasm, I’ll write PRs (“pull requests” — proposed changes to the code) to each project to include the btc-sats hybrid as an optional display setting.
So what do you think? Are you on team #BtcSatsHybrid?
Tweet your thoughts, reference the hashtag and tag me @KeithMukai.
This is a guest post by Keith Mukai. Opinions expressed are entirely their own and do not necessarily reflect those of BTC, Inc. or Bitcoin Magazine.