2017-09-16 19 views
0

指定されたハッシュがブロック、ブロックの高さまたはトランザクションを表すかどうかを判断できます。Bitcoinブロックとトランザクションの正規表現

私はブロックが^ [0-9] + $のようなものだと知っています。^ 0 $は起源ブロックなので有効です。 私は今、私は正規表現になってしまった私は、トランザクションが64

の長さとbase58である知っているブロックは、64の長さとbase58で知っていると、通常は0 で始まる:

  • ブロックの高さ:^(0 | [1-9] [0-9] *)$
  • ブロックハッシュ:^ 0 + [BASE58] {63} $
  • トランザクションハッシュ:^ [BASE58] {64} $

まだいくつかのトランザクションを検出しました先頭に0があるので、0から始まるブロックのみを持つBitcoinプロトコルの一部ではないと思います。 難易度が1のregtestローカル(偽)ネットワークも実行し、すべてのブロックが0で始まらない。

ブロックハッシュとトランザクションハッシュを区別するために、おそらくregexを使用する信頼できる方法はありますか?

+0

ビットコインについては考えていますが、おそらくそれ以外の場合は、起動時に複数のゼロを可能にし、それでもその後63個のbase58文字を持っている、あなたのブロックのハッシュ正規表現に '+'を削除する必要があります。 –

+0

Bitcoinの難しさは、先頭にゼロが付いたハッシュを見つけることによってブロックを強制的にマイナスにするので、意図的です。しかし、この正規表現は私が暴露した問題につながります。 – shkschneider

+0

トランザクションとブロックを区別する個々のハッシュのパターンでない場合は、順序でなければなりません。どのようにそれらを(視覚的に)区別しますか? – wp78de

答えて

0

取り組む必要がある主な問題は2つあります.1つ目は、トランザクションまたはブロックハッシュの形式です。これらは、トランザクションまたはブロックの対応するシリアライズされた表現のSHA256ハッシュです。つまり、これらは32バイトの配列であり、通常はユーザーに16進数で表されます。 (例えばライトコインなどではない、他のcryptocurrenciesはないが)少なくとも8ゼロで、先行ゼロを持つことになりますが、ビットコインでブロックを述べたように、両方のため、ために妥当性をチェックするための正規表現が原因最小限困難に単に

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

で、あなたしたがって、以下を使用することができます。

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

彼らは機会に先行ゼロを持つハッシュを生成しますので、しかし、取引はまた、そのカテゴリーに入ることに注意してください(期待しておき、1/4294967296thトランザクションは、そのような必要がありますハッシュ)。

第2の問題は、ハッシュが実際にトランザクションまたはブロックに対応するかどうかを確認することです。このように考えて、多くの有効な電子メールアドレスがある一方で、それらのごく少数の実際に実際のユーザーに対応させていただきます。このチェックを実行するには、blockchainの完全なコピーを持っていると、一致する項目を探すために、いずれかの必要があるだろうか、そのようなアイテムが実際に存在することを確認するために、別のデータ構造、例えば、インデックスまたはブルームフィルタを持つことができます。

+0

私は大手の0が安全にハードルールとして取られることは確かではありませんでした。そして、私は、そのようなトランザクションが2番目(難しい)の問題に存在するかどうかをチェックするためにRPCを呼び出さなければならないと思います。 – shkschneider