区块链学习2——技术与详细工作过程

一、非对称加密

    就是解密与加密需要两把钥匙:一把公钥一把私钥。

    如同学习1所说:公钥是公开的谁都可以获取,而私钥是保密的只能自己拥有。他人使用你的公钥进行加密发送给你,你再用私钥进行解密,取出信息。同样,你可以用你的私钥加密信息,别人用你的公钥解开,从而证明这个信息是你发出的,且未被祖篡改,这叫数字签名。

    关于数字签名(详细介绍)

    根据协议公钥的长度为512位,公钥又形成了一个160位的指纹(比较短,利于传播的哈希值)。你向别人收钱,只要告诉对方你的钱包地址即可,对方向这个地址付款,你是地址的拥有者,所以你会收到这笔钱。

二、详细的交易过程

    所谓交易,就是比特币从一个地址到另一个地址上。比特币的交易记录都是公开的,所以哪个地址拥有多少比特币都是可以查到的。

    问题在于如何防止别人假冒你申报一笔交易:地址A向地址B 支付10个比特币。我怎么知道这个申报是真的,申报人就地址A的主人?

    上一节说过,申报交易的时候除了比特币的数目还需要:上一笔的HASH(从哪来的比特币)、本次双方使用的地址、支付方的公钥,支付宝私钥形成的数字签名。验证这笔交易是否真实需要三步。第一步,验证上一笔交易,确认支付方的比特币来源。第二步,算出支付方的指纹,确认与支付方的地址相同,从而保证公钥属实。第三步,使用公钥去解开数字签名,保证私钥属实。经过以上三步就可以确认,交易是正确的。

三、交易确认与区块链

    交易的信息确认之后,交易还并没有完成。交易必须写入数据库,才算成立,对方才能真正的收到钱。

扫描二维码关注公众号,回复: 1954391 查看本文章

    比特币使用的特殊的数据库,叫做区块链。

    首先,所有的交易数据都会传送给矿工,矿工负责把这些交易都写入区块链。

    根据比特币的协议来说,一个区块的大小最大是1MB,而一笔交易大概是500字节左右,因此一个区块最多可以包含2000多笔交易。矿工负责把这2000多笔交易打包在一起,组成一个区块,然后计算这个去的Hash。计算Hash的过程就叫做采矿,这需要大量的计算。矿工之间也在竞争,谁先算出Hash,谁就能第一个添加新区块进区块链,从而享受这个区块的全部收益,而其他矿工将一无所获。一旦一笔交易写入了区块链,就无法反悔了。比特币不存放在任何一个人的钱包中,只存在于区块链中。

四、矿工的收益

    为什么有人愿意做矿工,上一节提到过,做矿工完成新区块的写入之后可以得到整个新区快的全部收益。除了新区会奖励矿工比特币,还有交易手续费。矿工可以从每笔交易抽成,具体的金额由支付方自愿决定。你也可以一毛不拔,不支付任何的手续费。当然矿工们总是优先处理手续费最高的交易。

五、区块的扩容

    平均十分钟出一个新块,也就是说,比特币网每10分钟至多处理2000场交易,换算一下,就是一秒进行3~5笔交易。

    17年的8月,区块链发生一次分叉,诞生了一个新的协议称为Bitcoin Cash(简称BCH)。这个货币其他与比特币都一致,就是从每个块的最大容量1MB提升到了8mb,因此处理速度高了8倍,手续费也低了很多。该协议是对原有区块链的分叉,因此当时具有比特币的人,等于一个人获赠了同样数量的BCH。

六、点对点网络

    比特币是一个全世界开放的网络,只有你有服务器就可以加入称为其一个节点。每个节点都包含了整个区块链的(目前由100Gb),而且节点之间也在不停的传递与更新同步信息。

    当你发生了一笔支付,你所在的节点便会把这笔交易告知另一个节点,直至传遍整个网络。矿工们从网上收集新的交易,将它们打包写入区块链,一旦写入成功,矿工们所在的节点的区块链就称为最新版本,其他节点都会复制新增的区块,保证全网的链都是一样的。

七、区块的结构

    区块链有一个个区块组成(block)组成,区块很像数据库的记录,每次写入数据,就是创建一个区块。

    每个区块拥有两个部分,一个为区块头(记录当前区块的特征值),另一个区块体(实际数据)。

    区块头的特征值包含了:生成时间,实际数据的哈希,上一个区块的哈希。

    区块头的大小为80个字节,4字节的版本号,32字节的上一个区块的hash,32字节的Merkle root hash,4字节的时间戳,4字节的当前难度,4字节的随机数。区块包含的交易列表则附加在区块头后面,其中的第一笔交易是coinbase交易,这是一笔为了让矿工获得奖励及手续费的特殊交易。

    80个字节的区块头是工作量证明的输入,经过双SHA256的计算,不断变换随机数(nonce)使最后的结果小于当前网络的目标值,则为解题成功,工作量完成。


八、区块计算的难度系数

    采矿简单来说就是计算一个哈希值,计算时候会出现无数的哈希值,但是只有满足小于目标值的哈希值才即为所求。

    区块头包含一个难度系数,这个值决定了计算哈希的难度,

猜你喜欢

转载自blog.csdn.net/qq_36344771/article/details/80932837
今日推荐