June 23, 2024 2:08 pm

Evo Accelerated Release

The Dash network participated over the last two weeks in a wonderful example of what makes us great. Masternodes collectively voted on whether we should have an accelerated release. This poll was aimed to understand the wishes of the network. We had multiple people advocate for releasing as soon as possible, but also some others on the other side expressed how they wanted the release to go more smoothly.

Poll Results

If the proposal had passed with a resounding YES, our release date would have been the 19th of July. Not counting abstains we currently have 68% for this proposal and 32% against. It is about the same for Evonode operators. While the reasons for voting yes have been pretty straightforward, we have heard various reasons from Masternodes in the “no” camp. My perception from this feedback was that the most common reason why people voted no was that they wanted a more stable release. Second, many people wanted withdrawals enabled from the moment of activation. And in third we had people who thought that we should have everything ready in order to have a complete release that would be completely ready for external developers.

Decision and Implementation Strategy

This was a not so straightforward decision for many people. Since the vote did pass by the slimmest of margins we at DCG will respect the wishes of the majority. However, we also want to see an activation which does require 2/3rds of the network to actually run the new version.

We have therefore decided to follow the direction of the accelerated release, but to add an additional 10 days of testing. By doing so we should see a healthier release with a slight less chance of chain halts. This means the mainnet release date is set to be on Monday, July 29th.

This release should be seen as a mainnet beta. We will also be releasing the Rust SDK as a beta. While the Javascript SDK does exist it should be seen as an alpha version. External developers can use it, but it should be only seen as an early preview release. Furthermore, as documentation isn’t finished, we should be very cautious with trying to get external developers at this stage as we can only make a first impression once. It will take a few months to get the SDKs to a level where we will be comfortable knowing that non-advanced 3rd party developers can use them with ease. Internally however, we will be using the Rust-SDK on mobile in order to activate Dashpay which enables payments between identities with the payment happening on the core chain and where the identities of the sender and receiver are not obvious to other parties.

Accelerated Release Features

Furthermore, we would like to stress that while we are going down the path of an accelerated release, we are still releasing a product that is quite feature-rich.

In this first version some of the more important features we are releasing are:

  • Decentralized Identities (creation, update, top up, credit transfer),
  • Data Contract support (creation, update, historical support, various mutability configurations),
  • Document support (creation, replace, delete),
  • Document based NFT basic support (transfer, selling),
  • Contested resource masternode vote resolution,
  • Dash Platform Name Serve (DPNS) contract (ready, but might be released with a two week delay for safety),
  • Dashpay contract (ready, but might be released with a two week delay for safety),
  • Verification of total system balance based on Sum Trees technology,
  • A fee system with fee refunds when removing data from system,
  • Reward distribution to Evonodes,
  • Protocol versioning support with hard fork upgrades,
  • State transition execution cryptographic proofs,
  • Platform State with efficient cryptographic proofs for light clients based on GroveDB (storage system) hierarchical authenticated data structures,
  • A scalable byzantine fault tolerant consensus solution using threshold cryptography and same block execution,
  • A decentralized API with 23 different Platform queries :
    1. getIdentity: Fetches the identity details based on the provided request.
    2. getIdentityKeys: Retrieves the keys associated with a specific identity.
    3. getIdentitiesContractKeys: Obtains contract keys for multiple identities.
    4. getIdentityNonce: Returns the nonce of a specified identity.
    5. getIdentityContractNonce: Provides the contract nonce for a given identity.
    6. getIdentityBalance: Retrieves the balance of a specified identity.
    7. getIdentityBalanceAndRevision: Fetches both the balance and the revision number of an identity.
    8. getDataContract: Fetches a specific data contract.
    9. getDataContractHistory: Provides the history of data contract updates.
    10. getDataContracts: Retrieves multiple data contracts based on the request.
    11. getDocuments: Fetches documents based on the provided request.
    12. getIdentityByPublicKeyHash: Retrieves an identity using a public key hash.
    13. getConsensusParams: Returns the current consensus parameters.
    14. getProtocolVersionUpgradeState: Fetches the state of protocol version upgrades.
    15. getProtocolVersionUpgradeVoteStatus: Provides the vote status for an Evonode voting in a protocol version upgrade.
    16. getEpochsInfo: Retrieves information about epochs.
    17. getContestedResources: Lists the votes currently happening for specific contested resources.
    18. getContestedResourceVoteState: Provides the state of a contested resource vote, including who is winning.
    19. getContestedResourceVotersForIdentity: Retrieves information about who voted for a contested resource to be assigned to a specific identity.
    20. getContestedResourceIdentityVotes: Fetches details on how a particular identity voted in contested resource votes.
    21. getVotePollsByEndDate: Lists vote polls that are ending soon.
    22. getPrefundedSpecializedBalance: Returns the prefunded specialized balance based on the request.
    23. getPathElements: Provides direct GroveDB information path elements based on the provided request. This is for advanced usage only.
  • 11 helper queries to get core chain based information :
    1. getBlockchainStatus: Provides blockchain and network info for Payment blockchain
    2. getMasternodeStatus (will be activated within first two weeks): Provides masternode status
    3. getBlock (will be activated within first two weeks): Fetches a payment chain block
    4. getBestBlockHeight: Fetches best chain tip height
    5. broadcastTransaction: Broadcasts a payment chain transaction
    6. getTransaction: Fetches a payment chain transaction with metadata
    7. subscribeToBlockHeadersWithChainLocks: Data stream with historical and upcoming payment chain blocks and chain locks
    8. subscribeToTransactionsWithProofs: Data stream with historical and upcoming transactions, merkel blocks and instant send locks filtered with specified bloom filter.
    9. subscribeToMasternodeList: Data stream with historical and upcoming simplified masternode list diffs (DIP0004) 
    10. getBestBlockHash: Fetches best chain tip hash
    11. getBlockHash: Fetches a payment block hash by height

Post-Release Priorities

The immediate goal after release will be to make sure the network is stable, then it will be to get DPNS and Dashpay activated, followed by being able to provide the next version with withdrawals enabled.


About the author


Samuel Westrich

CTO, Dash Core Group