区块链的过去与未来
区块链的前世今生
密码朋克:
一套加密的电子邮件系统
密码朋克组成:
“密码朋克”用户约1400人,讨论的话题包括数学、加密技术、计算机技术、政治和哲学,也包括私人问题。早期的成员有非常多IT精英,比如“维基解密”的创始人阿桑奇、BT下载的作者布拉姆·科恩、万维网发明者蒂姆·伯纳斯-李爵士、提出了智能合约概念的尼克·萨博、Facebook的创始人之一肖恩·帕克。还包括比特币的发明人中本聪。 据统计,比特币诞生之前,密码朋克的成员讨论、发明过失败的数字货币和支付系统多达数10个。
区块链的技术发展
- 戴伟发明了B-money,强调点对点交易和不可更改的记录
- 哈尔-芬妮 推出了 “加密现金”
- 2008年中本聪推出了《比特币:一个点对点的电子现金系统》
- 后来人们发现点对点的网络等,可以用在别的很对方面,于是就提出了一个技术名词叫区块链(blockchain)
区块链前景
应用场景
- 资产:数字资产发行、支付(跨境支付)、交易、结算
- 记账:股权交易、供应链金融、商业积分
- 不可篡改:溯源、众筹、医疗证明、存在性证明
- 点对点:共享经济(前段时间ofo)、物联网
- 隐私:匿名交易
比特币是什么?
- 比特币是一种数字货币;
- 那什么是货币?
凯恩斯《货币论》中提到:货币是可以承载价值的一般等价物 - 历史中的货币:
- 铜币,金银:贵金属本身的价值
- 银票:有钱庄的信用
- 法币:由国家的信用
- 数字货币
一串数字
一串数字的价值来源于大家的共识,大家认为它有价值,它就可以是一种货币 - 数字货币的信任从何而来?
- 财产只受自己控制,只有我们自己的私钥可以控制自己的财产,而不像现实中的货币,银行可以冻结,政府可以管控
- 比特币有2100万个,没有通货膨胀也不会贬值
- 没有假钞,来源于比特币产生的技术
- 流通性好,可以全球无缝的点对点流通
- 比特币同时还是一种去中心化的记账系统
比特币的原理
账本如何验证?
- 哈希函数:Hash(原始信息)= 摘要信息
- 哈希函数的特点:
- 同样的原始信息使用同一个哈希函数总能得到相同的摘要信息
- 原始信息的任何微小变化都会得到一个面目全非的摘要信息
- 从摘要信息无法逆向推出原始信息
- 比特币的hash
- 区块:包含区块头和区块本身。区块头包含交易的序号、时间戳、哈希值。区块本身主要是交易记录。
- 当时间过去10分钟之后,比特币系统会进行第二次记账。第二次记账时候会使用上一次的哈希值和这一次的区块数据进行一次哈希。得到一个新时刻的哈希值。
- 后者保证前者,一个一个的区块连在一起就变成了所谓的区块链,没一个节点核对信息的时候只需要核对最后一个区块的摘要信息。只要最后一个摘要信息是正确的说明之前的所有数据都是正确的,由此完成高效的账本验证。
所有权问题
所有权问题就是这个比特币是属于谁的,谁可以支付这个账户下的比特币
实际上,比特币的账户就是一个地址,转账的过程就是把比特币从一个地址转账到另一个地址。账本上是不保存任何的个人信息的。
- 比特币中的一个地址会对应一个私钥,谁拥有这个私钥,谁就有这个账户支付权限。
hash(hash(fun(私钥))) --> 地址
谁拥有地址的私钥谁就可以使用这个地址来进行支付。
- 如何在不泄露私钥的情况下,来证明我们拥有每个地址的私钥
非对称的加密技术对交易进行签名
- 交易之前hash得到一个摘要
- 用私钥对摘要进行签名(需要在一个安全的情况下去做,防止私钥的泄露)
签名的过程:
- 首先对原始的交易记录进行一个hash运算
- 第一步结束之后会得到交易信息的摘要信息,然后对摘要信息和私钥进行一次签名运算,签名运算之后会得到签名信息
签名运算之后付款的节点在整个网络内广播,广播的内容包括交易的原始信息和交易的签名信息
当别的节点收到这个广播信息,就会进行验证,验证这个签名的信息是不是付款方使用私钥对交易的摘要信息签名产生的
# 参数1是签名信息
# 参数2是付款方地址
# 返回交易摘要
verity("par1adads", "par2ashqeg") --> "rqwrofni"
if(verity("par1adads", "par2ashqeg")) ==
hash("{
交易记录;
....
..
}") //如果相等验证通过
# 写入账本
# 广播
签名与验证
//下面是签名的函数
//参数1位交易摘要
//参数2位交易私钥
//返回签名信息
sign("par1iyweqwe", "par2hujnislkn") --> "ffggiasngbi"
//下面是验证的函数
//参数1位签名信息
//参数2位付款方地址
//返回交易信息
verity("par1bngii", "gbiowqefnuisa") --> "edfiebgoqsa"
- 整个账本中没有个人信息,保证了个人的隐私
- 安全
为什么记账?(挖矿)
记账:Hash打包的一个过程,这个过程不言而喻是要消耗计算机资源的
为什么记账?
记账的原因是记账会得到奖励,这个奖励其实就是比特币的发行过程
比特币的发行过程:
- 发行一定数量比特币奖励到当前账户
记账的规则
- 一段时间(10分钟)只可以有一个人完成记账
- 通过解决密码学的难题(即工作量的证明)竞争获取唯一记账权
- 其他节点复制记账结果
记账的过程就是挖矿
以谁的账本为准?
工作量的证明:
- 在使用Hash(上一个hash值,交易记录值)= 23t62tgn2o
- 为了保证一段时间只能有一个人完成记账,需要加大记账的难度:
比特币要求最终的结果需要以呢个0作为开始,现在比特币挖矿需要的结果是以18个0作为开始的:
Hash(上一个hash值, 交易记录值, 随机数) = 00002gqegt
交易记录值:
- 收集广播中还没有被记录账本的交易
- 交易的有效性验证
- 验证是否有足够的余额
- 添加一笔给自己转账的交易
共识机制
问题:两个节点同时完成工作量的证明,那么使用谁的区块?
比特币没有中心仲裁机构
为什么要遵守协议?
- 节点工作量只有在其他节点认同其是有效的
共识机制:
- 累计工作量最大的区块链 独立,延长工作链
- 永远延续最长的工作链,抛弃短的链
之后需要了解的:
- 区块链的数据结构Merkle树
- 比特币UTXO及交易脚本
- 中本聪的比特币白皮书
参考:
https://www.jianshu.com/p/7d0327e18244
http://tech.sina.com.cn/i/2017-10-31/doc-ifynhhay9672816.shtml
https://www.imooc.com/video/17056