Smallest Units and Currency splits

If the price of BCH rises, are there ways to move the decimal to the right?

If a $1000 stock has a 10 for 1 split, the result is that each holder of one share gets 10, and the price drops to $100. This has a psychological effect, are there plans to accommodate such flexibility with BCH?

Some wallets already enable you to change display unit to mBCH which is 1/1000th of a BCH. Is there any precedent for a currency changing its base unit?

As a side note, consider that a relevant part of the transaction’s information you see in block explorers and wallets is just manufacture provided by such services seeking usability. Most of these high-level constructs do not exist in the Bitcoin Cash system per se.

If you have the chance to open and explore a raw transaction, you will see there is no such thing as decimals, not even Bitcoin Cash (BCH) as a unit neither mBCH nor μBCH. Raw transactions treat satoshis (1 BCH = 100000000 sat) in hexadecimal format encoded in little-endian, and that’s what populates the blockchain, actually.

Here an example with a recent transaction:
txid 006e23ce6539fd51d9e200e0c0bd0b30ba77a2f47f5ca85bbd93e5a1ebcf0c00.

At the time of creation this transaction had two UTXOs as you can see in any block explorer:

0.00000623 BCH
0.06303000 BCH

And here the raw transaction:

0200000001401e6fee209d9bd13feaf5cc623d4b843144b8a2c97e3813d5c5e6822fe82673010000006441dc360a75091d745c2acd33769a0a42435dfe08ff21093f88137ed05bf95a1ac5a2420d4ef8eab45e485c6d373e67f268e1fd5a5860d97ee7aadadfd6fc18a36a412102dccbb92bb368ecbdf613e51db44c98a81207caa38b5038a249233ef24275bdaf00000000026f020000000000001976a91408cc40f2195bee37e46b4fdce217eeda856ae47488ac182d6000000000001976a91468acbfeb68e88cdb64dc5ed15e5677cd6532018588ac00000000

By decoding it, you will get:

{
    "addresses": [
        "1oX6L9VceZHJFFr9mxAdLZwu26hE6peNZ",
        "1AYUDovLXFRWea5dzxjKd5JMzugMG6QoUq"
    ],
    "block_height": -1,
    "block_index": -1,
    "confirmations": 0,
    "double_spend": false,
    "fees": 0,
    "hash": "006e23ce6539fd51d9e200e0c0bd0b30ba77a2f47f5ca85bbd93e5a1ebcf0c00",
    "inputs": [
        {
            "age": 0,
            "output_index": 1,
            "prev_hash": "7326e82f82e6c5d513387ec9a2b84431844b3d62ccf5ea3fd19b9d20ee6f1e40",
            "script": "41dc360a75091d745c2acd33769a0a42435dfe08ff21093f88137ed05bf95a1ac5a2420d4ef8eab45e485c6d373e67f268e1fd5a5860d97ee7aadadfd6fc18a36a412102dccbb92bb368ecbdf613e51db44c98a81207caa38b5038a249233ef24275bdaf",
            "script_type": "empty",
            "sequence": 0
        }
    ],
    "opt_in_rbf": true,
    "outputs": [
        {
            "addresses": [
                "1oX6L9VceZHJFFr9mxAdLZwu26hE6peNZ"
            ],
            "script": "76a91408cc40f2195bee37e46b4fdce217eeda856ae47488ac",
            "script_type": "pay-to-pubkey-hash",
            "value": 623
        },
        {
            "addresses": [
                "1AYUDovLXFRWea5dzxjKd5JMzugMG6QoUq"
            ],
            "script": "76a91468acbfeb68e88cdb64dc5ed15e5677cd6532018588ac",
            "script_type": "pay-to-pubkey-hash",
            "value": 6303000
        }
    ],
    "preference": "low",
    "received": "2021-04-19T12:18:07.662753609Z",
    "relayed_by": "54.165.191.35",
    "size": 219,
    "total": 6303623,
    "ver": 2,
    "vin_sz": 1,
    "vout_sz": 2,
    "vsize": 219
}

And here comes the tricky part because this will depend on which decoder you use, as each of them presents different levels of abstraction. Some decoders convert satoshis to BCH at this point; some don’t. But the important thing for the case is that in the previous example, you should see two “values”:

"value": 623

and

"value": 6303000

Not 0.00000623 and 0.06303000.

Just to check that, let’s convert those values to hexadecimal little-endian. Here the converter I’m using.

623 becomes 6f02
6303000 becomes 182d60

Now, let’s explore the raw transaction to see if we can find those values:

0200000001401e6fee209d9bd13feaf5cc623d4b843144b8a2c97e3813d5c5e6822fe82673010000006441dc360a75091d745c2acd33769a0a42435dfe08ff21093f88137ed05bf95a1ac5a2420d4ef8eab45e485c6d373e67f268e1fd5a5860d97ee7aadadfd6fc18a36a412102dccbb92bb368ecbdf613e51db44c98a81207caa38b5038a249233ef24275bdaf00000000026f020000000000001976a91408cc40f2195bee37e46b4fdce217eeda856ae47488ac182d6000000000001976a91468acbfeb68e88cdb64dc5ed15e5677cd6532018588ac00000000

Effectively they are (in bold) part of the transaction, and we can confirm that raw transactions use satoshis as the unit of account.

So, in short, the smallest and de facto genuine unit at the protocol level is satoshi.

Yes, there are some discussions around making fractional satoshis… But that is a road that is still under analysis, evaluation, and heated debates, if I may… so I would let that rest as I don’t want to open pandora’s box at this time.

Bitcoin Cash unit is just an abstraction to make the coin more usable during the adoption phase. What really matters at ledger level is satoshis, and you (or service providers) can represent them in the way you (they) like best.

Considering the psychological effect makes total sense to me. But I don’t see how (maybe due to my limitations) to apply stocks’ split mechanism to Bitcoin Cash. Neither I know any similar case applied to currency.

As adoption rise, we will probably find new denominations (constructs) that fit our needs. There are several discussions here and there that you can easily find, but again, they are just different abstractions of the same thing. No split (stock’s mechanism) is needed.

1 Like