主页 > imtoken地址是什么 > 比特币源码学习六

比特币源码学习六

imtoken地址是什么 2023-08-19 05:07:27

比特币重置网络选择_比特币网络钱包_比特币p2p网络

定义:

const std::string CBaseChainParams::MAIN = "main"; //主网

const std::string CBaseChainParams::TESTNET = "测试"; //测试网

const std::string CBaseChainParams::REGTEST = "regtest"; //私有网络

4) 如果只设置了测试网络,则返回CBaseChainParams::TESTNET;

5) 如果两者都没有设置,则返回,然后返回 CBaseChainParams::MAIN。

(2) 基本网络参数设置

获取网络名称后,我们将其传递给SelectParams函数,该函数在chainparams.cpp中实现,其函数实现如下:

void SelectParams(conststd::string& 网络)

{

SelectBaseParams(网络);

pCurrentParams = &Params(网络);

}

在这个函数中,首先调用了 SelectBaseParams 函数。 该函数的实现位于chainparamsbase.cpp中,其函数实现内容如下:

void SelectBaseParams(conststd::string& chain)

{

pCurrentBaseParams = &BaseParams(链);

}

在这个函数中,实现了对链参数对象pCurrentBaseParams的赋值。 pCurrentBaseParams 的类型是一个 CBaseChainParams 指针,它的定义位于 src/chainparams.cpp 中。 从定义可以看出pCurrentBaseParams是一个静态全局变量。

静态 CBaseChainParams* pCurrentBaseParams = 0;

CBaseChainParams类是上述区块链三个基本参数的基类。 区块链的三个基本参数设置类是:CBaseMainParams、CBaseTestNetParams、CBaseRegTestParams,定义在src/chainparamsbase.cpp中。 具体定义代码如下:

/**

*主网main network

*/

CBaseMainParams 类:publicCBaseChainParams

{

上市:

CBaseMainParams()

{

nRPCPort = 8332;

}

};

静态 CBaseMainParams mainParams;

/**

*Testnet (v3) 测试网络

*/

CBaseTestNetParams 类:publicCBaseChainParams

{

上市:

CBaseTestNetParams() 函数

{

nRPCPort = 18332;

strDataDir = "testnet3";

}

};

静态 CBaseTestNetParams 测试网络参数;

/*

*回归测试私链

*/

CBaseRegTestParams 类:publicCBaseChainParams

{

上市:

CBaseRegTestParams() 函数

{

nRPCPort = 18332;

strDataDir = "注册测试";

}

};

静态 CBaseRegTestParams regTestParams;

从上面的定义可以看出,主链、测试链和私有链使用的端口和数据目录都定义在各个类的构造函数中,端口分别为8332、18332和18332。

完成三个链的定义后,我们再看看BaseParams函数的实现,方便理解其返回值的含义:

CBaseChainParams& BaseParams(conststd::string& 链)

{

如果(链 == CBaseChainParams::MAIN)

返回主要参数;

else if (chain == CBaseChainParams::TESTNET)

返回测试网络参数;

else if (chain == CBaseChainParams::REGTEST)

返回 regTestParams;

别的

throw std::runtime_error(strprintf("%s: Unknown chain %s.",__func__, chain));

}

BaseParams 会返回对应链的基本参数对象,赋值给pCurrentBaseParams。

(3) 主要参数设置

最后让我们看看 pCurrentParams = &Params(network); SelectParams 中的代码。 它的实现有点类似于我们刚刚看到的BaseParams,只是少了Base这个词。 我们可以理解为在执行完链的基本参数设置后,比特币程序会设置相应链的主要参数。 从Params函数的实现可以看出,其实现与BaseParams相同,都是根据链名获取对应的链参数对象,只是这里的链接参数类包含的参数信息更加详细. 主链、测试链、私有链对应的类分别是CMainParams、CTestNetParams、CRegTestParamsstatic。 这三个类的定义位于src/chainparams.cpp中,它们都继承了CChainParams类。 通过CChainParams我们可以知道,链参数类主要实现了共识参数、CDNSSeedData种子数据、默认端口、创世区块信息以及链上交易数据等参数设置。

这里我们重点关注共识参数和创世块信息参数比特币重置网络选择,分别是:

共识::参数共识;

C 区块创世;

因为我们主要用的是主网,所以我们用主网中的参数来说明我们经常听到的区块奖励减半、区块生成时间、创世区块奖励等参数怎么设置。

区块奖励减半间隔:consensus.nSubsidyHalvingInterval = 210000;

计算电源限制值:共识。

算力修改区间:consensus.nPowTargetSpacing = 10 * 60; 也就是10分钟

创世块 genesis = CreateGenesisBlock(1231006505, 2083236893, 0x1d00ffff, 1, 50 * COIN); 第一个区块的奖励是 50 个比特币

以上参数是我们经常听到的名词。 如果我们想创建自己的数字货币,只需要修改这些参数即可。 50 的比特币奖励应该是 100 或其他一些数字。 所以创造自己的数字货币并不难,关键是看它有没有应用价值。

在定义完每个类之后比特币重置网络选择,程序还定义了对应的静态链参数对象。

静态 CMainParams mainParams;

staticCTestNetParams 测试网络参数;

staticCRegTestParams regTestParams;

Params会根据用户设置的链参数名称返回对应的链参数给pCurrentParams,从而完成实现链的基本参数和主要参数的任务。

至此,程序根据用户输入的网络类型参数完成了比特币运行网络的设置。 在这段代码中,我知道专用网络。 以前听到最多的是主网和测试网,很少听到私网或者私链。 在这段代码中,我知道私链就是开发团队。 开发时使用的网络,由于其挖矿难度很低,很容易调试程序和进行功能测试。 然后让我理解为什么有些区块链项目说他们会在XX时间进入测试网阶段,然后是最后的主网运行阶段。 因此,区块链的开发流程应该是这样的:

比特币重置网络选择_比特币网络钱包_比特币p2p网络

以上就是本文的源码学习过程。 通过源码学习,让我对区块链网络的运行过程有了更深入的了解,也让我清楚地了解了市场上各个区块链的具体流程,可以让我更好的进行投资,对我的投资也有很大的帮助通过准确判断每个区块链产品的价值,在区块链资产中。

我是区块链研究所的菜菜子。 我会继续深入研究比特币的源代码。 源码学习系列也会持续更新,敬请期待!