比特币系统交易原理浅析

本文中,所有H()标识hash函数

1.比特币技术点

  • 非对称加密( ECDSA椭圆曲线加密算法)
  • 哈希算法(sha-256)
  • 链表
  • 二叉树

2.比特币数据结构

比特币数据结构
比特币区块链就是如图所示的一个链表。每个区块分为两部分,区块头、区块体。要实际了解区块的具体信息,可访问 https://btc.tokenview.com/cn

2.1区块体

区块体是一颗二叉树,所有交易信息都保存在叶子节点(这些交易分为两种:1.铸币交易,可以凭空造指定数量比特币,没有转账人(转账地址),只有收款人(收款地址)。2.普通转账交易,转账人、收款人都有,需要校验转账人的账户是否有足够余额)。按照上图所示,一级一级向上求hash值,最终生成一颗merkle tree(可信树)。树的指针为子节点的hash值。

2.2区块头

区块头是一些区块的元信息,包括:

  • hash(指向前一个区块的指针哈希指针,是前一个区块的hash值,而不是普通链表中的内存地址,至于如何通过前一个区块的hash值寻址到前一个区块,可以看后续内容)
  • version(协议版本号)
  • merkle root hash(可信树的根哈希,可信树就是区块体,也就是区块体的根节点的哈希值)、区块产生时间
  • nBits(挖矿采用的目标阈值,用来确定挖矿难度,根据算法调节,不可以随意更改,以保证区块的平均出块时间稳定在10分钟,后续具体介绍)
  • Nonce(挖矿需要寻找的随机数)
  • 其它数据

区块链头部

图片来源于 北京大学肖臻老师《区块链技术与应用》公开课笔记5——BTC具体实现篇

3.BTC挖矿的实质

挖矿本质上就是不断调整block header中的nonce值,使整个block header的哈希值小于等于给定的目标阈值(也就是nBits编码前的值 target)。target越小,挖矿难度越大。
比特币系统采用的哈希算法为SHA-256,所以hash值的结果有2^256种可能。target是256位二进制数,target越小,前面的0越多(如 0000000000001···110101),所以调节nonce值使得block header的哈希值得到的目标哈希值也要前面有很多0。(随着难度的提升,某些情况下,即使尝试nonce所有可能值,有2^32种可能,都无法使得block header的哈希值小于等于target,这时情况下怎么办?后续会有方案。)

4.BTC挖矿难度计算

比特币的平均出块时间稳定在10分钟,这是怎么实现的呢?
1.在BTC协议中规定,每隔2016个区块需要调整一次难度,也就是target值,根据10min产生一个新区块可以得到,大概需要14天的时间。
2.target计算方法:
target=target*actualTime/expectTime

actualTime:最近2016个区块实际花费时间,累加
expectTime:2016个区块期望花费时间,固定值 2016*10分钟

5.交易

上述区块体中,每一个叶子节点,都是一笔可信的交易。此小结主要介绍比特币系统交易的数据结构。
图1:区块头截图,截图来自网址: https://btc.tokenview.com/en/block/716888
区块头部
图2:区块交易列表截图,截图来自网址: https://btc.tokenview.com/en/block/716888
区块交易列表
如图2所示,第一笔为.铸币交易,后续都是普通转账交易。

图3:.铸币交易详细信息
在这里插入图片描述
如图3.铸币交易,c19ed29106bba7b7c11ab44224446a46fdb4f498a7d3ec2f6b4b196e15241b8f是交易的哈希值。Input是交易的输入地址列表,因为是铸币交易不需要输入地址(付款方),只需要输出地址(收款方),所以此处可以随意写任何字符串。

Guess you like

Origin blog.csdn.net/qq_38743530/article/details/122282820