区块链知识系列 - BTC分叉链与分叉步骤

BTC分叉链与分叉步骤

BCH

BCH是BTC的扩容方案,使用8M大区块,不支持SegWit,因为开发团队认为有了8M这么大的区块SegWit已变得无关紧要。BCH吸取了去年以太坊分叉的教训,加入了双向重放保护,所以分叉后并没有出现资产损失等混乱情况。后来其他的分叉币也普遍效仿,普遍加入重放保护。BCH于比特币区块高度478599分叉,时间在2017年8月。

BCH的挖抗算法、矿机与BTC相同,一些矿池还加入BTC/BCH自动切换功能,可为矿工自动切换至收益高的币种。最初BCH采用紧急难度调整机制(EDA),但后来发现EDA并不够稳定,有时候挖矿难度是BTC的3倍以上。所以BCH于2018年11月13日执行了硬分叉升级,目前已经加入DAA难度调整机制。

BCH由BitcoinABC、Bitcoin Unlimited、BitcoinXT等多个团队共同开发维护,所以权利并不是集中在一方手中。

BCD(比特币钻石)

BCD,是Bitcoin Diamond的缩写,中文名为比特币钻石。由Evey与007团队联合开发,Bitcoin Diamond Foundation负责运营。BCD首次公布是在SegWit2x分叉宣告失败之后,于比特币区块高度495866分叉,在2017年11月底进行。BCD使用8M大区块,支持SegWit,具有重放保护,并使用新的工作验证算法创建区块,相比BTC,它具有转账隐私保护功能,交易额也可进行加密。

比特币钻石的总发行量为2.1亿个,刚好是比特币的10倍,其中有1.7亿个比特币钻石提供给比特币的持有者,分发兑换比例是1BTC:10BCD,其余4000万个比特币现金将自动转入社区奖励池作为挖矿奖励。

11月16日,交易所Okex.com与Btcbox.co.jp宣布支持BCD。除此之外,还有Exx.com、Aex.com、Cex.com、Kex.com、Coinbene.com和Rightbtc.com等交易所也表示将会上架BCD。

在这里插入图片描述

分叉步骤 (可自行定制)

  1. 更改所有网络的默认端口(mainnet,testnet,regtest):

     nRPCPort = <port_number>; //在chainparamsbase.cpp中
     nDefaultPort = <port_number>; //在chainparams.cpp中
    
  2. 更改所有网络的“魔术消息”或消息前缀(mainnet,testnet,regtest):

     //在chainparams.cpp中
     pchMessageStart [0] = 0x <random_byte_value>; 
     pchMessageStart [1] = 0x <random_byte_value>; 
     pchMessageStart [2] = 0x <random_byte_value>; 
     pchMessageStart [3] = 0x <random_byte_value>;
    
  3. 更改所有网络(mainnet,testnet,regtest)和所有地址类型(P2PKH,P2SH和密钥)的地址前缀(可选)。

    这确定了地址的第一个字符(因此很容易识别)。请参阅地址前缀列表,了解要用于所需字符的字节值。

     //在chainparams.cpp中(参见下面的其他网)
     base58Prefixes [PUBKEY_ADDRESS] = std :: vector <unsigned char>(1,0); 
     base58Prefixes [SCRIPT_ADDRESS] = std :: vector <unsigned char>(1,5); 
     base58Prefixes [SECRET_KEY] = std :: vector <unsigned char>(1,128);
    
  4. 更改区块奖励(可选)

    这是矿工用于解决区块的硬币数量。

     //在validation.cpp中
     CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
    
  5. 改变coinbase成熟度(可选)

    这决定了需要多少块确认才能花费采矿奖励(coinbase交易)。

     // in consensus/consensus.h
     static const int COINBASE_MATURITY = 100;
    
  6. 更改减半间隔(可选)

    这决定了块奖励减半的频率。在比特币中,每2016块或每4年减半(块时间为10分钟)。请注意,这是间接影响总硬币供应的方法之一。

      // in chainparams.cpp
     consensus.nSubsidyHalvingInterval = 210000   //补贴减半间隔
    
  7. 更新最大货币支票价值

     static const CAmount MAX_MONEY = 21000000 * COIN; 在amount.h。
    
  8. 重置最小链工作

     //在chainparams.cpp中:
     consensus.nMinimumChainWork = uint256S(“00000000000000000000000000000000000000000000000000000000000100010001”);
    
  9. 删除DNS种子

    这些节点可用于在开始时为连接设定种子。

    • 在chainparams.cpp,删除行开头vSeeds.emplace_back
  10. 删除检查站

    这些是区块链中的检查点,但您将从零开始。

    • 在chainparams.cpp,设置checkpointData = {};
  11. 更新 DEFAULT_MAX_TIP_AGE

    允许区块相隔10年(4000天)(允许在2009年开采的原始成因块)。请注意,您也可以挖掘自己的创世块,但这更为复杂。

    //在validation.cpp中:
    int64_t nMaxTipAge = DEFAULT_MAX_TIP_AGE * 4000;
    
  12. 更改所有网络的阻止时间(可选)(mainnet,testnet,regtest)

    //在chainparams.cpp 
    consensus.nPowTargetSpacing = 10 * 60; // 60秒* 10 = 10分钟
    
  13. 更改所有网络的难度调整间隔(可选)(mainnet,testnet,regtest)

    这决定了块难度的调整频率,以便块时间可以平均consensus.nPowTargetSpacing参数。

    // in chainparams.cpp 
    consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; //两个星期
    

测试步骤

  1. 由于要做btc的分叉链,得先用btc的二进制程序连到btc的dns同步全节点数据(以保证继承主网上的所有数据)
  2. 主网已经产生了57W+的块,在同步完之前无法进行挖矿
  3. 同步完之后,关闭程序
  4. 修改分叉链源码,将分叉高度调整为当前块的下个块.同时去掉代码中的dns节点 (以及其它的调整)
  5. 使用修改后的分叉链的二进制程序,执行挖矿命令,产生出分叉块及后面的块(代码中对分叉块的难度做调整)
  6. 产生出一定的块后,再作为自己链的dns节点,配置到代码中
发布了58 篇原创文章 · 获赞 66 · 访问量 8179

猜你喜欢

转载自blog.csdn.net/wcc19840827/article/details/93164294