Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add native support for liquidtestnet #1167

Merged
merged 8 commits into from
Nov 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions contrib/seeds/liquid/nodes_main.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# List of fixed seed nodes for liquidv1

35.196.16.254:7042
35.237.176.63:7042
35.237.81.14:7042
35.237.147.21:7042
35.227.95.109:7042
35.231.141.173:7042
104.196.48.184:7042
35.231.10.147:7042
4 changes: 4 additions & 0 deletions contrib/seeds/liquid/nodes_test.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# List of fixed seed nodes for liquidtestnet

34.68.67.175:18891
79.98.30.13:18891
2 changes: 1 addition & 1 deletion share/setup.nsi.in
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ Section -post SEC0001
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory $SMPROGRAMS\$StartMenuGroup
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@PACKAGE_NAME@ (testnet, 64-bit).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-testnet" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 1
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@PACKAGE_NAME@ (testnet, 64-bit).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-chain=liquidtestnet" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 1
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe
!insertmacro MUI_STARTMENU_WRITE_END
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)"
Expand Down
115 changes: 95 additions & 20 deletions src/chainparams.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -735,6 +735,9 @@ void CRegTestParams::UpdateActivationParametersFromArgs(const ArgsManager& args)
* Custom params for testing.
*/
class CCustomParams : public CRegTestParams {
protected:
std::string default_magic_str = "5319F20E";
std::string default_signblockscript = "51";
void UpdateFromArgs(const ArgsManager& args)
{
UpdateActivationParametersFromArgs(args);
Expand All @@ -757,7 +760,7 @@ class CCustomParams : public CRegTestParams {
consensus.nMinimumChainWork = uint256S(args.GetArg("-con_nminimumchainwork", "0x0"));
consensus.defaultAssumeValid = uint256S(args.GetArg("-con_defaultassumevalid", "0x00"));
// TODO: Embed in genesis block in nTime field with new genesis block type
consensus.dynamic_epoch_length = args.GetArg("-dynamic_epoch_length", 10);
consensus.dynamic_epoch_length = args.GetArg("-dynamic_epoch_length", consensus.dynamic_epoch_length);
// Default junk keys for testing
consensus.first_extension_space = {ParseHex("02fcba7ecf41bc7e1be4ee122d9d22e3333671eb0a3a87b5cdf099d59874e1940f02fcba7ecf41bc7e1be4ee122d9d22e3333671eb0a3a87b5cdf099d59874e1940f")};
std::vector<std::string> pak_list_str = args.GetArgs("-pak");
Expand All @@ -772,12 +775,16 @@ class CCustomParams : public CRegTestParams {
fDefaultConsistencyChecks = args.GetBoolArg("-fdefaultconsistencychecks", fDefaultConsistencyChecks);
m_is_test_chain = args.GetBoolArg("-fmineblocksondemand", m_is_test_chain);

bech32_hrp = args.GetArg("-bech32_hrp", "ert");
blech32_hrp = args.GetArg("-blech32_hrp", "el");
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1, args.GetArg("-pubkeyprefix", 235));
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1, args.GetArg("-scriptprefix", 75));
base58Prefixes[BLINDED_ADDRESS] = std::vector<unsigned char>(1, args.GetArg("-blindedprefix", 4));
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1, args.GetArg("-secretprefix", 239));
bech32_hrp = args.GetArg("-bech32_hrp", bech32_hrp);
blech32_hrp = args.GetArg("-blech32_hrp", blech32_hrp);
assert(base58Prefixes[PUBKEY_ADDRESS].size() == 1);
assert(base58Prefixes[SCRIPT_ADDRESS].size() == 1);
assert(base58Prefixes[BLINDED_ADDRESS].size() == 1);
assert(base58Prefixes[SECRET_KEY].size() == 1);
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1, args.GetArg("-pubkeyprefix", base58Prefixes[PUBKEY_ADDRESS][0]));
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1, args.GetArg("-scriptprefix", base58Prefixes[SCRIPT_ADDRESS][0]));
base58Prefixes[BLINDED_ADDRESS] = std::vector<unsigned char>(1, args.GetArg("-blindedprefix", base58Prefixes[BLINDED_ADDRESS][0]));
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1, args.GetArg("-secretprefix", base58Prefixes[SECRET_KEY][0]));
base58Prefixes[PARENT_PUBKEY_ADDRESS] = std::vector<unsigned char>(1, args.GetArg("-parentpubkeyprefix", 111));
base58Prefixes[PARENT_SCRIPT_ADDRESS] = std::vector<unsigned char>(1, args.GetArg("-parentscriptprefix", 196));
parent_bech32_hrp = args.GetArg("-parent_bech32_hrp", "bcrt");
Expand All @@ -792,7 +799,7 @@ class CCustomParams : public CRegTestParams {
assert(IsHex(extprvprefix) && extprvprefix.size() == 8 && "-extprvkeyprefix must be hex string of length 8");
base58Prefixes[EXT_SECRET_KEY] = ParseHex(extprvprefix);

const std::string magic_str = args.GetArg("-pchmessagestart", "5319F20E");
const std::string magic_str = args.GetArg("-pchmessagestart", default_magic_str);
assert(IsHex(magic_str) && magic_str.size() == 8 && "-pchmessagestart must be hex string of length 8");
const std::vector<unsigned char> magic_byte = ParseHex(magic_str);
std::copy(begin(magic_byte), end(magic_byte), pchMessageStart);
Expand All @@ -812,10 +819,9 @@ class CCustomParams : public CRegTestParams {
consensus.genesis_style = args.GetArg("-con_genesis_style", "elements");

// Block signing encumberance script, default of 51 aka OP_TRUE
std::vector<unsigned char> sign_bytes = ParseHex(args.GetArg("-signblockscript", "51"));
std::vector<unsigned char> sign_bytes = ParseHex(args.GetArg("-signblockscript", default_signblockscript));
consensus.signblockscript = CScript(sign_bytes.begin(), sign_bytes.end());
// Default signature size is the size of dummy push, and single 72 byte DER signature
consensus.max_block_signature_size = args.GetArg("-con_max_block_sig_size", 74);
consensus.max_block_signature_size = args.GetArg("-con_max_block_sig_size", consensus.max_block_signature_size);
g_signed_blocks = args.GetBoolArg("-con_signed_blocks", true);

// Note: These globals are needed to avoid circular dependencies.
Expand All @@ -834,19 +840,19 @@ class CCustomParams : public CRegTestParams {
// Custom chains connect coinbase outputs to db by default
consensus.connect_genesis_outputs = args.GetArg("-con_connect_genesis_outputs", true);

initialFreeCoins = args.GetArg("-initialfreecoins", 0);
initialFreeCoins = args.GetArg("-initialfreecoins", initialFreeCoins);

anyonecanspend_aremine = args.GetBoolArg("-anyonecanspendaremine", true);
anyonecanspend_aremine = args.GetBoolArg("-anyonecanspendaremine", anyonecanspend_aremine);

consensus.has_parent_chain = args.GetBoolArg("-con_has_parent_chain", true);
consensus.has_parent_chain = args.GetBoolArg("-con_has_parent_chain", consensus.has_parent_chain);

enforce_pak = args.GetBoolArg("-enforce_pak", false);

// Allow multiple op_return outputs by relay policy
multi_data_permitted = args.GetBoolArg("-multi_data_permitted", enforce_pak);

// bitcoin regtest is the parent chain by default
parentGenesisBlockHash = uint256S(args.GetArg("-parentgenesisblockhash", "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206"));
parentGenesisBlockHash = uint256S(args.GetArg("-parentgenesisblockhash", parentGenesisBlockHash.GetHex()));
// Either it has a parent chain or not
const bool parent_genesis_is_null = parentGenesisBlockHash == uint256();
assert(consensus.has_parent_chain != parent_genesis_is_null);
Expand Down Expand Up @@ -880,11 +886,6 @@ class CCustomParams : public CRegTestParams {
consensus.subsidy_asset = CAsset(uint256S(args.GetArg("-subsidyasset", "0x00")));
}

consensus.vDeployments[Consensus::DEPLOYMENT_DYNA_FED].bit = 25;
consensus.vDeployments[Consensus::DEPLOYMENT_DYNA_FED].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE;
consensus.vDeployments[Consensus::DEPLOYMENT_DYNA_FED].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
consensus.vDeployments[Consensus::DEPLOYMENT_DYNA_FED].min_activation_height = 0; // No activation delay

UpdateElementsActivationParametersFromArgs(consensus, args);
// END ELEMENTS fields
}
Expand Down Expand Up @@ -914,9 +915,81 @@ class CCustomParams : public CRegTestParams {
CCustomParams(const std::string& chain, const ArgsManager& args) : CRegTestParams(args)
{
strNetworkID = chain;

//default settings
initialFreeCoins = 0;
anyonecanspend_aremine = true;
// Default signature size is the size of dummy push, and single 72 byte DER signature
consensus.max_block_signature_size = 74;
consensus.dynamic_epoch_length = 10;
// bitcoin regtest is the parent chain by default
consensus.has_parent_chain = true;
parentGenesisBlockHash = uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206");

bech32_hrp = "ert";
blech32_hrp = "el";

base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1, 235);
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1, 75);
base58Prefixes[BLINDED_ADDRESS] = std::vector<unsigned char>(1, 4);
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1, 239);

consensus.vDeployments[Consensus::DEPLOYMENT_DYNA_FED].bit = 25;
consensus.vDeployments[Consensus::DEPLOYMENT_DYNA_FED].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE;
consensus.vDeployments[Consensus::DEPLOYMENT_DYNA_FED].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
consensus.vDeployments[Consensus::DEPLOYMENT_DYNA_FED].min_activation_height = 0; // No activation delay

UpdateFromArgs(args);
SetGenesisBlock();
consensus.hashGenesisBlock = genesis.GetHash();
}
};

