13910160652
010-52852558
| |EN
首页 > 互联网 > 区块链
  • 13910160652
  • ciplawyer@163.com

区块链开发 区块链原理

日期:2018-02-06 来源:区块链开发共享 作者:姜富耀,孔壹 浏览量:
字号:

区块链原理简介


区块链 是一个基于密码学安全的分布式账本,是一个方便验证,不可篡改的账本。


哈希值


Hash就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。


这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。


https://anders.com/blockchain/hash.html

这个网址输入字符串 输出 对应 哈希值 

640.webp.jpg

比如:姜富耀 这几个字的哈希值为:

7141e66a74c52de5aa164d66a1063e99f876c65dc5a3c45a8dd6b8893b843904  

只要修改任何一个字符,哈希都会发生特别大的变化:

640.webp (1).jpg

姜富耀 孔壹 这几个字的哈希值 变为:

a11b0354def43d5485116311a185f4158c88830b7707124cb9c639b6627cf28d  


什么是 区块(Block) ?


https://anders.com/blockchain/block.html  

这个网址 演示一个区块如何基于POW(工作量证明),产生一个区块。

640.webp (3).jpg

Block : 区块高度,# 1 表示第一个区块。


Nonce :随机数,由于工作量证明机制,在已知别的所有字符串后面不断加上这个Nonce 随机数,直到 Hash值的 头部出现0000(假设难度系数为头部出现0000),那么挖矿成功。


Data : 里面写入 转账信息,以及其他数据。


Hash : 哈希值,检验难度系数是否达到要求。


当我们发生一笔转账,Data数据 就会记录,当然,不光有一笔交易,会有好多笔交易记录,还会有别的一些字符串信息。


这个时候,矿工就会在 Block、Data 等等数据组成的哈希值末尾,不断地随机添加Nonce随机数,知道 达到难度要求,比如开头四个零,或者5个零,或者其他难度方式。一旦达到难度要求,生成合格的哈希值,那么挖矿成功。


比如:现在Data里面有 A 给 B 转100块 的转账记录,还附加了一些其他字符串数据,矿工拿到这 Data 跟 区块高度等等附加在一起的一个哈希值,然后不断往末尾 添加Nonce随机数,知道Hash达到难度系数,这里为开头0000,挖矿成功。 

640.webp (4).jpg

点击Mine进行挖矿: 

640.webp (5).jpg

挖矿结束,如图所示:
Hash:000022c591d6dfab12121ee82d19418f2b706582adb152c7b1bf519e8e2eccbf  


Hash 开头有0000,达到预先设置的难度系数,如果有5个零,也成功,只不过是巧合,难度系数照样是4个零,就ok。


这样,一个区块(Block) 就产生了。


那 区块链(BlockChain) 又是啥 ?


https://anders.com/blockchain/blockchain.html

打开这个网址,或刚才网页,点击BlockChain菜单。


第一个 区块 Data假设 里面 写的 A -> B 1000
第二个 区块 Data假设 里面 写的 B -> C 200 B -> D 300
第三个 区块 Data假设 里面 写的 D -> E 100 

640.webp (6).jpg

然后 依次从第一个 区块开始 点击Mine按钮,挖矿,依次使Hash 开头至少出现0000,这就是 一条 区块链,一个节点的挖矿过程。


注意: 第一个 区块的Prev 全为零,当第一个区块挖矿完成,第二个区块 的Prev 就会变成 第一个区块的 Hash,并且Prev是映射第二个区块挖矿初始哈希的字符串的一部分,这就是一个衔接,所以产生了链条结构。 

640.webp (7).jpg

所以想修改 之前 的区块记录的数据,必须把之后每个区块都重新挖矿。:)


多节点区块链


上面介绍的是单节点实现的区块链,但是不光只有一个节点,而是很多个节点构成的一个系统,否则自己玩玩就行了,想怎么改就怎么改,无非就是花点时间罢了。


但是,多节点就不一样了,只要大部分的分跟你不一样,你就是一个假数据,你即使改了数据,只要不能达到算力的51%左右,就无法篡改数据。


打开https://anders.com/blockchain/distributed.html或者点击刚才网页的 distributed页面。

640.webp (8).jpg

每一个节点都有一份区块链,这就是 分布式账本。


交易记录


Tx参数 记录 该区块中 所有的转账记录,作为映射给挖矿开始时的哈希值的字符串的一部分。 

640.webp (9).jpg

coinbase参数 是矿工挖矿 奖励,每次出块都会奖励 矿工 

640.webp (10).jpg

POW工作量证明 的 矿机 样式案例:

640.webp (11).jpg

大规模矿场:

640.webp (12).jpg