区块链技术基础

区块链体系架构

http://kns.cnki.net/KCMS/detail/11.1826.TP.20171115.2302.006.html

网络层:区块链网络的 P2P 协议主要用于节点间传输交易数据和区块数据,比特币和以太坊的 P2P 协议基于 TCP 协议实现,Hyperledger Fabric P2P 协议则基于 HTTP/2 协议实现。

 

共识层

Q1:消息在不可靠信道上的传播问题

https://www.zhihu.com/question/23167269

A1:拜占庭容错(ByzantineFault-TolerantBFT

 

Q2:决节点自由进出可能带来的女巫攻击问题

http://blog.csdn.net/qq_35056292/article/details/60480292

A2:比特币用了工作量证明(pow),以太坊用了基于权重的权益证明(pos

 

数据层

一、数据结构:Merkle tree / Merkle Patricia tree

比特币:

以太坊:

Merkle Patricia tree 有三种节点:

1. 扩展节点(extension node):类型前缀|公共键部分|下一节点的hash

2. 分支节点(branch node):类型前缀|后续为(0F)的键的hash|

3. 叶子节点(leaf node):类型前缀|剩余部分键|value

二、数据模型

比特币:基于交易的模型,每一笔交易与上一级交易链接,用户余额有交易计算而来

以太币/hyperledger:基于账户的模型,维护了一个账户状态数据库,便于应用开发

 

三、数据存储

非结构化数据如hash值等存入非结构化数据库,比特币、以太坊、hyperledger用了levelDB;结构化数据(用户信息等)可存入结构化数据

 

智能合约层:

 

在以太坊中,部署后的合约存放在区块链上,每次被调用时才被以太坊虚拟机(EVM)加载运行;在 Hyperledger Fabric 中,部署后的合约被打包成 Docker 镜像,每个节点基于该镜像启动一个新的 Docker 容器并执行合约中的初始化方法,然后等待被调用。外部应用通过调用智能合约来实现各种交易,如果调用涉及到修改操作,需要先在全网达成共识,之后修改操作会被记录在区块链,修改结果会被存在状态数据库。

 

应用层

比特币平台上的应用主要是基于比特币的数字货币交易。以太坊除了基于以太币的数字货币交易外,还支持去中心化应用( DecentralizedApplication,Dapp),Dapp 是由 JavaScript 构建的Web 前端应用,通过 JSON-RPC 与运行在以太坊节点上的智能合约进行通信。

 

区块链工作流程

1. 准备节点:个各矿工去获取前块hash,时间戳等必要信息,填入区块头

2. 交易收集:在上一节点确定到新节点生成期间内的所有交易都被广播到全网,每个矿工 都要收集这些信息

3. 计算merkle根:当交易达到要求时计算所有交易的merkle treeroot hash,填入区块 头

4. 算力竞争(挖矿):每个节点都有自己的Nonce值,填入区块头后将区块体进行哈希两 次,映射到一个数字,如果该数字小于难度值,则该节点获得记账权即挖矿奖 励,并将该区块广播,如果该数字大于难度值则调整Nonce重新计算hash

5. 验证:其他节点收到成功算出nonce的节点的广播(nonce,merkle root,验证该值,验 证成功则将该节点加入区块链,并进行下一轮

 

交易流程

AB转钱

比特币:

1. B将自己的公钥pubkeyB,进行2hashsha256ripemd160)得到自己的地址pubkeyB.hash

2. A收到pubkey.hash

3. A进行交易填写交易信息

4. A对交易签名 sig=Tx|sigA

5. sigpubkeyA放入输入脚本ScriptSig

6. 完成交易,将输出广播


猜你喜欢

转载自blog.csdn.net/y734564892/article/details/79404937