比特币块和交易正则表达式

时间:2017-09-16 16:06:03

标签: regex bitcoin

我希望能够确定给定的散列是否代表块,块高度或事务。

我知道块就像^ [0-9] + $并且^ 0 $是有效的,因为它是创世块。 我知道一个块在base58中,长度为64,通常以0开头。 我知道一个事务在base58中,长度为64。

现在我最终得到了正则表达式:

  • 块高:^(0 | [1-9] [0-9] *)$
  • 阻止哈希:^ 0 + [BASE58] {63} $
  • 事务哈希:^ [BASE58] {64} $

然而我发现了一些带有前导0的事务,所以我猜这不是比特币协议的一部分,只有块以0开头。 我还运行了一个regtest本地(假)网络,难度为1,所有块都不以0开头。

有没有可靠的方法,最有可能使用正则表达式来区分块哈希和事务哈希?

1 个答案:

答案 0 :(得分:1)

您需要解决两个主要问题:第一个也是更简单的问题是事务或块哈希的格式。这些是事务或块的相应序列化表示的SHA256哈希,这意味着它们只是32字节数组,通常以十六进制表示给用户。因此,检查两者有效性的正则表达式就是

^[a-fA-F0-9]{64}$

当你注意到比特币中的块(虽然不是其他加密货币,例如litecoin)会有前导零,由于最小的难度至少有8个零,你也可以使用以下内容:

^[0]{8}[a-fA-F0-9]{56}$
但是请记住,事务也可能属于该类别,因为它们有时会生成带有前导零的哈希值(期望每个事务中每个事务都会有这样的哈希值)。

第二个更难的问题是检查散列是否实际上对应于事务或块。可以这样想,虽然有许多有效的电子邮件地址,但实际上只有极少数人真正对应实际用户。要执行此检查,您必须拥有区块链的完整副本并查找匹配的项目,或者您可以使用其他数据结构(例如index或bloomfilter)来检查此类项目是否确实存在。