区块链架构

基本定义

这里有一段很好的关于架构的讲述,就不完整的抄了

架构有两层含义,静态的和动态的。静态层面主要勾画系统边界、结构、组成的组件以及组件之间的关联关系。动态层面主要规范组件的行为以及组件之间的交互协议。根据系统的架构,可以界定系统的功能特性和非功能特性。
功能特性是特点,非功能特性是不可缺少的共性部分。

架构设计要考虑不断变化和恒久不变的两方面。

一个有长久生命力的系统都有一个设计高明的架构,其精髓在于架构能支持系统功能的变化、发展、演化,允许系统功能不断变化,也就是架构必须提供灵活性。

而系统对易用性、安全性、稳定性和性能却应该是恒久不变的,因此IT架构的设计必须强调非功能特性,其中

  1. 开放性
  2. 可扩展性
  3. 可移植性
  4. 可维护性
  5. 灵活性
  6. 安全性
  7. 性能(响应时间、吞吐率、并发数)

1.0

例如比特币,支撑虚拟货币应用,也就是与转账、汇款和数字化支付相关的密码学货币应用。

2.0

2.0支撑智能合约应用,合约是经济、市场和金融的区块链应用的基石。2.0应用包括股票、债券、期货、贷款、抵押、产权、智能财产和智能合约。

3.0

超越货币、金融和市场的范围的去中心化应用,特别是在政府、健康、科学、文化和艺术领域的应用。

比特币架构

比特币前端

钱包

保存用户的私钥数据库,管理用户余额,提供比特币交易(支付、转账)。

签名、钱包加密、备份、密钥导入、导出。

钱包分为两种,非决定性和决定性的。决定性(deterministic)指的是私钥是否有种子生成。

非决定性钱包: 直接保存私钥,私钥数据保存在Berkeley DB上。安全性不高。比特币核心带有一个非决定性钱包,不推荐使用。

决定性钱包: 所有私钥都由一个私钥种子(Seed)通过单向哈希算法生成。通过种子生成私钥,因此备份容易。又分为普通决定性钱包和层级决定性钱包。

根据部署场景分为,移动钱包,桌面钱包,互联网钱包以及纸钱包。

  1. 移动钱包就是移动端的钱包,因为资源有限,多数采用SPV来验证交易。
  2. 桌面钱包分厚钱包Thick Wallet和薄钱包Thin Wallet。厚钱包下载整条区块链,进行完整的交易校验。比特币核心Bitcoin Core就是厚钱包。提供完整的钱包功能。厚钱包安全性高,交易开销大,适合大额交易。薄钱包灵活性高,安全性不高,适合小额交易
  3. 互联网钱包。依托第三方平台提供对用户隐私的保护,使用灵活,安全性不高。
  4. 纸钱包,字面意思
HTTP/JSON RPC API

API,给外部提供查询余额,支付和转账的接口

命令行工具bitcoin-cli

基于API开发的命令行工具

比特币浏览器bx

比命令行工具更强大的工具

图形开发工具Qt

比特币核心是Qt开发的,是比特币使用最广的客户端

比特币节点后端

比特币节点后台负责参与比特币网络的通信互联,维护区块链,验证区块、交易,广播、转播传递区块交易信息。比特币后台主要是bitcoind,以及挖矿节点程序。比特币核心bitcoin-qt实际上是包含前后端的一体化节点(挖矿功能除外)。

区块链管理

区块链管理涉及初始区块链下载、连接区块、断开区块、校验区块和保存区块,以及发现最长链条的顶区块。

  1. 下载区块链,先下区块头,再并发下载区块体
  2. 接收区块链,节点在开始时将整个区块链的索引从LevelDB调进内存。索引不是单跳的链,在末端可能会形成树,因为会分叉。这一步将新的加点加入树的末梢。
  3. 区块链验证,这一步比较复杂,验证完之后,新的区块就被加入到这个节点的链中了
  4. 重组区块链,节点发现一条更长的链会断开重组。会更改UTXO,被断开的区块中交易会会退到交易内存池(mempool),用回滚记录来断开区块中的交易
    区块验证
    比特币的一个很大的创新是依靠脚本来验证交易的合法性,即每一个将要花掉的比特币必须有相应的来源。

脚本是基于堆栈的一些命令。

内存池管理

mempool也就是交易池管理。节点将通过验证的交易放在一个交易池中,准备放在一个挖到的区块中。当矿工挖到一个合格的区块后,他将按一定的优先级从交易池中选出交易放到区块中。优先级按UTXO的链龄和交易额的大小来划分。当区块填满后,剩下的交易会留在内存池。

内存池的交易不保存在硬盘上,当挖矿节点重启时,内存池的交易会被清空。如果在一定时间内一个交易一直不能被矿工包括在区块链上,钱包软件需要重新发送该交易,并附上较高的交易费。