/**
* Liquid testnet (customparams with a few defaults).
*/
class CLiquidTestNetParams : public CCustomParams {
public:
CLiquidTestNetParams(const std::string& chain, const ArgsManager& args) : CCustomParams(chain, args)
{
strNetworkID = chain;
// not a debug chain
fDefaultConsistencyChecks = false;

initialFreeCoins = 2100000000000000;
anyonecanspend_aremine = false;
consensus.max_block_signature_size = 150;
consensus.dynamic_epoch_length = 1000;

// no parent chain by default
consensus.has_parent_chain = false;
parentGenesisBlockHash = uint256();

bech32_hrp = "tex";
blech32_hrp = "tlq";

base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1, 36);
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1, 19);
base58Prefixes[BLINDED_ADDRESS] = std::vector<unsigned char>(1, 23);
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1, base58Prefixes[SECRET_KEY][0]);

// disable automatic dynafed
consensus.vDeployments[Consensus::DEPLOYMENT_DYNA_FED].nStartTime = 0;

nDefaultPort = 18891;
vSeeds.clear();
vFixedSeeds = std::vector<uint8_t>(std::begin(pnSeed6_liquidtestnet), std::end(pnSeed6_liquidtestnet));

default_magic_str = "410EDD62";
default_signblockscript = "51210217e403ddb181872c32a0cd468c710040b2f53d8cac69f18dad07985ee37e9a7151ae";
UpdateFromArgs(args);
multi_data_permitted = true;
SetGenesisBlock();
consensus.hashGenesisBlock = genesis.GetHash();
if (!args.IsArgSet("-seednode")) {
vSeeds.emplace_back("seed.liquid-testnet.blockstream.com");
vSeeds.emplace_back("seed.liquidtestnet.com");
}
}
};

