主页 > imtoken钱包劫持 > 比特币区块结构分析

比特币区块结构分析

imtoken钱包劫持 2023-02-16 06:29:33

比特币的区块数据包含了比特币链上的核心信息,包括比特币的交易方式、区块扩容等问题。

从比特币诞生到现在,每10分钟就有一个区块诞生。如果访问查看最新的区块信息,可以看到当前的区块大小已经是中本聪设定的 1MB 容量。

当前区块高度

一、区块链数据结构

一个完整的块结构主要由以下几部分组成:

数据项字节字段说明

魔法NO

4

幻数

常数 0xD9B4BEF9

块大小

4

块大小

此字段后的块大小(以字节为单位)

区块头

80

块头

组成块头的几个字段

交易柜台

1-9

交易柜台

比特币未确认区块查询

此区块中包含的交易数量,包括 coinbase 交易

交易

不定

贸易

区块中记录的交易信息采用原生交易信息格式,交易在数据流中的位置必须与默克尔树的叶子节点顺序一致

二、区块信息分析

我们选择一个区块哈希为 000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506 的早期区块进行分析。

区块信息

可以看出,区块包含三个交易信息,下面解析区块信息字段。

1.区块头解析

前 80 个字节是块头。

{
    "hash": "000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506",
    "ver": 1,
    "prev_block": "000000000002d01c1fccc21636b607dfd930d31d01c3a62104612a1719011250",
    "mrkl_root": "f3e94742aca4b5ef85488dc37c06c3282295ffec960994b2c0d5ac2a25a95766",
    "time": 1293623863,
    "bits": 453281356,
    "nonce": 274148111
}

字节字段说明

4

版本

区块版本号,表示该区块遵守的验证规则

32

父块头哈希

上一个区块的哈希值,使用 SHA256 (SHA256(parent block header)) 计算

32

比特币未确认区块查询

默克尔根

该区块中交易的 Merkle 树根的哈希值也是通过 SHA256 计算得到的(SHA256())

4

时间戳

区块产生的大概时间,精确到秒的UNIX时间戳,必须严格大于前11个区块的中位时间,全节点也会拒绝那些超过自己2小时时间戳的区块

4

难度目标

该区块的工作量证明算法的难度目标比特币未确认区块查询,已使用特定算法进行编码

4

随机数

为了找到满足难度目标的随机数集,为了解决在算力飙升的情况下32位随机数不够的问题,规定可以更改时间戳和coinbase交易信息, 从而扩大 nonce 位数

阐明:

2.Coinbase 交易信息分析

一个区块的第一笔交易被定义为coinbase交易,即挖矿产生的比特币奖励。可以看出,目前每挖出一个区块的奖励是12.5个比特币,下一次减半将在2020年发生。除了挖矿奖励之外,对“矿工”的激励还包括新记账手续费,未来比特币总量不增加后,将成为矿工的主要收入。


{
    "hash": "8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87",
    "ver": 1,
    "vin_sz": 1,
    "vout_sz": 1,
    "lock_time": 0,
    "size": 135,
    "in": [{
        "prev_out": {
            "hash": "0000000000000000000000000000000000000000000000000000000000000000",
            "n": 4294967295
        },
        "coinbase": "044c86041b020602"
    }],
    "out": [{
        "value": "50.00000000",
        "scriptPubKey": "041b0e8c2567c12536aa13357b79a073dc4444acb83c4ec7a0e2f99dd7457516c5817242da796924ca4e99947d087fedf9ce467cb9f7c6287078f801df276fdf84 OP_CHECKSIG",
        "next_in": {
            "hash": "f3e6066078e815bb24db0dfbff814f738943bddaaa76f8beba360cfe2882480a",
            "n": 12
        }
    }],
    "nid": "70ab531a68f973f7d20b8260cb5e7fecba3699c48715b8b44539ff9776d0b88e"
}

字节字段说明

4

版本

本次交易规则

1-9

比特币未确认区块查询

输入计数器

包含的交易输入数量

32

交易哈希

不引用任何交易,值全部为0

4

交易产出指数

固定为 0xFFFFFFFF

1-9

Coinbase 数据长度

coinbase 数据长度

不定

Coinbase 数据

在V2版本的区块中,除了区块高度,其他数据可以任意填写额外的nonce和挖矿标签

4

序列号

值都是1,0xFFFFFFFF

1-9

输出计数器

包含的交易输出数量

比特币未确认区块查询

8

全部的

satoshis 中的比特币价值

1-9

锁定脚本大小

以下锁定脚本的长度(以字节为单位)

不定

锁定脚本

定义支付输出所需条件的脚本

4

锁定时间

块号或 UNIX 时间戳

3.交易信息记录

我们来看看常见的交易记录。

