区块链自问自答 day1

简要介绍区块链是什么?

区块链(Blockchain)是一种对等网络下的分布式数据库系统

​ 数据结构中的单向链表是通过每个节点包含一个节点的指针实现”链“结构,区块链中是通过后一个区块包含上一个区块的的信息形成”链“式结构,因此若想修改链中的区块内容就需要同时修改此区块所链接的之后所有区块,导致了想修改链中的区块内容难度巨大,难度随后续链接的区块数量增加。

区块链的结构是什么样的?

区块链中的单个区块结构主要分为两个部分:

  1. 区块头

    1. 版本号
    2. 上一个区块散列值
    3. 时间戳
    4. 随机数
    5. 目标值
    6. Merkle根
  2. 区块体
    1. 交易个数
    2. 交易信息和Merkle树
# 比特币区块结构
class 区块的数据结构:
神奇数 = 4 byte # 区块之间的分割符
区块大小 = 4 byte # 记录当前区块的大小 数据区块头部信息 = 80 byte # 记录当前区块的头部信息,其Hash值是下一个新区块的参数
class 区块头数据结构:
版本号 = 4 byte # 数据块的版本号
前一个区块的信息 = 32 byte # 记录前一个数据区块的Hash值,当前区块的Hash值一定比它小
Merkle树的根值 = 32 byte # 记录当前区块中所有交易Merkle树根节点的Hash值
时间戳 = 4 byte # 记录当前区块的生成时间,按照Unix时间格式
目标值 = 4 byte # 当前区块生成所达到目标值的特征,用于矿工的工作量证明
随机数 = 4 byte # 当前区块工作量证明的参数 交易计数 = 1~9 byte # 当前区块所记录的交易数
交易详情 = 变长 # 记录当前区块保存的所有交易细节

中本聪最初将区块的容量上限设定为1 MB,1 MB大小相当于平均每秒可以处理7次交易,每一个区块可以容纳4000余次交易。

另外每个区块都有区块高度区块散列,不过这两个标识并不储存在区块结构中,每个区块只存储父区块的散列,新区块生成后,节点才会计算上一个区块的散列和高度,并将这两个数据维护在单独的表中。

交易中保存了什么信息?

每一笔交易记录包含:

  • 交易生成时间
  • 引用交易的散列值
  • 交易记录索引号
  • 比特币支出地址内容
  • 支出地址数量
  • 。。。。。。

每笔交易记录各自有一个Merkle节点值,是整个Merkle树的一部分,决定了每一个地址都不能重复交易和被伪造。

什么是神奇数?

​ 在比特币区块链中,多个区块存放在同一个文件中,使用神奇数作为区块数据的分隔符。每个区块数据都是以神奇数开始,这个数值在正式网络中是0xD9B5BEF9,测试网络中是0x0709110B。

为什么需要版本号?

​ 一条区块链上的区块随着版本升级会存在不同版本的区块,比特币的版本号2中的Coinbase加入了块高度,这样就保证接下去的每一个块的散列是唯一的,因为每个区块的高度不同直接导致了散列值不同。

什么是Coinbase?

​ Coinbase是每个区块都有的一笔初始交易,是给矿工挖出此区块的奖励。

什么是散列值?

散列函数(英语:Hash function)又称散列算法哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。——维基百科

散列函数的性质:

  1. 单向性。即不可逆,给定明文可以计算出散列值,但是给定散列值不能计算出明文。
  2. 抗碰撞。不同明文使用同一种散列函数很难得到相同的散列值。
  3. 抗篡改。两个不同明文只要有很小的区别,得出的散列值差别也会很大。
  4. 散列值长度固定。不同散列函数计算出的散列值都是有固定长度的。
比特币中使用什么hash算法?

​ 比特币常用SHA-256是安全散列算法2(Secure Hash Algorithm 2,SHA-2)的一种算法标准,后缀256代表散列值的长度是256bit。在比特币中常连续使用两次SHA256算法处理数据,因此称作double-SHA256。

什么是Merkle树?

​ 梅克尔(Merkle)树是一种散列二叉树,它是一种用作快速归纳和校验大规模数据完整性和数据结构。在比特币中Merkle树用来归纳一个区块中的所有交易,然后生成整个交易集合的数字指纹(散列值,root)。Merkle树还可以高效地校验区块中是否存在某笔交易。

