【翻訳記事】Pythonを使ったブロックチェーンの学習

最終更新日:2023年4月24日

ブロックチェーンを学びたいけど暗号通貨などのハードルが高く、なかなか行動に移せない方も多いのではないでしょうか。本記事では、実際にビットコインに対して苦手意識を持っていたAnna McAbee氏が、Pythonスクリプトによってビットコインおよびブロックチェーンを学んだ方法について紹介します。

本記事はAnna McAbee氏がブログで投稿した記事「Learning about Block Chain with Python (Posted Dec 13, 2017)」を翻訳してご紹介しています。
なお、この記事は原著者の許諾を得て翻訳・掲載しています。

レバテックキャリアで転職した3人に2人が年収70万円UPを実現

支援実績10年の登録者データを基にした エンジニア・クリエイター専門 年収診断 無料診断START

※2023年1月~2024年3月実績


およそ2週間前、私は自分がなぜビットコインに対して敵意を持っていたのかを認識しました。その理由は、ビットコインを所有しておらず、理解していなかったからです。そのため私は、ブロックチェーンとも呼ばれるビットコインの背後にある技術を研究することで、ビットコインについて学習することを決意しました。ブロックチェーンを構築するPythonスクリプトを作成することを学んだ私は、ブロックチェーンに対する理解を深めたいと思っている人たちとその学習内容を共有しようと考えました。誤解のないように言うと、私はビットコインにインスピレーションを受けましたが、この記事はブロックチェーンに重点を置いています。

ブロックの内容

一般的に、ブロックには、トランザクション(取引)データ、タイムスタンプ、直前のブロックへのリンクが含まれています。私のブロックの実装では、以下の属性を持つブロックのクラスを作成しました。

・インデックス:チェーン内のブロックの位置を追跡するもの

・タイムスタンプ:ブロックが作成された日時

・データ:ブロックに格納されている実際のデータ(誰がどのくらい購入したかなど)

・直前のハッシュ:チェーン内の直前のブロックのハッシュ

・ハッシュ:ブロックのハッシュ。ハッシング(ハッシュ化)についてよくわからない人向けに説明すると、ハッシュとは基本的に任意の長さのデータを固定サイズのデータにマッピングすることであり、本質的にブロックを表す文字列です。

私は、暗号学的ハッシュアルゴリズムであるSHA-256のアルゴリズムを使ってブロックのハッシュ値を計算しました。ブロックを表す属性(つまり、インデックス、タイムスタンプ、データ、直前のハッシュ)をハッシュアルゴリズムに入力すると、「calculateHash」関数はその入力に基づいて256ビットの文字列を返します。

ブロックチェーン

チェーンの初期化

第一に、ブロックチェーンの最初のブロックをgenesis(起源)ブロックと呼びます。genesisブロックと呼ばれるのは、チェーンの始まりである元のブロックだけです。私の実装では、ブロックチェーンが作成されると、genesisブロックが自動的に作成されます。

ブロックの追加

チェーンに新しいブロックを追加するには、直前のブロックのハッシュを取得してから、新しいブロックのハッシュ値を計算する必要があります。直前のブロックのハッシュは、ハッシュ関数に対する入力値であるため、直前のハッシュを取得した後に新しいブロックのハッシュ値を計算しなければなりません。「getLatestBlock」メソッドは、チェーン上の最後のブロックを取得するために使用されるため、新しいブロックを追加する場合、そのブロックが直前のブロックになります。

チェーンのセキュリティ保護

ブロックチェーンは、設計自体に修正(改ざん)に対する耐性があります。ブロックチェーンのセキュリティが保護されている理由の一部として挙げられるのは、ブロック間のリンクが改ざんされていないことを保証するというその特性です。そのため、3番目のブロックの直前のハッシュは、2番目のブロックのハッシュと実質的に同じです。このことを確認できるのが「isChainValid」メソッドです。ブロックチェーンのセキュリティを保護するもう1つの要素は、ブロックが作成されてからブロック内のデータが変更されていないことを保証する特性です。例えば、誰かがブロック内でトランザクション(取引)を完了した人物を変更(改ざん)しようとした場合、セキュリティを確保するためにこの行為を防止しなければなりません。ブロック内のデータが改ざんされている場合、ブロックのハッシュも変更されます。なぜなら、データはハッシュ関数に対する入力値であるためです。ハッシュ値の変更は、ブロックが作成されてからデータが変更されたかどうかを確認してくれる「isChainValid」メソッドでも考慮されます。

Anna Coinを使ったブロックチェーンのテスト

以下は、annaCoinという名前のブロックチェーンオブジェクトを作成し、そこにブロックを追加するコードです。ブロックに改ざんを加えようとしたとします。改ざんする前と、私がブロックを改ざんしようとした後にブロックチェーンの有効性をチェックすることによって、annaCoinのセキュリティは証明されました。


この関数の出力は以下のとおりです。

注:テスト時にブロックチェーンをより読みやすくするために、ブロックチェーンとブロッククラスでいくつかのprint関数を作成しました。単純化するために、前記のコードスニペットにはprint関数を含めませんでした。

完全なスクリプトを見たい方は、こちらを参照してください:https://github.com/annamcabee/Block-Chain



CREDIT:原著者の許諾のもと翻訳・掲載しています。

[原文]Learning about Block Chain with Python (Posted Dec 16, 2017) by Anna McAbee
 


この記事の監修

レバテックキャリア編集部

レバテックキャリアは、IT/Web業界のエンジニア・クリエイター向けに特化した転職エージェントです。当メディアでは、エンジニア・クリエイターの転職に役立つノウハウから、日々のスキルアップや業務に活かせる情報まで、幅広いコンテンツを発信しています。

プロのアドバイザーがあなたのお悩みや疑問にお答えします

- 転職個別相談会開催中 -

相談内容を選択してください

※転職活動や求人への応募を強制することはありません

関連する記事

人気の求人特集

内定率が高い

Pythonの求人・転職一覧

ITエンジニア未経験~3年目の方限定

  • ITエンジニア適職診断
  • 5年後の予想年収

簡単3分無料で診断してみる

×

あなただけの強みがわかるから自己PRにも活かせる

16 エンジニアタイプ診断

診断はこちらから

×