Four and a half years ago, we launched the PKT blockchain. At the time it was unclear whether a bandwidth-hard proof of work algorithm was even possible, thankfully it worked and the project has been, at least from a technical perspective, fabulously successful.
However, there was one component which did not work as well as we had imagined, and that was the voting mechanism designed to control what is known as the Network Steward.
The PKT Network Steward is an address which automatically receives 20% of all PKT that is created when new blocks are mined. It’s purpose is to ensure that there would be funding for the necessary infrastructure upon which the community depends. By rule, the Network Steward was required to use the coins it received in 90 days or else those coins would be “burned” (becoming unusable forever). While the original Network Steward was configured as a multi-signature address with myself and four people who I knew to be of high moral character, good discernment, and technical excellence, it was not meant to stay that way forever.
It was intended that this Network Steward would eventually be replaced by different ones, who would vie for community support through the voting system. Unfortunately, limitations of the voting system prevented that from ever happening.
One might say that the voting system was built too hastily, but the reality is that building a proof-of-work algorithm from scratch and launching a blockchain around it is already a heavy burden to bear. Any mistake made anywhere could lead to the type of devastating bugs which crash the blockchain or create hidden loopholes in the mining algorithm, allowing one miner to seize control of the project.
However, the effort to “harden” the code against these disastrous bugs led to a deeper problem - the election system was so awkward that it was essentially unusable!
The original voting system
In an effort to make the vote counting code as simple as possible, I made it only use the UTXO set that exists in the blockchain code, and not create or manage any new database tables. But this meant a vote would have to be attached to each individual transaction. If you voted and then someone sent you more coins, you would have to re-send those coins to yourself in a new transaction with a vote attached.
Secondly, SegWit transaction outputs could not contain votes because SegWit outputs are required to have an exact format and the addition of vote metadata would make them invalid. This was not a concern at the launch of the project, as we didn’t use any SegWit addresses at that time. However, in mid-2020 the whole community transitioned to SegWit for the superior performance it offered, creating a new challenge: in order to vote, one would need a special address just for voting.
But by far the worst decision, and the one which undoubtedly doomed the voting system, was the requirement that 50% of all coins in existence must call for an election in order for one to trigger. At the beginning, the PKT community was very small and there were single individuals controlling significant parts of the coin supply. It seemed too risky to allow a change of Network Steward without overwhelming consensus that the current one was unfit. But as the community grew and the PKT coins became more and more distributed, what began as perhaps a prudent safety mechanism morphed into an insurmountable barrier.
In retrospect this should have been blatantly obvious, of course a fixed % of the coins would become more difficult to amass as the project matures. But hindsight is always 20:20; all bugs look stupid once you see them. What you don’t see is all of the bugs which didn’t occur.
As a result of these issues, nobody ever really engaged the voting system. None of the PKT GUI wallets integrated the voting capability, and people just didn’t take it seriously. There are at present 2 active vote transactions (one and two for those interested), both created by me for testing purposes.
The Network Steward Committee
While the voting system was not one of our best choices, the initial Network Steward committee most certainly was. The people chosen for the role continuously showed a level of moral character that can only be described as saintly. While most people only knew the Network Steward through their often disappointing messages on github, I can personally attest to the long and often harrowing discussions about what is the right thing to do.
When I think back to all of the people who have come and gone in the community, and all of the little dramas that have occurred, I dare not imagine what might have happened if the choice of Network Steward had been different. But the centrality of the Network Steward to the PKT project created another problem, which like the 50% rule, would manifest as the project grew.
We in the Network Steward became aware that if we were ever to fund a initiative which failed to produce a result, it would be impossible for us to prove that we hadn’t been bribed to accept it. The mere suspicion of this would cast a shadow over the Network Steward and thus the PKT project as a whole. So for us, it was not enough to do what we thought was right, we in fact could never make a mistake.
In the face of this reality, we were still surprisingly effective at allocating funds. The system we used was based on competitive grant-making where anyone could propose a project. Generally the only projects that were accepted had a specific and measurable technology outcome and were for the most part not paid until after delivery. Our entire history of decision making and all of the projects which we funded can be found in The Network Steward github repository.
As time went on, the we felt the need to adopt more rules and procedures to protect our reputation and the reputation of the PKT project we were tasked with supporting. But while each of these rules made sense in isolation, in aggregate they ended up dissuading the community from participating.
Just as jumping through the hoops became too much for the community, applying the rules became increasingly burdensome for the (all volunteer) Network Steward. The last call for projects was in February of 2022, and it is unlikely that there will be another one. However, a new Network Steward voting system is in development to give everybody a more direct voice in voting, I will be publishing about that soon.
The Network Steward is dead, long live the Network Steward!