美文网首页区块链比特币投资
关于比特币的数字谜题

关于比特币的数字谜题

作者: IWW_luck | 来源:发表于2020-03-09 16:18 被阅读0次

    比特币在众人的心目中已经不再神秘,它的工作机制越来越为常人所知。但我却对原理介绍中的一些数字问题产生了好奇,例如:

    为什么矿机算力越大越好?(既然是解数学题那为什么不是拼谁的算法厉害啊喂!)

    比特币的数量总和为什么是2100万?

    51%算力攻击是什么玩意?

    6个确认讲的又是什么?

    本文不对比特币的基本原理进行详细介绍,而是围绕以下三个问题,来理清关于比特币的一些规则、细节,也解答我之前对比特币数字谜题的疑惑。

    到底什么是挖矿?——本质

    是什么在激励挖矿?——激励

    挖矿活动中的作弊行为能否得逞?——作弊

    一、挖矿的本质

    自从听说众人争相购买挖矿机以提高自己打包一个账单块之后,我的内心一直存在一个疑问:单凭那些看似简陋的机器疯狂耗费电力,就能确保自己解出比特币难题的胜率高了吗?比特币技术原理中,矿工们解决的数学题,难道是一个暴力破解题?

    今天看了一圈,发现矿工们解决的题,还真有点暴力破解的意思,每次尝试解题的过程几乎都是茫茫然、去碰运气的。拼的是谁足够幸运,也拼谁算的足够快;算的快了么,试错次数多,自然胜算也就大了。

    这个计算的过程,简单来说是对一个字符串进行两次sha256运算(哈希运算的一种,无论输入是什么格式、长度,输出都是256位的定长)得到一个RESULT(中本聪论文中称为“proof of work”,工作量证明),如果这个RESULT满足了运算结果前n位为0这个要求,这个人才能算是计算对了、才有权利去记账。

                                                          SHA-256(SHA-256(string))=RESULT

    关于这个计算过程,下面说明几点:

    第一,这个字符串string包括了很多信息,比如前一个块的头部、账单信息、时间戳、随机数等等。

    第二,hash运算最大的特性是“正算容易反算难(不可逆推)”、“及时输入只改变一点点,输出也会差很多”。hash运算没有什么规律可言,所以大家也不知道什么样子的输入才能产生自己想要的结果。

    综合以上两点来看呢,我们为了让RESULT满足要求,需要不断改变字符串中的信息。其他的信息是固定的事实,所以用户基本上会通过调整随机数来碰运气、进行多次运算。如此一看,随机数就具有“幸运数字”的意味了。因此,平均来讲,谁计算的能力越强(尝试的次数越多),就更有希望打包块。

    第三呢,前面说到RESULT需要满足一个要求“运算结果前n位为0”,n也就是人们口中说的挖矿难度,n越大,算对的概率越小,几乎是0.5的n次方。通过了解现在的挖矿算力情况,来对应调整n,可以保证区块链每十分钟出一个块,达到控制发行速度的目的。(这个的基本思想很像产品笔试的数据估算题,根据“一个提供、一个小号“的思路去构造一个等式,然后求解等式一边的一个因子)

    二、矿工的收益来源于哪里?

    矿工的收益来源有二:1、计算结果符合要求,创造一个新区块所获得的新币奖励;2、记账矿工费。

    其一,打包一个块添到链的末端,称为挖矿成功。如果是一个人挖矿成功的话,那么产生的比特币归他所属。产生规则是,第一个四年每块50btc,第二个四年每块25btc,第三个四年每块12.5btc,如此指数递减。直到2140年,比特币产生的总和约为21000000。届时,不再随区块的产生增加新的比特币,矿工不再拥有第一项收益。(现实中,由于挖矿成本高昂,挖矿成功的常常是一个小组。当这个小组得到收益之后,一般是按照组内算力贡献比例来分摊收益的。)

    其二,矿工费是给网络矿工(记账者)的,在挖矿过程中成功“挖出”新区块的矿工可以得到该区块中包含的所有交易“小费”。一般来说,矿工费越高的交易,会越快被处理。而矿工费在这里起到两个作用,一个是奖励矿工,另一个是防止主链滥用(防止大家发送交易垃圾信息,因为提出交易是有一定代价的)。

    三、 比特币中的作弊行为

    你可能会想,比特币是一个去中心化的、依靠众人力量运转的一个东西。万一有一部分矿工被坏人收买了咋办呢?“51%攻击”指的又是什么?“6个确认”又是怎么回事?

    这里首先要提到比特币的一个规则“最长链优先”。意思是,比特币的账单链在出现分叉的时候,会按照长的那一条进行下去。

    这个原则主要涉及到两个问题:

    第一个问题是区块链的自然分叉,当有两个矿工A和B同时挖矿成功(算出符合要求的数学答案)时,他们分别把自己计算出来的hash值作为下一个块的head,生成一个块衔接到原有的链后面,由此出现了两个分支。

    这个时候,这两个成功的矿工广播了自己打包成功的消息,其他的矿工们呢,有的先收到A的消息,有的先收到B的消息。收到消息的矿工们遵循一个原则:暂时保留分叉的区块,但是始终在最长的链上工作。

    因此,这两条分支会各自成长一小段时间,直到他们的长度出现差异(比如其中一条链的矿工们,更快地打包在支链后面又加上一块)。那么此时较短的链就会被抛弃(也就是说,交易具有被撤销的风险),原本工作在短链上的矿工们都回到长链上工作。

    第二个问题是作弊问题。其一是篡改场景,当一条链正在成长的时候,小明想偷偷抹去、篡改某个已有区块N上的交易信息E。为了实现这个目的,他需要做的是,剔除E、重构E所在的区块N,并继续在N后面延展区块构造自己的伪链。其二是双花场景,小敏想把自己仅有的10块钱重复支付给两个人(双花double spending),她聪明地把一个支付消息Q发给一半的矿工,再把另一个支付消息P发给另一半的矿工,等到其中一个支付消息Q被确认并打包进区块链之后,倒戈集中精力来帮助P的打包、让P所在的区块链以更快的长度增速超过Q所在的原链。

    注意这俩场景同样遵循“最长链优先“。为了实现”转正“的目的,小明、小敏需要和原链进行“抗争”,使自己的伪链成为最长的合法链。为了让自己的链更快地长出新区块,小明、小敏需要集中尽可能多的算力来帮助他实现“转正”。

    转正的可能性有多大呢?

    这里就要提到比特币交易所的规定。一旦一个交易传送到区块链上,往往需要一段不定的时间来确认并发布到目的地交易所。对此,不同的交易所设定需要不同数量的「确认」来完成验证该笔交易,而“6”是一个颇受欢迎的数字。

    这一规定的根据是,假设一个区块被他后面的6个区块确认过,而意图造假的矿工拥有10%的算力(挖矿成功概率0.1),那么造假矿工要构造另一条伪链实施长度超越、必须至少成功挖矿6次。也就是说,原链被取代、被抛弃的概率约为0.1的6次方,趋近于0。

    而假设意图操纵结果的矿工,拥有了51%的算力,那么他实现目的似乎只是时间的原因了。事实是,如果真有拥有如此强大算力的组织,他完全可以凭借自己强大的算力投入到挖矿中去获取开发新区块所获的的比特币奖励,诚实挖矿比双花更有利可图。

    四、结言

    搞清以上三个问题之后。我的内心其实还存有着一些小小的疑问:

    实际中,比特币系统是怎么稳定运转的?

    网络时延、丢包对比特币有什么影响?

    比特币系统有什么网络安全隐患,遭受过什么攻击?

    接下来也会继续从网上找寻相关资料、查阅论文,以及和了解的人士探讨,解答心中的疑问,希望能对比特币有一个更全面的了解吧。

    **本文系网上信息与个人理解的结合,如有偏差及误读,欢迎读者指出。也欢迎给出关于文章结构上的指导~

    相关文章

      网友评论

        本文标题:关于比特币的数字谜题

        本文链接:https://www.haomeiwen.com/subject/rfhexhtx.html