新型コロナウィルスの感染拡大防止にあたりご確認ください

新型コロナウィルスの感染拡大防止の為、一定期間はお電話でのカウンセリングをご案内させていただきます。

みなさまの安全に配慮し、発熱や風邪の症状がある、海外渡航歴がある場合にも、電話カウンセリングをお願いしております。それ以外の方でも、交通機関での移動にご不安を感じられる方は同様に電話カウンセリングも可能でございます。一人一人に合った支援をさせていただきますので、ご希望がございましたら登録後カウンセリングに進む際にお申し付けください。

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

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


およそ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 13, 2017) by Anna McAbee
 


関連する記事

人気の記事

スキルアップ記事トップへ

無料サポート登録簡単30秒

【厚生労働省】職業紹介事業許可番号(13-ユ-308734)

  • STEP1
  • STEP2
  • STEP3
  • 次のstepで入力すると返事が来る!
  • プロフィール入力すると返事が来る!
  • ご希望の条件を選択してください

    ご希望の勤務形態

    必須

    ご希望の勤務地

    任意

  • プロフィールをご入力ください!必須入力項目はこのページで終わりです。

    氏名

    必須

    氏名かな

    必須

    生年月日

    必須

    電話番号

    必須

    メールアドレス

    必須

  • スキルシート・ポートフォリオをお持ちの方はアップロードしてください

    スキルシート

    任意

    提出しておくことで
    迅速なご紹介が可能に!

    職務経歴書

    ドラッグアンドドロップ or ファイルを選択 選択されていません

    履歴書

    ドラッグアンドドロップ or ファイルを選択 選択されていません

    スキルシートを確認しています...

    スキルシートを確認しています...

    ※ファイルは5MB以下で対応するファイル形式 ? でアップロードしてください
    Microsoft Office .xls .xlsx .doc .docx .ppt .pptx
    KINGSOFT Office .xls .xlsx .doc .docx .ppt
    iWork .numbers .pages .key
    LibreOffice .ods .odt .odp
    OpenOffice .ods .odt .odp
    その他 .pdf

    ポートフォリオURL

    任意

    ?

    ポートフォリオとは主にクリエイターの方が自己PRのために過去の作品や制作実績をまとめた作品集の事です。

    ポートフォリオをWeb上で公開されている方はそのURLを、データでお持ちの方は作品データをアップしたURLを入力してください。

    ※データをアップされる場合は、保存期間や容量制限の少ないGoogleドライブを推奨しています。

    その他ご要望

    任意

  • 下記の内容をご確認いただき問題ないようでしたら、送信してください

    プロフィール入力すると返事が来る!

    • ご希望の勤務形態 必須

    • ご希望の勤務地 任意

      第一希望:
      第二希望:

    • 氏名 必須

    • 氏名かな 必須

    • 生年月日 必須

    • 電話番号 必須

    • メールアドレス 必須

    • 職務経歴書 任意

    • 履歴書 任意

    • ポートフォリオURL 任意

    • その他ご要望 任意

    個人情報の取り扱い 」と「 利用規約 」に同意の上、 『同意して登録する』 ボタンをクリックして下さい。

プライバシーマーク

レバテック株式会社は「プライバシーマーク」使用許諾事業者として認定されています。
個人情報の秘密は厳守します。ご入力いただいた情報は許可を頂くまで求人企業に公開することはありませんので、ご安心ください。

申し込みに関するご注意
以下の方は弊社の事業基盤、求人動向から、ご提案のご連絡までお時間をいただく可能性があります。ご了承ください。
IT業界、または希望職種が未経験の方
レバテックキャリア対象エリア以外での勤務地、また在宅での作業を希望される方

Pythonの求人・転職一覧