The PKT project is a decentralized community coin. That means there’s no foundation, no founders, and no venture capital fund pulling the strings behind the scenes. This is a good thing, because it means PKT is bigger than any one person, and it’s not going to vanish one day because a company went bankrupt or a key person left.
But a project without founders has a different kind of challenge. In a fully decentralized blockchain project, the best strategy is to mine and buy as much of the coin as possible, then sit back and wait for someone else to build the ecosystem. But if everybody does that, the project will never amount to anything.
I was aware of this challenge when I originally wrote the code, and for this I created the Network Steward, an address which would receive 20% of the block reward and could use it to help the community. Because it is a decentralized project, the Network Steward would be selected by a vote of the community but the voting system had some severe limitations.
If you haven’t already, check out my previous installments to read about the problem and how we are going to fix it.
The Democratization of PKT
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.
The purpose of money within any nation is to act as a score-keeper, rewarding those who provide the goods and services the nation needs. This money can be used to enjoy lavish lifestyles, but because it’s allocated in accordance with the provision of goods and services, those with the most of it tend to use it for doing more of what they do: providing goods and services. By this way, the bulk of the nation’s actual physical resources are placed under the command of those who have the track record of servicing the nation the best.
“The highest use of capital is not to make more money, but to make money do more for the betterment of life.” - Henry Ford
Of course the reality of money rarely lives up to the dream, and people have found multitudinous ways to cheat at this “game”. Theft, fraud, extortion and monopolization are all ways to acquire money without providing the requisite value, and the endless cat-and-mouse game between the nation and its cheaters makes up the history of law.
Just as money alone cannot differentiate between transaction and theft, money also cannot recognize those contributions which everybody needs, but nobody’s incentivized to pay for. A common retort against radical libertarianism is “who will build the roads?” This is perhaps a weak argument because roads can be built privately and funded by tolls, but there are things which everybody needs and which cannot be realistically monetized once built.
But beyond this, there is another type of value that falls even further out of reach of the monetary score-keeper. That is the intangible value of such things as Honor, Integrity, and Discipline. Those who keep on the straight and narrow usually end up materially better off, as the reputations they build open doors for them in the long term. But reputation is a messy business. Unlike money there is no global score-keeper, and between baseless accusations and false claims of innocence, it can take a very long time for the truth to pan out.
Better to be poor and honest than to be dishonest and rich. - Proverbs 28:6
From the beginning of the PKT project, the Network Steward was conceived to address the first type of need - those things which everybody needs but nobody is prepared to pay for. And while the introduction of Electorium to the Network Steward vote will undoubtedly bring a renaissance to the institution, Electorium aims to go much much further.
The Electorium delegated voting algorithm asks everybody the simplest of questions: “Who is most fit to lead?”, and by answering that question, people create a web-of-trust. But because this web-of-trust is anchored by the address balances of those who’ve voted, it also creates a global reputation score. A sort of reputation number made up of not just your coins, but those of everyone whose vote could potentially be delegated to you.
Unlike “social credit” which is handed down by a fallible central authority, this is a true representation of the will of the people. And while nothing will ever be a perfect score-keeper, becoming just a little bit better is doing The Good Work.
Voting with pktwallet
You can now vote using the legacy pktwallet command line wallet as well as the PKT Lightning Wallet. In the last installment of this series, I presented a brief how to for voting with the PKT Lightning Wallet and in this version I will explain how to vote using the legacy pktwallet:
Download and compile the newest version of pktwallet
git clone https://github.com/pkt-cash/pktd
cd pktd
./do
Create a new wallet to test out the voting
./bin/pktwallet --wallet=vote_test_feb6_24 --create
Launch pktwallet
./bin/pktwallet --wallet=vote_test_feb6_24
In another window, create a new address so you can vote with it
./bin/pktctl --wallet getnewaddress
Send some coins to that address
Check that your coins have arrived using getaddressbalances
./bin/pktctl –wallet getaddressbalances
Once you see your coins in the address, you can unlock your wallet so that you’re able to vote. In the place of
<your password>
put the password you configured for this wallet
./bin/pktctl –wallet walletpassphrase '<your password>' 600
Send the vote. In place of
<your wallet address>
you will put your real address in this wallet, and in this example you will be voting forpkt1qpl48jdwyn3t0uj7lu303f5szejgl5dmc0p2vpu
./bin/pktctl --wallet sendvote <your wallet address> \
pkt1qpl48jdwyn3t0uj7lu303f5szejgl5dmc0p2vpu
Once your vote transaction has confirmed on the chain, you can check your vote using getaddressbalances again. This time it should show specific vote information for your wallet address like so:
./bin/pktctl --wallet getaddressbalances
[
{
"address": "pkt1qj6nldg0klm5pqyam8cg6lvzcuq432kpc5d9scn",
"total": 99.99899960309267,
"stotal": "107373108232",
"spendable": 0,
"sspendable": "0",
"immaturereward": 0,
"simmaturereward": "0",
"unconfirmed": 99.99899960309267,
"sunconfirmed": "107373108232",
"outputcount": 1,
"vote": {
"vote_for": "pkt1qpl48jdwyn3t0uj7lu303f5szejgl5dmc0p2vpu",
"vote_txid": "4d590a6f45d1f992bea8e97995539c789e942425c40c32f928cc5308f16ccdd2",
"vote_block": 2336429,
"expiration_block": 2860589,
"estimated_expiration_sec": 1737468646
}
}
]
You can see who you voted for, the transaction ID of your vote, the block number where your vote was registered, the block number when your vote will expire if it is not renewed (by voting again), and an estimation of when that will happen.
You can learn more about the sendvote
command by running ./bin/pktctl —-wallet help sendvote
and you can even cast a vote where you register your candidacy to potentially be the Network Steward yourself!
Counting Votes with PKT-FullNode
In a new unreleased version of PKT-FullNode, you are able to count the votes and see who is the winner. Because the vote counting code requires computing the address balance, you can also use this version of PKT-FullNode to query the exact balance of any address on the blockchain.
While this version of PKT-FullNode is not yet released, it is generally considered to be safe to run in most operational environments. To try it out, do the following:
Get the code from github and compile it
git clone https://github.com/cjdelisle/PKT-FullNode
cd PKT-FullNode
./do
Launch PKT-FullNode, this will take a few days to synchronize with the blockchain. If you already have a synchronized PKT-FullNode then it will use the same data and will just need some time to compute address balances and votes.
./bin/pktd
If your PKT-FullNode is downloading the blockchain, you can check from time to time the height and compare it to a block explorer to see how close it is to completion. If you already have a synchronized blockchain and it is indexing the address balance and vote table, then this command won’t work until it’s done
./bin/pktctl getbestblock
Once your PKT-FullNode is up to date, you can check the current voting addresses with
listaddresses
./bin/pktctl listaddresses '' 1 1
The arguments to listaddresses
are:
Continue From - The
listaddresses
command will only provide at maximum 200 results. If in the result,has_more
is set to true, calllistaddresses
again but providing the last address from the previous reply, and it will respond with the next page of 200 addresses.Current - If this is set to 1, it will yield data from the last block, otherwise it will show data from the last election (once per week).
Voting Only - If this is 1, it will only yield addresses who have registered votes.
The reply looks like this:
{
"addresses": [
{
"address": "pkt1qpl48jdwyn3t0uj7lu303f5szejgl5dmc0p2vpu",
"balance": 99.99999986309558,
"sbalance": "107374182253",
"is_candidate": true,
"vote_for": "pkt1qtu5y64ln9n9mw3e88ydt28jgmu327ygme8y54t"
},
{
"address": "pkt1q2yt8djdlykf2d9ukmw0q5z5tur05xm674tq6y8",
"balance": 3.477373135276139,
"sbalance": "3733800973",
"is_candidate": true,
"vote_for": "pkt1q2yt8djdlykf2d9ukmw0q5z5tur05xm674tq6y8"
},
{
"address": "pkt1qj6nldg0klm5pqyam8cg6lvzcuq432kpc5d9scn",
"balance": 99.99899960309267,
"sbalance": "107373108232",
"is_candidate": false,
"vote_for": "pkt1q2yt8djdlykf2d9ukmw0q5z5tur05xm674tq6y8"
},
{
"address": "pkt1q6jqalrwahf5atdmu0m2sve36rrvl56vp8m55nk",
"balance": 666.3360477378592,
"sbalance": "715472883295",
"is_candidate": false,
"vote_for": "pkt1q2yt8djdlykf2d9ukmw0q5z5tur05xm674tq6y8"
}
],
"as_of_block": 2357058,
"has_more": false
}
The balance
field is the amount of PKT the address has, sbalance
is the amount of atomic units of the coin. The is_candidate
field indicates whether the voter has declared their intention to candidate, and the vote_for
field is whoever they have voted for.
Coming soon, there will be updates to the PKT Block Explorer code which will allow exploring the votes, who voted for whom, who has the highest reputation, and who is most likely to win in the next election.
Be sure to subscribe so you’ll catch the next update, and until then be awesome.