区块链入门
1.区块链简介
区块链英文Blockchain,字面意思就是(交易数据)块(block)的链(chain)
2008年中本聪发表<<比特币:一种点对点的电子现金系统>>
技术:实际在中本聪的论文中并没有提到区块链这种概念,只介绍了P2P.密码学.共识机制.激励机制.货币理论这些技术上的问题,所以说区块链起源于比特币,是多种技术的整合的结果.
概念:区块链是一种分布式账本,一种通过去中心化.去信任的方式集体维护一个可靠数据库的技术方案
特点:区块链几乎不可被篡改的数据库,分布式不仅体现为数据的分布式存储,也体现为数据的分布式记录,由系统参与者共同维护
开放,共识
任何人都可以参与到区块链网络,每一台设备都能作为一个节点,每个节点都允许获得一份完整的数据库拷贝.节点间基于一套共识机制,通过竞争计算来共同维护一个区块链.任一节点失效,其余的节点仍然能正常工作.
去中心,去信任
区块链由众多节点共同组成一个端到端的网络,不存在中心化的设备和管理机构.节点之间数据交换通过数字签名技术进行验证,无需相互信任,只要按照系统既定的规则进行,节点之间不能也无法欺骗其他节点
交易透明,双方匿名
区块链的运行规则是公开透明的,所有的数据信息也是公开的,因此每一笔交易都是对所有节点可见的.由于节点与节点之间是去信任的,因此节点之间无需公开身份,每个参与者的节点都是匿名的.
不可篡改,可追溯
单个甚至多个节点对数据库的修改无法影响其他节点的数据库,除非能控制整个网络中超过一半的节点同时修改.区块链中的每一笔交易都通过密码学方法与相邻两个区块串联,因此可以追溯到任何一笔交易的前生今世
2.区块链的分类
3.区块链技术基本概念
数据区块:
挖矿与分叉:
所谓挖矿为穷举随机数算法,参与者把上个区块的哈希值加上10分钟内的交易全部打包,再加上一个随机数x(自己穷举),算出一个256位的字符串哈希值,让该值小于比特币网络中给定的一个数,这个数越小,计算出来越难(挖矿难度值).系统每隔2周会根据上一周期的挖矿时间来调整挖矿难度,来调节生成新区块的生成时间稳定在10分钟左右.为了避免震荡,每次调整的最大幅度为4倍
需要说明的是,可能会出现不同地区的矿工几乎同时挖出2个新区块加以链接的情况,这时主链上就会出现分叉,系统并不会马上确认哪个区块不合理,而是约定后续矿工总是选择累计工作量证明最大的区块链.因此,当主链分叉后,后续区块的矿工将通过计算和比较,将其区块链接到当前累计工作量证明最大化的备选链上,形成更长的新主链,并自动抛弃分叉处的短链,从而解决分叉问题.
时间戳和不可篡改性:
时间戳是从1970年01月01日 00时00分00秒(格林威治时间,北京时间08:00:00)
开始的总秒数。
时间戳作为存在性证明,增加了时间的维度,保证不可篡改、不可伪造
分布式数据库:
每个区块就像记账本一样,记录了所有的交易信息永久的嵌入了数据区块中供被人查询.这些数据存储在网络上每一个节点中组成了坚韧的分布式数据库系统.任何一个节点的数据被破坏都不会影响整个数据库的运转,因为健康节点中都保存了完整的数据库.
UTXO交易模式:
请转到http://8btc.com/article-4381-1.html,作者写的非常详细,本人不再赘述.
哈希函数:
一种将输入的字节数据散列化的不可逆的函数(映射),
相同的数据输入将得到相同的结果
输入数据只要稍有变化则将得到一个千差万别的结果,结果无法预测
正向计算(由数据计算其对应的Hash值)十分容易
逆向计算(俗称“**”,即由Hash值计算出其对应的数据)极其困难
Mekle树:
一种哈希二叉树(根节点、父节点、子节点、叶子节点)
可以快速校验大规模数据的完整性
在比特币网络中,Merkle 树被用来记录区块中所有的交易信息,最终生成这个区块
所有交易信息的一个统一的哈希值,任何一笔交易信息的改变都会使得 Merkle 树改变.
Merkle树与spv:
SPV: 简化支付验证协议
SPV节点: 不需要维护一条完整的区块链, 而通过Merkle路径去验证交易的存在。
Merkle树详细分析: https://blog.****.net/qaz540411484/article/details/80806363
双重支付:
双重支付问题又称双花问题,即利用货币的数字特性用同一笔钱支付两次或者多次.
传统金融的货币体系既有物理实体所以可以避免.
但在其他的电子货币体系中,则需要可信的第三方机构监管.
区块链技术则在去中心化的系统中不借助任何第三方只通过分布式节点之间的相互验证和共识机制,有效的解决了双重支付问题.
通过区块链接形成的时间戳技术加上验证比特币是否满足UTXO和数字签名,避免了双重支付问题,在信息的传输的同时完成了价值转移.
如果有人用同一笔UTXO构造了两笔付给不同的交易方,则比特币客户端只会转发最先被侦听到的.矿工会选择将那笔交易包入未来的区块,当其中一笔交易所在的区块后5个区块,这笔交易已经得到了6个区块的确认.在比特币的区块链上,通常做法是6个确认过后被双花的概率很小.按照中本聪白皮书的计算,6个确认后双花的概率大概0.024%.
P2P网络:
详情见:
加密算法:
对称加密算法在加密和解密时使用的是同一个秘钥
例如:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES
**可能会泄露
非对称加密算法需要公钥、私钥进行加密和解密
例如:RSA、 ECC(椭圆曲线加密算法) 、Elgamal、背包算法、Rabin、D-H、
不需要广播私钥,安全性更高,但是计算难度、复杂度更高
区块链这里主要讨论非对称加密算法即ECC(椭圆曲线加密算法)
数字签名:
数字签名涉及到一个哈希函数、发送者的公钥、发送者的私钥。
数字签名有两个作用:
一是能确定消息确实是由发送方签名并发出来的
二是数字签名用到的哈希函数能确定消息的完整性
比特币隐私模型:
基于匿名交易(公钥地址)
4.区块链交易流程
第一步:所有者A利用他的私钥对前一次交易(比特币来源)和下一位所有者B签署一个数字签名,并将这个签名附加在这笔交易的末尾,制作成交易单.(要点:B以公钥作为接收方的地址;A的私钥签名)(基于UTXO模型)
第二步:A将交易单广播至全网,比特币就发送给了B,每个节点都将收到的交易信息纳入本地池,等待生成新区快(要点:对B而言,这笔交易在比特币钱包可以即时看到,但直到区块确认成功后才可以使用)
第三步:节点收到交易单后对交易进行验证:交易必须由交易发起者签名,交易发起者有足够的余额可以支付;然后,通过解一道数学难题去获得创建新区块的权利,并争取到比特币的奖励(新比特币会在此过程中产生)(要点:矿工通过解数学难题挖矿将交易打包到新的区块中)
第四步:当一个节点找到解(符合条件的随机数)时,它就向全网广播该区块记录的所有盖时间戳的交易,全网其他节点收到后进行核对(要点:时间戳用来证实特定区块必然与特定时间是的确存在的;比特币网络采取从5个以上节点时间的中位数作为时间戳)(验证比对区块头的Merkle树根的hash值)
第五步:全网其他节点核对该区块的正确性,没有错误后他们将在该合法区块之后竞争下一个区块,这样就形成了合法记账的区块链(要点:每个节点都保存着一套相同的公共账本;一笔交易从支付到最终确认成功,得到6个区块确认之后才能真正到账)
5.数据结构
区块链:区块链以区块为单位组织数据;全网所有的交易记录都以交易单的形式存储在全网唯一的区块链当中
区块:区块是一种记录交易的数据结构;区块是由区块头和区块主体组成的,区块主体只记录前一段时间内的所有交易信息,区块链的大部分功能都由区块头实现
区块头:
创世区块:
区块形成过程:
7.共识机制
以下介绍比特币的共识,详细请移步:https://blog.****.net/qaz540411484/article/details/80811641