​ 在比特币中Merkle树的叶子节点是每笔交易信息的散列值的散列值,若有一笔交易信息TxA则该笔交易信息在Merkle树中的散列值为Hash(TxA)=SHA256(SHA256))。之后将相邻叶子节点的散列值串联再次进行double-SHA256。循环往复直到计算出最后的Merkle树的根(root),若叶子节点(交易数)为奇数则复制最后一个叶节点,再同偶数形式一样,逐层计算。

为什么要使用Merkle树?

​ 使用Merkle树能够实现中本聪描述的简化支付验证(SPV)这个概念:无须下载每一笔交易以及每一个区块,一个轻客户端(Light Client)仅需下载链的所有区块头,即可确定一笔交易的状态。

​ 通过Merkle树对交易信息进行了压缩,可以快速的确认接受的数据是否是虚假的或损坏的。如从一个节点获取了一笔交易信息,我们就能够向保存了完整区块的可信节点申请传输Merkle计算过程中会使用到的散列值,就能确定这笔交易是否真的存在。

​ 当我们拿到了交易K的数据要验证K是否存在,就只需向全节点请求图中橙色节点散列值,验证流程

KL = hash(K,L)
IJKL = hash(IJ,KL)
IJKLMNOP = hash(IJKL,MNOP)
ABCDEFGHIJKLMNOP = hash(ABCDEFGH,IJKLMNOP)
if ABCDEFGHIJKLMNOP == Merkle root:
return 交易存在

​ 如存在16笔交易信息,需要验证其中一笔交易是否存在只要请求log16=4个散列值即可。因此使用Merkle树结构大大减少了要达到证明数据完整性所需的数据量,减少了维护一致性、数据校验以及数据同步所需的网络I/O数据包大小。

区块链的特点有什么?

区块链具有去中心化、有限透明、分布的可靠数据库、自治性、记录难以更改、准匿名性等特点,其说明如下。

去中心化:区块链数据的存储、传输、验证等过程均基于分布式的系统结构,整个系统中不存在中心化的硬件或管理机构,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点共同维护。

有限透明:系统是开放的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开,任何人都可以通过公开的接口查询区块链数据和开发相关应用。

分布的可靠数据库:区块链系统的数据库采用分布式存储,任意参与的节点都可以拥有一份完整的数据库复制,每一方都可以直接验证交易各方的记录。

自治性:区块链采用一种基于协商一致的规范和协议(如一套公开透明的算法)使整个系统中的所有节点能够在去信任的环境下自由安全地交换数据,这使对”人“的信任变成对机器和算法的信任,无须人为干预。

记录难以更改:一旦信息经过验证并添加至区块链,账户信息就会相应进行更新,记录就再难改变,因为这些信息和此前的所有交易记录相互关联(即术语”链“的来源)。系统中采用的各种计算算法和方法用来确保数据库中的记录是永久存在的、按照时间顺序排序,并且网络中的所有其他人都是可以看到的,除非能够同时控制系统中超过51%的节点,否则单个节点上对数据库的修改是无效的,参与系统的节点越多,数据库的安全性就越高。并且,区块链数据的存储还带有时间戳,从而为数据添加了时间维度,具有极高的可追溯性。因此,区块链的数据稳定性和可靠性极高。

准匿名性:区块链系统采用与用户公钥挂钩的地址作为标识,不需要传统的基于公钥基础设施(Public Key Infrastructure,PKI)的第三方认证中心(Certificate Authority,CA)颁发数字证书来确认身份。通过在全网节点运行共识算法,建立网络中诚实节点对全网状态的共识,间接地建立了节点间的信任。用户只需要公开地址,不需要公开真实身份,而且同一个用户可以不断变换地址。因此,在区块链交易上的交易不和用户真实身份挂钩,只和用户的地址挂钩,具有交易的准匿名性。

