区块链入门介绍:从历史到原理
区块链入门
历史与展望
历史
密码朋克(Cyberpunk)一个崇尚数学、密码学、计算机技术等的小组。
比特币的诞生离不开前人众多技术支持,如: POW, 时间戳方法保证数字文件安全的协议、点对点交易、加密货币等。同样,区块链不是一个单一的技术,而是一些技术的集合。
前景
应用场景:
- 资产:数字资产发行、支付(跨境支付)、交易、结算
- 记账:股权交易、供应链金融、商业积分、
- 不可篡改:溯源、众筹、医疗证明、存在性证明
- 点对点:共享经济、物联网
- 隐私:匿名交易,
比特币简介
- 比特币是数字货币 优点:财产只受自己控制、安全、无通胀、没有假钞、流通性好、匿名 缺点:
- 去中心化记账系统
分类
区块链分为区块链公链、私链、联盟链、侧链,特点有哪些, 参考: 什么是区块链公链、私链、联盟链、侧链。 区块链,私链,公链,联盟链之我见
区块链 1.0, 2.0 的 TPS 出块速度慢,而且不知道要等多久。因此出现了区块链 3.0 的想法,想要高性能,大吞吐量。 区块链 3.0, 当前的 EOS 性能提高了,但是是以牺牲了部分去中心化的特点来实现的。它有 21 个超级节点。
比特币原理
账本验证
通过将整个账本进行 hash,然后对比分布式不同机器中的 hash 值是否一致,采用少数服从多数原则。
一个区块: 序号、时间戳、账本的 hash 值、交易记录
新账本的产生:
比特币每 10 分钟记账一次,通过将旧账本的 hash 值和新添加交易记录一起 hash,形成新的账本的 hash。
每个节点在核对的时候,只需要核对最后一个区块的摘要信息,如果它正确,那说明前面的也正确。
账户所有权问题
账户用地址保存,转账的过程是将比特币从一个地址转移到另一个地址。账本上是不保存任何个人信息的。
一条转账记录
1 | { |
私钥
比特币中一个地址对应有一个私钥,拥有私钥才可以登录该账户地址,进行转账付款等。一但私钥泄露,比特币就有可能会丢失。
公钥、私钥、地址的关系:
- 私钥:实际上是一组随机数,关于区块链中的随机数我们已经介绍过了
- 公钥:对私钥进行椭圆曲线加密算法生成,但是无法通过公钥倒推得到私钥。公钥的作用是在和对方交易时,使用自己的私钥加密信息,然后对方使用自己的公钥解密获得原始信息,这个过程俗称签名。
- 地址:由于公钥太长,在交易中不方便使用,就对公钥哈希进行 SHA256、RIPEMD160、Base58 算法加密生成地址
总结,私钥->公钥->地址
签名与验证
采用非对称加密技术,通过签名验证来证明账户所有权(也就是在不泄露私钥的情况下,证明拥有私钥)
签名(加密)
对交易进行 hash 得到摘要
用交易的 hash 摘要和私钥进行签名
广播交易 向周围节点广播交易和签名,周围节点收到后再次向外广播
验证(解密) 签名验证的目的有两个:
- 证明交易所引用的 UTXO 的确属于付款人。 具体到本次交易,就是证明交易 001 的序号为 0 的 UTXO 的确是发给 B 的。 方法:- [ ] 暂时不写
- 证明交易的所有数据的确是付款人提供的,且未被修改过。 具体到本次交易,就是证明 B 的确创建了交易 002,且交易内的数据未被修改过。 方法:使用签名和付款方地址进行验证操作,如果结果为交易的摘要,验证通过
记账(挖矿)
记账: Hash 打包的过程,该过程又被称为挖矿,通过消耗算力打包区块,获取一定的奖励
规则
- 一段时间内只有一人可以记账成功
- 通过解决密码学难题(即工作量证明)竞争获得唯一记账权
- 其他节点复制记账结果
工作量证明
如果按照需要打包的话,只需要计算 Hash(上一个 Hash 值,交易记录集)的
hash
值即可。但是为了出块时间的稳定,就必须提高计算的难度,因此比特币采取加入随机值,要求结果
hash 值以 n 个 0 开头
Hash(上一个Hash值,交易记录集,随机数)= 00eeaFD635BCD
,
因此,挖矿的过程就是不断遍历随机数,寻找符合前 n 个数为 0 的结果 hash
值的过程
交易记录集
- 收集广播中还没有被记录账本的交易
- 交易的有效性验证(两个方面)
- 添加一笔给自己转账的交易(挖矿奖励)
共识机制
两个节点同时完成工作量证明,使用谁的区块?
为什么要遵守协议? 节点工作量只有在其他的节点认同其是有效的
POW 累计工作量最大的区块链
比特币采用的共识算法就是 POW,矿工们在挖一个新的区块时,必须对 SHA-256 密码散列函数进行运算,区块中的随机散列值以一个或多个 0 开始。随着 0 数目的上升,找到这个解所需要的工作量将呈指数增长,矿工通过反复尝试找到这个解。
每个节点根据总是独立地去选择最长的(工作量最大的那条链)