最近这几天区块链又粉墨登场了,新闻媒体也一直在大量报道,宣称可能要在金融界掀起一番浪潮。甚至有人说很久之前中国就出现了区块链的产物——麻将。那么区块链到底是什么,麻将和区块链又有什么关系呢?

笔者这两天也阅读了相关文献和资料,下图是我学习的一个路径,本文也是按照自己了解区块链的路径做的一些总结,篇幅较长,写这篇文章的目的也是希望能简单地向对区块链技术不了解但是想知道区块链是什么的人介绍区块链技术,因为自己在区块链方面也是一个小白,如果有错误的地方,还望各位留言指正。

区块链 -> 比特币

首先我们得先知道,区块链和比特币之间并不等同,如果要论辈分,区块链应该是比特币的爸爸,为什么这么说呢?我们先来了解下区块链是什么,以及区块链是用来干嘛的。

什么是区块链?区块链是做什么的?

一提到区块链,相信很多人都会想到什么去中心化、分布式、不可篡改之类的名词。说实话我刚开始由于姿势水平不够看到这些名词的时候也是一头雾水,《区块链技术发展现状与展望》一文给出如下定义:

狭义来讲,区块链是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构, 并以密码学方式保证的不可篡改和不可伪造的去中心化共享总账(Decentralized shared ledger),能够安全存储简单的、有先后关系的、能在系统内验证的数据。

广义的区块链技术则是利用加密链式区块结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用自动化脚本代码(智能合约)来编程和操作数据的一种全新的去中心化基础架构与分布式计算范式。

上面的文字毕竟太过学院派了,如果用一句话来概括,区块链其实就是一种数据结构(栈和队列也是一种数据结构),既然他是一种数据结构,那区块链的作用自然也就不言而喻了:组织并存储数据。剩下的一些定语如「去中心化」、「分布式」这些无非就是对这种数据结构的修饰罢了。比特币就是应用这种技术制作的数字货币。

区块+链=区块链?

既然他和栈一样是一种数据结构,那我们总得知道这个数据结构长什么样子吧。我们把区块链拆分成**「区块」「链」**就会明白区块链长什么样子了。

区块

 

上图是一个**区块(Block)**示意图,每个区块包含两个部分:

  • 区块头(Block Header):记录当前区块的特征值(里面存放的内容我们稍后再说)

  • 区块体(Block Body):存放的数据

所以,区块就是一种存放数据的东西,可以近似的理解为链表中的节点。

把许多上图那样的区块连接在一起就形成了区块链,如下图所示:

想要形成一个链,那总得有头吧,链头的区块学名叫做创世区块(Genesis Block)。前一个区块称为后一个区块的父区块,反之则称为子区块。 所以,其实区块链就长上面那样,没什么神秘的。

这时我想肯定会有人问了,你说把区块连接在一起他们就能连接在一起了吗?他们之间是怎么连接的呢?

如何链接

这里我也不卖关子了,子区块与父区块是通过父区块的 哈希(Hash) 值建立链接的。这里又引入一个新的概念,什么是哈希呢?

所谓「哈希」就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的哈希长度是256位,这就是说,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,**只要原始内容不同,对应的哈希一定是不同的。**因此我们可以得到两个推论:

  • 推论1:每个区块的哈希都是不一样的,可以通过哈希唯一标识区块。
  • 推论2:如果区块的内容变了,它的哈希一定会改变。

所以我们只需要在每个区块的区块头存放上个区块的哈希值即可。就是下图红线标注的地方。

至于如何计算出这个哈希值,不同的区块链有不同的计算方法,这里不多说。

下面这篇文章介绍了比特币是如何计算Block Hash的,有兴趣的可以阅读了解下。

最新文章

  1. 【原】JAVA开发环境搭建
  2. Mac锁屏
  3. SharePoint 2013 Excel Services REST API介绍
  4. iOS 中常用的对密码进行MD5加密
  5. RHEL 6.5 PXE 安装调试 VMWARE ESXi 5.1 安装
  6. CI基本配置
  7. 硬盘格式是MBR、GPT
  8. ios 上架需要注意的问题
  9. poj 2187
  10. ios开发小技巧之提示音播放与震动
  11. HDU-4661 Message Passing 树形DP,排列组合
  12. 关于搭建haddoop分布式系统的全部过程复习
  13. ES6笔记① var 和 let的区别
  14. Java web JavaScript DOM 编程
  15. python-list操作
  16. python_11 装饰器,闭包
  17. C - Rikka with Badminton --- HDU 6425 快速幂加组合数学
  18. [JOISC2014]ストラップ
  19. centos7下安装docker(13docker存储)
  20. 总结Sql Server内置函数实现MD5加密

热门文章

  1. MySQL的5大引擎及优劣之分
  2. java核心技术第一篇之数据库基础
  3. SpringBoot源码解析系列文章汇总
  4. 滑动门出现的背景---实例微信导航栏(a盒子里面包span盒子,文字写在span里)
  5. 2-2-for循环
  6. SAP MM MB5L 报表里的差异金额如何调整?
  7. DOJO之gridx
  8. BayaiM__MYSQL千万级数据量的优化方法积累__初级菜鸟
  9. c++ 模板类,方法返回值类型是typedef出来的,或者是auto,那么此方法在类外面如何定义?
  10. Linux中的文件和目录结构详解