第一章 区块链技术入门
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及交易脚本(未发费的交易输出)比特币白皮书