区块链自问自答 day1的更多相关文章

  1. 区块链自问自答 day2

    区块链自问自答 day2 区块链的自治性是如何达成的?为什么能够在去信任的环境下自由安全地交换数据? ​ 区块链中有众多的节点,包含了恶意节点.故障节点.正常节点,想要这些节点共同做出一致的决定就需要 ...

  2. 正本清源区块链——Caoz

    正本清源区块链 说明:以下内容整理自Caoz的<正本清源区块链>,如有不妥,请联系我修改或删除. 简介 不讨论炒币!不讨论炒币!不讨论炒币! 本课程内容分为两部分: 第一部分,烧脑篇,介绍 ...

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

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

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

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

  5. ICO和区块链区别

    区块链项目众筹(ICO)浅析 2017-07-25 原创 Fintech科普大使 ICO是区块链初创公司项目融资的重要方式类似于Kickstarter众筹,但有不同之处(具体在下一节详述),可以避开传 ...

  6. 远光武汉研发中心区块链事业部Java面试总结

    面试在约定的时间准时进行,也是采用腾讯会议远程面试的方式.但是这是我第一次遇到面试官未打开摄像头的情况,后面经过沟通,双方都打开摄像头进行交流. 之前了解这个岗位主要是区块链相关的Java开发,所以事 ...

  7. 区块链(Blockchain)

    一 .什么是区块链? 区块链(Blockchain)是由节点参与的分布式数据库系统[1],它的特点是不可更改,不可伪造,也可以将其理解为账簿系统(ledger).它是比特币的一个重要概念,完整比特币区 ...

  8. 区块链是伟大的,比特币则不然。《FinTech,金融科技时代的来临》。3星。

    本书讲技术给金融业带来的变革和可能的趋势.作者认为区块链是伟大的发明,因为他可以让金融交易免费且实时地进行.比特币则可能会被其他区块链技术取代.书中有至少一半的内容涉及到了区块链和比特币.总体评价3星 ...

  9. 《区块链:从入门到放弃》之obc安装步骤

    obc安装步骤 朋友们可能会好奇,厨师不研究菜谱怎么改研究兵法了,哈哈,我原本是app出身,最近被安排去预研区块链和比特币技术,2个月下来,颇有斩获.期间得到IBM的CC同学指导我一步一步安装obc的 ...

随机推荐

  1. acwing 902. 最短编辑距离

    地址 https://www.acwing.com/problem/content/904/ 给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有: 删除–将字符串A中的某个字符删除. ...

  2. IT兄弟连 HTML5教程 HTML5的靠山 RFC、WHATWG是什么WEB的新标准

    RFC是什么 RFC文档也称请求注解文档(Requests for Comments,RFC),这是用于发布Internet标准和Internet其他正式出版物的一种网络文件或工作报告,内容和Inte ...

  3. 【Linux命令】安装命令(yum,rpm)

    安装软件有三种方式,第一种是源码安装(源码安装需要手动安装软件,安装的目录,还需要进行编译之后才能安装),步骤比较繁琐.第二种是RPM安装,rpm安装有点像windows系统的面板,会建立统一的数据库 ...

  4. Node 之 Express 4x 骨架详解

    周末,没事就来公司加班继续研究一下Express ,这也许也是单身狗的生活吧. 1.目录结构: bin, 存放启动项目的脚本文件 node_modules, 项目所有依赖的库,以及存放 package ...

  5. (四)初识NumPy(函数和图像的数组表示)

    本章节主要介绍NumPy中的三个主要的函数,分别是随机函数.统计函数和梯度函数,以及一个较经典的用数组来表示图像的栗子!,希望大家能有新的收货,共同进步! 一.np.random的随机函数(1) ra ...

  6. 安装 Java

    1.rpm下载地址 https://download.oracle.com/otn/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm?AuthParam=1570520 ...

  7. 微信小程序反编译

    看到一个有意思的小程序,想了解是如何实现的,于是找了反编译方法. 安装adb驱动 百度安装adb驱动, 设计设置开发者模式,连接电脑. -> % adb devices List of devi ...

  8. Java设计模式:Proxy(代理)模式

    概念定义 代理模式是一种使用代理对象来执行目标对象的方法并在代理对象中增强目标对象方法的一种设计模式. 使用代理模式的原因有: 中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象, ...

  9. GO与PHP的AES交互,key长度问题

    今天在使用go与php的AES加解密交互中,一直有个问题那就是在go中加密后,在php端始终都是无法解密,经过排查最后发现是加密key长度引起的问题, 这里简单记录下. go的AES使用的是第三方的库 ...

  10. CAD制图初学入门教程:怎么在CAD中绘制箭头

    在接触CAD的时候大家有没有和小编一样感觉无所适从,所以下面就来和大家分享一个CAD制图初学入门教程,在CAD中绘制箭头.在CAD图形上进行标注内容的时候一般都会使用箭头来进行指示,那具体怎么在CAD ...