一、区块链简介

1.1、区块链与区块链技术

区块链是将记录(区块)通过密码学串联并加密的链式数据结构。而区块链技术,是通过P2P网络和区块链来实现数据存储的去中心化、不可逆和不可篡改。比特币正是构建在区块链技术上的典型应用。通过区块链技术,我们可以将信息(数据、程序)保存在区块上并接入到区块链中,这样就实现了信息的去中心化存储、不可逆和不可篡改。区块链应用是指利用区块链技术开发的应用。

1.2、区块链历史

2008年,一个网名叫中本聪(Satoshi Nakamoto)的人发表了一篇名为《比特币:一种点对点电子货币系统》的论文,论文中首次提到了“区块链”这一概念。2009年,中本聪创立了以区块链为底层技术的比特币网络,开发出了第一个区块,被称为“创世区块”。该阶段被称为“区块链1.0”。

由于比特币是一个电子货币系统,所以主要功能就是记账。但随后人们发现,区块链技术作为比特币的底层技术,功能可以远远不止于记账,许多关于“未知的信任”的问题,都可以通过区块链来解决,例如电子存证、信息记录等。于是在比特币的基础上,诞生了带有智能合约的区块链系统,即允许开发者通过编写智能合约来实现特定的逻辑,这一阶段被称为“区块链2.0”。这一阶段的主要代表是以太坊。

随后,人们想要提升区块链应用的性能,于是出现了EOS、ArcBlock等系统,其特点是高性能、大吞吐量,但由于引入了超级节点、云节点等特性,弱化了“去中心化”这一特点,因此受到较大的争议。这一阶段被称为“区块链3.0”。

由于比特币是一款电子货币,可扩展性较低,而所谓的“区块链3.0”目前受到较大争议,且部分项目的底层算法完全不同于典型的区块链,因此学习区块链2.0中的以太坊是目前学习区块链的最佳方式。

1.3、区块链基础技术与算法

区块链技术不是单独的一项技术,而是一系列技术组成的技术栈,其具有以下的特点:

  • 数据分布式存储
  • 存储的数据不可逆、不可篡改、可回溯
  • 数据的创建和维护由所有参与方共同参与

为了实现这些特点、维护区块链应用的稳定运行,区块链技术中包含了分布式存储技术、密码学技术、共识机制以及区块链2.0提出的智能合约。

1.3.1、区块

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

每个区块包含两个部分。

区块头(Head):记录当前区块的特征值
区块体(Body):实际数据

区块头包含了当前区块的多项特征值。

生成时间
实际数据(即区块体)的哈希
上一个区块的哈希

1.3.2、分布式存储技术
与传统的数据存储技术不同,在区块链技术中,数据并不是集中存放在某个数据中心上,也不是由某个权威机构或是大多数节点来存储,而是分散存储在区块链网络中的每一个节点上。

节点和区块的关系是什么?

可以用共享文档来简单描述:所有可以访问共享文档的账号就叫做节点,当然全节点需要同步共享文档,也就是拥有全部的区块数据区块就是共享文档。每个人更新了,所有人都可以查看最新的文档

1.3.3、密码学技术

为了实现数据的不可逆、不可篡改和可回溯,区块链技术采用了一系列密码学算法和技术,包括哈希算法、Merkle 树、非对称加密算法。

哈希算法

哈希算法是一个单向函数,可以将任意长度的输入数据转化为固定长度的输出数据(哈希值),哈希值就是这段输入数据唯一的数值表现。由于在计算上不可能找到哈希值相同而输入值不同的字符串,因此两段数据的哈希值相同,就可以认为这两段数据也是相同的,所以哈希算法常被用于对数据进行验证。

在区块链中,数据存储在区块里。每个区块都有一个区块头,区块头中存储了一个将该区块所有数据经过哈希算法得到的哈希值,同时,每个区块中还存储了前一个区块的哈希值,这样就形成了区块链。如果想要篡改某一个区块A中的数据,就会导致A的哈希值发生变化,后一个区块B就无法通过哈希值正确地指向A,这样篡改者又必须篡改B中的数据…也就是说,篡改者需要篡改被篡改的区块以及后面的所有区块,才能让所有的节点都接受篡改。

