转载自简书ceido:https://www.jianshu.com/u/fcdf49ef65bb

(1)区块链前世今生

密码朋克(Cypherpunk):是一个邮件组,里面有许多大牛。

区块链不是单一的技术,而是一系列技术的集合。

简单的提一下为什么叫区块链:因为比特币系统里的数据是用一个个区块存储的,然后通过hash的方式将一个一个区块连接,形成一个区块的链条,所以叫做区块链。

(2)区块链前景:
1. 应用场景:
  • 资产:数字资产发行、支付(跨境支付)、交易、结算
  • 记账:股权交易、供应链金融、商业积分
  • 不可篡改:溯源、众筹、医疗证明、存在性证明
  • 点对点:共享经济、物联网
  • 隐私:匿名交易
2. 人才缺口巨大
(3)比特币是什么

比特币是数字货币。

货币的定义:凯恩斯《货币论》中讲到:货币是可以承载价值的一般等价物。

历史上的货币:贵金属、银票、法币等

贵金属作为货币因为本身带有价值。银票与法币就实物而言,它们本身是一张纸,没有太大的价值。因为有国家背书,它的价值来源于法律效力与人们约定而成的信任。

同样的,进一步想想,一串数字可以作为货币吗?当人们给予其一定的信任,使其产生了价值,就像当做一颗宝石一样认可它。那么一串数字也可以作为货币,我们称这样的货币为数字货币,也叫虚拟货币。

比特币就是这样一种数字货币。那么问题来了,比特币的信任是从何而来的呢,它为什么值钱?

1.财产只受自己控制:

在现实生活中,财产除了受自己控制外,还受银行的控制,比如银行认为你的财产来路不明,可以冻结你的财产。但是在比特币系统里,你的比特币只受你的私钥控制。

2.无通胀

不会因为银行发行更多的钞票而贬值。举个例子:比如你现在有100元,而全世界的总资产为1000元。那你是相当有钱了。但是如果央行再发行个1000元,那你的100元相当于贬值了一半(物以稀为贵嘛)。

而比特币的总量是固定的:2100万。比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算产生。去中心化特性与算法本身可以确保无法通过大量制造比特币来人为操控币值

3.没有假钞

任何作弊的支付,都无法得到比特币网络中其他矿工的确认。这样就无法完成支付。

4.流通性

比特币是点到点的直接到账,免去了许多中间环节。

(4)去中心化

刚才说到比特币是一种数字货币,同时也是一个去中心化记账系统。要想了解去中心化,首先先看看中心化是怎样的:

 
image.png

在中心化的系统里,通常有个中央的服务器,来存储所有的数据,可以理解为就是一个数据库。

而去中心化的系统,数据不再是存储在一个服务器,而是存储于比特币网络的每一个节点里。

 
image.png

如果把每一个节点比作一个电脑的话,记账的数据会存储在每一个人的电脑里面。

那么会引发一些问题,如果两天电脑的记账数据不一致,那么将以谁的为准呢?这就涉及到比特币的原理,原理部分包含4个小节

(5)比特币原理
1.账本如何验证?
 
image.png

比如现在有这么一个账本,张三想搞点小手段,偷偷的把自己余额改为了300:

 
image.png

那么网络中就会出现一些假数据,如何确认张三修改了数据是假的数据呢?这就是比特币账本如何验证的问题。

 
image.png

这也是一个方法,但是如果每次验证都与千百万量的账本数据核对,这个效率是非常低下,实际上是不可行的。

那么比特币的做法是怎样的呢?首先我们要先了解一下Hash函数:

 
image.png
 
image.png

大家做开发的时候,对MD5都很熟悉了,MD5就是一个Hash函数。MD5可以用于校验下载文件是否出错:如果文件的数据有错误,那么文件的hash值就会和网站提供的正确的hash值不一样。这样就可以确定我们下载的文件是否出错。