Expand Down Expand Up @@ -1461,6 +1534,8 @@ std::unique_ptr<const CChainParams> CreateChainParams(const ArgsManager& args, c
return std::unique_ptr<CChainParams>(new CLiquidV1Params());
} else if (chain == CBaseChainParams::LIQUID1TEST) {
return std::unique_ptr<CChainParams>(new CLiquidV1TestParams(args));
} else if (chain == CBaseChainParams::LIQUIDTESTNET) {
return std::unique_ptr<CChainParams>(new CLiquidTestNetParams(chain, args));
}

return std::unique_ptr<CChainParams>(new CCustomParams(chain, args));
Expand Down
3 changes: 3 additions & 0 deletions src/chainparamsbase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const std::string CBaseChainParams::SIGNET = "signet";
const std::string CBaseChainParams::REGTEST = "regtest";
const std::string CBaseChainParams::LIQUID1 = "liquidv1";
const std::string CBaseChainParams::LIQUID1TEST = "liquidv1test";
const std::string CBaseChainParams::LIQUIDTESTNET = "liquidtestnet";

const std::string CBaseChainParams::DEFAULT = CBaseChainParams::LIQUID1;

Expand Down Expand Up @@ -89,6 +90,8 @@ std::unique_ptr<CBaseChainParams> CreateBaseChainParams(const std::string& chain
return std::make_unique<CBaseChainParams>("liquidv1", 7041, 8332, 37041);
} else if (chain == CBaseChainParams::LIQUID1TEST) {
return std::make_unique<CBaseChainParams>("liquidv1test", 7040, 18332, 37040); // Use same ports as customparams
} else if (chain == CBaseChainParams::LIQUIDTESTNET) {
return std::make_unique<CBaseChainParams>(chain, 7039, 18331, 37039);
}

