术语表 /交易与手续费
确认
又称确认数、区块确认、已确认交易、未确认交易、Confirmation score。
- 确认是什么?
- 一次确认是指在包含您的交易的区块之上叠加的一个工作量证明区块,因此,包含在最新区块中的付款恰好有一次确认。
确认数衡量的是撤销一笔支付的成本有多高,而不是这笔支付已经存在了多久。区块平均约每十分钟产生一个,因此六个区块通常需要约一小时。交易所会把确认数换算成入账规则,所以一笔充币可能在链上已经可见,却仍无法在您的账户中使用。
运作方式
计算确认数只是对区块高度做简单的算术。取链顶端的区块高度,减去包含您交易的区块的高度,再加一,得到的就是确认数。仍在内存池中等待的交易确认数为零,随着矿工在其上继续出块,这个数字会自行增加。
确认数实际上是一种成本估算。改写历史意味着要重新完成您所在区块以及其上所有区块的工作量证明,而且速度要快于网络其余部分延伸诚实链的速度。比特币白皮书第11节计算了相关概率,并求出失败概率低于0.1%所需的区块数:面对掌握10%算力的攻击者,五个区块就足够;面对掌握30%算力的攻击者,需要二十四个区块;面对掌握45%算力的攻击者,需要340个区块。人们熟知的六个确认,是针对特定威胁模型向上取整后的答案,而不是一条定律。
浅层回滚确实存在,但很少见。2013年3月,一个旧版软件无法处理的区块把网络一分为二,承载约60%算力的那条分支被有意放弃,因为两家大型矿池把节点降级,以恢复单一链。BIP50 是事后分析报告,其中记录了分叉持续期间交易所暂停了充币,并且期间发生了一次双重支付。相比之下,矿工在几乎同一时刻发布有效区块而产生的竞争要常见得多,通常在几分钟内就会解决。
协议只在一处表明了自己的看法。币基输出必须在其上已建立100个区块后才能花费,大约需要16小时40分钟,这是网络内置的答案,说明新生成的资金需要多深的确认才能安全转移。
区块之间的间隔是平均值,而不是固定的时间表。挖矿是一种随机搜索,所以区块可能相隔几秒出现,也可能沉寂一个小时,而每2,016个区块进行一次的难度调整,则会把长期平均值拉回十分钟左右。
购买比特币时为何重要
充币规则由各平台自行设定,未入账的资产无法交易。Kraken、Coinbase 和 Binance 都公布了比特币充币转为可交易余额之前所要求的确认数,而这段等待时间是叠加在您的交易在内存池中停留的时间之上的。打算在行情波动时卖出的人,应在计划操作之前就把币转到平台,而不是在操作过程中才转。
同样的延迟在反方向也存在,并且常常在最不合适的时候让人措手不及。在手续费飙升期间发起的提币,可能数小时都无法确认,这也是 Strike 和 Kraken 支持闪电网络出款的原因之一:闪电网络的结算是即时的,流程中不涉及确认数。
面对面交易和点对点交易是确认数真正发挥作用的场景。在 Paxful 这样的交易平台上,担保托管保护的是买方,而不是您;如果您是交出现金、货物或银行转账的一方,请在确认之后再操作,而不是在看到交易标识符之后。比特币 ATM 则有意采取相反的做法:在零确认时就出款,并把风险计入价差,这一价差往往达到百分之几。
持有则是最简单的情形。已经在您自己钱包中的币不需要盯着看,因为确认深度只会不断累积。在 Bitpanda 或 Relai 的购买到账并经过若干区块之后,就无需再做任何操作。
六个确认究竟能带来什么
以一笔结算到您自己钱包的20,000美元购买为例。零确认时,这笔支付只存在于内存池中,发送方可以将其替换,因为完整的 replace-by-fee 是现代 Bitcoin Core 的默认中继策略。一个确认时,它已进入区块,要撤销它,攻击者必须在落后一个区块的情况下,挖矿速度超过整个网络。
到六个确认时,按白皮书自己给出的数字,掌握10%算力的攻击者追上的概率远低于千分之一,而尝试攻击的成本,是用一个小时的电力和硬件去压过全球的算力。对于个人储蓄转账,一个确认就已足够稳妥。对于机构之间2,000万美元的结算,六个确认是惯例,正是因为这类场景面对的攻击者模型更大。
确认数也无法催促。提高手续费可以加快第一个确认,因为它会让您在矿工排序的队列中靠前;但没有任何办法能加快第二个确认,因为无论您是谁,那个区块都需要大约十分钟。
确认数 vs 区块高度
区块高度是从创世区块开始计数的区块数,因此只会增加,并且对所有人都是同一个数字。确认数则是相对的:它计算的是某笔交易与当前链顶端之间的距离,所以一笔支付会不断获得确认,而它所在区块的高度始终不变。区块浏览器显示"block 900,000"和"412 confirmations"时,告诉您的是这笔交易所处的位置,以及它被掩埋的深度。
确认数 vs 链重组
确认数是防御手段,链重组则是它所防御的事件。当两名矿工同时发布有效区块时,其中一条分支会被舍弃,其中的交易会回到内存池,因此只有一个确认的支付可能暂时回到零确认。这是网络的正常行为,而不是攻击,也正是确认深度之所以重要的原因:每增加一个区块,包含您这笔支付的分支就更难被放弃。