Merkle树
Merkle树是一种树形结构,在区块链中,Merkle树的叶子节点是区块中数据的哈希值,非叶子节点是其子结点组合后的哈希值,这样由叶子节点开始逐层往上计算,最终形成一个Merkle根,记录在区块的头部,这样就可以保证每一笔交易都无法篡改。

非对称加密技术
非对称加密技术使用两个非对称密钥:公钥和私钥。公钥和私钥具有两个特点:

  • 通过其中一个密钥加密信息后,使用另一个密钥才能解开
  • 公钥一般可以公开,私钥则保密

在区块链中,非对称加密技术主要用于信息加密、数字签名和登录认证。在信息加密场景中,信息发送者A使用接收者B提供的公钥对信息进行加密,B收到加密的信息后再通过自己的私钥进行解密。再数字签名场景中,发送者A通过自己的私钥对信息进行加密,其他人通过A提供的公钥来对信息进行验证,证明信息确实是由A发出。在登录认证场景中,客户端使用私钥加密登录信息后进行发送,其他人通过客户端公钥来认证登录信息。

  • RSA 算法

​ RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。
​ RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。
  RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。

  • ECC 椭圆曲线算法

具体可以参见此文章:ECC椭圆曲线加密算法:介绍

1.3.4、共识机制

区块链系统是一个分布式系统,分布式系统要解决都首要问题就是一致性问题,也就是如何使多个孤立的节点达成共识。在中心化系统中,由于有一个中心服务器这样的“领导”来统一各个节点,因此达成一致性几乎没有问题。但在去中心化场景下,由于各个节点是相互独立的,就可能会出现许多不一致的问题,例如由于网络状况等因素部分节点可能会有延迟、故障甚至宕机,造成节点之间通信的不可靠,因此一致性问题是分布式系统中一个很令人头疼的问题。

