Timechain,也就是 Bitcoin Blockchain,是从 Genesis Block 一直连接到当前链尖的有效区块序列。每个后续区块都指向前一个区块的 hash,也就是它的数字指纹,并加入自己的 Proof of Work,证明为生成区块付出了计算工作。节点因此能够独立验证哪段历史遵守规则并拥有最多累计工作量。这里的“时间”不是每笔交易的精确时钟,而主要是可以证明的事件顺序。
可以把它想成一部公开的账务历史,成千上万台计算机都能独立检查每一页新记录。一页就是一个区块。它包含一组交易和对前一个区块的引用,所以这些页面有明确顺序,不能随意调换。Timechain 就是从第一个区块到今天链尖的整条相连序列。它不会按姓名列出每个人拥有多少 bitcoin;它记录交易历史,节点再由此计算哪些 交易输出 仍未花费。它也不是某家公司的服务器。任何 Full Node(独立验证交易和网络规则的节点) 都能下载一份副本并自行验证。 [1] [3]
在 Bitcoin 的语境中,这两个名称指的是同一段区块历史。保存至今的 2008 年 11 月发布前代码,在注释以及变量或函数名称中使用了 timechain。Whitepaper 则谈到时间戳、区块链条和 Proof of Work 链;其中并没有出现 timechain 这个完整单词。后来 Blockchain 成为全球通行的说法。今天它也被广泛用于其他网络和数据库,而 Bitcoin Timechain 特指 Bitcoin 自己的链。因此标题中的两个词不是两套协议,而是让历史名称与今天常见的术语并列保留。 [2] [1] [8]
数字签名可以证明某笔交易得到了必要密钥持有者的授权。但仅凭签名,无法阻止某人签署两笔互相冲突、都想花费同一个尚未花费的先前交易输出,即 UTXO 的交易。一个节点可能先收到付给商家的交易,另一个节点却先收到把同一价值转回发送者的交易。因此网络需要一段共同历史,来确定哪次花费已获确认、哪次花费不能再有效。区块为交易在这个顺序中提供了可以验证的位置。它们并不证明哪条消息按人类时间或网络时间最早创建;不同节点可能以不同顺序看到未确认交易。 [1]
Block Header 是包含区块基本信息的区块头。其中包括前一个区块头的 hash,以及把本区块交易标识汇总为一个 hash 的 Merkle Root。 Hash 很像数字指纹:输入稍有改变,结果就会不同。修改一笔旧交易会改变 Merkle Root、该区块的 hash,以及后一个区块保存的引用。这次改动不会只停留在历史中的一行,而会破坏之后的整段连接。单凭 hash 并不能证明交易遵守规则。节点还必须验证交易,而且每个区块都必须满足所需的 Proof of Work。 [3] [1]
节点不会因为某条分支更长,或得到大型矿工支持,就直接接受它。节点先检查规则:Proof of Work、与前序区块的连接、允许的奖励、交易、花费条件,以及交易输入是否引用了已经花掉的资金。无论作者有多大算力,无效分支仍然无效。只有在有效候选之间,节点才会选择累计工作量最大的链。因此,与其只说“最长链”,更准确的说法是“工作量最大的有效分支”。chainwork 字段估算按照各区块难度生成整条链所需的预期 hash 计算 数量;它并不是矿工实际尝试次数的计数器。 [4] [5] [6]
Proof of Work 需要时间、电力和计算能力,而验证结果却很快。若要修改一个旧区块,修改者必须为它重新产生有效 Proof of Work,重新连接之后的所有区块,还要持续追赶诚实分支不断新增的工作量。一个区块埋在链尖下越深,正常历史的领先优势通常越大。这不是过去绝不会改变的数学承诺,而是一种经济和概率防护:区块越多,成功改写的成本通常上升得越快。攻击者也不能在替代分支中随意放入无效付款或超额 bitcoin,因为其他节点会拒绝那个区块。 [1] [4]
矿工会在 Block Header 中写入 时间戳。共识规则允许一定余量,所以 time 值不能精确证明某个区块或某笔交易在何时创建。一个区块的 时间戳 甚至不必高于它的直接前驱。Bitcoin 因此在某些规则中使用 Median Time Past,即前 11 个区块 时间戳 的中位数。 把这些时间戳排序,再取居中的那个值,就得到中位数。 它比单个时间值推进得更平稳。平均十分钟的出块间隔也不是时刻表:两个区块可能接连出现,下一次等待却可能长得多。区块 高度 能给出链上的准确位置,却不能给出日历上的准确时间。 [4] [7]
两个矿工可能几乎同时在同一 高度 找到不同的有效区块。有些节点先看到一个分支,另一些节点先看到另一个。后续 Proof of Work 使有效分支之间出现工作量差异后,节点会转向累计工作量更多的分支。这样的切换叫作 Reorg。被断开区块中的交易可能在新分支重新确认、回到 Mempool,或因新历史确认了冲突花费而失效。进入区块就是第一次确认,此后压在其上的每个区块再增加一次确认。所有付款并不存在统一的神奇确认数。适当的把握程度取决于金额、风险和能够等待多久。 [1] [3]
Bitcoin 可以创建一笔交易,让它只能从某个区块 高度 开始,或在指定时间以后得到确认。Timelock 不是要求交易在那一分钟自动执行;它只规定有效区块最早可以从何时起收录交易。对于基于时间的 nLockTime,BIP 113 使用前一个区块的 Median Time Past,而不是正在创建的区块中容易被调整的 时间戳。因此条件建立在多个区块的历史上。即使条件已经满足,交易仍需广播、被节点接受并由矿工选择;它并不保证会进入某一个特定区块。 [7] [4]
RPC 是向节点发送命令并读取回复的接口。 Full Node 无需相信公共 区块浏览器 关于某个区块或交易属于当前历史的说法。针对一个具体 hash,getblock RPC 可以显示 height、确认数、Merkle Root、time、mediantime、前一个 hash、难度和 chainwork。各字段回答不同问题:height 表示位置;previousblockhash 表示祖先关系;confirmations 表示它在当前链尖下的深度;time 是 区块头 中的值;mediantime 是中位数;chainwork 表示累计预期工作量。任何一个数字都不够。Timechain 的意义在于,节点会把它们之间的关系与全部共识规则作为一个整体来检查。 [6] [4]
要获得更完整的理解,请将本词条与以下词条结合阅读: Genesis Block, Proof of Work, 交易, Full Node, Difficulty Adjustment. 反向关联还来自: Bitcoin Whitepaper, Genesis Block, Proof of Work, Full Node.