Announcing PoPS: a Proof-of-Private-Stake protocol [TESTNET STAKING GUIDE]

Navio
Navio Collective

--

Hello Navigators!

To say that the erosion of privacy in the financial sector has been snowballing is redundant at this point. You know it, we know it. In the crypto sector specifically, from the aggressive push of legislation towards implementing central bank digital currencies (CBDCs), to the unjust arrest of Tornado Cash developer Alex Pertsev — things are looking bleak. And this is precisely why we are taking a determined step forward in building unassailable privacy infrastructure for all to access.

Navcoin’s blockchain has been running relentlessly since 2014. What started out as a Bitcoin fork, is now, after many protocol updates, a Blockchain secured using a Proof of Stake algorithm based on Peercoin’s original implementation.

In its current design, our blockchain allows the mixed use of two different currencies, NAV and xNAV, which are 1:1 interchangeable and thus have the same value.

NAV is used for transacting and as collateral to stake and secure the network. NAV transactions make use of traditional P2PKH scripts and ECDSA signatures on the secp256k1 elliptic curve, which do not differ in features (and weaknesses) from Bitcoin transactions — hence offering no privacy benefits.

On the other hand, xNAV transactions make use of the blsCT protocol through a different set of cryptographic primitives over the BLS12–381 curve, which is optimised for pairing operations and suitable for aggregatable signing schemes. Outputs’ amounts are concealed using Bulletproofs-based Range Proofs, which unlike other commonly used implementations, are constructed on the BLS12–381 curve. The BLS signature scheme is used to prove ownership and helps validate transfers of value denominated in xNAV. This scheme allows non-interactive aggregation of transactions, which acts as a mixing protocol to obfuscate the relation between inputs and outputs, adding entropy to the transaction graph. In other words, keeping the sender, receiver and sent amount hidden.

At the moment, xNAV is solely used as a transactional currency, with its use for staking not currently supported. Why is that, you may ask? Because staking design compatible with confidential amounts is critically lacking.

We’ve therefore decided to take matters into our own hands and create one of the first Proof-of-Private-Stake protocol (PoPS) in the industry.

Staking done right.

We are so pleased to present the full details of PoPS, a Proof of Stake implementation compatible with confidential schemes. It uses Pedersen Commitments to hide the amounts of a transaction and it is built around a combination of a range proof and a set membership proof where the set elements are Pedersen Commitments as well. An academic paper describing the staking protocol and its cryptographic primitives is currently being finished and will be shared with our community in the following weeks. A prototype written in Javascript has been successfully created and its source code is available at https://github.com/aguycalled/blsct-stake.

The proposed design succeeds in guaranteeing that neither the staked amount nor the identity of the staker are revealed. Unlinkability of block producers will be also provided, so that inferring if two blocks have been staked by the same staker remains impossible.

From a user perspective, a major change from the current protocol is the introduction of coin locking. When a determined amount of coins is locked, it will be entitled to participate in the staking of the following epochs. Coins which are locked can’t be spent, and are meant to be used exclusively as collateral for securing the network. Users will be able to unlock their coins after an epoch is completed. An epoch is a set of consecutive blocks of a predetermined length. This exact length will be determined during the testing phase, after thoroughly evaluating the security implications when combined with other network parameters.

The swap to a fully private chain

The end goal is to become fully private. The public NAV will cease to exist in the new chain and private NAV (the old xNAV) will be the only prevailing coin. We will be bootstrapping a new blockchain together with the launch of the new proof of stake protocol. There will be a new genesis block and holders of NAV, xNAV and wNAV will be entitled to receiving the same amount of coins they were holding on the old chain.

To ease the process, once we come closer to the launch date, we will be releasing a swap tool so that everyone can seamlessly complete the conversion at a 1:1 ratio.

STAKING GUIDE — TESTNET

As of April 2024, the testnet for private staking is live.

Step 1

Clone the the blsct-pos branch of https://github.com/navcoin/navcoin and build it using the following commands (appropriate for Ubuntu, check documentation in the repository for other OS):

git clone https://github.com/navcoin/navcoin --branch blsct-pos
sudo apt-get install build-essential libtool autotools-dev automake pkg-config bsdmainutils python3 libevent-dev libboost-dev libsqlite3-dev libminiupnpc-dev libnatpmp-dev
./autogen.sh
./configure
make -j$(nproc)

Step 2

Once the build is complete, launch an instance of the daemon:

./src/navcoind --blsctregtest --printtoconsole

Step 3

For testing purposes, we will create one wallet:

./src/navcoin-wallet -blsct -chain=blsctregtest -wallet=wallet1 create

And then load it:

./src/navcoin-cli --blsctregtest loadwallet wallet1

Step 4

As the chain is empty, you will need to generate the first blocks, and stake some balance:

./src/navcoin-cli --blsctregtest -rpcwallet=wallet1 generatetoblsctaddress 101 $(./src/navcoin-cli --blsctregtest -rpcwallet=wallet1 getnewaddress "" "blsct")
./src/navcoin-cli --blsctregtest -rpcwallet=wallet1 stakelock 1000
./src/navcoin-cli --blsctregtest -rpcwallet=wallet1 generatetoblsctaddress 1 $(./src/navcoin-cli --blsctregtest -rpcwallet=wallet1 getnewaddress "" "blsct")

Step 5

Now the staker process can be started:

./src/navcoin-staker --blsctregtest -wallet=wallet1

Welcome to the new and exciting world of Proof-of-Private-Stake. Following the aforementioned instructions you will run a local blockchain which is secured by the new protocol. You can play with it and add more nodes if you like. The implementation is in an initial stage and many things still need to be polished, we expect some bugs to show. We are looking forward to your feedback!

The specifications are a 1-minute block spacing time with a block reward equivalent to the current chain; 4 NAV per block. This and other values are subject to change through out the testing phase which starts now.

--

--