同样的道理可以用在比特币账本校验中,对一个账本hash之后,就可以得到一个hash值,用这个hash值代替账本原始数据来对比,这样效率会高很多。

 
image.png

这样的hash值与其他数据保存下来,就形成了一个区块(也叫打包、记账、挖矿):

 
image.png

而且我们将序号、时间戳、Hash值称为区块的头部

假如这时候来了第二个账本:

 
image.png
 
image.png

注意:在对第二个账本进行Hash时,会传入第一个账本的Hash值,和第二个账本的原始数据一起进行Hash(就是通过这种方式将块与块相连接!)。如果hash值结果是正确的,就说明传入的hash值也是正确的。这样再将第二个账本的hash传入第三个账本,这样一直传递下去,产生第四个块,第五个块,第N个块...:

 

通过这样的方式将区块连接起来,就形成了区块链。每个节点核对信息的时候,只需要核对最后一个区块的信息是否正确,如果最后一个区块的hash是正确的话,那么说明整个区块链的账本都是正确的,由此完成高效的验证。

2.账户所有权问题?

怎么确定一个比特币是属于谁的?首先还是看看现实中操作:平时我们在刷卡的时候,会需要两样东西:银行卡和银行卡密码。如果银行卡与密码与系统存储的结果对上了,就可以消费了。如果你的银行卡和密码都给盗了,盗贼使用你的卡进行消费。我们还可以通过银行和警察叔叔的协助,确定是盗贼使用了你的卡。

但是在比特币系统中:交易是点对点的,没有银行等第三方。

 
image.png

在比特币系统中,比特币账户是一个地址,谁能用这个地址进行交易,谁就拥有这个账户的所有权。

注意:地址和私钥是非对称的关系,私钥经过一系列Hash运算后得到地址。

 
image.png

由上可知,私钥和账户有着绝对确定的直接对应关系,而不能像银行卡那样再修改密码了。谁拥有了私钥,就相当于谁就拥有了这个账户,谁就可以用这个地址进行交易。所以私钥超重要,如果私钥泄露了,比特币就可能丢失。

所以所有权的问题就变成了在不泄露私钥的情况下,证明自己拥有某个地址的私钥。(也就是验证私钥的正确性就行了)。

(这里我是这样理解的:要想证明自己拥有私钥,就要得到别人的验证,一种方法就是:你直接把密码告诉别人,就好像你把银行密码直接告诉别人,然后说:“你看吧,这个是正确的密码,不信你输入看看,可以取款的,没骗你吧。”
当然,这是傻子才会做的事。有没有不告诉别人密码,然后又可以验证的方法呢?)

这里就用到了非对称加密技术(交易签名)

  • 交易进行hash得到交易摘要
  • 用私钥对摘要进行签名
签名过程:

首先是对原始交易信息进行hash,生成交易摘要,然后再用交易摘要和私钥进行一个签名运算。

 
image.png

在签名运算之后,该节点会在整个网络进行广播:广播内容为原始的交易信息(包含付款方地址)和签名信息。

 
image.png

而接收到的节点又会以同样的方法进行广播,以致传递到所有节点(就像洪泛法??)

验证过程:

用签名和付款方的地址进行一个验证的运算,如果结果是原始交易信息的摘要(hash值),那么说明这笔交易就是私钥所有者发出的,验证通过。这时候就会把交易的信息写入到账本。然后再次进行广播

 
image.png

可以看出,签名和验证是个相反的运算,签名是个加密的过程,验证是个解密的过程。我发现,原来这个付款方地址就是公钥嘛!!(视频后面也说了)这样就不用把私钥告诉别人,而是用公钥就可以验证私钥的正确性了。

               签名运算
交易摘要 + 私钥 ===> 签名 验证运算
签名 + 付款方地址 ===> 交易摘要
 
image.png

视频后面补充了:关于隐私和安全,不打出来了。