// ELEMENTS:
Expand Down
1 change: 1 addition & 0 deletions src/chainparamsbase.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class CBaseChainParams
static const std::string REGTEST;
static const std::string LIQUID1;
static const std::string LIQUID1TEST;
static const std::string LIQUIDTESTNET;
///@}

static const std::string DEFAULT;
Expand Down
5 changes: 5 additions & 0 deletions src/chainparamsseeds.h
Original file line number Diff line number Diff line change
Expand Up @@ -718,4 +718,9 @@ static uint8_t pnSeed6_liquidv1[] = {
0x01,0x04,0x68,0xc4,0x30,0xb8,0x1b,0x82,
0x01,0x04,0x23,0xe7,0x0a,0x93,0x1b,0x82,
};

static uint8_t pnSeed6_liquidtestnet[] = {
0x01,0x04,0x22,0x44,0x43,0xaf,0x49,0xcb,
0x01,0x04,0x4f,0x62,0x1e,0x0d,0x49,0xcb,
};
#endif // BITCOIN_CHAINPARAMSSEEDS_H
1 change: 1 addition & 0 deletions src/qt/guiconstants.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ static const int TOOLTIP_WRAP_THRESHOLD = 80;
#define QAPP_APP_NAME_SIGNET "Elements-Qt-signet"
#define QAPP_APP_NAME_REGTEST "Elements-Qt-regtest"
#define QAPP_APP_NAME_LIQUID "Elements-Qt (Liquid)"
#define QAPP_APP_NAME_LIQUIDTESTNET "Elements-Qt (liquidtestnet)"

/* One gigabyte (GB) in bytes */
static constexpr uint64_t GB_BYTES{1000000000};
Expand Down
1 change: 1 addition & 0 deletions src/qt/networkstyle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ static const struct {
{"main", QAPP_APP_NAME_DEFAULT, 0, 0},
{"test", QAPP_APP_NAME_TESTNET, 70, 30},
{"liquidv1", QAPP_APP_NAME_LIQUID, 0, 0},
{"liquidtestnet", QAPP_APP_NAME_LIQUIDTESTNET, 80, 80},
{"signet", QAPP_APP_NAME_SIGNET, 35, 15},
{"regtest", QAPP_APP_NAME_REGTEST, 160, 30}
};
Expand Down