TL;DR: Distributed solution to responsibly coordinate activation of soft forks and other updates in a "User Activated" manner. Distributed solution to propose BIPs and other updates.
=================================
Messaging Based on Locked Outputs
=================================
Message itself:
version, type, txid, Payload, Signature
Transaction:
- some amount locked for N blocks
- maybe some amount burned
- output requires same public key as used in message signature
Messages are 1:1 associated with a transaction in order to mitigate spam. Nodes can ignore a message if the tx is spent, tx already has a message associated, tx amount is lower than user specified threhold. tx amount could be locked for N blocks, or burned as more ways to filter spam. Messages can be trashed when their associated tx is spent. Relaying such messages can be optional... nodes who are interested in various types of messages can look for other nodes that support that type.
====================
Bitcoin Update Board
====================
= Purpose =
To provide a distributed place where different groups can see what other groups' status is on proposed updates to Bitcoin software. To enable entities in the Bitcoin ecosystem to responsibly activate updates.
= Background =
It is a complex task to roll out updates for any kind of networking software. Bitcoin is one of the most complex networking architectures. There are many different kinds of software in the bitcoin network: miners, relay nodes, exchanges, blockchian explorers, wallets... each running different versions of software that may even be implemented by entirely different development teams. Any update to Bitcoin software can negatively impact members of the network. In the worst case, a policy change can result in the bitcoin ledger being forked into two separate ledgers. To make things worse, there is no central authority for bitcoin software, and hence there is currently no good place to host update coordination information. BitcoinUpdateBoard creates a new distributed method of communication to coordinate updates to bitcoin software.
= General Description =
The end result of the BitcoinUpdateBoard proposal is to provide a more distributed and automated version of Bitcoin Core's SegWit adoption table located here: "
https://bitcoincore.org/en/segwit_adoption/". The system helps various distributed groups in coordinating when to release or activate an update.
No vote is involved. No activation is automatically triggered in all clients by some threshold being met. Instead, entities decide for themselves which updates/policy changes they want to adopt, and when. This can be done by choosing which software to run. Developers can either hard code activation dates, or create their own automated system that looks at the UpdateStatus messages to decide when to activate.
For communicated data structures, I propose:
- UpdateSpec: a bitcoin network message
- UpdateStatus: a bitcoin network message
- GetUpdateSpecList(MinBlockHeight, MinTxAmount)
- GetUpdateSpecList(MinBlockHeight, publicKey)
- GetUpdateStatusList(MinBlockHeight, UpdateSpec.GUID, MinTxAmount)
- GetUpdateStatusList(MinBlockHeight, UpdateSpec.GUID, publicKey)
- UpdateSpecList
- UpdateStatusList
- MemberFilter: json file with a list of public keys
UpdateSpec and UpdateStatus are Messaging Based on Locked Outputs
= UpdateSpec =
Payload: UUID, Resolved:yes/no, IsPolicyChange:yes/no, Name, VersionTag, ProposedActivationDate, SpecText
UpdateSpec messages create specifications for updates.
An UpdateSpec can be updated by submitting a new tx+UpdateSpec message with the same UUID. The VersionTag is for human readability. The "Resolved" field is used by the UpdateSpec owner to help clients filter resolved UpdateSpecs. ProposedActivationDate can be null.
= UpdateStatus =
Payload: UpdateSpec.txid, Accept: yes/no/undecided, ExpectedActivationPerparedDate, Prepared:yes/no, ActivatingDate, Activated:yes/no, CurrentSoftware:[{SoftwareName:"", SoftwareVerson:""}, ...], Comment
UpdateStatus messages communicate to others in the bitcoin network the intention of an entity in thier accepting, preparing, and activating an update.
An UpdateStatus can be updated by submitting a new tx+UpdateStatus message w/ the same UpdateSpec.txid. Dates can be null.
= MemberFilter =
{
Name : MemberFilterName,
Version : VersionTag,
Date: TheDate,
ShowMembers : [ Member:{}, ... ],
}
Member: { Name: "", Key: "", Role:"", Email:"", Website:"" } // Role: exchange, miner, developer, trader, other..
MemberFilter is a json file containing public keys of UpdateStatus messages that an entity considers interesting. In addition to filtering policy messages by tx amount... Clients can load a MemberFilter. Entities can publicly provide evidence of their public key. Entities can provide an (optionally signed) MemberFilter for the public to use. A MemberFilter is not communicated over the Bitcoin Node Network. Verification of identities is performed in the real world, off chain.
= User Interface Requirements =
- UI to create the new message/transaction types.
- UI to display a UpdateSpec, an its associated UpdateStatus message data.
- The wallet would need to somehow mark the transactions as Do Not Spend, or require users to create a separate wallet.
= Future work =
Once organizations start identifying themselves by Bitcoin's public keys, this provides an entirely new distributed system for confirming identity. Entities can find eachother through the bitcoin node network and establish fast, secure, reliable communication channels.
= Concluding Remarks =
This is an early draft. Comments welcomed!
Cheers,
Praxeology