Hush Full Node software. We were censored from Github, this is where all development happens now.
https://hush.is
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
6.0 KiB
183 lines
6.0 KiB
// Copyright (c) 2019-2020 The Hush developers
|
|
// Copyright (c) 2018 The Zcash developers
|
|
// Distributed under the GPLv3 software license, see the accompanying
|
|
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
|
|
|
|
/******************************************************************************
|
|
* Copyright © 2014-2019 The SuperNET Developers. *
|
|
* *
|
|
* See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at *
|
|
* the top-level directory of this distribution for the individual copyright *
|
|
* holder information and the developer policies on copyright and licensing. *
|
|
* *
|
|
* Unless otherwise agreed in a custom licensing agreement, no part of the *
|
|
* SuperNET software, including this file may be copied, modified, propagated *
|
|
* or distributed except according to the terms contained in the LICENSE file *
|
|
* *
|
|
* Removal or modification of this copyright notice is prohibited. *
|
|
* *
|
|
******************************************************************************/
|
|
|
|
#include "consensus/upgrades.h"
|
|
extern int32_t KOMODO_NSPV;
|
|
#define NSPV_BRANCHID 0x76b809bb
|
|
|
|
#ifndef KOMODO_NSPV_FULLNODE
|
|
#define KOMODO_NSPV_FULLNODE (KOMODO_NSPV <= 0)
|
|
#endif // !KOMODO_NSPV_FULLNODE
|
|
|
|
#ifndef KOMODO_NSPV_SUPERLITE
|
|
#define KOMODO_NSPV_SUPERLITE (KOMODO_NSPV > 0)
|
|
#endif // !KOMODO_NSPV_SUPERLITE
|
|
|
|
/**
|
|
* General information about each network upgrade.
|
|
* Ordered by Consensus::UpgradeIndex.
|
|
*/
|
|
const struct NUInfo NetworkUpgradeInfo[Consensus::MAX_NETWORK_UPGRADES] = {
|
|
{
|
|
/*.nBranchId =*/ 0,
|
|
/*.strName =*/ "Sprout",
|
|
/*.strInfo =*/ "The Zcash network at launch",
|
|
},
|
|
{
|
|
/*.nBranchId =*/ 0x74736554,
|
|
/*.strName =*/ "Test dummy",
|
|
/*.strInfo =*/ "Test dummy info",
|
|
},
|
|
{
|
|
/*.nBranchId =*/ 0x5ba81b19,
|
|
/*.strName =*/ "Overwinter",
|
|
/*.strInfo =*/ "See https://z.cash/upgrade/overwinter.html for details.",
|
|
},
|
|
{
|
|
/*.nBranchId =*/ 0x76b809bb,
|
|
/*.strName =*/ "Sapling",
|
|
/*.strInfo =*/ "See https://z.cash/upgrade/sapling.html for details.",
|
|
}
|
|
};
|
|
|
|
const uint32_t SPROUT_BRANCH_ID = NetworkUpgradeInfo[Consensus::BASE_SPROUT].nBranchId;
|
|
|
|
UpgradeState NetworkUpgradeState(
|
|
int nHeight,
|
|
const Consensus::Params& params,
|
|
Consensus::UpgradeIndex idx)
|
|
{
|
|
if (nHeight < 0)
|
|
{
|
|
printf("height: %d", nHeight);
|
|
}
|
|
assert(nHeight >= 0);
|
|
assert(idx >= Consensus::BASE_SPROUT && idx < Consensus::MAX_NETWORK_UPGRADES);
|
|
auto nActivationHeight = params.vUpgrades[idx].nActivationHeight;
|
|
|
|
if (nActivationHeight == Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT) {
|
|
return UPGRADE_DISABLED;
|
|
} else if (nHeight >= nActivationHeight) {
|
|
// From ZIP 200:
|
|
//
|
|
// ACTIVATION_HEIGHT
|
|
// The non-zero block height at which the network upgrade rules will come
|
|
// into effect, and be enforced as part of the blockchain consensus.
|
|
//
|
|
// For removal of ambiguity, the block at height ACTIVATION_HEIGHT - 1 is
|
|
// subject to the pre-upgrade consensus rules, and would be the last common
|
|
// block in the event of a persistent pre-upgrade branch.
|
|
return UPGRADE_ACTIVE;
|
|
} else {
|
|
return UPGRADE_PENDING;
|
|
}
|
|
}
|
|
|
|
bool NetworkUpgradeActive(
|
|
int nHeight,
|
|
const Consensus::Params& params,
|
|
Consensus::UpgradeIndex idx)
|
|
{
|
|
return NetworkUpgradeState(nHeight, params, idx) == UPGRADE_ACTIVE;
|
|
}
|
|
|
|
int CurrentEpoch(int nHeight, const Consensus::Params& params) {
|
|
for (auto idxInt = Consensus::MAX_NETWORK_UPGRADES - 1; idxInt >= Consensus::BASE_SPROUT; idxInt--) {
|
|
if (NetworkUpgradeActive(nHeight, params, Consensus::UpgradeIndex(idxInt))) {
|
|
return idxInt;
|
|
}
|
|
}
|
|
// Base case
|
|
return Consensus::BASE_SPROUT;
|
|
}
|
|
|
|
uint32_t CurrentEpochBranchId(int nHeight, const Consensus::Params& params)
|
|
{
|
|
if ( KOMODO_NSPV_SUPERLITE )
|
|
return(NSPV_BRANCHID);
|
|
return NetworkUpgradeInfo[CurrentEpoch(nHeight, params)].nBranchId;
|
|
}
|
|
|
|
bool IsConsensusBranchId(int branchId) {
|
|
for (int idx = Consensus::BASE_SPROUT; idx < Consensus::MAX_NETWORK_UPGRADES; idx++) {
|
|
if (branchId == NetworkUpgradeInfo[idx].nBranchId) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool IsActivationHeight(
|
|
int nHeight,
|
|
const Consensus::Params& params,
|
|
Consensus::UpgradeIndex idx)
|
|
{
|
|
assert(idx >= Consensus::BASE_SPROUT && idx < Consensus::MAX_NETWORK_UPGRADES);
|
|
|
|
// Don't count Sprout as an activation height
|
|
if (idx == Consensus::BASE_SPROUT) {
|
|
return false;
|
|
}
|
|
|
|
return nHeight >= 0 && nHeight == params.vUpgrades[idx].nActivationHeight;
|
|
}
|
|
|
|
bool IsActivationHeightForAnyUpgrade(
|
|
int nHeight,
|
|
const Consensus::Params& params)
|
|
{
|
|
if (nHeight < 0) {
|
|
return false;
|
|
}
|
|
|
|
// Don't count Sprout as an activation height
|
|
for (int idx = Consensus::BASE_SPROUT + 1; idx < Consensus::MAX_NETWORK_UPGRADES; idx++) {
|
|
if (nHeight == params.vUpgrades[idx].nActivationHeight)
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
boost::optional<int> NextEpoch(int nHeight, const Consensus::Params& params) {
|
|
if (nHeight < 0) {
|
|
return boost::none;
|
|
}
|
|
|
|
// Sprout is never pending
|
|
for (auto idx = Consensus::BASE_SPROUT + 1; idx < Consensus::MAX_NETWORK_UPGRADES; idx++) {
|
|
if (NetworkUpgradeState(nHeight, params, Consensus::UpgradeIndex(idx)) == UPGRADE_PENDING) {
|
|
return idx;
|
|
}
|
|
}
|
|
|
|
return boost::none;
|
|
}
|
|
|
|
boost::optional<int> NextActivationHeight(
|
|
int nHeight,
|
|
const Consensus::Params& params)
|
|
{
|
|
auto idx = NextEpoch(nHeight, params);
|
|
if (idx) {
|
|
return params.vUpgrades[idx.get()].nActivationHeight;
|
|
}
|
|
return boost::none;
|
|
}
|
|
|