The first part of this amusement park ride was published here last year, as Bitcoind : not quite ready for prime time. Let us delve further into the depths of braindamage and despair.
I. Bitcoin wallets consist of a list of private keys, which are hashed into Bitcoin addresses (these practically would be the respective public keys). All Bitcoins in existence now or ever to be created in the future strictly exist as balances allocated to such addresses by the consensus-building instrument known as the blockchain.
II. All bitcoin wallets contain at least one "account", which is a set of Bitcoin addresses such that an account can contain any number of addresses, but any one given address may belong to only one account. These accounts are arbitrarily created, except all wallets have by default an account named "". That's "empty string".i Further except that they can not be named "*". Because.
III. All bitcoin accounts have an associated balance, representing the total Bitcoin balance they hold...
IV. Except this balance is not in fact calculated as the sum of Bitcoin balances held in the associated addresses...
V. And can be arbitrarily set to any value you wish...
VI. Provided the sum of balances held by all accounts in a wallet doesn't exceed the total Bitcoin held by all the addresses in that wallet,
VII. Except wallet account balances can be negative, in which case you can indeed exceed the total Bitcoin held by all the addresses in that wallet, and this happens quite commonly without any particular exertions on the part of the user.
VIII. Meanwhile Bitcoin wallet accounts in no way influence any Bitcoin payments, in that when ordered to make a payment Bitcoin software still selects coins from the whole wallet according to its own rules, completely ignoring which account it was supposed to pay from,
IX. Except it will arbitrarily fail for absolutely no reason if said account nominally had a balance associated that's less than the declared payment, notwithstanding that a) the account balance is meaningless anyway and b) the payment process doesn't even look at accounts when selecting the addresses it's paying from. So basically this just works as an arbitrary failure mode for no reason, just a random error message in there for the case you were bored. Which, inasmuch as you're using Bitcoin for any purpose whatsoever, you most definitely will never be.
X. Labels are a different implementation of the same concept (if you can call it that). They equally do not work, and to quote :
gavinandresen commented September 16, 2013
bitcoind accounts and Bitcoin-Qt labels are not designed to be consistent with each other. Use one or the other, not both at the same time.
Diapolo commented September 16, 2013
Well it's at least intersting to have accounts, with names I never set by using Bitcoin-Qt, no? I have no clue about the concept of labels, just asking :).
laanwj commented October 21, 2013
No, they don't need to match. For historical purposes labels and accounts use the same underlying information in the database but in different ways. I guess that should be changed some day, but doing that and keeping backwards compatibility (neither losing your labels nor accounts) will at least require a lot of testing.
How do you like it ?
Ooooobviously, we don't need any specification here, because the specification is the code.
Welcome to the world of the Powerfully Retarded Rangers.