工程师角度去理解“区块链”

刚开始的时候还是挺反感这种技术的, 特别是 比特币, 因为经常有人在博主的服务器跑”挖矿”。最近很多初创公司开始基于 区块链 来创建,所以我也开始从工程师的角度理解什么是区块链(blockchain),这里含有在线的demo。

区块链 的理解主要参考一下文章编写。

https://www.techspot.com/article/1567-blockchain-explained/

SHA256 哈希(Hash)算法

这个算法相信大家都觉得非常熟悉。广泛应于与系统密码的保存,因为所有密码都在数据库保存都是保存哈希值,而不是明白明文保存密码值。
大家可以线上测试一下:

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

v2-b29f79c4153587a156796132a45041fa_b

v2-ebacdebeda6f9bd5841bce4c30ebf777_b

不同的数据(Data),输出的哈希值(或者说数据的data fingerprint)是不一样的。这个函数的特点是不可逆。换句话说:

  • 哈希值不能找回原文
  • 每个原文对应的哈希值是几乎不一样,其中一个重要的用途是用于快速校验下载大文件的正确性。
  • 你会发现不同的数据产生的哈希值的前序(prefix)也是不一样的。这点非常重要,因为区块链是靠哈希值的prefix的一致性来增加计算量,从而达到不被破解。

区块(Block)

区块是区块链的一个基本单位。可以看看Block的结构:

v2-7732f02c57f9a16aa16f8b943e7eeebf_b

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

以下是Block的结构具体解释:

Block 序列号:区块链(Blockchain)序列号
Nonce 值:用于调节Hash的前序(prefix),这里Hash一直是0000。
Data 值:用于记录这个Block的数据,金融方面,譬如比特记录转账信息。
Hash 值:以上所有信息的Hash值,但是prefix总是靠Nonce值调节prefix为0000。
Mine按钮:这个按钮用于找一个Nonce值,使得Hash值的prefix为0000。

譬如这里修改了data的数据(Alice->Blod),hash值的prefix再不是0000,所以Block变为红色了。

v2-4d2e9c990a209ddef4d6757f07fa01f1_b

然后点击Mine,寻找合适的Nonce,这个Nonce(72608)会使得Hash值的prefix为0000。

v2-2eeafe392bbf596513cd32c042fdef2a_b

点击Mine按钮需要等待的时间大概为“2秒”。假如有大量的这种blocks计算,那么需要大量的计算时间。Blockchain利用这种机制可以使记录无法作假。

区块链 Blockchain

区块链明显就是把这些Block链接起来,问题就是如何把所有Block链接在一起。下图就是一个例子:

v2-5716b867cc1486dc16df094a117b6a1a_b

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

这里定义了多一个项目,此项目叫Prev,用于记录上一个Block的Hash值。这样所有Block都可以链在一起了。记得,所有的hash值都是0000开头

假如有一个三个Blocks的Blockchain,这个Blockchain的都是一个转账记录。

v2-742f000fb6238ad51257707d443f9e70_b

假如,我需要修改(串改)这个记录信息,譬如第二个Block,这样,后面所有的Nonce值都需要重新计算:

v2-fdd244f4d9a3e6ddb484ff7a5c9e6915_b

Blockchain 的第二个Block被修改了,后面需要重新计算所有Nonce和Hash值。这样,上图的修改成本需要“4秒”。下图是个区块链的计算成本,修改越“老”的区块(Block)需要越多计算时间。

v2-031eecf394060c02a5c70a555776d5dc_b

分布式区块链 Distributed Blockchain

虽然修改有一定的时间成本,但是在分布式的情况下(没有中心服务器),怎样知道哪个Blockchain是正确的呢?其实所有用户都有一个blockchain的拷贝,新用户可以对比世界各地的人(譬如抽取6个用户),看看哪个人的blockchain是正确的,其实是一种voting机制。

v2-9774d00fc7fdcc6b472cf2812a4612de_b

用户寻找哪个Blockchain是正确的,这里绿色Blockchain是正确的。 但是,如果红色的用户恶意发布的他Blockchain呢?会发生什么情况?

v2-34a79397af92ce9b783c76a1595da3bd_b

红色用户可以恶意发布他的blockchain吗?确实是有这种问题,Bitcoins要求用户解决一个“函数”,这个函数需要一定的计算量才能投票。这样可以一定程度上避免用户恶意发布假的blockchains。这里不聊Bitcoins了,因为文章的重点不在这里,这是给大家一个概念存在这个问题。

应用

区块链最大的优势在于,很难修改很“老”的数据,所以可以应用在各种记账系统,智能合同,分布式账本(distributed ledger),等等。一旦写进去后,就非常难修改。

发表评论

电子邮件地址不会被公开。 必填项已用*标注