Proposal: The "Bitcoin Votechain" - Summary
We can implement a separate "
Bitcoin Votechain" as a simple program allowing investors to offline-sign and online-broadcast votes, saying:
-
Bitcoin voting address 1V.... (controlling eg 99.9999 bitcoins) hereby votes in favor of proposed Rule R (eg: "max blocksize" = 2 MB)
This would provide the desired "signalling mechanism" whereby Bitcoin's economic majority can express their wishes regarding a proposed rule-change (eg, for bigger blocks).
Existing cryptocurrency code (probably something supporting proof-of-stake) could be adapted to implement this sort of
"Bitcoin Votechain" - totally separate from the Bitcoin network.
Privacy could be guaranteed by implementing a new
"Bitcoin public voting address / key" - similar to Bitcoin's existing (transactional) voting address / keys - ie, computed via a one-way function such as a hash.
This new "
Bitcoin Votechain" could also support offline storage with offline vote-signing followed by online vote-(broad)casting - similar to the way existing software like Armory or Electrum already does, and sites like blockchain.info/pushtx also do. And it should also work behind Tor or VPN, so people don't have to reveal their geographic location.
---
Detailed proposal:
Right now, we can already implement an approach which would satisfy the broadest range of stakeholders' suggestions on resolving the ongoing "blocksize debate", ranging from the exchange-based "fork futures" as proposed by
@Zangelbert Bingledack, to the bitcoinocracy-style voting sites as proposed by
@awemany - and also the preference for "pre-signalling consensus without forcing things on people" expressed by users such as
@jonny1000.
We've had a robust (raging?) debate for several years now on a simple proposed rule change: max blocksize = 2 MB.
And recently, we had the spectacle of Craig Wright, which reminded us of the principle of "cryptographically sign a message or it didn't happen."
Let's combine the two!
It is easily within our power to develop a kind of minimalist, simplistic, separate mini-program providing a "Bitcoin stakeholder voting mechanism" or
"Bitcoin Votechain" which would allow the economic majority to securely, privately, and verifiably express their wishes regarding any proposed rule changes to Bitcoin.
Related work:
Tezos - In a sense, a
"Bitcoin Votechain" would implement the first baby-steps towards the "meta upgrades" feature which was proposed in the Tezos white paper & position paper, mentioned in my comments yesterday - while avoiding writing a whole lot of new code like Tezos, avoiding doing a spinoff and avoiding impacting the existing Bitcoin network.
https://bitco.in/forum/threads/gold-collapsing-bitcoin-up.16/page-644#post-22726
https://bitco.in/forum/threads/gold-collapsing-bitcoin-up.16/page-644#post-22727
Bitcoin Unlimited - Bitcoin Unlimited already provides a very useful "signalling mechanism" where a node can publicly broadcast its preference regarding acceptable blocksizes.
This new proposal for a
"Bitcoin Votechain" would be different from BU, because:
- This would not involve running a "transacting/verifying node" - instead, a user would only run a "voting node" - possibly only for very short periods (only the time required to broadcast their vote).
- Alternatively, a voter could run
no node at all: they could offline-sign their vote (using this new "Bitcoin Votechain" client software in offline mode), and then upload their pre-signed "raw (signed) vote" to new sites like blockchian.info/pushvote - which would be similar to existing sites like blockchain.info/pushtx.
- The
"Bitcoin Votechain" would use its own network, mempool, and "votechain" - to avoid impacting anything in the existing Bitcoin system.
- Perhaps more importantly, a node or message broacast on the the
"Bitcoin Votechain" would not merely be saying "this
node supports max blocksize of eg 2 MB".
- Instead, it would be saying "this
address, holding 99.999 coins, votes for max blocksize of eg 2 MB".
Thus, the
"Bitcoin Votechain" would be able to express the desires of the economic majority - a feature which Satoshi intended in his whitepaper (which has since become obscured by the tendency of voting and validating nodes to be separate, as well as the tendency of the majority of big investors to keep their bitcoins offline in cold storage).
How would such a "Bitcoin Votechain" work?
A "Bitcoin Votechain" would allow every hodler (investor) to vote on rule changes...
- at their leisure (during a convenient, prolonged voting period, of perhaps weeks or months)
- and fully offline (without revealing their private keys - only revealing their public addresses, or perhaps only revealing some sort of new, special-purpose obfuscated "Bitcoin public voting addresses", similar to existing "Bitcoin public (transacting) addresses" - ie, hashed)
People would be able to offline-sign and online-broadcast cryptographically signed messages saying:
-
I control address such-and-such (which controls x number of coins) and I hereby vote for blocksize such-and-such.
That's it.
Data structures
Regarding the data structures which would be involved here: I imagine that instead of the usual "transaction mempool" (a global "soup" of pending transactions) plus a "blockchain" (a list of transactions, showing coins going from one address to another), we would (in this case involving
voting instead of
transacting) probably want a similar but separate "vote mempool" - and instead of appending "transactions" to Bitcoin's usual "blockchain" we would be appending "votes" to a separate "votechain".
Of course, the semantics of the "votechain" would be slightly different - actually a bit simpler than Bitcoin's normal "blockchain".
- A transaction in a (transaction-)block appended to Bitcoin's normal "blockchain" spends coins from public address A to public address B.
- A vote in a (vote-)block appended to this new "votechain" would not
move any coins from Address A to B. It would merely "signal" that:
"Public voting address V, which holds eg 99.999 coins, votes for new rule R, eg blocksize eg 2 MB".
We could further stipulate that any
later vote from the same "Bitcoin public voting address" would of course simply
override/overwrite any earlier vote(s) from that address, in the votechain.
Implementation approach
I think there are programmers who could easily implement this sort of thing (using familiar languages such as C/C++). A certain amount of existing proof-of-stake cryptocurrency code could easily be exploited and adapted.
Introduce a new "Bitcoin public voting key":
Privacy would be of the utmost importance, and could be provided as follows:
- A new sort of public key could be provided - in this case a
"Bitcoin public voting key / address" (say, with a special format like 1V...).
- Like Bitcoin's existing public (transacting) keys and addresses, a
"Bitcoin public voting key / address" would be computed using a special one-way function such as a hash, which would make it impossible to figure out a person's other Bitcoin keys (public or private transacting keys), based on knowing their
"Bitcoin public voting key / address".
- Traditional high-security approaches for offline/cold storage should be supported, so the voting program would have two "modes": offline and online (the way Armory and Electrum already do).
- As usual, Bitcoin private keys would only be kept on the offline machine, and the offline-signing of transactions would be done there.
- This would result in an offline-signed & online-broadcastable message (vote).
- The offline-signed & online-broadcastable message (vote) could then be transferred via "sneakernet" (eg, on removable media such as a USB drive), to an online machine, for broadcasting to the network.
- People who don't want to run a "Bitcoin voting" node online could still use the offline-signing / online-broadcasting approach: They could sign their votes on an offline machine running a "Bitcoin voting" node offline, and broadcast their votes from websites similar to blockchain.info/pushtx - ie, new sites could be created where anyone could input a previously offline-signed vote.
Note that all of the above would operate completely separate / parallel to the existing Bitcoin network, to avoid any disruptions. It would only be leveraging people's existing private keys - while keeping them offline.
But the new "Bitcoin public voting keys / addresses" and the "votechain" and the client software supporting this (as well as any sites such as blockchain.info/pushvote) would be
new.
Conclusion:
I hope I'm not being crazy here - I think this is simple enough to be doable.
I would be interested to hear how other people feel about this proposal for a separate, offline-signable, online-broadcastable approach based on a new
Bitcoin votechain - to reflect the wishes of the economic majority.
The goal is to be convenient and secure enough, and "leisurely" enough (ie, have long-running elections), to incentivize long-term hodlers/investors to occasionally dust off their existing Bitcoin private keys to offline-sign and online-broadcast "votes" using their new "Bitcoin public voting keys" on this proposed new, separate
Bitcoin votechain.