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

作者 : 开心源码 本文共1933个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共304人阅读

狭义区块链

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

    狭义区块链.png

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

  • 这里有2个漏洞:

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

    区块链分叉.png

共识机制

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

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

广义区块链

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

    广义区块链 .png

区块链与EventSourcing(事件溯源)

  • 什么是EventSourcing?摘要自Axon Framework 从入门、深入到放弃
  • 传统的数据库设计只记录数据的当前状态,对于输入如何到达当前状态的过程信息则并不重视。

保存当前状态.png

  • 而ES采用了完全不同的记录方式,它记录所有改变当前状态的事件。并从这些事件累加出当前状态。它于传统方式相比有如下特性:
    1. 更好的追溯问题的原因。(传统方式只能到log中找)
    2. 更大的数据存储(是缺点也是优点,有利于数据挖掘)
    3. 对于事件只插入不升级。没有锁,吞吐量更高
    4. 更复杂的实现

保存历史事件.png

  • ES还有一种辅助机制来减少溯源的计算量,定期做一个当前状态的快照。事件在最近的快照后进行累加

保存历史事件-快照.png

  • 区块链其实是EventSourcing的一种应用
EventSourcing区块链
只插入、不升级区块不停增长、不可改
可以通过回放事件取得当前状态可以通过回放区块中的交易取得当前状态
单机/分布式(机器)分布式(商业实体)

共识机制才是广义区块链的核心

  • 区块链的最大应用是跨商业实体的分布式应用。一般的分布式应用是在单一商业实体下的。处理的主要是机器不可用的问题。而区块链是处理跨商业实体间数据不可信的问题。
  • 跨公司服务调用是一个比较繁琐的过程,对于数据不一致通常需要人工对账流程。介绍参考:转账交易这件小事,是如何被程序员玩坏的? 这可能导致交易确认缓慢。比方基金申购赎回通常需要T+N日。转账交易,尤其是跨国转账,同样会出现很大的推迟。
  • 区块链共识机制可以看作一个自动对账机制,加快跨公司的交易确认速度。涉及参加方越多,则优势越大

智能合约

EventSourcingSmart Contract
EventTransaction
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解压,如遇到无法解压的请联系管理员
开心源码网 » 从一个程序员的角度了解《区块链》及其应用

发表回复