JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

内存池,以及一个区块是如何被构建出来的

你签好一笔交易后,它并不会立刻进入账本,而是先待在一间叫内存池的候车室里,直到某个区块构建者把它取出、排好顺序,并封进一个区块。

进入账本之前的候车室

想象一间忙碌的邮局。你把信投进投递口,它并不会一离手就飞向目的地,而是先汇入一摞等着被分拣、盖戳、装上下一班货车的信件里。一笔区块链交易也是这样。在你签名并广播的那一刻,这笔付款就已经货真价实、随时可走——但它还没有真正进入账本。

这摞等待中的信件,就是内存池——英文 mempool 即 memory pool(内存池)的简称。它是那些有效但尚未确认的交易的暂存区。关键在于:并不存在某个中心化的内存池——每个全节点都在自己的内存里保有一份,并把新交易像传话一样转发给相邻节点,于是一笔刚广播出去的付款会在几秒内传遍全网。

挑选与排序:为什么手续费能买到优先权

一个区块能装的东西有限。区块空间是稀缺的——能塞进的交易数量有上限,而且每隔一段时间才会产出一个新区块(在比特币上大约每 10 分钟一个,在以太坊上每 12 秒一个)。当想进来的人多过能容纳的位置时,总得有个东西来决定先后顺序。

这个东西就是手续费。每笔交易都可以附上一笔手续费——付给区块构建者的一小笔报酬。构建者可以随意挑选它中意的等候交易,而由于它的收益会随收取的手续费水涨船高,它自然会先伸手去取出价更高的那些。所以手续费本质上是在为一个稀缺座位出价:出得多,往往更快被确认;出得少,就可能在内存池里熬过好几个区块,直到流量平息。

封存区块:一份头部,加一张清单

构建者挑好交易、排好顺序后,就把它们打包成一个区块。一个区块分两部分:一长串交易清单(区块主体),以及顶部那一小段大小固定的摘要,叫做区块头。可以把区块头想成一章的封面页——很小,却描述并锁定了里面的一切。

+=====================================+
|             BLOCK HEADER            |
|  prev block hash : a7f3...  (link)  |
|  merkle root     : 9c1d...  (body)  |
|  timestamp       : 12:04:31         |
|  rule value      : difficulty/nonce |
+=====================================+
|             BODY (tx list)          |
|   #1  Alice -> Bob      fee 0.005    |
|   #2  Carol -> Dan      fee 0.004    |
|   #3  Eve   -> Frank    fee 0.002    |
|   ...                               |
+=====================================+
一个区块:一份小小的头部,盖在一张已排序的交易清单之上。

区块头只装着寥寥几个关键字段。它包含前一个区块头的哈希——正是这条向后的链接,把一堆区块变成了一条*链*。它包含一个概括区块主体中所有交易的指纹(即默克尔根,来自一棵默克尔树),所以只要改动其中任何一笔交易,这个数字就会改变,封印随之破裂。它还包含一些与规则相关的数值——一个时间戳,以及在基于证明的链上,诸如难度目标和一个随机数之类的东西。由于区块头承诺了整个主体,对这一小段摘要做哈希,就足以为里面的一切作保。

可究竟由谁来构建它?

我们悄悄略过了最重要的问题。挑选交易、排好顺序、拼出一个区块头,这些都不难——任何节点都做得到。那么,究竟由谁有资格把下一个区块接到大家都认可的那条链上?如果这是一场谁都能来的混战,两个人就可能发布互相矛盾的区块,网络随之分裂。

要公平地回答这个问题——没有老板、在一群互不信任的陌生人之间——这正是共识机制的全部职责。它就是那条规则:决定谁赢得封存下一个区块的权利,以及为什么其他所有人都同意跟随。这恰好是我们接下来要去的地方:工作量证明那场代价高昂的抽奖,以及它更轻盈的表亲——权益证明