主页 > imtoken怎么用 > 比特币基本概念介绍3

比特币基本概念介绍3

imtoken怎么用 2023-02-10 06:24:55

挖矿与共识 一、实验介绍 1.1 实验知识点 1.2 实验环境 二、比特币分发与挖矿

作为一种货币,中本聪在设计之初就对比特币的分布进行了详细的设计。 总共 2100 万个比特币将以递减的速度分发,特别是每四年分发一次。 最初,每个区块被发现奖励 50 个比特币,现在(2017 年),发现新区块的奖励已经减少到 12.5 个比特币。

此处输入图片的描述

如何发现新区块? 这就涉及到比特币的“挖矿”。 所有“矿工”将通过竞争解决一个问题来获得记账权,并获得相应的新币奖励。

他们解决的问题是一个与哈希加密算法相关的数学问题,具体来说,对于一个字符串,找到一个使哈希值小于某个值的后缀。 我们可以用一个小的python程序看看给一个固定的字符串加上不同的后缀然后对值进行散列的规则是什么:

import hashlib
text = "Jiawencoin is coming"
for nonce in xrange(20):input = text + str(nonce)hash = hashlib.sha256(input).hexdigest() print input, '=>', hash

比特币之父能不能随意制造比特币_q币和比特币是货币吗_最初的比特币奖励是多少

此处输入图片的描述

可以看出,得到的哈希值似乎没有任何规律性。

如果得到的哈希值是完全随机的(近似均匀采样),那么我们可以设置一个阈值,让参赛者找到对应的哈希值小于这个值的后缀。 我们可以通过调整这个值的大小来改变预期的计算次数。 我们的hash函数得到的结果的最大值是2的256次方,所以如果我们把阈值设置为2的240次方,那么我们得到小于这个值的概率就是1除以2的16次方力量。 我们可以通过调整阈值来控制难度,阈值越小,难度越高。 在比特币系统中,难度会随着前一个区块被发现的时间动态调整,这样平均找到一个区块的时间为10分钟。

我们可以通过下面的例子来体验下不同难度下所需的计算时间:

import hashlib

q币和比特币是货币吗_最初的比特币奖励是多少_比特币之父能不能随意制造比特币

import timemax_nonce = 2 ** 32 # 4 billiondef proof_of_work(header, difficulty_bits):target = 2 ** (256-difficulty_bits) for nonce in xrange(max_nonce):hash_result = hashlib.sha256(str(header)+str(nonce)).hexdigest() if long(hash_result, 16) < target:print "Success with nonce %d" % nonce print "Hash is %s" % hash_result return (hash_result,nonce)print "Failed after %d (max_nonce) tries" % nonce return nonceif __name__ == '__main__': nonce = 0hash_result = ''for difficulty_bits in xrange(30): difficulty = 2 ** difficulty_bitsprint "Difficulty: %ld (%d bits)" % (difficulty, difficulty_bits) start_time = time.time()new_block = 'test block with transactions' + hash_result(hash_result, nonce) = proof_of_work(new_block, difficulty_bits) end_time = time.time()elapsed_time = end_time - start_timeprint "Elapsed Time: %.4f seconds" % elapsed_time

此处输入图片的描述

对于矿工来说,他们在挖矿的过程中获得经济回报。 但从系统设计者的角度来看,解决此类数学问题并不会产生任何社会价值,反而会消耗大量的算力、电力等,是一种社会资源的浪费。

挖矿只是为了分发货币吗? 事实上,它不是。 这个机制其实是为了处理数字货币中的一个具体问题,即双重支付。 让我们来看看什么是双重支付。

3.双重支付

比特币之父能不能随意制造比特币_q币和比特币是货币吗_最初的比特币奖励是多少

双重支付,顾名思义,就是一钱两用。 如果我们用纸币的话,应该是没有办法一次用两次的,因为一般人不会接受一半的钱。 但是对于数字货币或者虚拟资产来说,二次使用是很正常的。

举个例子,我在高中的时候做过一次双倍支付。

以前我们上高中的时候,食堂买东西都是用饭卡。 将卡片放在窗户旁边后,它会显示您还剩下多少钱。 当时我的饭卡里有5块钱,就去A窗口刷,显示还有5块钱,暂时没买东西,然后去B窗口刷,并且显示还剩5元,然后两边都买了5元,最后5元买了10元。

我们也可以在区块链中实现类似的操作

此处输入图片的描述

我们可以看到上图,A支付给B,这笔交易被写入区块,假设这个区块的名字是M,然后A马上开始从M的前一个区块开始挖一个新的区块,形成一个新的链,在这条新链中,A向自己的地址支付比特币,如果这条新链的长度超过了原链,那么大家将接受最长的链并丢弃原链(这是因为在比特币中每个人都遵循考虑最长的链为有效)。 这样,M块及M块之后的交易就失效了,A转出的比特币又变回来了。

q币和比特币是货币吗_比特币之父能不能随意制造比特币_最初的比特币奖励是多少

4. 工作量证明

下面我们要说明的是,通过“挖矿”,可以激励人们做诚实的节点。

我们从数学的角度来分析这个问题:

p = 诚实节点找到下一个节点的概率

q = 欺诈节点找到下一个节点的概率

qz = 欺诈节点从落后于 z 个节点赶上诚实节点的概率

q币和比特币是货币吗_比特币之父能不能随意制造比特币_最初的比特币奖励是多少

我们假设在A付钱给B开始准备一条新链后,如果B在z个区块后确认交易,那么这段时间A产生的区块数应该是z * (q/ p)泊松分布的平均值最初的比特币奖励是多少,那么A能够完成双重支付攻击的概率为:

此处输入图片的描述

那么如果q>p,几乎肯定会追上诚实节点,这也是51%算力攻击的来源(更详细的51%算力攻击介绍)

如果 q < p,坏人追上的概率随着 z 的增加呈指数衰减。 由于比特币交易需要6次确认,而现实中几乎没有机构可以垄断算力,双重支付攻击基本不可能发生。

另一方面,即使有人有能力赶上诚实节点发起 51% 算力攻击,他也可以选择做诚实节点,从挖出新区块的奖励和增加的算力中获益。比特币的价值。 还可以选择对系统发起攻击最初的比特币奖励是多少,破坏整个社区并使比特币变得一文不值。 如果成为诚实节点的经济动机超过作恶,他将有保持诚实的经济动机。

从上面的分析来看,工作量证明允许节点通过算力投票自发选择成为诚实节点,这样双重支付几乎不会发生。 这个机制很巧妙,比特币之后也发明了很多新币。 建立了POS、DPOS等新的共识机制来解决双重支付问题。

总结

在这短短的三节中,我们介绍了比特币的加密算法、交易和数字签名、区块链结构、挖矿和共识等,可以说涵盖了整个比特币体系的精髓。 如果读者有兴趣进一步研究比特币相关技术,可以阅读后面提供的参考资料,或者加我的微信caijiawen2016进一步交流。

参考资料。 Nakamoto S. 比特币:一种点对点的电子现金系统[J]。 2008.掌握比特币比特币和加密货币技术