diff --git a/src/chainparams.cpp b/src/chainparams.cpp index c8772a59c5..f73fe299b8 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -144,11 +145,14 @@ public: consensus.genesis_subsidy = 50*COIN; consensus.connect_genesis_outputs = false; + consensus.subsidy_asset = CAsset(); anyonecanspend_aremine = false; enforce_pak = false; multi_data_permitted = false; consensus.has_parent_chain = false; g_signed_blocks = false; + g_con_elementswitness = false; + g_con_blockheightinheader = false; /** * The message start string is designed to be unlikely to occur in normal data. @@ -267,10 +271,14 @@ public: consensus.genesis_subsidy = 50*COIN; consensus.connect_genesis_outputs = false; + consensus.subsidy_asset = CAsset(); anyonecanspend_aremine = false; enforce_pak = false; multi_data_permitted = false; consensus.has_parent_chain = false; + g_signed_blocks = false; + g_con_elementswitness = false; + g_con_blockheightinheader = false; pchMessageStart[0] = 0x0b; pchMessageStart[1] = 0x11; @@ -364,10 +372,14 @@ public: consensus.genesis_subsidy = 50*COIN; consensus.connect_genesis_outputs = false; + consensus.subsidy_asset = CAsset(); anyonecanspend_aremine = false; enforce_pak = false; multi_data_permitted = false; consensus.has_parent_chain = false; + g_signed_blocks = false; + g_con_elementswitness = false; + g_con_blockheightinheader = false; pchMessageStart[0] = 0xfa; pchMessageStart[1] = 0xbf; @@ -573,6 +585,27 @@ class CCustomParams : public CRegTestParams { base58Prefixes[BLINDED_ADDRESS] = std::vector(1, args.GetArg("-blindedprefix", 4)); + // Calculate pegged Bitcoin asset + std::vector commit = CommitToArguments(consensus, strNetworkID); + uint256 entropy; + GenerateAssetEntropy(entropy, COutPoint(uint256(commit), 0), parentGenesisBlockHash); + + // Elements serialization uses derivation, bitcoin serialization uses 0x00 + if (g_con_elementswitness) { + CalculateAsset(consensus.pegged_asset, entropy); + } else { + assert(consensus.pegged_asset == CAsset()); + } + + consensus.parent_pegged_asset.SetHex(args.GetArg("-con_parent_pegged_asset", "0x00")); + initial_reissuance_tokens = args.GetArg("-initialreissuancetokens", 0); + + // Subsidy asset, like policyAsset, defaults to the pegged_asset + consensus.subsidy_asset = consensus.pegged_asset; + if (gArgs.IsArgSet("-subsidyasset")) { + consensus.subsidy_asset = CAsset(uint256S(gArgs.GetArg("-subsidyasset", "0x00"))); + } + // END ELEMENTS fields // CSV always active by default, unlike regtest diff --git a/src/chainparams.h b/src/chainparams.h index 31bd7eaad4..8bd849bda0 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -107,6 +107,7 @@ protected: std::string strNetworkID; CBlock genesis; CAmount initialFreeCoins; + CAmount initial_reissuance_tokens; std::vector vFixedSeeds; bool fDefaultConsistencyChecks; bool fRequireStandard; diff --git a/src/consensus/params.h b/src/consensus/params.h index e762402c9e..dfe19b5ac8 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -6,6 +6,7 @@ #ifndef BITCOIN_CONSENSUS_PARAMS_H #define BITCOIN_CONSENSUS_PARAMS_H +#include #include #include #include @@ -83,6 +84,7 @@ struct Params { // ELEMENTS CHAIN PARAMS CScript mandatory_coinbase_destination; CAmount genesis_subsidy; + CAsset subsidy_asset; bool connect_genesis_outputs; bool has_parent_chain; uint256 parentChainPowLimit; @@ -90,6 +92,8 @@ struct Params { CScript parent_chain_signblockscript; bool ParentChainHasPow() const { return parent_chain_signblockscript == CScript();} CScript fedpegScript; + CAsset pegged_asset; + CAsset parent_pegged_asset; // g_con_blockheightinheader global hack instead of proper arg due to circular dep std::string genesis_style; CScript signblockscript; diff --git a/src/init.cpp b/src/init.cpp index f28b95b676..5be453e88f 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -65,6 +65,7 @@ #include // CPAKList #include // InitGlobalAssetDir +#include #if ENABLE_ZMQ #include @@ -512,6 +513,7 @@ void SetupServerArgs() gArgs.AddArg("-blech32_hrp", strprintf("The human-readable part of the chain's blech32 encoding. Used in confidential addresses.(default: %s)", defaultChainParams->Blech32HRP()), false, OptionsCategory::CHAINPARAMS); gArgs.AddArg("-assetdir", "Entries of pet names of assets, in this format:asset=: