从一个程序员的角度了解《区块链》及其应用
狭义区块链
狭义区块链是一种数据结构。它是一种特殊的链表结构。特殊体现为,它的指针指向另一个节点的同时,该指针也是所指节点的hashcode(摘要)
狭义区块链.png图上方我想把转账金额从1000改为9999,导致其hashcode改变,后续节点将无法关联到该节点。只需我持有尾节点。那么之前的节点都不可改。
这里有2个漏洞:
- 我可以把之后的所有节点中的hash指针都改掉,以实现篡改
- 我可以改最新的一个节点,提交一个假的交易
以上两个漏洞本质上都是区块链的分叉,即各方对区块数据有分歧
区块链分叉.png
共识机制
共识机制就是为了解决分歧。既然大家对数据有分歧,那么可以通过相似投票的机制来处理,即少数服从多数。以下是比较常见的算法:
- POW工作量证实。这是比特货采用的共识算法。按照CPU计算能力加权来随机取得记账权。可以解决恶意节点,速度慢
- PBFT实用拜占庭容错。非加权容错算法,可以解决恶意节点。速度中
- Paxos/Raft及相关变种。不能解决恶意节点,速度快
| 算法 | 解决恶意节点 | 解决不可用节点 | 最小节点数 | 交易响应时间 |
|---|---|---|---|---|
| POW | √ | √ | 2p+1(p=恶意节点算力) | 慢 |
| PBFT | √ | √ | 3m+1(m=恶意节点数+不可用节点数) | 中 |
| Paxos/Raft | × | √ | 3n+1(n=不可用节点数) | 快 |
- 采用POW的比特币的算力有中心化的趋势,导致其公正性受到质疑(前途堪忧)。那么假如邪恶势力非常强大?超过了阀值怎样办呢?区块链分叉是可以被观察到的,假如出险强大的恶意势力,那么只能人工协商或者者通过法律途径了。不过这种概率是非常小,成本缺非常高。
广义区块链
使用区块链的相关技术应用都属于广义区块链。目前主要包括数字货币和智能合约
广义区块链 .png
区块链与EventSourcing(事件溯源)
- 什么是EventSourcing?摘要自Axon Framework 从入门、深入到放弃
- 传统的数据库设计只记录数据的当前状态,对于输入如何到达当前状态的过程信息则并不重视。
保存当前状态.png
- 而ES采用了完全不同的记录方式,它记录所有改变当前状态的事件。并从这些事件累加出当前状态。它于传统方式相比有如下特性:
- 更好的追溯问题的原因。(传统方式只能到log中找)
- 更大的数据存储(是缺点也是优点,有利于数据挖掘)
- 对于事件只插入不升级。没有锁,吞吐量更高
- 更复杂的实现
保存历史事件.png
- ES还有一种辅助机制来减少溯源的计算量,定期做一个当前状态的快照。事件在最近的快照后进行累加
保存历史事件-快照.png
- 区块链其实是EventSourcing的一种应用
| EventSourcing | 区块链 |
|---|---|
| 只插入、不升级 | 区块不停增长、不可改 |
| 可以通过回放事件取得当前状态 | 可以通过回放区块中的交易取得当前状态 |
| 单机/分布式(机器) | 分布式(商业实体) |
共识机制才是广义区块链的核心
- 区块链的最大应用是跨商业实体的分布式应用。一般的分布式应用是在单一商业实体下的。处理的主要是机器不可用的问题。而区块链是处理跨商业实体间数据不可信的问题。
- 跨公司服务调用是一个比较繁琐的过程,对于数据不一致通常需要人工对账流程。介绍参考:转账交易这件小事,是如何被程序员玩坏的? 这可能导致交易确认缓慢。比方基金申购赎回通常需要T+N日。转账交易,尤其是跨国转账,同样会出现很大的推迟。
- 区块链共识机制可以看作一个自动对账机制,加快跨公司的交易确认速度。涉及参加方越多,则优势越大
智能合约
| EventSourcing | Smart Contract |
|---|---|
| Event | Transaction |
| Program(Process Event) | ChainCode (Process Transaction) |
| State(Event processed and add up) | State(Transaction processed and add up) |
| 事件溯源 | 智能合约 |
|---|---|
| 事件 | 交易 |
| 程序(解决事件) | 链码(解决交易) |
| 状态(解决事件后累加取得) | 状态(解决交易后累加取得) |
- 智能合约就是EventSourcing的区块链版,实现跨机构合作交易
HyperLedger Fabric
- Hyperledger 超级账本是一个由Linux基金会主持的,旨在推动跨行业区块链技术的开源合作社区,其中包含多个项目。其中HyperLedger Fabric是无币的纯智能合约项目,受到广泛的应用。
- 使用Docker来部署和运行chaincode
- Peer节点保存所有交易历史记录
- Peer使用Key-Value数据库(CouchBase)来保存当前状态
- 用Kafka排序
- Endorsing节点做背书
- 背书过程相似与分布式两阶段提交协议。所有Endorsing节点模拟运行交易,假如成功并通过其余校验则签名返回。用户端收到足够的背书后进行第二阶段提交
HyperLedger_Flow.jpeg
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 从一个程序员的角度了解《区块链》及其应用
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 从一个程序员的角度了解《区块链》及其应用