区块链_UTXO
UTXO概述
Unspent Transaction Output(未花费的交易输出),Transaction被简称为TX
实际的比特币并不存在,存在的只有UTXO。
比特币的交易由交易输入和交易输出组成,每一笔交易输出都需要花费一笔交易输入。输入与输出是等价的,收货人由地址表示,一个人可以有无穷多的地址。
因此每一笔交易都可溯源,不断向上查找父交易,直到找到这个比特币的创建交易,即挖矿奖励。
栗子:当A拥有10个比特币时,向B转3个比特币。实际上是,向B的地址创建一笔+3的交易,然后再创建一个给自己+7的交易。原来的UTXO因为花费就失效了。
与传统账户的比较
UTXO优点
- 私密性比较强,理论上每一笔输出都可以单独设置一个地址
- 无需维护余额等状态值
- 每个UTXO是独立数据记录,可以通过并行体大的提升区块链的交易验证速度
账户模型优点
- 可以快速获取账户的余额,而UTXO模型则需要计算多笔UTXO来计算。
- 节省空间,每笔交易只有一个输入和输出
区块节点分析
以 Bitcoin 中的区块 #514095 为例,分析其数据结构,了解其实现。
1 | { |
previousblockhash:是上一个父节点整个区块的的Hash,这个设计真的很巧妙
- 通过Hash值能快速定位区块,类似于hashMap的作用
- 防止修改,一旦修改了区块的内容,通过Hash区块内容与区块头的Hash值比较,就知道有没有修改。一旦修改了区块头的hash值,这个区块就在区块链中无法查找了。优秀的设计
Merkle Root:Merkle树的根节点,Merkle树是一种使用哈希指针连接的数据结构;虽然Merkle树有叶节点和非叶节点,但只有叶节点会存储数据,其他非叶节点都是用于验证数据完整性的哈希。
小结:prev_hash 和 merkleroot 分别通过『指针』的方式保证所有的 Block 和交易都是连接起来的,最终保证 Block 和交易不会被恶意节点或攻击者篡改,几乎全部的区块链项目都会使用类似方式连接不同的 Block 和交易,这可以说是区块链项目的基础设施和标配了。