{
    "hash": "fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4",
    "ver": 1,
    "vin_sz": 1,
    "vout_sz": 2,
    "lock_time": 0,
    "size": 259,
    "in": [{
        "prev_out": {
            "hash": "87a157f3fd88ac7907c05fc55e271dc4acdc5605d187d646604ca8c0e9382e03",
            "n": 0
        },
        "scriptSig": "3046022100c352d3dd993a981beba4a63ad15c209275ca9470abfcd57da93b58e4eb5dce82022100840792bc1f456062819f15d33ee7055cf7b5ee1af1ebcc6028d9cdb1c3af774801 04f46db5e9d61a9dc27b8d64ad23e7383a4e6ca164593c2527c038c0857eb67ee8e825dca65046b82c9331586c82e0fd1f633f25f87c161bc6f8a630121df2b3d3"
    }],
    "out": [{
            "value": "5.56000000",
            "scriptPubKey": "OP_DUP OP_HASH160 c398efa9c392ba6013c5e04ee729755ef7f58b32 OP_EQUALVERIFY OP_CHECKSIG",
            "address": "1JqDybm2nWTENrHvMyafbSXXtTk5Uv5QAn",
            "next_in": {
                "hash": "5aa8e36f9423ee5fcf17c1d0d45d6988b8a5773eae8ad25d945bf34352040009",
                "n": 6
            }
        },
        {
            "value": "44.44000000",
            "scriptPubKey": "OP_DUP OP_HASH160 948c765a6914d43f2a7ac177da2c2f6b52de3d7c OP_EQUALVERIFY OP_CHECKSIG",
            "address": "1EYTGtG4LnFfiMvjJdsU7GMGCQvsRSjYhx",
            "next_in": {
                "hash": "220ebc64e21abece964927322cba69180ed853bb187fbc6923bac7d010b9d87a",
                "n": 0
            }
        }
    ],
    "nid": "fc7704fdd7ec5e69163e51b827fea2133990a26defee2b475408b3c16fd9a968"
}

三、如何解决扩容问题

在比特币的早期,中本聪为了比特币系统的安全和稳定以及防止比特币系统受到攻击,将区块大小设置为 1M。当时比特币用户数量不多,比特币交易不存在拥塞问题。

随着比特币网络的发展,越来越多的交易信息存储在单个区块中。一个 1MB 的区块只能容纳大约 2,000 笔交易。当交易量大时,需要排队等待出块确认,交易网络拥塞问题越来越严重。越严重,针对容量问题的几种解决方案就出现了。

1.块扩展

解决块太小的问题最直接的方法就是扩容。中位块大小在 2015 年翻了一番,从 1 月的 292KB 迅速增长到 12 月的 749KB。

比特币未确认区块查询

Pieter Wuille 在 2015 年 12 月的比特币香港扩展大会上提出隔离见证后,扩展问题甚至被简化为只有 2MB。

为什么不让块更大,比如 30MB?

块存储交易信息。如果将块大小限制提高到 30MB,那么最大的问题不是 CPU 计算能力的瓶颈,而是块的传播和存储。一个30MB的块可能会导致全网孤块率和空块率急剧上升。年产1.5TB的区块链数据也超过了大部分节点机的硬盘容量。基于这1.5TB的数据,区块链浏览器、钱包服务商等可能会扩大10倍至15TB,远远超出普通机器/数据库的磁盘容量。

除了扩展之外,还有其他解决方案,即隔离见证和闪电网络。

2.隔离见证和闪电网络

隔离见证(SegWit)将交易的签名数据与交易数据分离,以解决延展性攻击。

比特币交易主要由两部分数据组成。其中一部分是交易数据,它记录了比特币的来源和去向。另一部分是见证数据,它由一些加密数据组成,以证明这些交易请求是真实的。

中本聪在设计比特币的时候,直接把这两条信息放在了区块里,所以一个区块不能承载更多的交易信息。如果“见证数据”是隔离的,那么区块链只记录交易数据,所以一个区块可以承载更多的交易。

闪电网络的解决方案是在比特币网络中增加一个“闪电网络”,将比特币原链上的少量交易转移到这个闪电网络进行处理,完成后进行记录。到原链。

这是一种链下交易,目的是为了加快交易速度。以太坊也有一个类似的解决方案,称为雷电网络。

假设你乘坐公共汽车。想象一下,比特币区块是一辆每隔十分钟在固定时间发车的公共汽车。当想乘车的人数超过巴士的容量时,那些无法上车的人将不得不等待。一节课。我们的目的是让更多的人乘坐,也就是承载更多的交易。

公共汽车

比特币区块链本身可以根据交易率优先完成交易。如果想快速完成转账等功能,可以设置更高的手续费。这类似于公共汽车让支付较高票价的人先上公共汽车的方式,而那些不想支付较高票价的人必须等到公共汽车上的人减少。

Segregated Witness 意味着我们将一辆卡车(SegWit 盒子)连接到公共汽车的后部。所有乘客必须将背包和行李放在这辆卡车上。由于缺乏个人物品比特币未确认区块查询,每个人占用的空间都更少。汽车可以载更多的人,载客量会增加。

闪电网络可以理解为在公交线路旁边再建一条铁路,让挤不上公交的人直接上火车,解决了人多得坐车(交易)的问题,车太小了。

隔离见证和闪电网络在技术上是可行的,但也存在很多疑问。

依赖隔离见证的闪电网络等 Layer 2 网络不能被视为比特币的扩容解决方案,因为闪电网络交易不等同于比特币的点对点链上交易,大多数比特币交易场景都不是。与闪电网络一起使用。

假设闪电网络部署成功,也会出现大型支付中心的问题,这违背了比特币作为点对点支付系统的初衷。

参考

比特币大师 比特币大师

《区块链:从数字货币到信用社会》