由 Eirc Brewer 提出,Lynch 等人证明的 CAP 定理为解决分布式系统中的一致性问题提供了思路。CAP 定理的描述如下:在分布式系统中,一致性、可用性和分区容错性三者不可兼得。这三个术语的解释如下:

  • 一致性(Consistency):所有节点在同一时刻拥有同样的值(等同于所有节点访问同一份最新的数据副本

  • 可用性(Availability):每个请求都可以在有限时间内收到确定其是否成功的响应

  • 分区容错性(Partition tolerance):分区是指部分节点因为网络原因无法与其他节点达成一致。分区容错性是指由网络原因导致的系统分区不影响系统的正常运行。例如,由于网络原因系统被分为
    A, B, C, D 四个区,A, B 中的节点无法正常工作,但 C, D 组成的分区仍能提供正常服务。

在某些场景下,对一致性、可用性和分区容错性中的某一个特性要求不高时,就可以考虑弱化该特性,来保证整个系统的容错能力。区块链中常见的共识机制的基本思路正是来自 CAP 定理,部分区块链应用中用到的共识机制如下表:

共识机制 应用
PoW 比特币、莱特币、以太坊的前三个阶段
PoS PeerCoin、NXT、以太坊的第四个阶段
PBFT Hyperledger Fabric

PoW(Proof of Work,工作量证明)
PoW 机制的大致流程如下:

  • 向所有节点广播新交易和一个数学问题
  • 最先解决了数学问题的节点将交易打包成区块,对全网广播
  • 其他节点验证广播区块的节点是否解决了数学问题(完成了一定的工作量),验证通过则接受该区块,并将该区块的哈希值放入下一个区块中,表示承认该区块

由于在 PoW 机制中,区块的产生需要解决一个数学问题,也就是所谓的挖矿,这往往要消耗较大的算力和电力,因此节点们倾向于在最长的链的基础上添加区块,因为如果节点想在自己的链上添加新的区块,那么就需要重新计算 1 个或 n nn 个这样的数学问题(每添加一个区块就需要计算一个)。因此在比特币中最长的链被认为是合法的链,这样节点间就形成了一套“共识”。

PoW 机制的优点是完全去中心化,缺点是需要依赖数学运算,资源的消耗会比其他的共识机制高,可监管性弱,同时每次达成共识需要全网共同参与运算,性能较低。

PoS(Proof of Stack,股权证明)
PoS 针对 PoW 的缺点做出了改进。PoS 要求参与者预先放置一些货币在区块链上用于换取“股权”,从而成为验证者(Validator),验证者具有产生区块的权利。PoS 机制会按照存放货币的量和时间给验证者分配相应的利息,同时还引入了奖惩机制,打包错误区块的验证者将失去他的股权——即投入的货币以及产生区块的权利。PoS 机制的大致流程如下:

  • 加入 PoS 机制的都是持币人,称为验证者
  • PoS 算法根据验证者持币的多少在验证者中挑选出一个给予产生区块的权利
  • 如果一定时间内没有产生区块,PoS 就挑选下一个验证者,给予产生区块的权利
  • 如果某个验证者打包了一份欺诈性交易,PoS 将剥夺他的股权

PoS 的优点在于:

  1. 引入了利息,使得像比特币这样发币总数有限的通货紧缩系统在一定时间后不会“无币可发”

  2. 引入了奖惩机制使节点的运行更加可控,同时更好地防止攻击

  3. 与 PoW 相比,不需要为了生成新区块而消耗大量电力和算力

  4. 与 PoW 相比,缩短了达成共识所需的时间

由于 PoS 机制需要用户已经持有一定数量的货币,没有提供在区块链应用创立初始阶段处理数字货币的方法,因此使用 PoS 机制的区块链应用会在发布时预先出售货币,或在初期采用 PoW,让矿工获得货币后再转换成 PoS,例如以太坊现阶段采用的是 PoW 机制,在第四阶段“宁静”(Serenity)中将过渡到 PoS。

拜占庭将军问题(Byzantine Generals Problem)

拜占庭将军问题是分布式网络中的通信容错问题,可以描述为:

一组拜占庭将军各领一支队伍共同围困一座城市。各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻而部分军队撤离可能会造成灾难性的后果,因此各将军决定通过投标来达成一致策略,即“共进退”。因为各将军位于城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己的选择(进攻或撤退)通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同投票的结果,进而做出行动。

拜占庭将军的问题在于,将军中可能出现叛徒。假设3名将军中有1名叛徒,2名忠诚将军一人投进攻票,一人投撤退票,这时叛徒可能会故意给投进攻的将军投进攻票,而给投撤退的将军投撤退票。这就导致一名将军带队发起进攻,而另外一名将军带队撤退。

另外,由于将军之间通过信使进行通讯,即使所有将军都忠诚,也不能排除信使被敌人截杀,甚至信使叛变等情况。

假设存在叛变将军或信使出问题等情况,如果忠诚将军仍然能够通过投票来决定他们的战略,便称系统达到了拜占庭容错(Byzantine Fault Tolerance)。

拜占庭问题对应到区块链中,将军就是节点,信使就是网络等通信系统,要解决的是存在恶意节点、网络错误等情况下系统的一致性问题。

PBFT(Practical Byzantine Fault Tolerance) 是第一个得到广泛应用且比较高效的拜占庭容错算法,能够在节点数量不小于 n = 3 f + 1 n=3f+1n=3f+1 的情况下容忍 f ff 个拜占庭节点(恶意节点)。

区块链基础学习(一)相关推荐

  1. 区块链基础学习(二)

    二.以太坊介绍 首先我们要知道我们为什么要学习以太坊,主要有以下四个原因: 以太坊是区块链2.0的代表,学习以太坊能了解到区块链技术的所有知识 引入了智能合约,拓宽了区块链的应用场景 对开发者友好.对 ...

  2. AIADATA 独家深度解密:百度XuperChain开源区块链基础平台

    AIADATA 独家深度解密:百度XuperChain开源区块链基础平台 百度超级链Xuperchain正式宣布开源.根据官网显示,链内并行技术.可插拔共识机制.一体化智能合约等四大技术支撑开源,让区 ...

  3. 私钥经过哈希计算可以产生公钥_「区块链基础概念100」:公钥和私钥 | 027

    免责声明:本文旨在传递更多市场信息,不构成任何投资建议.文章仅代表作者观点,不代表火星财经官方立场. 小编:记得关注哦 投资区块链,猛戳:火星财经App下载 来源:学习区块链 原文标题:「区块链基础概 ...

  4. 区块链需要学习哪些东西_区块链主要学习哪些知识?

    原标题:区块链主要学习哪些知识? 就业市场分析公司Buring Glass发布的数据显示,2017年区块链行业就业岗位发布数量同比增长115%,而根据Indeed.com统计结果,这一数字则达到了惊人 ...

  5. 视频教程-区块链基础:共识算法-区块链

    区块链基础:共识算法 多年互联网从业经验: 有丰富的的企业网站.手游.APP开发经验: 曾担任上海益盟软件技术股份有限公司项目经理及产品经理: 参与项目有益盟私募工厂.睿妙影音家庭物联网设备.手游东方 ...

  6. Comunion 区块链深度学习系列|区块链的发展历程

    打开一切科学的钥匙都毫无异议地是问号,我们大部分的伟大发现都应当归功于如何?而生活的智慧大概就在于逢事都问个为什么? -- 巴尔扎克 之前写过一篇区块链新手学习要有系统性的文章,也有读者获取到了学习视 ...

  7. 如何使用区块链币收款地址找合约地址?_区块链技术学习指引

    本文原文链接 本文为博客文章索引,小白必看.有新文章时会更新本文,建议大家加入收藏夹中,如果你觉得本站不错,欢迎你转发给朋友. 引言 给迷失在如何学习区块链技术的同学一个指引,区块链技术是随比特币诞生 ...

  8. 《这就是区块链》之区块链基础(5)--去中心化的意义

     在上一篇中,花了比较大的篇幅来阐述去中心化的概念.其实对于有计算机基础的朋友来讲,去中心化或者P2P网络并不是新颖的观点.但是,我还是希望本系列文章可以从基础展开,让所有的朋友都可以理解区块链的 ...

  9. 《这就是区块链》之区块链基础(4)--去中心化概念

    如上图所示,在之前的3篇文章中,我们讲了区块链的加密系统以及区块链的链表结构,对区块链的"物理结构"有了初步的认识.但是,聪明的你肯定会想到,哈希算法和数字签名是互联网初期的产物, ...

最新文章

  1. 0409-0416的笔记
  2. Fedora 20 安装搜狗拼音输入法
  3. PHP预定义常量DIRECTORY_SEPARATOR
  4. C++ Primer 5th笔记(chap 16 模板和泛型编程)实例化
  5. mysql可以使用mybaties框架吗_搭建一个简单的mybatis框架
  6. I/O设备的编址方式(统一编址,独立编址)
  7. mysql 日期计算,今天,明天,本周,下周,本月,下月
  8. Tech.ED 2009特别奉献:Windows 7解读
  9. 机器人走正方形c语言代码,张西臣---机器人走正方形
  10. RabbitMQ 菜鸟教程
  11. 计算机更新过后cad,CAD2022更新了什么?具有哪些新功能?
  12. 详解:路由器性能的各项指标
  13. linux两个命令合并,linux合并命令
  14. 物联网(IOT)之常见物联网通信技术概览-有线篇
  15. 解密中国互联网企业创始人,程序员是如何打下半壁江山的?
  16. 百度搜索查找关键词技巧-信息收集能力
  17. linux下uboot内存测试,uboot中的内存测试方法
  18. 转载.NET技术-.NET各大网站-编程技术网址
  19. maven报错cannot reconnect
  20. 铁甲雄兵哪个服务器人最多,超级玩家第三期——铁甲雄兵全区最高等级玩家

热门文章

  1. js如何提高for循环的效率_让你瞬间提高工作效率的常用js函数汇总
  2. Spring注解 @Async 实现异步调用方法
  3. 使用Jenkins来实现内部的持续集成流程(上)
  4. Scala 知识点掌握1
  5. 容器viewController添加或者删除子viewController
  6. 使用jedisPool管理jedis,使用jedis操作redis
  7. 如何用淘宝助理上传宝贝装修模板
  8. Objective C 总结(十):Conventions
  9. Javascript如何显示完整的大数加法结果而不是科学计数法形式
  10. Sublime Text 3 安装Go语言相关插件gosublime时 搜不到gosublime