Why addressing the complexity of blockchain democracy is crucial

Vladimir Zhuravlev
Waves Protocol
Published in
6 min readJul 10, 2020

Blockchains, including Waves Protocol, are in a state of continuous improvement and require specific governance solutions to suggest, vote and implement updates. Node updates on Waves happen regularly, and the suggested improvements are the result of proposals from Waves and its community developers. In this article, we will provide some insight into how we strive to achieve blockchain democracy and how we work towards protocol updates together with the community.

The development of the Waves node is a continuous process, and minor updates are published every two or three months. These updates contain features implementing new functionality in blockchain operation in order to improve the network, as well as upgrades that are addressing potential security implications.

One example of a necessary functionality needed through an upgrade, to protect the network against a DDOS attack, was the most recent major update (1.2). This was activated on the stagenet in April 2020 and contained the key feature, “adding failed transactions to the blockchain”. As a result of this new feature, if a transaction was added to the UTX pool but a miner didn’t validate it, it will still be added to a block with a “failed” status, and the sender will have to pay a transaction fee. However, in order for the nodes to be updated consensus must be reached.

How is the community currently contributing to the proposed blockchain updates?

As previously mentioned, not all upgrades are due to necessity. Quite often, updates are initiated by developers and the community in order to make certain processes more efficient, or to expand the realms of possibility for development on the particular blockchain.

One example of this would be adding the functionality, “support for non-fungible tokens (NFTs)”, in response to numerous requests for non-fungible tokens, made on our community chats. But before adding a new feature to the protocol, it was described in details in the proposal.

This functionality lowers fees on the issuance of a unique token (that cannot be reissued), and became a major step in raising the popularity of NFTs, and made projects such as Item Market, possible.

Furthermore, another example of a community-driven update is “continuation transactions”. In 2019 it was evident that limitations on the complexity of a smart contract script in the Ride language were an issue for developing decentralized apps (dApps).

Recently, the Neutrino developer team had to split dApp logic into 6 smart contracts because it was too large-scale for one smart contract. Thanks to Ilya Smagin’s proposal, in one of the upcoming node updates, it will become possible to create and call scripts of any complexity.

In open-source development, the community is key when it comes to upgrading the network. True to being a truly decentralised and democratic network, every Waves community member is welcome to propose a protocol update on the Waves official forum.

Once the proposal stage is wrapped up, the next step is the activation stage, where the community is a crucial mechanic yet again. The decision of whether an update will be activated or not is always made by the community, through a vote on the update activation protocol. Node owners have 10,000 blocks (this approximately takes one week) to vote for activation at a protocol level. If during that week, over 80% of miners support activation, the release is considered accepted.

Developing the protocol update

Following the vote, if the community decides to push a proposal through, upon the receipt of said proposal and community feedback, the team gets started on developing the upgrade.

The development process is transparent and every step can be observed by any community member in the Waves GitHub repository, and they can also make contributions in the “Issues” section.

Node app development is not always a smooth process and sometimes could lead to potential issues. While implementing node app updates, developers have to be very careful since, as a part of the core values of blockchain technology, update rollbacks are not permitted. The only possible method of cancelling a functionality developed through an upgrade is with additional code.

Additionally, a potential issue that could arise and must be factored in during the development process, is the support for retroactive compatibility of smart contracts. For instance, the current version of the node has to support the Ride programming language’s current and previous versions. Once a smart contract is added to the blockchain it stays there forever and has to be executed regardless of all subsequent protocol updates, so there is little room for error. Therefore, testing the software is also a major step in the process of upgrading a blockchain network, and this also has its pain points.

How is a network update released?

Once the proposal has been developed, it’s then time for the upgrade to be released in order to be voted upon and activated on the network. The responsibility for the activation process is shared between the team and the community and is organized as follows:

1. update activation on the stagenet

2. update debugging

3. voting by mainnet node owners

4. mainnet activation.

Waves, like almost all other blockchains, has a stagenet, where updates are initially activated and tested. In that network, the number of miners is relatively low, this helps speed up the testing and allows time to debug its components. Normally, the debugging process takes a few months, and once it is given a green light, the update is ready for a mainnet release. A Github release of an update is just the very first step towards actually changing the protocol.

The Voting Process

The heart of the democratic system is the voting process itself. On the tech side, it is straightforward. Every proposed feature has a designated number, which a node owner adds to the block, if they support the initiative. Subsequently, the node owner needs to update the node’s configuration and restart it.

Similarly, nodes that don’t support the feature don’t add its number to the block. Every 10,000 blocks, the protocol counts the number of blocks with the new feature number.

Meanwhile, users who don’t own nodes have two options:

  1. Running a node and voting (the voting power is equals to a generating balance of the node)
  2. Leasing their WAVES to voting node.

Probably, a good analogy is the US presidential elections, in which voters don’t cast ballots directly but choose Electoral College members. By leasing their tokens, WAVES holders can “vote” for nodes whose opinions on proposed features they share.

Sometimes, Waves nodes run a vote for their leasers. Those votes can be viewed as examples of good e-elections as they are anonymous and transparent, use blockchains for immutable storage and decentralized apps for fostering trust.

After the community went through the voting process and the activation of the upgrade, the update is fully activated after 10,000 blocks and its functionalities are live. This 10,000 block delay is necessary to allow authors of dApps to prepare for the update, if necessary.

The activation protocol is a democratic model in order to prevent one or few developers from changing the logic of the network: the voting process that the community and node owners contribute to is the only way to make changes to the Waves blockchain.

The dApp development process is also transparent and follows the same democratic process. Every community member takes part in defining the development of the protocol — by making proposals, voting for activation or contributing to the development.

So far, a situation where node owners have rejected an upgrade has not yet occurred. However, there have been cases where some releases were postponed, as miners believed the update should be released later.

Blockchain technology was created for transparency and to offer a system for people to build decentralized products that reflect the very democracy the technology stands for.

To have a better overview of the update and voting process, the Waves team developed a dashboard available on PyWaves portal in the “Activation” section. You can use it to get more details on the update activation process.

If you want to become part of the Waves community and help improve the network by putting forward a proposal, or would simply like to learn more during these processes, join the developer chat on Telegram! In addition, you can join the network by launching your own node, as well as contribute to its development in the GitHub repository.

--

--