区块链:初探
历史:
- 密码朋克:
维基解密的创始人:阿桑奇
BT下载的作者:布莱姆-科恩
www发明者:蒂姆伯纳斯-李
智能合约概念的提出者:尼科萨博
Facebook的创始人:肖恩帕克
比特币之父:中本聪
- Adam Back发明Hashcash,使用POW
- Haber/Stornetta提出时间戳方法保证数字文件的安全协议
- 戴伟 发明了B-money,强调点对点交易和不可更改记录
- 哈尔芬妮 提出“加密现金”
- 2008年中本聪 比特币:一个点对点的电子现金系统
比特币=======================================》 区块链
为什么叫区块链?
区块链是一系列技术的集合。
比特币系统的数据是一个个区块存储的,通过hash方式把1个个区块连接起来。
应用场景:
- 资产:数字资产发行ICO、支付(跨境支付)、交易、结算
- 记账:股权交易、供应链金融、商业积分
- 不可篡改:朔源、众筹、医疗证明、存在性证明
- 点对点:共享经济、物联网
- 隐私:匿名交易
比特币:数字货币
1.什么是货币:
凯恩斯《货币论》:货币是可以承载价值的一般等价物。
数字货币:一串数字。
大家认为它有价值,它就是货币。【需要得到共识,就比如RMB,不就是一张纸吗?但是大家都认同它是交易的证券,所以RMB就有价值】
2.信任从哪儿来?
- 财产只受自己控制.【不会像银行那样可能会冻结资金】
- 无通胀【现实中有100RMB买不到一个奶粉,而比特币总量是不变的】
- 没假钞【作弊的支付都无法得到其他矿工的确认】
- 流通性好
3.比特币是什么?
去中心化的记账系统。
中心化的系统:
通常有一个中央的服务器存储所有的数据。类似数据库。
去中心化:存储在比特币网络中每一个节点中。
4.比特币原理:
涉及问题:
1.账本如何验证?
2.所有权问题?
3 .为什么记账?【挖矿】
4.以谁的账本为准?【共识机制】
4.1 账本如何验证:
假设有下面这个账本:
账本分别存在下面的每个电脑中:
这时,假如张三改了自己的余额:
这时候网络上的账本就存在真假账本。
如何确定数据正确性?
- Hash【哈希函数:Hash(原始信息)=摘要信息】
- hash特点:同样的原始信息用同一个哈希函数总能得到相同的摘要信息。原始信息发生微小的变化都会哈希出面目全非的摘要信息。从摘要信息无法逆向推算出原始信息。
其他方案:
11核对账本记录、少数服从多数:【效率太慢】
假如有下面的账本:
区块:
这时候来了另一个账本:
会加入第一个账本的hash值。
依次类推,每个节点核对数据的时候,只需要核对最后一个区块的摘要信息,核对上就说明整个区块链账本正确,而不用再每个去确认。
4.2 .所有权问题【私钥控制】
比特币里面是如何确定某个账户的比特币是谁的/谁可以支付它。
现实生活中,刷卡可以用银行卡和密码。发生盗刷报警银行核对账户的所有者是不是我们本人。【核对的证据:开户时提供的信息】
比特币是点对点,没有第三方银行参与,解决方法是:账户->地址
转账是把一个地址转到另外一个地址:
账本不保存个人信息。谁能用整个地址支付,谁就拥有账号所有权支付0.2比特币。
密码->私钥:一个地址对应一个私钥。私钥泄露会导致比特币丢失。
账号和密码是没有对应关系的,2者不能互相推导出来。
地址和私钥是一个非对称关系。私钥经过一系列hash后就可得到地址,而地址hash不能得到私钥。
如何在不泄露私钥的情况下证明我们拥有私钥:
非对称加密技术【交易签名】:交易进行hash得到摘要、用私钥队摘要进行签名。
签名过程:
先对原始交易记录进行hash得到摘要信息
然后用摘要信息和私钥进行签名运算返回签名信息
签名运算后付款的节点会在整个网络中进行广播交易,
广播内容包含交易的原始信息、签名信息
广播让网络上的其他节点验证。当节点受到广播后验证通过后会再次向已知相邻的节点进行广播。
其他节点受到广播后就会开始验证:
验证签名的信息是不是付款方用私钥对原始信息签名产生的。
如果验证的运算是原始交易信息的摘要,说明这个交易就是地址的私钥所有者发出的,验证通过,把这个交易信息写入到当前节点的账本中去并广播。
过程中的签名和验证实际上是一个逆运算:
付款的地址是公钥,签名的过程是对摘要进行加密的过程。验证是解密的过程,用付款方的地址和签名信息得到交易摘要。
账本中没有个人信息保证了隐私性,比特币的安全在自己的手里,不泄露私钥。
4.3 .为什么我们要挖矿:
记账是一个Hash打包的过程。需要消耗计算机资源。
比特币系统中,完成记账的节点可以获取系统一定数量比特币的奖励【也是比特币发行的过程】
挖矿-》》工作量证明:
记账是新发行一定数量的比特币到记账的账户。【比特币现在很值钱】
一起记账带来一个问题类似java的多线程并发修改一个变量的值。
规则:一段时间内只有一个可以记账成功。其他节点复制记账结果【迭代的】
工作量证明:解决密码学难题竞争获取唯一记账权。
需要以若干个0开头。
交易记录集:
- 收集广播中还没有被记录账本的交易
- 交易的有效性验证
- 添加一笔给自己转账的交易【挖矿的奖励】
运算量实例:
得到0需要16次,
为了得到上面的00000...需要耗费资源。【电力】
4.4 .共识机制:
工作量证明中每个矿工都会独立的去完成工作量证明,这时候涉及”多线程知识了“。
2个节点同时完成工作量证明,使用谁的区块?【比特币无仲裁机构裁决】
都说用我的区块。为了解决这个问题就叫共识机制。【也是经济问题】
累计工作量最大的区块链
为什么遵守协议:
节点工作量只有在其他的节点认同其是有效的。
假如:分叉
网络传输的不确定性会导致2个区块的受到的广播时长不一样。所以会对比2个块,选择工作量更多的量作为主链,剩下的就是副链。
此时,以3458A为主链的发现下面的更长会让更长的为主链。
完整的工作量机制:工作量证明+最长链的选择