2017-09-16 81 views
0

我希望能夠確定給定的散列表示塊,塊高度或交易。比特幣塊和交易正則表達式

我知道塊就像^ [0-9] + $,並且^ 0 $是有效的,因爲它是起始塊。 我知道的塊是在與64的長度base58和通常以0開始 我知道事務是在base58與64

的長度現在我結束了與正則表達式:

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

但我發現了一些交易與領先0,所以我想這不是比特幣協議的一部分,只有塊以0開頭。 我還運行了難度爲1的regtest本地(假)網絡,並且所有塊都不以0開頭。

是否有任何可靠的方法,最有可能使用正則表達式來區分塊散列與事務散列?

+0

不知道比特幣,但你可能應該刪除塊哈希正則表達式中的「+」,否則它會在開始時允許多個零,並且之後仍然有63個base58字符。 –

+0

比特幣的難度通過尋找帶前導零的散列來挖掘塊,所以這是故意的。但是這個正則表達式導致我暴露的問題。 – shkschneider

+0

如果它不是每個單獨散列的區分塊和事務的模式,那麼它肯定是順序,我想。你如何區分它們(視覺上)? – wp78de

回答

0

您需要解決兩個主要問題:第一個和更容易的問題是事務或塊散列的格式。這些是SHA256散列值,表示事務或塊的相應序列化表示,意味着它們只是32字節數組,通常以十六進制表示給用戶。正則表達式來檢查有效性都因此僅僅是

^[a-zA-Z0-9]{64}$ 

,你在比特幣指出塊(儘管不是其他cryptocurrencies如萊特幣)將有前導零,至少有8個零,由於難度最低,你因此也使用以下命令:

^[0]{8}[a-zA-Z0-9]{56}$ 

不過請記住,交易也可能屬於這一類,因爲它們會偶爾產生具有前導零的哈希(在期望每1/4294967296th交易都會有這樣的哈希值)。

第二,更難的問題是檢查哈希是否實際上對應於事務或塊。想想這樣,雖然有很多有效的電子郵件地址,但其中只有很少的實際用戶會真正對應。要執行此檢查,您必須擁有區塊鏈的完整副本並查找匹配的項目,或者您可以使用其他數據結構(例如index或bloomfilter)來檢查此類項目是否真實存在。

+0

好吧我不確定領先的0可以安全地作爲一個硬性規則。我想我必須調用RPC來檢查這個事務是否存在第二個(更難)的問題。 – shkschneider