@@ -735,6 +735,9 @@ void CRegTestParams::UpdateActivationParametersFromArgs(const ArgsManager& args)
735
735
* Custom params for testing.
736
736
*/
737
737
class CCustomParams : public CRegTestParams {
738
+ protected:
739
+ std::string default_magic_str = " 5319F20E" ;
740
+ std::string default_signblockscript = " 51" ;
738
741
void UpdateFromArgs (const ArgsManager& args)
739
742
{
740
743
UpdateActivationParametersFromArgs (args);
@@ -757,7 +760,7 @@ class CCustomParams : public CRegTestParams {
757
760
consensus.nMinimumChainWork = uint256S (args.GetArg (" -con_nminimumchainwork" , " 0x0" ));
758
761
consensus.defaultAssumeValid = uint256S (args.GetArg (" -con_defaultassumevalid" , " 0x00" ));
759
762
// TODO: Embed in genesis block in nTime field with new genesis block type
760
- consensus.dynamic_epoch_length = args.GetArg (" -dynamic_epoch_length" , 10 );
763
+ consensus.dynamic_epoch_length = args.GetArg (" -dynamic_epoch_length" , consensus. dynamic_epoch_length );
761
764
// Default junk keys for testing
762
765
consensus.first_extension_space = {ParseHex (" 02fcba7ecf41bc7e1be4ee122d9d22e3333671eb0a3a87b5cdf099d59874e1940f02fcba7ecf41bc7e1be4ee122d9d22e3333671eb0a3a87b5cdf099d59874e1940f" )};
763
766
std::vector<std::string> pak_list_str = args.GetArgs (" -pak" );
@@ -772,12 +775,16 @@ class CCustomParams : public CRegTestParams {
772
775
fDefaultConsistencyChecks = args.GetBoolArg (" -fdefaultconsistencychecks" , fDefaultConsistencyChecks );
773
776
m_is_test_chain = args.GetBoolArg (" -fmineblocksondemand" , m_is_test_chain);
774
777
775
- bech32_hrp = args.GetArg (" -bech32_hrp" , " ert" );
776
- blech32_hrp = args.GetArg (" -blech32_hrp" , " el" );
777
- base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char >(1 , args.GetArg (" -pubkeyprefix" , 235 ));
778
- base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char >(1 , args.GetArg (" -scriptprefix" , 75 ));
779
- base58Prefixes[BLINDED_ADDRESS] = std::vector<unsigned char >(1 , args.GetArg (" -blindedprefix" , 4 ));
780
- base58Prefixes[SECRET_KEY] = std::vector<unsigned char >(1 , args.GetArg (" -secretprefix" , 239 ));
778
+ bech32_hrp = args.GetArg (" -bech32_hrp" , bech32_hrp);
779
+ blech32_hrp = args.GetArg (" -blech32_hrp" , blech32_hrp);
780
+ assert (base58Prefixes[PUBKEY_ADDRESS].size () == 1 );
781
+ assert (base58Prefixes[SCRIPT_ADDRESS].size () == 1 );
782
+ assert (base58Prefixes[BLINDED_ADDRESS].size () == 1 );
783
+ assert (base58Prefixes[SECRET_KEY].size () == 1 );
784
+ base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char >(1 , args.GetArg (" -pubkeyprefix" , base58Prefixes[PUBKEY_ADDRESS][0 ]));
785
+ base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char >(1 , args.GetArg (" -scriptprefix" , base58Prefixes[SCRIPT_ADDRESS][0 ]));
786
+ base58Prefixes[BLINDED_ADDRESS] = std::vector<unsigned char >(1 , args.GetArg (" -blindedprefix" , base58Prefixes[BLINDED_ADDRESS][0 ]));
787
+ base58Prefixes[SECRET_KEY] = std::vector<unsigned char >(1 , args.GetArg (" -secretprefix" , base58Prefixes[SECRET_KEY][0 ]));
781
788
base58Prefixes[PARENT_PUBKEY_ADDRESS] = std::vector<unsigned char >(1 , args.GetArg (" -parentpubkeyprefix" , 111 ));
782
789
base58Prefixes[PARENT_SCRIPT_ADDRESS] = std::vector<unsigned char >(1 , args.GetArg (" -parentscriptprefix" , 196 ));
783
790
parent_bech32_hrp = args.GetArg (" -parent_bech32_hrp" , " bcrt" );
@@ -792,7 +799,7 @@ class CCustomParams : public CRegTestParams {
792
799
assert (IsHex (extprvprefix) && extprvprefix.size () == 8 && " -extprvkeyprefix must be hex string of length 8" );
793
800
base58Prefixes[EXT_SECRET_KEY] = ParseHex (extprvprefix);
794
801
795
- const std::string magic_str = args.GetArg (" -pchmessagestart" , " 5319F20E " );
802
+ const std::string magic_str = args.GetArg (" -pchmessagestart" , default_magic_str );
796
803
assert (IsHex (magic_str) && magic_str.size () == 8 && " -pchmessagestart must be hex string of length 8" );
797
804
const std::vector<unsigned char > magic_byte = ParseHex (magic_str);
798
805
std::copy (begin (magic_byte), end (magic_byte), pchMessageStart);
@@ -812,10 +819,9 @@ class CCustomParams : public CRegTestParams {
812
819
consensus.genesis_style = args.GetArg (" -con_genesis_style" , " elements" );
813
820
814
821
// Block signing encumberance script, default of 51 aka OP_TRUE
815
- std::vector<unsigned char > sign_bytes = ParseHex (args.GetArg (" -signblockscript" , " 51 " ));
822
+ std::vector<unsigned char > sign_bytes = ParseHex (args.GetArg (" -signblockscript" , default_signblockscript ));
816
823
consensus.signblockscript = CScript (sign_bytes.begin (), sign_bytes.end ());
817
- // Default signature size is the size of dummy push, and single 72 byte DER signature
818
- consensus.max_block_signature_size = args.GetArg (" -con_max_block_sig_size" , 74 );
824
+ consensus.max_block_signature_size = args.GetArg (" -con_max_block_sig_size" , consensus.max_block_signature_size );
819
825
g_signed_blocks = args.GetBoolArg (" -con_signed_blocks" , true );
820
826
821
827
// Note: These globals are needed to avoid circular dependencies.
@@ -834,19 +840,19 @@ class CCustomParams : public CRegTestParams {
834
840
// Custom chains connect coinbase outputs to db by default
835
841
consensus.connect_genesis_outputs = args.GetArg (" -con_connect_genesis_outputs" , true );
836
842
837
- initialFreeCoins = args.GetArg (" -initialfreecoins" , 0 );
843
+ initialFreeCoins = args.GetArg (" -initialfreecoins" , initialFreeCoins );
838
844
839
- anyonecanspend_aremine = args.GetBoolArg (" -anyonecanspendaremine" , true );
845
+ anyonecanspend_aremine = args.GetBoolArg (" -anyonecanspendaremine" , anyonecanspend_aremine );
840
846
841
- consensus.has_parent_chain = args.GetBoolArg (" -con_has_parent_chain" , true );
847
+ consensus.has_parent_chain = args.GetBoolArg (" -con_has_parent_chain" , consensus. has_parent_chain );
842
848
843
849
enforce_pak = args.GetBoolArg (" -enforce_pak" , false );
844
850
845
851
// Allow multiple op_return outputs by relay policy
846
852
multi_data_permitted = args.GetBoolArg (" -multi_data_permitted" , enforce_pak);
847
853
848
854
// bitcoin regtest is the parent chain by default
849
- parentGenesisBlockHash = uint256S (args.GetArg (" -parentgenesisblockhash" , " 0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206 " ));
855
+ parentGenesisBlockHash = uint256S (args.GetArg (" -parentgenesisblockhash" , parentGenesisBlockHash. GetHex () ));
850
856
// Either it has a parent chain or not
851
857
const bool parent_genesis_is_null = parentGenesisBlockHash == uint256 ();
852
858
assert (consensus.has_parent_chain != parent_genesis_is_null);
@@ -880,11 +886,6 @@ class CCustomParams : public CRegTestParams {
880
886
consensus.subsidy_asset = CAsset (uint256S (args.GetArg (" -subsidyasset" , " 0x00" )));
881
887
}
882
888
883
- consensus.vDeployments [Consensus::DEPLOYMENT_DYNA_FED].bit = 25 ;
884
- consensus.vDeployments [Consensus::DEPLOYMENT_DYNA_FED].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE;
885
- consensus.vDeployments [Consensus::DEPLOYMENT_DYNA_FED].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
886
- consensus.vDeployments [Consensus::DEPLOYMENT_DYNA_FED].min_activation_height = 0 ; // No activation delay
887
-
888
889
UpdateElementsActivationParametersFromArgs (consensus, args);
889
890
// END ELEMENTS fields
890
891
}
@@ -914,9 +915,81 @@ class CCustomParams : public CRegTestParams {
914
915
CCustomParams (const std::string& chain, const ArgsManager& args) : CRegTestParams(args)
915
916
{
916
917
strNetworkID = chain;
918
+
919
+ // default settings
920
+ initialFreeCoins = 0 ;
921
+ anyonecanspend_aremine = true ;
922
+ // Default signature size is the size of dummy push, and single 72 byte DER signature
923
+ consensus.max_block_signature_size = 74 ;
924
+ consensus.dynamic_epoch_length = 10 ;
925
+ // bitcoin regtest is the parent chain by default
926
+ consensus.has_parent_chain = true ;
927
+ parentGenesisBlockHash = uint256S (" 0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206" );
928
+
929
+ bech32_hrp = " ert" ;
930
+ blech32_hrp = " el" ;
931
+
932
+ base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char >(1 , 235 );
933
+ base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char >(1 , 75 );
934
+ base58Prefixes[BLINDED_ADDRESS] = std::vector<unsigned char >(1 , 4 );
935
+ base58Prefixes[SECRET_KEY] = std::vector<unsigned char >(1 , 239 );
936
+
937
+ consensus.vDeployments [Consensus::DEPLOYMENT_DYNA_FED].bit = 25 ;
938
+ consensus.vDeployments [Consensus::DEPLOYMENT_DYNA_FED].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE;
939
+ consensus.vDeployments [Consensus::DEPLOYMENT_DYNA_FED].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
940
+ consensus.vDeployments [Consensus::DEPLOYMENT_DYNA_FED].min_activation_height = 0 ; // No activation delay
941
+
942
+ UpdateFromArgs (args);
943
+ SetGenesisBlock ();
944
+ consensus.hashGenesisBlock = genesis.GetHash ();
945
+ }
946
+ };
947
+
948
+ /* *
949
+ * Liquid testnet (customparams with a few defaults).
950
+ */
951
+ class CLiquidTestNetParams : public CCustomParams {
952
+ public:
953
+ CLiquidTestNetParams (const std::string& chain, const ArgsManager& args) : CCustomParams(chain, args)
954
+ {
955
+ strNetworkID = chain;
956
+ // not a debug chain
957
+ fDefaultConsistencyChecks = false ;
958
+
959
+ initialFreeCoins = 2100000000000000 ;
960
+ anyonecanspend_aremine = false ;
961
+ consensus.max_block_signature_size = 150 ;
962
+ consensus.dynamic_epoch_length = 1000 ;
963
+
964
+ // no parent chain by default
965
+ consensus.has_parent_chain = false ;
966
+ parentGenesisBlockHash = uint256 ();
967
+
968
+ bech32_hrp = " tex" ;
969
+ blech32_hrp = " tlq" ;
970
+
971
+ base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char >(1 , 36 );
972
+ base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char >(1 , 19 );
973
+ base58Prefixes[BLINDED_ADDRESS] = std::vector<unsigned char >(1 , 23 );
974
+ base58Prefixes[SECRET_KEY] = std::vector<unsigned char >(1 , base58Prefixes[SECRET_KEY][0 ]);
975
+
976
+ // disable automatic dynafed
977
+ consensus.vDeployments [Consensus::DEPLOYMENT_DYNA_FED].nStartTime = 0 ;
978
+
979
+ nDefaultPort = 18891 ;
980
+ vSeeds.clear ();
981
+ vFixedSeeds = std::vector<uint8_t >(std::begin (pnSeed6_liquidtestnet), std::end (pnSeed6_liquidtestnet));
982
+
983
+ default_magic_str = " 410EDD62" ;
984
+ default_signblockscript = " 51210217e403ddb181872c32a0cd468c710040b2f53d8cac69f18dad07985ee37e9a7151ae" ;
917
985
UpdateFromArgs (args);
986
+ multi_data_permitted = true ;
918
987
SetGenesisBlock ();
919
988
consensus.hashGenesisBlock = genesis.GetHash ();
989
+ if (!args.IsArgSet (" -seednode" )) {
990
+ vSeeds.emplace_back (" seed.liquid-testnet.blockstream.com" );
991
+ vSeeds.emplace_back (" seed.liquidtestnet.com" );
992
+ }
920
993
}
921
994
};
922
995
@@ -1461,6 +1534,8 @@ std::unique_ptr<const CChainParams> CreateChainParams(const ArgsManager& args, c
1461
1534
return std::unique_ptr<CChainParams>(new CLiquidV1Params ());
1462
1535
} else if (chain == CBaseChainParams::LIQUID1TEST) {
1463
1536
return std::unique_ptr<CChainParams>(new CLiquidV1TestParams (args));
1537
+ } else if (chain == CBaseChainParams::LIQUIDTESTNET) {
1538
+ return std::unique_ptr<CChainParams>(new CLiquidTestNetParams (chain, args));
1464
1539
}
1465
1540
1466
1541
return std::unique_ptr<CChainParams>(new CCustomParams (chain, args));
0 commit comments