Proposal Edit – April 14th, 2021
0.6.0 has been replaced by 0.6.1, which fixes a critical bug that was discovered during the testnet upgrade rehearsal. Refer to this announcement for details on the hotfix.
Proposal Edit – May 11th, 2021
0.6.1 has been replaced by 0.6.3, which introduces a much-requested feature: Update Stake. Refer to this announcement for details on the new feature.
Attributes
- Author(s): @andrew
- Implementer(s): Pocket Network Inc.
- Category: Protocol Upgrade
- Requires: N/A
- Replaces: N/A
- Fulfills: (partially fulfills) PUP-4
- GitHub: GitHub - pokt-network/pocket-core: Official implementation of the Pocket Network Protocol
Summary
Pocket Network Inc. is releasing a consensus rule change with the 0.6.3 release. The release contains several bug fixes, scalability features, and quality-of-life improvements.
Abstract
This Pocket Core release (0.6.3) offers a higher level of security (2 mission critical patches in the merkle tree) plus provides a higher level of network stability through the removal/patching of events, in addition to a change in the encoding algorithm (Amino to Google’s Protobuf).
Motivation
There are two major security issues in the merkle tree proof/claim implementation as well as an exploitable prediction attack due to a misimplementation at the block hash generation. The current encoding scheme is both ‘custom’ and unsupported across most all programming languages which hinders ecosystem growth and future development. Lastly, PUP-4 is somewhat addressed in this release.
Specification
0.6.0
-
Convert all consensus level amino encoding (including but not limited to the internal storage codecs) to protobuf encoding while maintaining as many legacy structures as possible
-
Introduce Previous Block Validator Voting structure into the block hash used for session and proposer selection algorithms.
-
Use the index of the leafs of the plasma core merkle tree as part of the parent hash to lock in the values using the Claim merkle root
-
Ensure consensus level events are not concatenated in the pocket core module by initializing in the transaction handler
-
Change ABCIValidatorUpdate to ABCIValidatorZeroUpdate for separation of service and validation
0.6.1
- Hotfixed issue wherein
GetParams()
would ignore RelaysToTokenMultiplier - Added utility CLI command to convert evidence from amino to protobuf
- Updated RPC spec to include stdTx
- Return Dispatch for certain failed relay codes to save a hop on client side
- Fix simulate relay to use basic auth
- Updated User Guide to use RC-0.6.1
- Added unsafe delete command to the keybase
0.6.3
- Added Update Stake, which enables apps/nodes to edit certain parameters of their stake without needing to unstake first, by simply submitting the
stake
transaction again. - MaxApplications threshold activated (if all slots are taken, no additional apps can stake regardless of the stake amount)
- Return AllClaims if no address is passed to nodeClaims query
- No ABCI query during newTx() function in pocket core module
- Change StdSignature from Base64 to Hex in RPC
Rationale
The bug fixes in the merkle tree result in an increased level of network stability. Applications and node runners will experience an even higher degree of reliability through the new found network security.
Through the addition of Protobuf encoding, client-side tooling such as SDK development and improvements just got a lot easier, which will make expanding our potential app user bases easier and an all around better development experience while using Pocket Network.
In addition a bug identified in event-handling has now been fixed, which creates smaller block sizes and should enable faster txs and overall better service.
We have successfully separated servicing and validation, which allows us to have more nodes overall and more scalability - no longer capped to 5000(technically). That said, PUP4 will likely still try to limit nodes to 5000 due to the lack of jailing available to servicers which may lead to service degradation.
Protobuf encoding will also lower transaction latency a tad because of less resource demand on nodes.
Viability
An extensive number of tests, functional, integration, unit, load, and simulation were completed leading up to this upgrade. These can be found in the release notes.
Implementation
The implementation of 0.6.0 is near complete. A few pending tests, the agreement of an Upgrade height, and the approval of this proposal, will result in a complete implementation.
0.6.1 0.6.3 has been released. Once ≥67% of validator power has updated to this version, this proposal will be edited to specify an upgrade height and voting will commence. Voting will last 7 days and pass with a 50% majority. If the vote passes, the Foundation will activate the upgrade at the specified height using the pocket gov upgrade
transaction.
Edit: the upgrade height will be ~12pm EDT Wed 30th June (block 30024).
Audit
There was no external audit, refer to Viability.
Copyright
Copyright and related rights waived via CC0.