比特币区块和交易正则表达式
Bitcoin block and transaction regex
我希望能够确定给定的哈希值是否代表一个区块、区块高度或交易。
我知道区块就像 ^[0-9]+$ 并且 ^0$ 是有效的,因为它是创世区块。
我知道一个块在 base58 中,长度为 64,通常以 0 开头。
我知道一笔交易是 base58,长度为 64。
现在我用正则表达式结束了:
- 区块高度:^(0|[1-9][0-9]*)$
- 块哈希:^0+[BASE58]{63}$
- 交易哈希:^[BASE58]{64}$
然而我发现了一些前导 0 的交易,所以我猜它不是比特币协议的一部分,只有以 0 开头的块。
我还 运行 一个难度为 1 的注册测试本地(假)网络,所有块都不以 0 开头。
是否有任何可靠的方法(最有可能使用正则表达式)来区分块哈希和交易哈希?
您需要解决两个主要问题:第一个也是更简单的问题是交易或区块哈希的格式。这些是交易或块的相应序列化表示的 SHA256 哈希值,这意味着这些只是 32 字节数组,通常以十六进制表示给用户。因此,检查两者有效性的正则表达式很简单
^[a-fA-F0-9]{64}$
正如您注意到比特币中的块(虽然不是其他加密货币,如莱特币)将有前导零,由于最低难度至少有 8 个零,因此您也可以使用以下内容:
^[0]{8}[a-fA-F0-9]{56}$
但请记住,交易也可能属于该类别,因为它们有时会产生带有前导零的哈希值(预计每 1/4294967296 笔交易都会有这样的哈希值)。
第二个更难的问题是检查散列实际上是否对应于交易或块。可以这样想,虽然有很多有效的电子邮件地址,但只有极少数真正对应于实际用户。要执行此检查,您必须拥有区块链的完整副本并查找匹配项,或者您可以使用其他数据结构(例如索引或 bloomfilter)来检查此类项是否确实存在。
我希望能够确定给定的哈希值是否代表一个区块、区块高度或交易。
我知道区块就像 ^[0-9]+$ 并且 ^0$ 是有效的,因为它是创世区块。 我知道一个块在 base58 中,长度为 64,通常以 0 开头。 我知道一笔交易是 base58,长度为 64。
现在我用正则表达式结束了:
- 区块高度:^(0|[1-9][0-9]*)$
- 块哈希:^0+[BASE58]{63}$
- 交易哈希:^[BASE58]{64}$
然而我发现了一些前导 0 的交易,所以我猜它不是比特币协议的一部分,只有以 0 开头的块。 我还 运行 一个难度为 1 的注册测试本地(假)网络,所有块都不以 0 开头。
是否有任何可靠的方法(最有可能使用正则表达式)来区分块哈希和交易哈希?
您需要解决两个主要问题:第一个也是更简单的问题是交易或区块哈希的格式。这些是交易或块的相应序列化表示的 SHA256 哈希值,这意味着这些只是 32 字节数组,通常以十六进制表示给用户。因此,检查两者有效性的正则表达式很简单
^[a-fA-F0-9]{64}$
正如您注意到比特币中的块(虽然不是其他加密货币,如莱特币)将有前导零,由于最低难度至少有 8 个零,因此您也可以使用以下内容:
^[0]{8}[a-fA-F0-9]{56}$
但请记住,交易也可能属于该类别,因为它们有时会产生带有前导零的哈希值(预计每 1/4294967296 笔交易都会有这样的哈希值)。
第二个更难的问题是检查散列实际上是否对应于交易或块。可以这样想,虽然有很多有效的电子邮件地址,但只有极少数真正对应于实际用户。要执行此检查,您必须拥有区块链的完整副本并查找匹配项,或者您可以使用其他数据结构(例如索引或 bloomfilter)来检查此类项是否确实存在。