Python-blockchain-creating-miners

提供:Dev Guides
移動先:案内検索

Pythonブロックチェーン-マイナーの作成

マイニングを有効にするには、マイニング機能を開発する必要があります。 マイニング機能では、特定のメッセージ文字列でダ​​イジェストを生成し、作業の証拠を提供する必要があります。 この章でこれについて議論しましょう。

メッセージダイジェスト機能

特定のメッセージのダイジェストを作成するための sha256 というユーティリティ関数を作成します-

def sha256(message):
return hashlib.sha256(message.encode('ascii')).hexdigest()
*sha256* 関数は *message* をパラメーターとして受け取り、ASCIIにエンコードし、16進数のダイジェストを生成して、呼び出し元に値を返します。

マイニング機能

現在、独自のマイニング戦略を実装する mine 関数を開発しています。 この場合の戦略は、特定の数の1がプレフィックスとして付加された特定のメッセージにハッシュを生成することです。 与えられた1の数は、難易度として指定された mine 関数のパラメーターとして指定されます。

たとえば、難易度2を指定した場合、特定のメッセージで生成されるハッシュは、11xxxxxxxxのように2つの1で始まる必要があります。 難易度が3の場合、生成されるハッシュは111xxxxxxxxのように3つの1で始まる必要があります。 これらの要件を考慮して、次に示す手順でマイニング機能を開発します。

ステップ1

マイニング機能は、メッセージと難易度の2つのパラメーターを取ります。

def mine(message, difficulty=1):

ステップ2

難易度は1以上である必要があり、次のアサート文でこれを保証します-

assert difficulty >= 1

ステップ3

設定された難易度を使用して prefix 変数を作成します。

prefix = '1' * difficulty

難易度が2の場合、プレフィックスは「11」になり、難易度が3の場合、プレフィックスは「111」になります。 生成されたメッセージのダイジェストにこのプレフィックスが存在するかどうかを確認します。 メッセージ自体をダイジェストするには、次の2行のコードを使用します-

for i in range(1000):
   digest = sha256(str(hash(message)) + str(i))

各反復でメッセージハッシュに新しい番号 i を追加し続け、結合されたメッセージに新しいダイジェストを生成します。 sha256 関数への入力が反復ごとに変わると、 digest 値も変わります。 この digest 値に上記の prefix が設定されているかどうかを確認します。

if digest.startswith(prefix):

条件が満たされた場合、 for ループを終了し、呼び出し元に digest 値を返します。

*mine* コード全体がここに表示されます-
def mine(message, difficulty=1):
   assert difficulty >= 1
   prefix = '1' * difficulty
   for i in range(1000):
      digest = sha256(str(hash(message)) + str(i))
      if digest.startswith(prefix):
         print ("after " + str(i) + " iterations found nonce: "+ digest)
      return digest

理解するために、ダイジェスト値と、関数から戻る前に条件を満たすためにかかった反復回数を出力する print ステートメントを追加しました。

マイニング機能のテスト

私たちのマイニング機能をテストするには、単に次のステートメントを実行します-

mine ("test message", 2)

上記のコードを実行すると、次のような出力が表示されます-

after 138 iterations found nonce:
11008a740eb2fa6bf8d55baecda42a41993ca65ce66b2d3889477e6bfad1484c

生成されたダイジェストは「11」で始まることに注意してください。 難易度を3に変更すると、生成されたダイジェストは「111」で始まります。もちろん、おそらくより多くの反復が必要になります。 ご覧のとおり、処理能力の高いマイナーは、特定のメッセージをより早くマイニングできます。 これが、採掘者が収入を得るために互いに競争する方法です。

これで、ブロックチェーンにさらにブロックを追加する準備が整いました。 次の章でこれを学びましょう。