狭义区块链
-
狭义区块链是一种数据结构。它是一种特殊的链表结构。特殊表现为,它的指针指向另一个节点的同时,该指针也是所指节点的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?摘要自
- 传统的数据库设计只记录数据的当前状态,对于输入如何到达当前状态的过程信息则并不重视。
- 而ES采用了完全不同的记录方式,它记录所有改变当前状态的事件。并从这些事件累加出当前状态。它于传统方式相比有如下特性:
- 更好的追溯问题的起因。(传统方式只能到log中找)
- 更大的数据存储(是缺点也是优点,有利于数据挖掘)
- 对于事件只插入不更新。没有锁,吞吐量更高
- 更复杂的实现
- ES还有一种辅助机制来减少溯源的计算量,定期做一个当前状态的快照。事件在最近的快照后进行累加
- 区块链其实是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 超级账本是一个由Linux基金会主持的,旨在推动跨行业区块链技术的开源合作社区,其中包含多个项目。其中HyperLedger Fabric是无币的纯智能合约项目,受到广泛的应用。
- 使用Docker来部署和运行chaincode
- Peer节点保存所有交易历史记录
- Peer使用Key-Value数据库(CouchBase)来保存当前状态
- 用Kafka排序
- Endorsing节点做背书
- 背书过程类似与分布式两阶段提交协议。所有Endorsing节点模拟运行交易,如果成功并通过其他校验则签名返回。客户端收到足够的背书后进行第二阶段提交