假定交易所在的区块号是 startBlockNumber, 当前最新区块的区块号是 currentBlockNumber.
于是就看到两种计算确认数的计算方式:
方式1:
确认数 = currentBlockNumber - startBlockNumber
方式2:
确认数 = currentBlockNumber - startBlockNumber + 1
究竟该用哪种方式呢?从安全方面来讲,方式1 无疑会比方式2 更安全些,因为方式1 比 方式2 多了一个区块的确认。但一个区块确认带来的安全性其实并没那么明显,要不然也就不需要 6 个或更多确认了。在实际工程中,方式1 还存在一个问题,就是交易在被添加到区块之前和添加到区块之后,确认数都是 0,这显然是不能反应实际情况的。
于是,有人将方式1 定义为区块确认数,将方式2 定义为交易确认数。
在实际项目中,大多数都是按方式2 进行交易确认数计算的,包括 etherscan 和很多交易所。
这里面有一个小坑,就是这个 startBlockNumber 该是如何取的,碰到分叉怎么办?