3.为什么记账(挖矿)?

记账:Hash打包过程。在比特币的设计中,完成记账是可以获得一定比特币奖励的,所以大家将记账形象的叫做——挖矿,这个奖励其实就是比特币发行的过程。

规则:

  • 一段时间内只有一人可以记账成功(10分钟)
  • 通过解决密码学难题(即工作量证明)来竞争获得唯一的记账权
  • 其他节点只能复制记账结果了

之前说到,记账过程就是如下:

 
image.png

如果只是这样的运算,那么每个人都可以轻松完成,而要保证一段时间内只能有一个人记账成功,就必须要故意大大提高计算的难度。

比特币规定这个计算结果要满足以若干个0开头的要求。

 
image.png

这时在计算hash时,就要引入一个随机数变量,不断的去改变随机数,每个都可以得到一个新的hash值,直到找一个符合以若干个0开头的hash值。我们现在的电脑要找出4个0开头的hash,一般需要1、2分钟的时间。

比特币因为现在很多人参与挖矿,算力很强大,所以将挖矿的难度设为以18个0开头。第一找到这个hash的,就可以获得交易记录集,这个交易记录集就可以这样用:

  • 收集广播中还没有被记录账本的交易
  • 交易的有效性验证
  • 添加一笔给自己转账的交易(挖矿奖励)

这个交易记录集可以理解为通关奖励的宝箱,当然我们要的就是后面那个啦。

 
image.png

18个0的计算量是非常巨大的,要非常强大的设备与消耗巨大的电力(之前听说一些矿工跑到贵州等电费较低的地区挖矿,原来是这个原因,感觉这种故意要消耗巨大算力的设定很浪费啊,最终只有一人能挖到矿。机器没日没夜的跑,其他没能挖到的所有的投入都白费了,陪跑一样)。

所以现在已经没有独立的矿工进行挖矿了,因为几十年也可能挖不出一个。

而且随着越来越多的人投入挖矿,那么计算难度必然又将加大。成本也将越来越高。最终这样作用下去,成本甚至是接近收益的。

4.共识机制(这里听得不太清楚,有时间再补充了)

如果两个节点同时完成工作量证明,使用谁的区块?无仲裁机构裁决,而且都说用我的区块。

为什么要遵守协议:节点工作量只有在其他的节点认同其是有效的。

 
image.png
 
image.png
 
image.png

区块链技术核心概念与原理讲解-Tiny熊的更多相关文章

  1. 002/区块链核心概念与原理详解(Mooc)

    1.课程介绍 (一).区块链前世今生 密码朋克--神秘组织(邮件组) 2.区块链核心概念与原理 (一)比特币是数字货币 为什么叫区块链? 因为比特币系统里面的数据是一个个的区块来存储,并且通过hash ...

  2. 未来-区块链-IBM:IBM 区块链技术开发社区

    ylbtech-未来-区块链-IBM:IBM 区块链技术开发社区 1.返回顶部 1. 开始学习 IBM Blockchain 101:开发人员快速入门指南 这篇快速入门指南适合不熟悉区块链技术,希望快 ...

  3. 如何用区块链技术解决信任问题?Fabric 架构深度解读

    阿里妹导读:区块链技术,随着比特币的兴起而为大家所知.但是具体到技术本身,大家相对熟悉的几个词可能是“数据不可篡改”.“公开链”.“分布式数据”.“共识机制”等. 这篇文章将抛砖引玉,通过深度解读Hy ...

  4. 一、Bitcoin比特币与BlockChain区块链技术

    一.比特币历史 2008 年 10 月 31 日,一个网名叫中本聪(英文翻译过来滴)的家伙发布比特币唯一的白皮书:<Bitcoin:A Peer-to-PeerElectronic Cash S ...

  5. 给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识

    给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识 共识是区块链的核心机制,在一系列的区块链的发展历史当中,PoW/PoS/BFT等系列的共识算法都在各自的应用场景发挥了不同作用.在本体的第 ...

  6. Token:共识的下一个100年,区块链技术是无可阻挡的文明进程

    Token:共识的下一个100年,区块链技术是无可阻挡的文明进程.很少有人意识到,区块链的应用——Token可能是近100年来最伟大的制度创新,超越股份制,并将是『债券』之后最重要最主流的交易品种,没 ...

  7. FUNMVP:几张图看懂区块链技术到底是什么?(转载)

    几张图看懂区块链技术到底是什么? 本文转载自:http://www.cnblogs.com/behindman/p/8873191.html “区块链”的概念可以说是异常火爆,好像互联网金融峰会上没人 ...

  8. 001-Bitcoin比特币与BlockChain区块链技术

    一.比特币历史 2008 年 10 月 31 日,一个网名叫中本聪(英文翻译过来滴)的家伙发布比特币唯一的白皮书:<Bitcoin:A Peer-to-PeerElectronic Cash S ...

  9. 区块链技术(一):Truffle开发入门

    以太坊是区块链开发领域最好的编程平台,而truffle是以太坊(Ethereum)最受欢迎的一个开发框架,这是我们第一篇区块链技术文章介绍truffle的原因,实战是最重要的事情,这篇文章不讲原理,只 ...

