搜索
您的当前位置:首页正文

从一个程序员的角度理解《区块链》及其应用

来源:二三娱乐

狭义区块链

  • 狭义区块链是一种数据结构。它是一种特殊的链表结构。特殊表现为,它的指针指向另一个节点的同时,该指针也是所指节点的hashcode(摘要)


    狭义区块链.png
  • 图上方我想把转账金额从1000改为9999,导致其hashcode改变,后续节点将无法关联到该节点。只要我持有尾节点。那么之前的节点都不可改。

  • 这里有2个漏洞:

    1. 我可以把之后的所有节点中的hash指针都改掉,以实现篡改
    2. 我可以改最新的一个节点,提交一个假的交易
  • 以上两个漏洞本质上都是区块链的分叉,即各方对区块数据有分歧


    区块链分叉.png

共识机制

共识机制就是为了处理分歧。既然大家对数据有分歧,那么可以通过类似投票的机制来解决,即少数服从多数。以下是比较常见的算法:

  • POW工作量证明。这是比特货采用的共识算法。按照CPU计算能力加权来随机获得记账权。可以处理恶意节点,速度慢
  • PBFT实用拜占庭容错。非加权容错算法,可以处理恶意节点。速度中
  • Paxos/Raft及相关变种。不能处理恶意节点,速度快
算法 处理恶意节点 处理不可用节点 最小节点数 交易响应时间
POW 2p+1(p=恶意节点算力)
PBFT 3m+1(m=恶意节点数+不可用节点数)
Paxos/Raft × 3n+1(n=不可用节点数)
  • 采用POW的比特币的算力有中心化的趋势,导致其公正性受到质疑(前途堪忧)。那么如果邪恶势力非常强大?超过了阀值怎么办呢?区块链分叉是可以被观察到的,如果出险强大的恶意势力,那么只能人工协商或者通过法律途径了。不过这种概率是非常小,成本缺非常高。

广义区块链

  • 使用区块链的相关技术应用都属于广义区块链。目前主要包括数字货币和智能合约


    广义区块链 .png

区块链与EventSourcing(事件溯源)

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