区块布局
信息
为了最大限度地理解本页内容,强烈建议您熟悉 TL-B 语言。
区块链中的一个区块是一条新交易记录,一旦完成,就会作为这个去中心化账本的永久且不可更改的一部分被添加到区块链上。每个区块包含交易数据、时间以及对前一个区块的引用等信息,从而形成一个区块链。
TON 区块链中的区块由于系统的整体复杂性而具有相当复杂的结构。本页描述了这些区块的结构和布局。
区块
一个区块的原始 TL-B 方案如下:
block#11ef55aa global_id:int32
    info:^BlockInfo value_flow:^ValueFlow
    state_update:^(MERKLE_UPDATE ShardState)
    extra:^BlockExtra = Block;
让我们仔细看看每个字段。
global_id:int32
创建此区块的网络的 ID。主网为 -239,测试网为 -3。
info:^BlockInfo
此字段包含关于区块的信息,如其版本、序列号、标识符和其他标志位。
block_info#9bc7a987 version:uint32
    not_master:(## 1)
    after_merge:(## 1) before_split:(## 1)
    after_split:(## 1)
    want_split:Bool want_merge:Bool
    key_block:Bool vert_seqno_incr:(## 1)
    flags:(## 8) { flags <= 1 }
    seq_no:# vert_seq_no:# { vert_seq_no >= vert_seqno_incr }
    { prev_seq_no:# } { ~prev_seq_no + 1 = seq_no }
    shard:ShardIdent gen_utime:uint32
    start_lt:uint64 end_lt:uint64
    gen_validator_list_hash_short:uint32
    gen_catchain_seqno:uint32
    min_ref_mc_seqno:uint32
    prev_key_block_seqno:uint32
    gen_software:flags . 0?GlobalVersion
    master_ref:not_master?^BlkMasterInfo
    prev_ref:^(BlkPrevInfo after_merge)
    prev_vert_ref:vert_seqno_incr?^(BlkPrevInfo 0)
    = BlockInfo;
| 字段 | 类型 | 描述 | 
|---|---|---|
| version | uint32 | 区块结构的版本。 | 
| not_master | (## 1) | 标志位,表示此区块是否为主链区块。 | 
| after_merge | (## 1) | 标志位,表示此区块是否在两个分片链合并后创建,因 此它有两个父区块。 | 
| before_split | (## 1) | 标志位,表示此区块是否在其分片链分裂前创建。 | 
| after_split | (## 1) | 标志位,表示此区块是否在其分片链分裂后创建。 | 
| want_split | Bool | 标志位,表示是否希望分片链分裂。 | 
| want_merge | Bool | 标志位,表示是否希望分片链合并。 | 
| key_block | Bool | 标志位,表示此区块是否为关键区块。 | 
| vert_seqno_incr | (## 1) | 垂直序列号的增量。 | 
| flags | (## 8) | 区块的附加标志位。 | 
| seq_no | # | 与区块相关的序列号。 | 
| vert_seq_no | # | 与区块相关的垂直序列号。 | 
| shard | ShardIdent | 该块所属分片的标识符。 | 
| gen_utime | uint32 | 区块的生成时间。 | 
| start_lt | uint64 | 与区块相关的起始逻辑时间。 | 
| end_lt | uint64 | 与区块相关的逻辑结束时间。 | 
| gen_validator_list_hash_short | uint32 | 在生成此区块时,与验证器列表相关的简短哈希值。 | 
| gen_catchain_seqno | uint32 | Catchain与此区块相关的序列号。 | 
| min_ref_mc_seqno | uint32 | 引用的主链区块的最小序列号。 | 
| prev_key_block_seqno | uint32 | 上一个密钥块的序列号。 | 
| gen_software | GlobalVersion | 生成区块的软件版本。只有当 "版本 "的第一位设置为 "1 "时才会显示。 | 
| master_ref | BlkMasterInfo | 如果区块不是主区块,则是主区块的引用。存储在引用区块中。 | 
| prev_ref | BlkPrevInfo after_merge | 上一个区块的引用。存储在引用中。 | 
| prev_vert_ref | BlkPrevInfo 0 | 垂直序列中前一个区块的引用(如果存在)。存储在引用中。 | 
value_flow:^ValueFlow
该字段表示区块内的货币流量,包括收取的费用和其他涉及货币的交易。
value_flow#b8e48dfb ^[ from_prev_blk:CurrencyCollection
    to_next_blk:CurrencyCollection
    imported:CurrencyCollection
    exported:CurrencyCollection ]
    fees_collected:CurrencyCollection
    ^[
    fees_imported:CurrencyCollection
    recovered:CurrencyCollection
    created:CurrencyCollection
    minted:CurrencyCollection
    ] = ValueFlow;
| Field | Type | Description | 
|---|---|---|
| from_prev_blk | CurrencyCollection | 代表上一个区块的货币流量。 | 
| to_next_blk | CurrencyCollection | 代表货币流向下一个区块。 | 
| imported | CurrencyCollection | 代表输入区块的货币流量。 | 
| exported | CurrencyCollection | 代表从区块输出的货币流量。 | 
| fees_collected | CurrencyCollection | 该区块收取的费用总额。 | 
| fees_imported | CurrencyCollection | 输入区块的费用。仅在主链中为非零。 | 
| recovered | CurrencyCollection | 区块中回收的货币数量。仅在主链中为非零。 | 
| created | CurrencyCollection | 区块中创建的新货币数量。仅在主链中不为零。 | 
| minted | CurrencyCollection |