邻节点管理

当一个新节点做初始启动(bootstrap)的时候,它需要发现网络中的其他节点,并与至少一个节点连接。一般是与一个已知的节点在8333端口建立TCP连接。连接的握手流程发送一个版本信息。对方回复确认消息。

发现邻节点的方法。

  1. 用DNS种子查询DNS。比特币核心带有5个DNS种子
  2. 把一个已知的邻节点作为种子节点。
    共识管理
    比特币的关键是在陌生P2P环境监理共识机制。

比特币中广义的共识管理(consensus)包括挖矿、区块验证和交易验证规则。但这些功能实现分散在不同的程序中。社区在尝试将其独立。

比特币的共识管理必须向前兼容,即使过去有bug也要保持,否则比特币网络会出现分叉。

规则管理

比特币的共识规则是所有节点都必须遵守的规则。而每个节点可以采用一些共识规则以外的个性化规则。这部分的规则有规则管理模块实现。比如一个节点可以拒绝保存、中转大于200KB的交易。另外像对交易费用的一些规则。也可以通过规则模块来管理

密码模块

crypto模块主要是处理比特币地址。

私钥产生公钥。公钥经过几步产生地址

  1. SHA256哈希处理
  2. RIPEMD160哈希处理得到一个160位的结果
  3. Base58Check编码

Base58Check的校验码对地址信息进行双重SHA256哈希处理,并取前4位做校验码,加载比特币地址的后面,因此比特币地址带有校验信息,可以防止人为错误

签名模块

比特币采用椭圆曲线数字签名算法(ECDSA)来实现数字签名及生成公钥。这是一种非对称加密算法,是基于椭圆曲线离散对数问题的计算困难性的一种公钥密码的方法。

secp256k1曲线比其他曲线具有更高的性能。

脚本引擎

基于堆栈的运算平台,非图灵完备。不能跳转,只能执行一次。
这样设计是不希望矿工有能力提交一个可能有死循环的脚本。

比特币作为一个虚拟货币系统,这样的设计已经足够。

挖矿

中本聪当初设计比特币的目标是建立一个完全去中心化的虚拟货币,采用一个CPU一票的理念。后面的矿池是他没有预料到的。

CPU>GPU>FPCA>ASIC

HTTP/JSON RPC 服务端

提供接口来控制比特币节点

Berkeley DB和LevelDB数据库

Berkeley DB做钱包数据库,这是一个开源的文件数据库。介于关系数据库和内存数据库之间。比特币的数据作为文件类型放在硬盘上。

LevelDB用来存储区块的索引和UTXO记录。它是KV数据库。它的数据是冗余数据,可以用原始区块链数据来重建,但是非常慢。

P2P网络管理

在P2P网络上实现和其他邻接点的通信功能

ZMQ队列管理

采用Zero MQ作为消息队列管理和消息分发工具。这是一个简单好用的传输层,提供像框架一样的一个socket library,是个socket编程更加简单。

以太坊架构

核心理念是把区块链作为一个可编程的分布式信用基础设施,支撑智能合约应用。

账户设计

两种账户。外部所有账户EOA和合约账户。

以太坊的设计是将区块链作为一个通用的管理对象状态的去中心化平台,账户就是有状态的对象。

合约账户可以执行图灵完备的计算任务,也可在合约账户之间传递消息,合约编译成EVM字节码。并记录在区块链上。

区块链设计

Merkle Patricia树

PoW机制

Ethash工作量证明机制加入内存难度,使得它具有抵抗单凭哈希运算优化的ASIC挖矿机的属性。每30000个区块需要一个全新的DAG,有向无环图。

计算和图灵完备

EVM高级语言

以太坊P2P网络

节点间使用RLPx协议,Dapp间用Whisper协议

事件

合约是在区块验证的时候被交易触发。以太坊中的事件是一个以太坊日志和事件监测的协议的抽象。事件利用现有的ABI功能来解析日志记录。

3.0 超越货币,金融范围的区块链应用

超宇货币和金融范围,特别是政府、健康、科学、工业、文化和艺术的应用
支持广义资产、广义交换、支持行业应用。
支持行业应用意味着具备企业级属性。其中安全性最突出。同时对网络和共识算法的性能、每秒交易数TPS都有比较高的要求。可以不是完全去中华的架构,最有可能是在不同场景下的混合架构。

通用架构

典型应用

自动化采购
智能化物联网应用
供应链自动化管理
虚拟资产兑换、转移
产权登记

互联链架构剖析

不同链的价值转移

文章标题:区块链架构

本文作者:Benny

发布时间:2020-06-08, 19:49:33

最后更新:2018-06-29, 18:07:44

原始链接:https://benny233.github.io/2020/06/08/区块链架构/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录