区块链 | 比特币与区块链原理&什么是矿机挖矿

文章目录

    • 前言
    • 什么是比特币
      • 去中心化的电子记账系统
    • 区块&&区块链
      • 为何我需要记账?
        • 比特币总量
      • 账单以谁为准?
        • 工作量证明
      • 挖矿原理
        • 哈希函数
        • 具体原理
        • 挖矿难度设置

前言

本章内容主要有:什么是比特币、比特币的起源与发展、区块及区块链的定义,矿机挖矿的原理。

什么是比特币

比特币(BitCoin)是一种P2P形式的虚拟货币。2008年,一个名叫中本聪(Satoshi Nakamoto)的人发明了比特币,他在网络上发表了《比特币:一种点对点的电子现金系统》,即《白皮书》。点对点的传输意味着一个去中心化的电子记账系统的建立。

去中心化的电子记账系统

和传统的记账方式不同(传统记账由银行来进行操作,可信度基于国家信用),去中心化则不需要依靠传统银行机构,每个人的账单记录都是公开的。
区块链 | 比特币与区块链原理&什么是矿机挖矿_第1张图片
举例来说,有A,B,C,D四个人进行交易,每次交易内容都会告诉其它三个人。
区块链 | 比特币与区块链原理&什么是矿机挖矿_第2张图片


区块&&区块链

A,B,C,D四个人的账单信息进行打包,就形成了一个区块(block)。一般来说一个区块的大小大约为1M,可以存放4000条左右的记录。
区块链 | 比特币与区块链原理&什么是矿机挖矿_第3张图片
一个区块打包完成之后,把它接到前一个区块上,并且之后打包的区块接在目前这个区块之后,这样形成的一条链我们称为区块链(Block Chain)
区块链 | 比特币与区块链原理&什么是矿机挖矿_第4张图片

为何我需要记账?

记录和自己的资金不相干的账单,占用了自己的电脑资源,我们为什么要记账?

记账奖励
记账是由于记账可以得到奖励。
(1)手续费
举例来说,A支付10个比特币给B,实际上A支付的要比10个比特币多一点,多出的一点就是给记账人的手续费。(比特币交易的手续费比传统交易的手续费低)
(2)打包奖励
从比特币系统运行开始,在第一个四年里,每打一次包奖励50个比特币,在第二个四年里,每打一个包奖励25个比特币,在第三个四年里,每打一个包奖励12.5个比特币…依次类推,每过一个四年,打包奖励少一半。

比特币总量

中本聪在最初提出比特币时,规定每十分钟打一个包。我们可以计算出比特币总量如下:

50 * 6 * 24 * 365 * 4 * (1/2 + 1/4 +1/8 + …(1/2)n)=2100万

账单以谁为准?

因为记账奖励丰厚,一群人抢着去进行打包,但由于网络延迟,可能每个人收到账单不同,这种时候该以谁为准?

工作量证明

每一个参与打包的用户都要去做一个很难的数学题,如果你可以做出这道数学题,就可以去进行打包了。这个数学题难到没有哪一个人可以通过脑子去计算出来,而必须通过一个一个数去尝试,直到你去把这个数尝试出来了,就有机会去获得奖励,这个过程叫做挖矿

挖矿原理

哈希函数

我们可以通过运算,把一串字符串转化成为一个摘要的形式。 并且正着算容易,反过来算很难(即可以通过字符串得到摘要,但不能通过摘要获得字符串)
以SHA256函数举例:

sha256("abcd") = 1010...(256位二进制数)
正算很容易,反算很难。如果给出一串256位的二进制数,求原来的输入,就只能通过一个一个尝试的方式去寻找。

具体原理

区块由头部和账单信息组成。
区块链 | 比特币与区块链原理&什么是矿机挖矿_第5张图片
假设现在有很多人想要去接块,每个人都有一分记录好的账单。
在接块的时候必须要算一个数学题:
1.字符串:前块的头部+账单信息+时间戳+…+随机数
2.Hash=sha256(sha256(字符串))
3.计算得到的Hash值需要符合要求

比如说要求前n位为0:即 Hash=000…11011(前n位为0即可满足条件,获得接块的权利)

4.符合要求之后进行打包
把计算得到的Hash值作为新块的头部,账单作为新块的信息,即可打包成一个新块从而获得奖励。
区块链 | 比特币与区块链原理&什么是矿机挖矿_第6张图片
怎么去使得字符串满足要求?
我们来看字符串的组成,字符串:前块的头部+账单信息+时间戳+…+随机数

我们可以改变的只有随机数,二进制从0开始一直尝试。 每个人的计算难度是不一样的,但是平均而言,挖到矿的可能性大小与计算能力相关联,谁的计算能力强,谁就有更大的可能去挖到这个矿。

挖矿难度设置

挖矿难度由要求Hash值的前n位来设置。
前n位为指定数,比如前n个都是0,概率为 (1/2)n
中本聪当初设置在每十分钟出一个块,如何保证在10分钟内能出一个块呢?则需要调整n的大小即挖矿难度。

例:假设世界上有104台矿机,每台矿机的运算速度为14T/s(即每秒可以进行1.4 * 1013次哈希运算)
10min计算次数:1.4 * 1013 * 104 * 600 = 8 * 1019 ,大概相当于 266 。在这种情况下,就会把难度n设置为66。

你可能感兴趣的:(区块链安全)