区块链学习基础篇—运作原理(2)

in #blockchain7 years ago (edited)

在讲解区块链的工作原理之前,先将区块链中涉及的几个核心概念做一个简单的描述

1.区块

区块简单来说的话就是一个数据库,由包含元数据的区块头和包含交易数据的区块构成。

2.哈希算法

哈希算法是区块链中保证交易信息不被篡改的单项密码机制。哈希算法接受一段明文后,以一种不可逆的方式将其转化为一段长度较短,位数固定的散列数据。

哈希算法2个特点:

(1)加密过程不可逆

(2)输入的明文与输出的散列数据一一对应,任何一个输入信息的变化,都必将导致最终输出的散列数据的变化

3.公钥和私钥

比特币私钥其实是使用SHA-256生成的32字节(256位)的随机数,有效私钥的范围则取决于比特币使用的secp256k1 椭圆曲线数字签名标准。大小介于0x1 到0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140之间的数几乎都是合法的私钥。

在私钥的前面加上版本号,后面添加压缩标志和附加校验码,(所谓附加校验码,就是对私钥经过2次SHA-256运算,取两次哈希结果的前四字节),然后再对其进行Base58编码,就可以得到我们常见的WIF(Wallet import Format)格式的私钥。

私钥经过椭圆曲线乘法运算,可以得到公钥。公钥是椭圆曲线上的点,并具有x和y坐标。公钥有两种形式:压缩的与非压缩的。早期比特币均使用非压缩公钥,现在大部分客户端默认使用压缩公钥。

由于数学原理,从私钥推算公钥是可行的,从公钥逆推私钥是不可能的。

初识比特币的人常有一种误解,认为比特币公钥就是地址,这是不正确的。从公钥到地址还要经过一些运算

4.时间戳

区块链中的时间戳从区块生成的一刻起就存在于区块之中,它对应的是每一次交易记录的认证,证明交易记录的真实性。

时间戳是直接写在区块链中的,而区块链中已经生成的区块不可篡改,因为一旦篡改,生成的哈希值就会变化,从而变成一个无数的数据,每一个时间戳会将前一个时间戳也纳入其随机哈希值中,这一过程不断重复,依次相连,最后会生成一个完整的链条。

5.Merkle Tree

(1)什么是 Merkle Tree?

Merkle Tree,是一种树(数据结构中所说的树),网上大都称为Merkle Hash Tree,这是因为 它所构造的Merkle Tree的所有节点都是Hash值。Merkle Tree具有以下特点:

  1. 它是一种树,可以是二叉树,也可以多叉树,无论是几叉树,它都具有树结构的所有特点;

  2. Merkle树的叶子节点上的value,是由你指定的,这主要看你的设计了,如Merkle Hash Tree会将数据的Hash值作为叶子节点的值;

3 非叶子节点的value是根据它下面所有的叶子节点值,然后按照一定的算法计算而得出的。如Merkle Hash Tree的非叶子节点value的计算方法是将该节点的所有子节点进行组合,然后对组合结果进行hash计算所得出的hash value。

(2) Merkle Tree的应用

目前, 在计算机领域,Merkle Tree大多用来进行比对以及验证处理。比特币钱包服务用 Merkle Tree 的机制来作”百分百准备金证明“。在处理比对或验证的应用场景中时,特别是在分布式环境下进行比对或验证时,Merkle Tree会大大减少数据的传输量以及计算的复杂度。例如,就拿图一举例,假如是 15,16.......30是一个个数据块的hash值,我把这些数据从A传输到B,数据传输到B后,我想验证下传输到B上的数据的有效性型(验证数据是否在传输过程中发生变化),只需要验证A 和 B上所构造的Merkle

Tree的root节点值是否一致即可,如果一致,表示数据是有效的,传输过程中没有发生改变。假如在传输过程中,15对应的数据被人篡改,通过Merkle Tree很容易定位找到(因为此时,节点0,1,3,7,15对应的hash值都发生了变化),定位的时间复杂度为O(log(n))

(3)Merkle Tree的优点

相对于 Hash List,Merkle Tree 的明显的一个好处是可以单独拿出一个分支来(作为一个小树)对部分数据进行校验,这个很多使用场合就带来了哈希列表所不能比拟的方便和高效。

比特币的运作原理

在区块链中,所有的节点向上回溯,都会到达源头,即区块链中的第一个区块,也就是“创世区块”。

在“创世区块”诞生之后,比特币的用户通过不断地“做题”,即通过计算寻找满足特定SHA-256哈希值对应的数值解。这个过程就是比特币中的-“挖矿”

当任意一个用户优先计算出符合要求的数值解时,就会在全网范围内广播,而网络中的其他节点收到这条信息会进行验证,若通过验证,其他节点就会放弃计算,并将新创建的区块加到前一个区块的后面。

随着越来越多的人加入比特币的区块链系统,一个又一个哈希值的数值解被找到,在不断重复过程中,新的区块不断地生成,验证,最终形成一个主链。同时,哈希算法的难度也会调整,以此控制用户们解出数据所用的时间。

而在比特币的实际交易过程中,假设比特币中的用户A和B之间要完成一个交易,包含这笔交易的区块向区块链中的所有用户发布广播,全网用户通过验证哈希值来确认这笔交易是否有效,一旦被认证为有效,这个区块就会被加盖时间戳,然后被添加到区块链主链上。

区块链本质是一个互相验证的公开记账系统。这个系统所做的事情,就是记录所有账户发生的所有交易。每个账号的每笔数额变化都会被记录在全网总账本中。而且每个人手上都有一份完整的账本,每个人都可以独立统计出有史以来比特币系统每个账号的所有账目,也能算出任意账号当前余额是多少。

下一篇了解区块链基本特征?