Tonal Bitcoin

From Bitcoin Wiki
Revision as of 01:37, 22 March 2011 by Luke-jr (talk | contribs) (copy nicer formatting from Units)
Jump to navigation Jump to search

Please note, that all numbers of TBC and its divisions/multipliers are written in Tonal, not decimal. This means that instead of counting 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10-- you count: 0, 1, 2, 3, 4, 5, 6, 7, 8, , 9, , , , , , 10. Some higher-value digits may require installing a font.

Abbreviation Pronunciation Tonal (TBC) Decimal (BTC)
Tam-BitCoin 1,0000,0000      2,814,749.76710656
ᵇTBC Bong-BitCoin 1,0000      42.94967296
ᵐTBC Mill-BitCoin 1000      2.68435456
ˢTBC San-Bitcoin 100      0.16777216
ᵗTBC Ton-BitCoin 10      0.01048576
TBC BitCoin* 1      0.00065536
TBCᵗ BitCoin-ton 0.1    0.00004096
TBCˢ BitCoin-san 0.01   0.00000256
TBCᵐ BitCoin-mill 0.001  0.00000016
TBCᵇ BitCoin-bong 0.0001 0.00000001

* Tonal BitCoin and Decimal BitCoin can be differentiated by the pronunciation of the numbers. "One bitcoin", "two bitcoin", etc is decimal, but "an bitcoin", "de bitcoin" is tonal.

The total number of Tonal BitCoins ever (analogous to the 21mil BTC) is just over 7.75059 tam-bitcoin.

For more information on the Tonal system in general, please see the book.

Compatible Clients

While all BitCoin clients will correctly approximate values in decimal bitcoin, actual Tonal compatibility is sparse.

  • Spesmilo, despite its name, can be configured to display TBC

Guessing TBC or BTC

Given variable 'value' in base units (uBTCents/TBCᵇ), one can guess whether it is properly Decimal BitCoin or Tonal BitCoin with the following pseudo-code:

if ( ! ( this % 0x10000 ) )
	Choose Tonal BitCoin
if ( ! ( this % 1000000 ) )
	Choose Decimal BitCoin
if ( ! ( this % 0x100 ) )
	Choose Tonal BitCoin

Python

import math

def formatBTC(n, addSign = False):
	s = "%0.2f BTC" % (math.ceil(n * 100) / 100.,)
	if addSign and n >= 0:
		s = "+" + s
	return s

def Bitcoin2BTC(n):
	return n / 100000000.

toTonalDict = dict(((57, u'\ue9d9'), (65, u'\ue9da'), (66, u'\ue9db'), (67, u'\ue9dc'), (68, u'\ue9dd'), (69, u'\ue9de'), (70, u'\ue9df'), (97, u'\ue9da'), (98, u'\ue9db'), (99, u'\ue9dc'), (100, u'\ue9dd'), (101, u'\ue9de'), (102, u'\ue9df')))

def formatTBC(n, addSign = False):
	s = "%x" % n
	n %= 1
	if n:
		s += '.'
		while n:
			n *= 16
			s += "%x" % n
			n %= 1
	s = unicode(s).translate(toTonalDict)
	s += " TBC"
	if addSign and n >= 0:
		s = "+" + s
	return s

def Bitcoin2TBC(n):
	return n / 65536.

def formatBitcoin(n, addSign = False):
	if not n % 0x10000:
		return formatTBC(Bitcoin2TBC(n), addSign);
	if not n % 1000000:
		return formatBTC(Bitcoin2BTC(n), addSign);
	if not n % 0x100:
		return formatTBC(Bitcoin2TBC(n), addSign);
	s = "%d uBTCents" % (n,);
	if addSign and n > 0:
		s = "+" + s;
	return s;

Criticism

All irrational/emotional resistance to change, so far. (if you disagree, put a RATIONAL argument here)