51%攻击指的是:51%算力和49%算力分别产生两条链条,(需要做网络隔离)然后51%算力的链条成为最长链,覆盖49%的链条。51%攻击实际上是51%以上攻击的概括,可以是52%攻击,也可以是53%攻击,更可以是99%攻击,99.9999%攻击,算力比重越大,成功概率越高。
如果只有51%算力,攻击覆盖1个区块的成功概率只有50%,覆盖2个区块的成功概率只有25%。10个区块只有0.1%,要覆盖的区块越多,成功概率呈指数下降,越来越渺茫。相关算法在比特币白皮书有详细论述。
比特币白皮书并没有判断最长链的代码实现例子,早期比特币代码也比较简单,只是按照区块高度判定最长链,这种判定方法已经被废弃。现在判定最长链是依据“累计难度(工作量)”来做计算,每一个区块会累积chainwork数值,区块的难度系数越高累积的chainwork越快,具体算法举例如下:
依次类推。
我们来找一个具体的例子,两个相邻的区块,通过getblock命令查询其chainwork值如下:
getblock 00000000004e21391302f0a9d51bfa7ee0fd2af67f70c7fe2182d65e9719dc55
"difficulty": 256,
"chainwork": "0000000000000000000000000000000000000000007cb5f9cafa4ffcd4ccac4b",
getblock 00000000001f323bb6cd087d5f57d27f094257b4d3170bc0da8d02bd94275e61
"difficulty": 256,
"chainwork": "0000000000000000000000000000000000000000007cb5f9cafa50fcd5ccad4b",
关于难度值的计算过程有很多详细的文档,这里不再重述,我们需要知道chainwork值的最后8个数字(16进制,对应32位)是对应目标hash难度阈值,简易计算直接去掉,前面部分的数值就是难度值累积,因此上述两个区块的难度值累加数值如下:
0x7cb5f9cafa4ffc 0x7cb5f9cafa50fc
两者相减0x7cb5f9cafa50fc-0x7cb5f9cafa4ffc=0x100=256(10进制),第一个区块的难度值就是256。难度值256对应1.8G的算力(10分钟出块),这里再次略去大量算法解释。
总而言之,通过chainwork数值,可以直观获得该链条的累积工作量,而具有高chainwork值的链条,(需要先做网络隔离)可以覆盖低chainwork值的链条。
拥有高算力的矿工,将某个节点从网络中隔离出来,然后进行挖矿,使该链条出块,是为攻击链,攻击链的chainwork超过诚实链之后,将攻击链广播出来(取消网络隔离),便可成功覆盖掉诚实链。初步总结实践思路如下:
实践这些思路可以手动操作全节点实现,需要有矿工提供算力即可,如果有现成的工具,欢迎发邮件给页脚的地址交流。经过验证之后,公开提供给矿工使用。
BCH原链使用Bitcoin ABC 0.15.1版本节点,随着网络的复苏,算力不断上升,有没有可能成为最长链,覆盖掉BCH新链。这种可能性是存在:
攻击链和诚实链在比特币白皮书里面是用于论述矿工进行分裂攻击并不划算,这样可以保证链条的高可用性和稳定性。我们知道比特币是一套基于数学(密码学)的系统,它的核心价值在于客观存在,不会受到主观意识的影响,在它早期算力低下的时候,有没有发生过51%攻击及测试,攻击链多次覆盖诚实链呢?这并不重要,重要的是,这个结果是比特币代码所认可的,最强的算力成为最终的选择,攻击成功,则攻击链也就变身为诚实链,矿工是基于“自私”干活,而不是基于“诚实”,这是比特币存在的根本。基于这个根本,我们才敢判断比特币是不易灭的,攻击比特币成功者自动成为比特币,比特币永远附身于胜者,这是数学上的意义。在复苏BCH原链的过程中,我们无法主观判定社区的价值输出量化,只能交给市场去竞争,不排斥任何竞争手段,由市场无形的手来决定:
来吧,51%攻击!
1.下载钱包
下载Bitcoin ABC 0.15.1全节点钱包(在BCH的钱包网站bitcoinabc.org下载),注意版本号只能是0.15.1,才对应的BCH原链。
2.同步区块数据
大概有140GB,需要一段时间现在。也可以从网盘下载区块数据,解压后直接拷贝到区块目录下即可。
提取码:hqsf
如果是新用户,不需要同步旧数据,可以下载修剪版(一键运行)
3.手动添加0.15.1版本的节点(可选)
因为现在节点不多,为了加速同步,建议手动添加若干个节点。
这里面找到Bitcoin ABC 0.15.1(或者Bitcoin ABC 0.14.6)的节点地址,然后在钱包控制台添加节点:
addnode "5.9.151.109:9333" add
addnode "101.200.202.108:8333" add
addnode "35.247.161.53:8333" add
让每次启动自动添加节点,用记事本建立bitcoin.conf文件,保存到数据目录下,文件内容如下:
addnode=5.9.151.109:9333
addnode=101.200.202.108:8333
addnode=35.247.161.53:8333
addnode=138.201.248.31:8333
addnode=144.76.40.144:8333
addnode=176.9.84.152:8333
4.运行getblocktemplate正常
在控制台运行getblocktemplate,显示挖矿的信息(类似下面例子),如果不正常见【常见问题解决】部分
{
"capabilities": [
"proposal"
],
"version": 536870912,
"rules": [
"csv"
],
"vbavailable": {
},
"vbrequired": 0,
"previousblockhash": "0000000001c0ed1ed2ec9eb99ef62420018d9b7935ad5f6a54b7bee730c1f66e",
"transactions": [
],
"coinbaseaux": {
"flags": ""
},
"coinbasevalue": 625000000,
"longpollid": "0000000001c0ed1ed2ec9eb99ef62420018d9b7935ad5f6a54b7bee730c1f66e2",
"target": "0000000002289c00000000000000000000000000000000000000000000000000",
"mintime": 1546736282,
"mutable": [
"time",
"transactions",
"prevblock"
],
"noncerange": "00000000ffffffff",
"sigoplimit": 160000,
"sizelimit": 8000000,
"curtime": 1558567160,
"bits": "1c02289c",
"height": 802283
}
1.运行RPC后台服务
(Windows)下启动bitcoin-qt.exe用以下参数:
bitcoin-qt.exe -server=1 -rpcuser=x -rpcpassword=x -rpcthreads=4 -rpcallowip=0.0.0.0/0 -rpcport=8332 -rpcbind=127.0.0.1
参数说明: -rpcuser:用户名(可以自定义) -rpcpassword:密码(可以自定义) -rpcport:监听端口号
启动后,用netstat -na 查看是否有127.0.0.1:8332的端口监听状态(Listening)
在Linux下运行,则将以上参数写入配置~/.bitcoin/bitcoin.conf。
2.获得挖矿用的地址(可选)
在控制台用getnewaddress命令获得新的地址,该地址用于挖矿。也可以用老的地址。但注意保管好地址的私钥。
3.启动挖矿软件
新版本的比特币客户端取消了本地挖矿功能,因此需要下载单独的挖矿软件。
经测试Win32版本可以正常运行
运行命令:
bfgminer -o http://127.0.0.1:8332/#getcbaddr -u x -p x --no-stratum -S opencl:auto --verbose --generate-to 1HxpKABeYVKdKw9C175oJ5CYmA7YibDy6B --coinbase-sig "bitcoincashcn.github.io" --net-delay
–generate-to 替换为自己的地址(不过据测试,每次钱包会自动生成新的Coinbase地址,该地址貌似设置与否没有意义)
–no-submit-stale 算力较大的时候建议加上这个参数,减少无效块拒绝。
启动正常的话,可以看到实时算力和运算日志。
前两步与方法1一样。
3.启动挖矿软件
将bfgminer命令中的“–no-stratum”参数改为“–stratum-port=3333”
bfgminer -o http://127.0.0.1:8332/#getcbaddr -u x -p x --stratum-port=3333 -S opencl:auto --verbose --generate-to 1HxpKABeYVKdKw9C175oJ5CYmA7YibDy6B --coinbase-sig "bitcoincashcn.github.io" --net-delay --no-submit-stale
启动成功后,在CMD命令行下可以看到:
C:\Users\user>netstat -na | find "3333"
TCP 0.0.0.0:3333 0.0.0.0:0 LISTENING
4.配置矿机
如下图所示,配置矿机即可:
URL设置为:[运行bfgminer的IP地址]:3333
或者:stratum+tcp://[运行bfgminer的IP地址]:3333
Worker和Password均设置为x即可。
比如在本机运行:
cgminer:cgminer.exe -o 127.0.0.1:3333 -u x -p x
蚂蚁U3矿机的.bat文件改为:
cgminer.exe --bmsc-options 115200:0.57 -o 127.0.0.1:3333 -u x -p x --bmsc-voltage 0800 --bmsc-freq 1286
其中IP地址改为运行bfgminer的电脑IP(该电脑需要关闭防火墙)。
运行正常的话,在bfgminer窗口可以看到“PXY 0:”,即为矿机的算力:
前3个步骤与方法2一致
4.配置小型矿机 Antrouter蚂蚁路由器(型号R1-BTC)
修改的配置文件如下图所示:
充值BTC之后,即可用BTC购买算力挖矿,Nicehas支持BCH原链的挖矿。
【买家页面】-【我的矿池】-添加矿池设置,【用户名】设置为自己的收币地址;设置完毕后,测试矿池连接:
矿池1:bccjp.xuexizu.cn 端口3256
矿池2:btcc.xuexizu.cn 端口3256
购买算力开挖
进入【买家页面】-【市场】,如下图所示,选择算法以及上一步设置好的矿池,算力可大可小,单价按市场行情走(价格低租不到算力,价格高产生浪费),以图中为例,每天付0.0357BTC可以获得1PH算力一天(1PH=1000T),最低每天租用0.05PH(50T算力),也就是0.0357BTC可以租用20天的50T算力);金额部分是设置总预算,比如输入0.357BTC,那么就可以跑200天50T算力。
节点已经同步到最新区块之后,在控制台运行getblocktemplate,假如报以下错误:
Bitcoin is downloading blocks… (code -10)
区块已经下载完成了,但是仍然显示在下载,是因为节点在最后一个块超过当前时间24小时之前,即使已经同步完成,也会显示未同步完成。
解决办法很简单,修改当前系统日期为最后一个块的日期,修改之后客户端很快会显示同步完成,然后再把日期改回来。
在控制台运行getblocktemplate,假如报以下错误:
Bitcoin is not connected! (code -9)
是因为节点刚启动,还没有与其他节点连接,稍等一下即可。在控制台的网路里面可以看到节点的连接情况。
bfgminer如果无法启动,在浏览器检查一下:
http://127.0.0.1:8332/#getcbaddr
如显示,则为正常:
JSONRPC server handles only POST requests
如显示:
Work queue depth exceeded
则遇到了RPC队列深度超出的问题(挖矿速度太快),可以在启动bitcoin-qt(或bitcoind)加上配置参数:
-rpcworkqueue=100
关于EDA的机制:
简单来说,如果2个块出块时间间隔大于12个小时,那么从第9个块开始,难度将会自动下调,连续下降6次,每次下降20%,即难度会下降大概75%,有利于加速出块。当然,这对于链条而言是不安全,低算力挖出来的矿,未来也可能会被覆盖回滚(即所谓51%算力攻击)。
因为矿池一般有1%的手续费,而且奖励发放有一定的滞后性(比特币规定每挖出一个块都需要等100个块,挖出来的币才能用)。而且大量矿工聚集在少量矿池是不安全的,矿池需要分散化部署,目前测试了ckpool、unomp(开源)矿池均适用于BCC的挖矿,本站有详细安装教程。
阶段 | 开始日期 | 区块高度 | 难度系数 | 结束日期 | 区块高度 | 难度系数 |
---|---|---|---|---|---|---|
第一阶段 | 2017-08-01 | 478558 | 860221984436(12位) | 2017-11-14 | 504031 | 522462745900(12位) |
第二阶段 | 2017-11-15 | 504032 | 522462745900(12位) | 2018-05-21 | 576698 | 408221970(9位) |
第三阶段 | 2018-05-21 | 576698 | 408221970(9位) | 2019-01-06 | 802282 | 118(3位) |
第一阶段:比特币现金原链的第一个块是区块高度478558,直到第一次硬分叉,这个阶段由比特大陆等BCH发起者主导的社区进行维护,第一个阶段大概运行了3个月。
第二阶段:在2017年11月14号BCH启动第一次硬分叉(在区块高度504032),BCH中文社区具有强大的操纵力量,没有任何媒体报道该次硬分叉,可能导致分叉出两种币种的可能性(原链和新链),大量的新闻稿将之描述为“升级”而不是“分叉”。在分叉前后,Reddit社区则有关于硬分叉原链继续出块的相关讨论,在硬分叉之后两天后,原链继续出块的信息就出现了,并且,很快有人建立了相关的社交媒体账号(Twiiter及github),开始有人跟进原链存活的情况,搭建基础设施,浏览器、网站和矿池,并将原链命名为Bitcoin Clashic,以及上线了交易所CryptoBridge。该项目社区大概聚集了数千个用户,若干名匿名开发者一直维护该社区,直到2018年5月21号,开发者决定执行Bitcoin Clashic的硬分叉(在区块高度576689),并新的硬分叉项目命名为BTCC(Bitcoin Core)。
第三阶段:在此之后,BCH原链缺乏社区维护,只有零星的个人及矿池继续挖矿,一直到2019年1月6号之后没有再出块。
本报告所有的记录均可以在链上查询验证。
第一个阶段,BCH分叉开始出块,这个阶段总共出了25473个区块。
产出了25473*12.5=318412.5个BCH。
BCH在2017年11月15号启动第一次硬分叉,矿工为此投入了大量的算力,在硬分叉之前其算力高点达到了6E(1E=1000P,1P=1000T),有意拉高分叉难度,使原链无法继续出块存活。根据EDA机制(详细见:BCH EDA机制和运行情况报告),假设有少量算力投入挖原链,前面6个块会保持原有难度,也就是如果有1%的算力,每个块的时间预计需要10分钟*100%/1%=1000分钟,总共需要6000分钟(约4天)。而实际上,原链在分叉后3天内出了6个块(504032~504037)
504032块:Nov 15, 2017 12:28:51 PM 504037块:Nov 16, 2017 4:49:51 PM
据此估计,这几天投入挖掘原链的算力并不少,至少保持分叉前在1%的算力(大概10~30P),这些算力的来源不明。当时在nicehash购买1P的算力,每天成本需0.18个BTC,这3天的算力成本大概在5~15个BTC左右。这些算力在挖出六个块之后并没有撤离,之后大概持续了一个月的时间继续挖掘BCC。
这六个块出现后,从第7个块开始难度下降(EDA机制触发),零散的算力从2017年11月13号开始,后面用了35天出了63个块,平均800分钟一个块:
高度 | 难度 |
---|---|
504037 | 522462745900(12位) |
504060 | 3084204616(10位) |
504067 | 808514796(9位) |
504080 | 169558404(9位) |
504090 | 35559004(8位) |
504099 | 4772879(7位) |
后来随着矿工有所增加,难度波动,并且同样有算力暴击的行为,长时间没有出块,然后快速出块。最短的有5个小时挖完2016个块,最长的(除了分叉的第一个周期)有23天挖完2016个块。
这个阶段总共挖出了72666个块,产出908325个BCH(原链)。
周期 | 起始块 | 终止块 | 总块数 | 块奖励 | 总奖励 | 起始时间 | 结束时间 | 时间差(天数) |
---|---|---|---|---|---|---|---|---|
1 | 504032 | 506015 | 1984 | 12.50 | 24800.00 | 2017/11/15 12:28 | 2017/12/20 3:40 | 34.63 |
2 | 506016 | 508031 | 2016 | 12.50 | 25200.00 | 2017/12/20 3:40 | 2017/12/21 7:24 | 1.16 |
3 | 508032 | 510047 | 2016 | 12.50 | 25200.00 | 2017/12/21 7:24 | 2017/12/22 5:28 | 0.92 |
4 | 510048 | 512063 | 2016 | 12.50 | 25200.00 | 2017/12/22 5:28 | 2017/12/27 3:30 | 4.92 |
5 | 512064 | 514079 | 2016 | 12.50 | 25200.00 | 2017/12/27 3:30 | 2018/1/1 14:06 | 5.44 |
6 | 514080 | 516095 | 2016 | 12.50 | 25200.00 | 2018/1/1 14:06 | 2018/1/9 10:25 | 7.85 |
7 | 516096 | 518111 | 2016 | 12.50 | 25200.00 | 2018/1/9 10:25 | 2018/1/11 14:34 | 2.17 |
8 | 518112 | 520127 | 2016 | 12.50 | 25200.00 | 2018/1/11 14:34 | 2018/1/13 11:30 | 1.87 |
9 | 520128 | 522143 | 2016 | 12.50 | 25200.00 | 2018/1/13 11:30 | 2018/1/15 11:38 | 2.01 |
10 | 522144 | 524159 | 2016 | 12.50 | 25200.00 | 2018/1/15 11:38 | 2018/1/18 0:12 | 2.52 |
11 | 524160 | 526175 | 2016 | 12.50 | 25200.00 | 2018/1/18 0:12 | 2018/1/28 19:13 | 10.79 |
12 | 526176 | 528191 | 2016 | 12.50 | 25200.00 | 2018/1/28 19:13 | 2018/2/3 6:10 | 5.46 |
13 | 528192 | 530207 | 2016 | 12.50 | 25200.00 | 2018/2/3 6:10 | 2018/2/7 3:02 | 3.87 |
14 | 530208 | 532223 | 2016 | 12.50 | 25200.00 | 2018/2/7 3:02 | 2018/2/9 6:00 | 2.12 |
15 | 532224 | 534239 | 2016 | 12.50 | 25200.00 | 2018/2/9 6:00 | 2018/2/10 21:48 | 1.66 |
16 | 534240 | 536255 | 2016 | 12.50 | 25200.00 | 2018/2/10 21:48 | 2018/2/13 6:54 | 2.38 |
17 | 536256 | 538271 | 2016 | 12.50 | 25200.00 | 2018/2/13 6:54 | 2018/2/16 21:58 | 3.63 |
18 | 538272 | 540287 | 2016 | 12.50 | 25200.00 | 2018/2/16 21:58 | 2018/2/18 15:31 | 1.73 |
19 | 540288 | 542303 | 2016 | 12.50 | 25200.00 | 2018/2/18 15:31 | 2018/2/20 12:11 | 1.86 |
20 | 542304 | 544319 | 2016 | 12.50 | 25200.00 | 2018/2/20 12:11 | 2018/2/24 6:52 | 3.78 |
21 | 544320 | 546335 | 2016 | 12.50 | 25200.00 | 2018/2/24 6:52 | 2018/3/1 7:24 | 5.02 |
22 | 546336 | 548351 | 2016 | 12.50 | 25200.00 | 2018/3/1 7:24 | 2018/3/3 13:47 | 2.27 |
23 | 548352 | 550367 | 2016 | 12.50 | 25200.00 | 2018/3/3 13:47 | 2018/3/4 20:29 | 1.28 |
24 | 550368 | 552383 | 2016 | 12.50 | 25200.00 | 2018/3/4 20:29 | 2018/3/6 3:07 | 1.28 |
25 | 552384 | 554399 | 2016 | 12.50 | 25200.00 | 2018/3/6 3:07 | 2018/3/8 5:34 | 2.10 |
26 | 554400 | 556415 | 2016 | 12.50 | 25200.00 | 2018/3/8 5:34 | 2018/3/10 7:34 | 2.08 |
27 | 556416 | 558431 | 2016 | 12.50 | 25200.00 | 2018/3/10 7:34 | 2018/3/11 5:43 | 0.92 |
28 | 558432 | 560447 | 2016 | 12.50 | 25200.00 | 2018/3/11 5:43 | 2018/4/2 23:18 | 22.73 |
29 | 560448 | 562463 | 2016 | 12.50 | 25200.00 | 2018/4/2 23:18 | 2018/4/3 4:50 | 0.23 |
30 | 562464 | 564479 | 2016 | 12.50 | 25200.00 | 2018/4/3 4:50 | 2018/4/10 14:25 | 7.40 |
31 | 564480 | 566495 | 2016 | 12.50 | 25200.00 | 2018/4/10 14:25 | 2018/4/29 0:56 | 18.44 |
32 | 566496 | 568511 | 2016 | 12.50 | 25200.00 | 2018/4/29 0:56 | 2018/5/2 21:53 | 3.87 |
33 | 568512 | 570527 | 2016 | 12.50 | 25200.00 | 2018/5/2 21:53 | 2018/5/5 18:21 | 2.85 |
34 | 570528 | 572543 | 2016 | 12.50 | 25200.00 | 2018/5/5 18:21 | 2018/5/13 22:50 | 8.19 |
35 | 572544 | 574559 | 2016 | 12.50 | 25200.00 | 2018/5/13 22:50 | 2018/5/17 7:46 | 3.37 |
36 | 574560 | 576575 | 2016 | 12.50 | 25200.00 | 2018/5/17 7:46 | 2018/5/19 17:11 | 2.39 |
矿池截图:
随着分叉后社区的再次硬分叉,相当部分挖BCH原链的算力转向挖BTCC,但仍有零散矿工继续挖BCH原链,截至2019年1月6号,又挖出了225584个块,并且触发了挖矿奖励减半(12.5/块降为6.25/块),总产出173万个BCH(原链)。
后期难度系数曾降到最低的数值:“1”(区块770000附近),链上最快的记录是在半小时内挖出了完整的一个周期的2016块,并且不排除曾经发生链条覆盖。
BCC中文社区在2019年7月份发起募捐,筹集并消耗了15个BTC进行了区块回滚,起始区块为550000,因此以上第二阶段第24个周期之后以及第三阶段的产出全部消除。
目前已有若干矿池在持续运作,稳定出块。
EDA机制是BCH(比特币现金)在启动分叉时能够成功持续出块的关键技术,也是BCH原链能够持续出块的关键原因。
为什么采用EDA机制,是因为:
这能够让BCH看起来更像BTC的分叉币,虽然本质上,它跟DogeCoin、LiteCoin、NameCoin等没有使用“Bitcoin XXX”标识的分叉币是一样的,关于这方面的详细研究将会在【比特币的分叉币历史】展开。通过修改代码,使难度自动下降,迅速制造出比特币的分叉币的思路,很快地被BTG(比特币黄金)、SBTC(超级比特币)、LBTC(闪电比特币)、BCD(比特币钻石)等“比特币分叉币”所学习到并加以更新,带动了一轮比特币分叉币的热潮。
触发难度下降的时间差计算,并非由区块的时间戳决定,而是由区块的时间戳中位时间MTP(median time)决定,计算过程如下:
因为是基于MTP计算时间间隔,难度的下调会有一定的滞后性,比如说,有1个块在上一个块的12小时之后产生,包含这个块在内的连续6个块,都不会触发难度下降,而在第7~12个块,每一个块都会下降20%,在12个块难度系数下降为原来的26%(0.8^6=0.26=26%)。
这个机制还有以下特点:
因为这些特点,矿工如果采取统一行动可以,先降低算力,使间隔超过12个小时,之后自动触发让区块难度不断下降,然后加大算力,在几天、几小时内挖完2016个块。这个实验在BCH原链上不断被验证,甚至出现了几分钟挖完2016个块的情况(这方面的情况会在BCH原链出块历史报告中进一步研究)。
矿工撤出算力,然后等EDA机制触发难度系数下降后,回来重新挖矿,进行算力暴击,会在短时间内获得更多出块。如下图所示,BCH遭遇到算力暴击,在半小时出块超过20个块:
BCH的区块高度很快
算力暴击的反面就是算力枯竭,矿工撤出算力让出块时间加长,最大可以加长到12个小时(超过12个小时对EDA没有意义)。
在2017年年底,已经有人深刻意识到EDA导致BCH的出块不稳定,“由于算力震荡,使用EDA的BCH有5次以上日平均出块时间高于100分钟,即1小时40分钟以上,此外还有5次以上日平均出块时间高于40分钟,与预期的10分钟相比,超出3-9倍。与此同时,对BTC出块时间造成的影响是什么呢?同期,BTC仅有6次超过14分钟,其中11月11日、12日平均出块时间最慢,均为18分钟,与10分钟的预期相比,超出不到1倍。”
矿工是由自私的动机驱动的,比特币设置了一个囚徒困境,即矿工共享挖矿产出,矿工同步增加算力,产出不变,同步减少算力,产出也不变,但矿工无法达成共识,同步减少算力,是为矿工的囚徒困境。
在比特币的矿池里面,为什么矿工很难达成共识,同步降低算力(产出不变),事实上,比特币的算力一直在稳步增长,类似于军备竞赛。因为比特币,对于减少算力投入的矿工而言,没有任何奖励,撤出挖矿的矿工把出块机会让给了其他矿工,而难度系数的调整周期(约14天)到达之后,他再次投入挖矿,所能够分享到的(难度下降)收益也是与其他矿工分享。矿工的总收益会因为停止挖矿而受损。比特币的矿工离散化,而且互相不信任,互相竞争,因此,在比特币的矿池里面,矿工极难形成同步下降算力的共识。
矿工能够在BCH矿池里面达成共识,减少算力,并触发EDA的原因:
不同的机制造成矿工不同的行为。
在算力断崖式下降的情况下,能够相对较快地恢复正常出块。
BCH在2017年11月的硬分叉,新链没有改变forkid,因此BCC与BCH的交易互相重放。我们在BCC的链条上,经常可以看到BCH的交易,反之亦然。具体的结果就是,某些地址本意是支付一个BCC,但是会同时支付出一个BCH,反之亦然。在接收者不知情的情况下,有大量的BCC因此永久丢失掉了。
比如以下交易,在两条链条都可以看到,均被打包进区块里面:
BCH的查询结果:
BCH/bitcoin-abc-0.19.6/bin# ./bitcoin-cli getrawtransaction df9b4c22f62129e563af3394e4b93c26a1f632357b0b44324aa1a48480ca1290 true
{
"txid": "df9b4c22f62129e563af3394e4b93c26a1f632357b0b44324aa1a48480ca1290",
"hash": "df9b4c22f62129e563af3394e4b93c26a1f632357b0b44324aa1a48480ca1290",
"version": 1,
"size": 224,
"locktime": 0,
"vin": [
{
"txid": "10370d2f2866db3aecf108c396398c9b780b5c12d3b49bdbbb81b4ad0e0bb28e",
"vout": 112,
"scriptSig": {
"asm": "3045022100f0194a7a69e792ced165a418b59b0956014c605294e1e71ba30661a3f4b85f99022020950e7fa2faf2000cd604dd3321196b59fdf090e44c6430a869261016b594fc[ALL|FORKID] 04093a20d2d02d2b0d586e8fcdb176f8514761ea693229b933df4d700eb51c885b2644d2206211434fa05e79c9ed5bf5f80d661ad2fb7a4e7c3ae2a71cadacce11",
"hex": "483045022100f0194a7a69e792ced165a418b59b0956014c605294e1e71ba30661a3f4b85f99022020950e7fa2faf2000cd604dd3321196b59fdf090e44c6430a869261016b594fc414104093a20d2d02d2b0d586e8fcdb176f8514761ea693229b933df4d700eb51c885b2644d2206211434fa05e79c9ed5bf5f80d661ad2fb7a4e7c3ae2a71cadacce11"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 4.99999775,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 53e2a5d8f12bdf3238ade42521cdaff626c9805b OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a91453e2a5d8f12bdf3238ade42521cdaff626c9805b88ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"bitcoincash:qpf79fwc7y4a7v3c4hjz2gwd4lmzdjvqtvqesum6vd"
]
}
}
],
"hex": "01000000018eb20b0eadb481bbdb9bb4d3125c0b789b8c3996c308f1ec3adb66282f0d3710700000008b483045022100f0194a7a69e792ced165a418b59b0956014c605294e1e71ba30661a3f4b85f99022020950e7fa2faf2000cd604dd3321196b59fdf090e44c6430a869261016b594fc414104093a20d2d02d2b0d586e8fcdb176f8514761ea693229b933df4d700eb51c885b2644d2206211434fa05e79c9ed5bf5f80d661ad2fb7a4e7c3ae2a71cadacce11ffffffff011f64cd1d000000001976a91453e2a5d8f12bdf3238ade42521cdaff626c9805b88ac00000000",
"blockhash": "00000000000000000119503e59b3f60e3755b4db96fe51264be9cfa13e38b7f7",
"confirmations": 3,
"time": 1559796025,
"blocktime": 1559796025
}
BCH原链的查询结果:
/BCL/bitcoin-abc-0.15.1/bin# ./bitcoin-cli getrawtransaction df9b4c22f62129e563af3394e4b93c26a1f632357b0b44324aa1a48480ca1290 true
{
"hex": "01000000018eb20b0eadb481bbdb9bb4d3125c0b789b8c3996c308f1ec3adb66282f0d3710700000008b483045022100f0194a7a69e792ced165a418b59b0956014c605294e1e71ba30661a3f4b85f99022020950e7fa2faf2000cd604dd3321196b59fdf090e44c6430a869261016b594fc414104093a20d2d02d2b0d586e8fcdb176f8514761ea693229b933df4d700eb51c885b2644d2206211434fa05e79c9ed5bf5f80d661ad2fb7a4e7c3ae2a71cadacce11ffffffff011f64cd1d000000001976a91453e2a5d8f12bdf3238ade42521cdaff626c9805b88ac00000000",
"txid": "df9b4c22f62129e563af3394e4b93c26a1f632357b0b44324aa1a48480ca1290",
"hash": "df9b4c22f62129e563af3394e4b93c26a1f632357b0b44324aa1a48480ca1290",
"size": 224,
"version": 1,
"locktime": 0,
"vin": [
{
"txid": "10370d2f2866db3aecf108c396398c9b780b5c12d3b49bdbbb81b4ad0e0bb28e",
"vout": 112,
"scriptSig": {
"asm": "3045022100f0194a7a69e792ced165a418b59b0956014c605294e1e71ba30661a3f4b85f99022020950e7fa2faf2000cd604dd3321196b59fdf090e44c6430a869261016b594fc[ALL|FORKID] 04093a20d2d02d2b0d586e8fcdb176f8514761ea693229b933df4d700eb51c885b2644d2206211434fa05e79c9ed5bf5f80d661ad2fb7a4e7c3ae2a71cadacce11",
"hex": "483045022100f0194a7a69e792ced165a418b59b0956014c605294e1e71ba30661a3f4b85f99022020950e7fa2faf2000cd604dd3321196b59fdf090e44c6430a869261016b594fc414104093a20d2d02d2b0d586e8fcdb176f8514761ea693229b933df4d700eb51c885b2644d2206211434fa05e79c9ed5bf5f80d661ad2fb7a4e7c3ae2a71cadacce11"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 4.99999775,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 53e2a5d8f12bdf3238ade42521cdaff626c9805b OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a91453e2a5d8f12bdf3238ade42521cdaff626c9805b88ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"18eYbh2GHiZ7FhQ2STYXWRwNBYautahxVN"
]
}
}
],
"blockhash": "000000000000017f30da82672f981ea815b0fe250edf68a85f1264ccdf833c4d",
"confirmations": 19,
"time": 1559795924,
"blocktime": 1559795924
}
同时拥有BCC和BCH的地址,需要按照以下办法进行资产分离。
在ETC(ETH原链)刚出现的时候,有人利用ETC和ETH的重放攻击,从交易所盗取了ETC,相关的办法同样适用于BCH,方法如下(如果交易所已经做了资产分离则无效):
目前我们看到的情况是凡是硬分叉均可能会引起原链分叉,凡是软分叉都不会引起原链分叉。
有两种常见办法:
ABC链在556767块率先打出的块中包含了DSV(OP_CHECKDATASIGVERIFY)和CTOR(规范排序)特性,那么SV链认为该区块无效,是不可能承认ABC 556767块,以及所有的后继块的。
反之,SV链在556767块打出的块包含了OP_MUL,是一个ABC不支持的操作码,那么ABC同样认为该区块无效,是不可能承认SV 556767块,以及所有的后继块的。
又如,如果SV打出一个大于32MB的区块,或者在一个脚本中加入超过201个操作码等类似操作,都能造成事实上的不兼容。
因此,任何一方只要打出对方不支持的块,那么这两条链在事实上就分道扬镳了,无论算力多还是算力少,无论区块高度领先还是落后。
这是双向的互相不兼容,而BCH原链和新链是单向的不兼容。
这种可能性是存在的:
但具体什么时候,无法逆料。放在一个很长的历史眼光去看待这件事情,去中心化的BCC的chainwork始终是存在超越BCH的可能性。
目前全球有9000多个全节点(包含全部区块信息)比特币客户端,
BCH刚发布的时候,用的就是比特币的钱包(修改了参数),端口、标识、DNS都没有改动。在Bitcoin ABC 0.16.1之后,BCH的全节点钱包才能够和比特币的全节点钱包在同一台电脑上共存。
下面这3种全节点钱包属于BCH:
版本 | 区块高度 |
---|---|
Satoshi:0.8.1 | 577088 |
Satoshi:0.9.3 | 577088 |
Satoshi:0.10.2 | 577088 |
Satoshi:0.11.0 | 577088 |
Satoshi:0.12.1 | 577088 |
Satoshi:0.13.1 | 577088 |
Satoshi:0.14.1 | 577088 |
Satoshi:0.15.1 | 577088 |
Satoshi:0.16.1 | 577088 |
Satoshi:0.17.1 | 577088 |
Satoshi:0.18.1 | 577088 |
版本 | 区块高度 |
---|---|
Bitcoin ABC 0.14.5 | 504047 |
Bitcoin ABC 0.14.6 | 760605 |
Bitcoin ABC 0.15.1 | 802282 |
Bitcoin ABC 0.16.1 | 530361 |
更新版本的BCH节点钱包,随着硬分叉升级区块高度也各有不同, 2019/5/21 22:14:19
比特币在早期修复了一些漏洞了之后,在0.80版本之后一直采用软分叉(softfork)方式升级,很古老的版本到最新的版本的钱包,均保存着相同的一条区块链。
而每年2次硬分叉的BCH,每一次硬分叉(hardfork)升级,旧版本的钱包和新版本钱包的区块互相不兼容,实际上成为了多条并行的链条。当然,旧版本的钱包(原链)因为缺乏算力投入挖矿,所以区块是停滞的,其中Bitcoin ABC 0.15.1版本,因为EDA算法调节难度,以及得到了矿工的投入,可以持续出块,是为BCH原链(BCL)。