术语表 /挖矿与共识
区块高度
又称 Height。
- 区块高度是什么?
- 区块高度是指链上位于某一区块之前的区块数量,因此创世区块的高度为0,其后挖出的区块高度为1。
规定于 BIP-34。
高度是比特币表示“何时”的原生方式。它是一个整数,每产生一个区块恰好加1,不依赖任何人的时钟,凡是需要时间表的共识规则,都以高度而非日期来编写。减半倒计时、确认数和激活公告,读取的都是同一个计数器。
运作方式
区块高度是序列中的一个位置,而不是名称,这一区别比看上去更重要。
当矿工几乎在同一时刻求解出区块时,两个区块可能短暂地声称拥有同一高度;发生链重组后,某个高度所指向的区块也可能与一小时前不同。永久标识符是区块哈希。高度表示您在链上走到了多远,只有说明所指的是哪条链,它才没有歧义,实际中指的是累计工作量最多的那条链。
确认数直接来自算术。一笔交易位于高度为900,000的区块中,而链的顶端在900,005,则它有6个确认,因为计数包含其所在的区块。这个公式(顶端高度减去区块高度再加1)就是您见过的每一个“5/6个确认”进度条背后的算法。
对于任何有计划的事项,共识更倾向于使用高度而不是时间戳,因为时间戳由矿工提供,约束较为宽松,而高度不完成工作就无法伪造。锁定时间是印证这一规则的例外:低于500,000,000的锁定时间被解释为区块高度,等于或高于该数值的则被读作 Unix 时间戳,因此可以指定一笔交易在某个特定高度生效。
高度并非一直写在区块之内。BIP34 规定必须将高度写入 coinbase 交易,该规则在2013年3月的区块227,835开始具有约束力。原因很具体:2010年11月,在高度91,842和91,880处出现了两笔 coinbase 交易,与先前的 coinbase 交易完全重复,因为没有任何规则要求它们的内容必须不同。写入高度可确保每一笔 coinbase 交易都是唯一的。
购买比特币时为何重要
区块高度是一个数字,让您无需询问任何人,就能核实交易所或钱包告诉您的信息。
提币时,您会得到一个交易 ID。区块浏览器会显示包含该交易的区块高度和当前顶端的高度,两者之差加1就是您的确认数。如果客服人员说提币已在一小时前发出,而浏览器显示没有任何区块包含该交易,那么无论账户页面怎么写,这些币都还没有动。
高度还能让您准确理解交易所的政策。平台在达到规定的确认数后才会为充币入账,这说的是高度,而不是分钟数。由于区块是按平均速度而不是按时间表产生的,同样是3个确认的政策,某天可能需要二十分钟,另一天可能需要一小时,两者都不是故障。
再说宣传。每一个减半倒计时都只是推算:该事件由高度定义,而附在其上的日期是基于假定出块时间的猜测。有人以“减半就在”某个具体日期为由向您推销产品,卖的其实是一个预测。声称某笔付款“在高度”某某“已确认”的截图也是如此。高度和交易 ID 在图片中很容易伪造,而在您自己核查的链上则无法伪造,这正是本站安全指南反复强调的习惯。
改变规则的高度
有少数几个高度值得了解,因为比特币在它们前后的行为有所不同。
高度0是创世区块,挖出于2009年1月3日,其中的币永远无法花费。高度210,000于2012年11月28日达到,是第一次减半。高度227,835使 BIP34 在2013年3月起具有约束力。高度481,824于2017年8月24日,是 SegWit 生效、区块开始携带见证数据的位置。高度709,632于2021年11月14日激活了 Taproot。高度840,000于2024年4月20日,是第四次减半。高度1,050,000将是第五次减半,预计在2028年的某个时间,具体取决于区块实际产生的快慢。
区块高度 vs 确认数
区块高度是绝对位置;确认数是相对距离。只要区块仍在链上,其高度就不会改变,但其确认数大约每十分钟增加1。钱包显示确认数,是因为您关心的是深度,交易所也出于同样的原因以确认数来表示门槛。说“我的交易在高度900,000”,并不能说明它是否已经安全。
区块高度 vs coinbase 区块高度
区块高度是区块的属性;coinbase 区块高度是写在区块第一笔交易内的该数字的副本。两者应始终一致,若不一致,节点会拒绝该区块。这一区别之所以重要,是因为 coinbase 中的副本是矿工选择写入的数据,要与链本身所隐含的高度核对,也正是这一机制彻底杜绝了重复的 coinbase 交易。