逻辑分层 | 比特币 | 以太坊 |
应用(合约)层 | 记账、转账 | EVM、DAPP |
激励层 | 挖矿、交易 | 发行,分配机制 |
共识层 | 工作量 | POW,POS,DPOS,PBFT |
网络层 | P2P | P2P、传播机制、验证机制 |
数据层 | 区块数据、链式结构、数字签名 哈希函数、Merkle树、非对称加密 |
区块数据、链式结构、数字签名 哈希函数、Merkle树、非对称加密等优化 |
分叉
软分叉和硬分叉(向前兼容、向后兼容)
用户余额
UTXO模型 Unspent Transaction Output, 表示未花费的输出。
账户模型 记录账户余额。
UTXO优点
- 私密性比较强,理论上可以为每一笔输出设置一个地址。
- 无需维护余额等状态值。
- UTXO是独立数据记录,可以通过并行极大的提升区块链交易验证速度。
- 无需关心事务问题,只需要关心输出脚本即可。
- UTXO无法分割,每次交易都需要多个输出,分别为支出与找零。
账户模型优点
- 可以快速获取账户的余额,而比特币需要将指定地址所拥有的所有UTXO中的未花费交易总值整合。
- 节省空间,因为每笔交易只有一个输入一个输出。
- 可以较容易的实现图灵完备的智能合约。
P2P 网络
NAT 网络地址转换
NAT原理与NAT穿透
数据验证
SPV Simplified Payment Verification 简单支付验证
merkle tree算法
BASE58 基于BASE64升级
SHA256 安全散列算法
共识算法
POW: power of work 表示工作量(公有链)
POS:Proof of Stake,股权证明 (公有链)
DPOS:Delegated Proof of Stake,委任权益证明(公有链)
PBFT:Practical Byzantine Fault Tolerance,实用拜占庭容错算法 (联盟链 私有链)
Raft,paxos 协议
参考:共识算法
比特币交易数据结构
数据区块的交易记录中,详细记载了比特币的交易记录和相关细节。其中在比特币收支详情里面,记录了收支的比特币地址和merkle节点值等情况,因此收支详情是交易记录中最重要的部分。
完整的交易记录结构如下表格:
版本变更过程
比特币支出和接收交易的结构
在数据块中,比特币支出和接收交易是写在一起的,整个收支记录包括很多比记录。每一比记录都有自己的索引编号以供查询。
每一比记录中包括了生成时间、引用交易的哈希值、交易记录索引编号、比特币支出地址、支出地址数量等细节。每一比收支交易记录都有一个Merkle节点值,这个hash节点值是整个Merkle树的一部分,决定了每一个地址都不能重复交易和被伪造。
收支交易结构图如下:
数据区块结构
hexdump程序把数据区块文件转化为十六进制+ASCII表示,编者解释一下:每一个数据区块记录了六个内容:神奇数、区块大小、数据区块头部信息、交易计数、交易详情。在这当中, 数据区块头部信息 的HASH值是下一个新区块的HASH值的参考目标数,最后一项 交易详情 记录了该区块中所有的交易记录(编者会在以后详细说明交易记录的结构)。数据区块结构如下图:
数据区块头部结构
数据区块头部结构中记录了:版本号、前一个区块的记录、Merkle树的根值、时间戳、目标特征值、随机数。
在比特币矿工挖矿的过程就是产生新的数据区块的过程,这个过程需要对比前一个数据区块头部的HASH值和随机数,如果满足一定条件则生成新的区块。 Merkle树 的根值为该区块中所有被记录交易的根节点HASH值,中本聪用一个HASH树来对每一比交易进行数字签名,以确保每一比交易都不可伪造和没有重复交易,Merkle树就是HASH树的一种。数据区块头部结构如下图: