第一章 区块链技术入门
1.1区块链前世今生
1.1.1 密码朋克(Cypherpunk)
邮件组: 密码 数学 计算机技术 等
wiki解密创始人: 阿桑奇
BT下载作者 : 布莱姆-科恩
万维网创始人 : 蒂姆伯纳斯-李
智能合约概念的提出者: 尼克 萨博
Facebook创始人之一: 肖恩帕克
比特币的创始人: 中本聪 (比特币白皮书: 一个点对点的电子现金系统-去中心化)
1.1.2区块链: 一系列技术的集合
作用:存储信息。任何需要保存的信息都可以写入区块链,也可以从里面读取,就像一个数据库。
比特币系统里面的数据是以一个个的区块来存储的,并且通过hash的方式,把一个个区块链接起来形成一个区块的链条。
特点:
- 无中心化 :没有管理员 无需添加额外审核
- 分布式数据库
- 能耗大,非常浪费资源
1.1.3 应用场景
资产: ICO 数字资产发行、支付、交易、结算
记账:股权交易、供应链金融、商业积分
不可篡改(区块链不可篡改的特点): 溯源、重酬、医疗证明、存在性证明
点对点特点: 共享经济 、 物联网
隐私:匿名交易
1.2区块链前景
任何人都可以架设服务器,加入区块链网络成为其中一个节点。可以向任何一个节点,写入/当前数据,因为最后所有数据都会同步到区块链网络中保持一致。
1.3比特币是什么
1.3.1 比特币
比特币:数字货币 每10分钟记账一次
货币: 货币是可以承载价值的一般等价物
一般等价物: 任何可以作为具有交易价值的物品
金属货币—>银票—〉法币 ——》一串数字(虚拟货币)
数字货币: 共识 具有共识的虚拟货币
1.3.2 特点
信任性:财产只受自己控制 (私密钥匙)
无通胀性:不会因为发行过多而贬值
比特币的总量不变性:2100万个
无假钞 :
流通性: 流通性好,全球无缝流通。免去中间商和中心化直接点对点交易
去中心化记账系统:
中央服务器存储所有数据 !=》 存在比特币网络每一个节点里
1.4比特币原理
1.4.1 账本如何验证
Hash
哈希函数: Hash(原始信息) = 摘要信息
Hash就是 计算机可以对任意内容,计算出一个长度相同的特征值。
区块链的长度:256位 ,原始信息不同对应的Hash值一定不可能相同!
解析: 原始信息 通过Hash操作之后,对任何的原始信息,得到一个简短的摘要信息
Hash特点:
- 同样的原始信息用同一个哈希函数总能得到相同的摘要信息
- 原始信息任何微小的变化都会哈希出面目全非的 摘要信息
- 从摘要信息无法逆向推算出原始信息
- 区块与Hash是一一对应的,每个区块的Hash都是针对 区块头 计算的
摘要信息保存起来形成了区块
区块
区块链由一个个区块block组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。
ex:区块头( 序号 、时间戳、 Nonce值、Hash值、当前区块体的hash,上一个区块的Hash值等...) +区块体(交易记录)
Nonce值:记录Hash重算的次数。第100000个区块的NOce值是 274148111,即计算了2.74亿次,才得到一个有效的Hash值。
区块链计算公式:
hash = SHA256(区块头)
hash值 由区块头唯一决定,SHA256是区块链的Hash算法
ps:若当前区块的内容变了,或者上一个区块的hash变了,一定会引起当前区块的Hash改变。
重大意义: 如果有人修改了一个区块,该区块的hash值就变了,为了让后面的区块能继续链接到它,就必须同时修改后面所有的区块,否则被改掉的区块就脱离整个区块链。
基于这类联动机制,区块链保证了自身的可靠性,数据一旦写入就无法被篡改。
两个账本的合并:把第一个账本的Hash值作为原始信息的一部分,与第二个账本的原始信息和在一起进行Hash运算操作。
对比第二个Hash值是否一致的验证。对上了说明第二个账本的信息和第一个摘要的信息都是正确的。
第二个账本:形容又一个 区块 (( 序号 、时间戳、Hash值) +交易记录)
区块链:每一个节点在核对数据的时候,只需要核对最后一个区块的摘要信息。信息能够核对上,说明整个区块链的账本是正确的。完成高效的账本验证。
1.4.2 所有权问题
账号: 地址表示
1.4.2.1 转账记录:
{ “付款地址”:“xxxxx”
“收款地址” :“yyyyy”
“金额” : “2 btc"
}
1.4.2.2 密码 —>私钥
一个地址对应一个私钥
谁拥有这个私钥 ,谁就能用于支付。私钥泄露 比特币就会丢失。
无法重新获取,账号和密码不能互相推导。
1.4.4.3 非对称加密技术(交易签名)
————不泄露私钥的情况下,证明 拥有某个地址的私钥
- 对交易进行hash得到交易的摘要
- 用私钥对摘要进行签名
1.4.4.4 签名过程:
- 对原始信息进行Hash计算 得到摘要信息
用摘要信息和 私钥 进行 签名操作 sign ——得到签名信息
付款节点:
循环广播交易内容: 交易的 原始信息、交易的签名 信息、交易的金额
- 交易的节点 分发给 周围的节点,让周围的节点一起验证信息 ,整个广播循环操作
- 相邻节点收到广播后,验证通过后,再次与之相邻的节点进行广播,进行验证操作。
与相邻的节点进行广播验证后:
验证签名的信息是否是付款方 用私钥对原始信息 签名产生的
1.4.4.5 验证
验证运算 :
原始交易 信息的摘要 一致 说明 是地址私钥所有者发出的
验证通过 并写入账本 并再次广播
1.4.4.6 签名及验证
签名 和 验证 是逆运算
付款的地址 是 公钥
签名的过程 是对摘要进行加密的过程: 通过摘要和私钥 得到签名信息
验证的过程 是解密的过程 :付款方地址和签名信息进行解密, 得到交易的摘要
ps: 账本 不包含任何个人信息
1.4.3 为什么记账(挖矿)
记账 :Hash打包过程
记账 需要消耗资源,记账操作完成会获得系统12.5 btc的奖励
挖矿——工作量证明
1个比特币 相当于 4w+ 人民币 ,一次记账相当于能奖励 50W+ rmb
1.4.3.1 规则
- 一段时间内 只可以有一个人可以记账成功 (10分钟左右)
- 通过解决密码学难题(即工作量证明)竞争获得唯一记账权
- 其他节点 复制记账结果
- 使用一个常量 除以/难度系数 = 目标值 ; target = targetMax / difficulty。只有小于目标值饿Hash才是有效值 (难度系数越调越高目标值越来越小,导致采矿越来越难)
- 难度系数动态调节机制; 即是如果每两周调节一次,发现生成速度比法定速度快10%则难度系数增加10% ,反之亦然
为了保证节点之间的同步,所以区块链的添加速度不能太快。
1.4.3.2 工作量证明
Hash(上一个hash值,交易记录集) = 新的Hash值
提高难度:
Hash(上一个hash值,交易记录集,随机数) = 0000..开头新的Hash值【直到找到一个以若干个0开头hash值】
率先找到一个符合条件的hash值,就能获得一个唯一的记账权
交易记录集
- 收集广播中还没有被记录账本的交易
- 交易的有效性验证
- 添加一笔给自己转账的交易(挖矿奖励12.5btc)
hash值是 16进制 字符串
得到一个0 的概率 是 1/16
得到两个0 的概率 是 16*16
得到 18个0 的概率 是 16的 18次方的 hash运算
1.4.4 以什么为基准--共识机制
思考: 两个节点同时完成工作量证明,使用谁的区块?
节点工作量只有在其他的节点认同其有效的
1.4.4.1 区块链的分叉
上面提到的问题,如果两方同时向区块链写入数据,双方都链接着前一个区块,就形成分叉,这时采用哪个区块?
答: 新节点总是采用最长的那条区块链。若分叉,参考哪个分支在分叉点后面,先达到6个新区块(“ 六次确认”。新区块的生成速度由计算能力决定,拥有大多数计算能力的那条分支,就是被选中的区块链比特链,没被选中的作为备选链。
1.4.4.2 共识机制
采用累计工作量最大的区块链 是主链 或是说难度最大的区块链
机制:
保证 区块链 比特币在最大的链上进行工作
1.5 比特币其他
- 比特币P2P网络
- 区块结构Merkle树
- 比特币UTXO及交易脚本(未发费的交易输出)
- 比特币白皮书