随机推荐

  1. 9 HTML DOM事件监听&版本兼容&元素(节点)增删改查

    事件监听: 语法:element.addEventListener(event, function, useCapture); event:事件的类型,触发什么事件,注意不需要on作为前缀,比如cli ...

  2. 如何编写README.md

    一.标题写法 1.在文本下方加上 =,文本变为大标题 2.在文本下方加上-,文本变为中标题 3.单独向输入 = ,则需要空一行 标题的另一种写法: # 一级标题 ## 二级标题 ### 三级标题 ## ...

  3. JS 一次性事件问题

    项目的需求就是不能重复提交 是通过click点击事件提交数据,到这里的时候想了很多办法,比如说销毁这个点击事件, 但是这个实现起来是相对比较麻烦的,后面想到了一个相对比较简单的办法 通过推荐判断 JS ...

  4. 2020年java架构师是什么-java架构师基本要求

    Java系统架构师是一个既必须掌控整体又必须洞察部分瓶颈并根据实际的业务流程情景得出解决方法的团队领导型角色.一个架构师得必须充足的创造力,可以各种各样目标要求开展不一样层面的拓展,为目标顾客出示更加 ...

  5. Py西游攻关之基础数据类型(三)-元组

    Py西游攻关之基础数据类型 - Yuan先生 https://www.cnblogs.com/yuanchenqi/articles/5782764.html 六 tuple(元组) 元组被称为只读列 ...

  6. QQ企业通知识点---ClassSerializers

    Serializers  串列器 序列化器 串行器 MemoryStream   创建其支持存储区为内存的流. BinaryFormatter   以二进制格式将对象或整个连接对象图形序列化和反序列化 ...

  7. 【转】iPhone/IOS使用Fiddler抓包配置

    原文链接:https://blog.csdn.net/weixin_39198406/article/details/81123716 1. 安装 安装Fiddler软件2. 配置2.1 端口 点击 ...

  8. github默认端口22被占用,ssh: connect to host github.com port 22: Connection timed out

    出现github 连接错误: ssh:connect to host github.com port 22:Connection timed out 刚开始以为是网络问题,github不能连接上,但是 ...

  9. C# WebApi的controller中如何存取session

    在MVC以后,Session方式可能已经不太常用,但偶尔还是会用到,比如页面验证码之类的.例如登录页面使用的验证码通过Controller提供一个View来实现,可以使用Session来存储这个值.但 ...

  10. 【android官方文档】与其他App交互

    发送用户到另外一个App YOU SHOULD ALSO READ 内容分享 One of Android's most important features is an app's ability ...