• 【区块链与隐私保护从入门到精通系列教程】第三篇 区块链中的数据结构


    3. 区块链的数据结构

    这里指出一个普遍存在的误区,区块链技术并不是单一的技术,也并不是一个新兴的技术,而是一系列技术的组合应用,应当以系统性和工程性思维去看待,它可以作为一个基础设施和平台,类似于云计算、物联网等技术。

    区块链技术是由许多关键性基础技术融合应用而成,包括P2P动态组网、基于密码学的共享账本、共识机制(在分布式场景下多节点如何达成一致性的问题)、智能合约等技术。这些技术早在区块链提出之前就已被广泛应用,只不过中本聪巧妙地将这些技术组合在一起,并引入激励机制,用经济学原理解决了很多传统技术无法解决的问题,这就是区块链技术的本质。

    在前面,我们从整体上了解了区块链技术,下面我们将进入到区块链本身,从其结构的角度看一看区块到底是什么。

    3.1 区块

     之前提到,区块链就是由存储交易数据的区块组成的链。每个区块一般包含区块头(Header)和区块体(Body)两部分,如图3.1-1所示。

     
    图3.1-1 区块结构
    区块头封装了当前的版本号(Version)、前一区块地址(Prev-block)、时间戳(Timestamp)、随机数(Nonce)、当前区块的目标哈希值(Bits)、Merkle树的根值(Merkle-root)等信息。
    区块体中则主要包含交易计数和交易详情。交易详情就是比特币系统中的记账本,每一笔交易都会被永久地记入数据区块中,而且任何人都可以查询。区块体中的Merkle树将会对每一笔交易进行数字签名,如此可以确保每一笔交易都不可伪造且没有重复交易。所有的交易将通过Merkle树的Hash过程产生一个唯一Merkle根值记入区块头。

    3.2 挖矿

    区块通过挖矿生成。

    挖矿就是计算出一个随机数,把上个区块的哈希值加上10分钟内的全部交易打包,再加上这个随机数,算出一个256位的字符串哈希值,输入的随机数Nonce使哈希值满足一定条件就获得这个区块的交易记账权,而计算这个随机数的方法就是穷举。

    前一个区块Hash值 + 10分钟内全部交易 + 随机数Nonce = 256位字符串哈希值【使哈希值满足一定条件】

    新产生的区块会立即广播出去,以便其他节点对其进行验证。

    验证依靠每个区块存着的上一个区块的哈希值,不断追溯到源头。经过验证后,才最终能获得区块的交易记账权。

    比特币系统会让挖矿的矿工竞争记账权(在主链上链接区块的权利),这个竞争机制就是工作量证明机制。挖矿需要付出大量的能源和时间,谁付出的工作量多就能以更大的概率获得一个区块的记账权。

    获得记账权的矿工会将当前区块链接到前一个区块,形成最新的区块主链,之后该矿工也会得到系统奖励一定数量的比特币。

    所有的区块连接在一起,形成区块链的主链,从创始区块到当前区块,在区块链之上的所有数据历史都可以比追溯和查询。

    3.3 区块链的链接模型

    我们说区块链就是由一个个存储数据的区块组成的链。链指的是由各个具有时间戳的块相互关联,相互链接,成为一条不间断且顺序唯一的链式结构。前面我们提到了区块的数据结构,每个区块分为区块头和区块体(含交易数据)两个部分。区块头包括用来实现区块链接的前一区块的哈希(PrevHash)值(又称散列值)和用于计算挖矿难度的随机数(Nonce)。前一区块的哈希值实际是上一个区块头部的哈希值,而计算随机数规则决定了哪个矿工可以获得记录区块的权力。区块链的链接模型如图3.3-1所示。 

    图3.3-1 区块链链接模型

     3.4 UTXO交易模式:基于交易的记账方式

    UTXO(Unspent Transaction Outputs)是未花费的交易输出。

    除创始区块(区块链中的第一个生成的区块)外,所有的区块中的交易(Tx)都有若干个输入(Tx_in,也称为资金来源,通俗理解成获得的钱)和若干个输出(Tx_out,也称资金去向,也就是花出的钱)。

    传统货币的记账方式是基于账户的记账方式:使用账户余额系统,首先需要一个数据库,记录所有人的余额。这里假设全世界使用比特币的用户有10亿人,每个人每天交易10次,那么平均每秒余额变动将达11万次,如果按照这个频次继续下去,用不了多久相关数据就会撑爆线上的服务器。

    而比特币中的UTXO是未花费的交易输出,一种基于交易的记账方式,账本记录的是你和对方的地址。账户里没有余额的概念,只有交易的概念。

    UTXO是交易的基本单位,不能被分割。举个例子,你有三个UTXO,分别是1,2,5个比特币,现在你要花费4个比特币买一束花,那么交易的过程是:先花费5个比特币,然后再收到一个1个比特币的UTXO。因为UTXO没办法掰开来花,只能全部花出去,然后系统再给你找零。

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    PHP 产生唯一码的方法分析
    Nginx 缓存cache的5种方案
    Nginx 常见应用技术指南
    BigPipe 技术细节分析
    Nginx 配置负载均衡
    linux下调整java版本
    跨域cookie在IE与firefox下的不同
    css2.1中 firefox 与IE 对margintop的不同解释
    ADOQuery代替ClientDataSet做3Tier系统
    查询数据库中的表建个进度条
  • 原文地址:https://www.cnblogs.com/wsxcode/p/16423031.html
Copyright © 2020-2023  润新知