区块链基础
一.区块链的产生
- 密码朋克:通过匿名性来保护隐私安全
- 不可篡改的文件记录:利用时间戳加盖到文件内容中,证实数据的真实存在性与不可篡改性
- 初代加密货币:现有区块链加密货币的前身
二.区块链发展历史
- 2009 比特币的创世区块产生。1.0
- 2014年左右 以太坊诞生。2.0
- 2018年中期,EOS主网上线。3.0
- Fabric
三.区块场景概念
- 数字货币:可以与现金等价交换,理论上拥有现金流的一切功能和属性(与虚拟货币的区别),数字特性(与现金流的区别)
- ICO:产生一个项目亮点,认可它价值和发展潜力,希望筹集资金去实现这个项目。
- 韭菜:被坑散户或大户(一部分的投资人)
- 电子钱包:在电子商务购物活动中常用的支付工具
四.什么是区块链(定义)
- 区块是一种集成了点对点传输协议、现代密码学、共识算法、分布式数据存储等成型技术新的应用模型
五.区块链的特点
- 可追溯
- 不可篡改
- 去中心化
- 完整备份:区块链具有完整的分布式存储特性
- 历史记录:被存储的数据拥有完整的历史记录,可以快速的查看以及复原
- 交易广播:一次交易分发给网络的其它节点,同步接收
六.区块链中、加密货币(bitcoin, eth, eos…)的特点
- 独立性:所有货币都是独立的存在
- 唯一性:地址、交易ID都有不重复的唯一性
- 匿名性:账户和个人信息没有关联,所有交易全程加密
- 不可伪造(篡改):基于加密与时间戳,全程不可篡改
七.区块链核心技术
- 点对点传输协议:在网络中的数据流通
- 现代密码学:公私钥签名、安全
- 共识算法:数据一致性
- 分布式数据存储:实现去中心化的重要技术依据
八.区块链核心概念
1.区块链
- 区块链本质上是一个分布式的账本,通过共识算法来决定谁能抢到记账权。区块链以区块为单位,以区块产生时间为顺序进行连接,每一个当前区块中都保存了上一个区块的哈希值。区块中保存的是交易数据。所以交易都可以区块链中进行追溯,账本只可以追加,不能篡改。
2.区块结构:
a.区块头
- Merkle
- 随机数
- 当前区块哈希
- 前区块哈希
- 区块号码
- 时间戳
b.区块体
- 交易数据
3.分布式数据库
- 区块链中的区块都会存储在每一个节点中,所有的节点就组成了一个分布式数据库,任何一个节点出现问题都不会影响到其它节点,因为其它节点都保存了完整的数据
4.节点
- 节点可以理解成一个运行区块链软件的计算机
- 分类
- 全节点:保存了完整的区块链的副本
- 轻节点:不保存所有的区块,需要依赖全节点进行验证
- 挖矿节点:带有挖矿功能的节点,专门处理交易验证(挖矿),保存了完整的区块链副本
5.挖矿
- 说明:区块是在挖矿的过程中产生的
- 概念:穷举随机数的算法,把上一个区块的哈希加上10分钟之类产生的所有交易再加上随机数通过哈希256产生一个哈希值,只要随机数满足一定的条件,就可以抢到此次交易的记账权。新产生的节点需要进行广播,让其他节点进行验证,防止造假。
6.分叉-挖矿分叉
- 两个或者多个矿工,同时完成了工作量证明,就会同时产生两个新的区块,形成分叉
- 解决方案:不同的矿工跟随了不同区块,由于不同的链上面,算力是有区别,也就是说,矿工的数量是不一样的。
- 由于矿工数量与算力成正比,最终会导致链的增长速度会不同,在经过一段时间之后,会出现其中一条链更长,最终,矿工在发现更长的链之后,会去同步更长的链上面的区块数据,丢弃原来的链。
7.分叉-升级分叉
- 矿工遵从不同的机制(规则)导致的分叉
- 硬分叉:如果区块链共识规则改变的情况下,规则不允许前向兼容,旧节点没有办法认可新节点产生的区块。
- 软分叉:如果区块链共识规则改变的情况下,规则允许前向兼容,旧节点可以兼容新节点产生的区块。
8.时间戳与不可篡改
- 在区块链系统中,获得记账权的节点在链节区块时,在区块头中加盖时间戳,记录区块上链的时间
- 时间戳可以证明特定的数据在特定的时间的存在
9.交易
- 概念:一笔资产在参与者之间的转移,比如数字货币等等
- 内容:
- 交易金额 : 转移的资产量
- 发送者:资产的发送方
- 接收者:资产的接收方
- 交易的ID(HASH):交易的唯一标识,通常用hash表示
10.UTXO(unspent transaction output)交易模式
- 未花费的交易输出:比特币独有的交易模式,比特币交易过程中的基本单位
- 结构 (输入与输出)
- 创世区块:区块链里面第一个区块,创建创世区块产生的交易与挖矿产生的交易没有输入
- 输出(Tx_Out):资金去向
- 输入(Tx_In):资金来源
11.哈希
- 将任意原始数据(交易记录)通过指定的哈希函数,编码为特定长度的,由数字和字母组成的字符串
- 在区块链中的使用:对交易数据进行压缩编码,生成散列字符串
- 特点
- 时间正相关:输入的源数据越长,哈希函数的处理时间就越长
- 输入值即使只相差一个字符,结果也会天差地别
- 不可逆:哈希值几乎不可能反推出源数据
12.Merkle树
- Merkle树可以是二叉树,也可以是多叉树,它具有树的所有特点。
- 在区块链中的作用:快速校验和归纳交易数据的完整性
- Merkle树支持SPV(简化支付验证),可以在不运行完整的网络节点的情况下去对交易数据进行验证。
- 在区块链中,Merkle可以极大的提高查询效率,区块头只需只需要保存一个Merkle根的哈希值,不需要存储所有的交易数据。
13.双重支付(双花)
- 双花:利用数字货币的数字特性,完成两次或者多次支付
- 传统货币具有客观存在的唯一性,天然可以避免双花
- 比特币中,通过UTXO交易模式以及数字签名验证来避免双花。
- 区块链中需要达成只通过分布式节点之间的相互验证与共识机制来避免双花,同时完成价值转移。
- 传统的虚拟货币支付依赖于可依赖的第三方机构提供保证
14.P2P(点对点传输)
- 通过对等网络分配工作任务的分布应用架构
- 迅雷采用的就是P2P
- 网络中所有节点都是同等地位,不存在任何一个中心化节点,也不存在层级结构,每个网络都会承担验证区块数据等功能
- 网络节点根据存储数据量的大小分为全节点和轻量级节点
- 轻量级节点:存储部分数据信息
- 优点:数据量小
- 缺点:不能独立验证交易数据,安全相对而言比全节点要低
- 全节点:保存了创世区块产生以来的所有区块数据。
- 优点:可以独立进行交易的数据验证。安全性极高
- 缺点:数据量太大
- 轻量级节点:存储部分数据信息
15.加密算法:通过一种算法手段对原始信息进行转换,信息接收者通过密钥进行解密
- 对称加密:加密和解密使用相同的密钥
- 非对称加密
- 采用公钥和私钥进行加密
- 公钥是公开的,任何人都可以拥有,私钥是保密的,只有加密者拥有。
- 无法用公钥反推出私钥
16.数字签名:在需要发送的信息后面加上一段内容,作为发送者的证明,另外还可以证明信息没有被修改
17.区块链分类
- 公有链:真正意义上的去中心化分布式区块链,任意节点可以随时、随地加入到一个公链的网络中。匿名性强,任何参与都可以在其中写入、读取、验证交易数据。代表比特币、以太坊……
- 私有链:部分中心化的区块链,具有分布式的特点。中心节点可以指定参与者(交易验证等)
- 应用:私链可以在公司、机构、组织内部进行使用。
- 联盟链:部分去中心化模式,拥有权限控制设定的功能。
- 优势:降低结算成本和时间,提升效率,同时继承去中心化的优点,减轻垄断压力。
- 代表:超级账本(Fabric)
九.区块链架构特点
- 去中心化:区块链中的数据传输、验证等过程全都基于分布式系统,整个网络中没有中心机构的存在。
- 可靠数据库:区块链系统中,数据库采用分布式存储,任何一个节点都有一份完整的数据拷贝。参与系统的节点越多,数据库的安全性越高。
- 开源可编程:开源-区块链系统基本都是开源的,公链代码高度透明,数据和程序对所有人公开。任何人都可以通过官方提供的接口查询数据。可编程-区块链提供灵活的脚本系统(比特币),支持用户创建高级智能合约,TOKEN,去中心化的应用。
- 集体维护:区块链中的数据由整个系统中所有具有记账功能的节点共同维护,任何一个节点被破坏都不会影响整个系统的运作。
- 安全可信:现代密码学使得交易无法被伪造和篡改。通过分布式系统与共识来抵御攻击,具有极高的安全性。
- 准匿名性:采用公钥相关的地址作为标识, 不需要传统的CA证书等,也就不需要确认身份。用户只需要公开地址,不需要公开自己的身份。
十.区块链典型应用分析
比特币
1.特点:
- 总量2100W,永不增发
- 奖励一开始挖出的区块奖励50个比特币,逐年减半
- 通过P2P分布式技术实现,无中心控制节点,所有节点都可以自由出入网络
2.全球节点:https://bitnodes.earn.com/
- 当前节点9763
3.比特币架构
前端
钱包:保存用户私钥,管理用户余额,提供比特币交易(支付、转账等)功能。
分类
a.用户端:桌面钱包
- 离线钱包:USB设备,纸钱包,可以有效防范黑客通过网络攻击盗窃私钥。
- 薄钱包:不会下载整条区块链,采用SPV等方式来验证与用户相差的支付交易。灵活性较高,安全性相对较低
- 厚钱包:下载整条区块链,可以进行完整交易,优势是安全,但有比较的验证成本。
b.决定性
- 决定性钱包:所有的私钥全部由一个私钥种子通过单身哈希算法生成
- 普通决定性钱包:由私钥种子一次性生成所有的私钥
- 层次决定性钱包:由私钥种子生成父私钥、父私钥生成子私钥
- 决定性钱包优点:备份方便,只要有私钥种子,就可以一次性恢复所有私钥
- 非决定性钱包:直接保存私钥,私钥直接保存在DB上面
HTTP/JSON RPC API:比特币提供的接口,供外部通过接口来访问或者控制比特币节点
节点后台
- 功能:负责参与比特币网络中的通信互联,维护区块链,验证区块、交易……
- 后台程序主要由bitcoind与挖矿节点程序构成
- 脚本引擎
比特私钥、公钥、地址
1.通过随机数生成私钥:操作系统随机函数
2.采用Sec256k1椭圆加密算法生成公钥
3.生成地址
- 以公钥作为输入,进行SHA256(哈希), 再进行RIPEMD160(哈希)再通过Base58Check生成比特币地址。
- 比特币区块结构
- 比特币区块校验
- 格式
- 难度
- 时间
- 大小
- 交易:UTXO
比特币交易
1.交易结构
- 输入
- 输出
- 交易ID(hash)
2.输入输出
- 每笔交易的输入必定来源于上一笔交易的输出
以太坊
- 一个去中心化的DAPP开发平台
- 智能合约:拥有自我校验与自我执行的协议
- 共识:POW(EThash)
EOS
与以太坊的比较:
- TPS有了极大的提高,以太坊上面每个DAPP都会消耗整条链的资源
- EOS不再是单纯公链,它算是一个区块链的基础架构,开发者可以自由在EOS上创建公链,链与链之间不影响彼此的资源使用,因此,不会出现单个应用占用的资源太多而使得网络拥堵
- EOS上面转账或者调用智能合约,不需要消耗EOS代币
- EOS共识算法采用的是DPOS,BFT-DPOS
超级账本
1.Fabric:联盟链,由linux基金会发起
2.Fabric不发行加密货币
3.目标:实现一个权限区块链的底层基础框架。
4.Fabric:
- 身份服务:Fabric与比特币、以太坊最大的区别在于Fabric具有身份识别能力
- 策略服务:提供访问控制,授权等一系列功能,Fabric交易通常需要参与方具有相关的权限才能进行。
- 区块链服务:提供构建分布式账本的基础能力以及数据传输,共识达成等底层功能
- 智能合约:验证节点上运行的分布式交易程序,用于自动执行特定的业务规则。
5.上层结构
- API:编程接口
- SDK:软件开发工具
- CLI:命令行工具