Pythonでマイブロックチェーンに改ざんチェックを追加実装する/ブロックチェーンの勉強二回目2020-02-13Pythonでマイブロックチェーンに改ざんチェックを追加実装する/ブロックチェーンの勉強二回目ITな話題:ブロックチェーンのお勉強ブロックチェーン技術の勉強に、マイブロックチェーンをpythonで実装を試みている第二回目です。はじめにブロックチェーンについて勉強したことの整理を兼ねて、Pythonで実装してみます。前回は「一回目:ブロックチェーンの骨格を作る」でした。arakan-pgm-ai.hatenablog.com今回は、「二回目:保存や改ざんチェックなどの機能を付け加えてみる」をやります。一回目で作成した「MyBlockChain」クラスをベースに、機能追加をしていきます。今回追加する機能の仕様について一回目の実装は骨格だけです。クラス生成時に空の「chain」を初期化して、毎回一からブロックチェインを形成して、それを表示するだけの機能しかありませんでした。ファイルへの保存と読み込み位は最低限できないと厳しいです。読み込む時にはブロックチェインの改ざんチェックを行い、問題のあるブロックは読み込まない工夫も必要です。別に暗号通貨みたいな仕組を作りたいわけではありません。構築したブロックチェーンのトランザクションとハッシュをJSONで保存する。保存したJSONファイルから読み込んでブロックチェーンを展開する。ファイルから読み込む時に改ざんチェックし、改ざんを発見したら処理を止めるあたりですかね。構築したブロックチェーンのトランザクションとハッシュをJSONで保存する。該当部分のソースはこんな感じにしました。indent=2)単純に構築したブロックチェーンをそのままJSONに出力してません。MyBlockChainで構築するブロックの構造はこんな感じです。トランザクションデータ(入力・出力),}なので、JSONファイルに出力しているのは、その一部(トランザクションデータとハッシュ値とID)だけです。i>0)ようにしてます。している理由は読み込み時のチェックのところで整理します。保存したJSONファイルから読み込んでブロックチェーンを展開する。前の処理で保存したJSONファイルを読み込んで、マイブロックチェーンを再構築する処理です。該当部分のソースはこんな感じです。print("ブロック構築を異常終了します。第一ブロックはファイルに出力せず、固定で生成して、ファイルから読み込んだブロックは2ブロック目以降に順次読み込むようにしています。これはファイルの改ざん防止+間違ったファイルを読み込むミスの防止策です。第一ブロックのハッシュはプログラム内で生成され、ファイルから読み込んだトランザクションのハッシュと組合せて、ハッシュを再計算します。それがファイルから読み込んだハッシュ値と一致しなければ「間違ったファイル」または「改ざんされたファイル」と判断する・・というわけです。ファイルから読み込む時に改ざんチェックし、改ざんを発見したら処理を止める前段で「ファイルから読み込む最初のブロック」の判定をしてます。こちらは、その判定を潜り抜けた後のブロックの改ざんチェックを行う部分です。該当部分のソースです。前のブロックのハッシュを取得。"」のトランザクションで改ざんの疑いがあります。Trueやってることはたいしたことありません。JSONファイルのトランザクションハッシュを引数でうけとって、ブロック追加時に計算したハッシュと比較して、一致しないとエラーにしているだけです。改造版MyBlockChain前回のMyBlockChainに保存・読み込み・改ざんチェックを付け加えました。暗号通貨とかで利用されているブロックチェーンのような「ブロック追加時のマイニング手順」を実装しない、シンプルなブロックチェーンとなってます。print("ブロック構築を異常終了します。前のブロックのハッシュを取得。"」のトランザクションで改ざんの疑いがあります。ハッシュ値を計算する。str(self.testkey)前回のクラスに上記で説明した部分を加えただけなので、補足説明はありません。実行してみますテスト用に以下のJSONファイルを用意します。}]これを「chain00.json」のファイル名でPythonスクリプトと同じフォルダにおきます。実行するソースは2行だけ。MyBlockChain()bc.dump()これを実行すると、以下のような結果を表示します。}]ちゃんとJSONファイルを読み込んでます。改ざんチェックをやってみる今度はJSONファイルの一部を改ざんしてみます。10451と数字を1だけ変更してみます。これで実行すると・・。」のトランザクションで改ざんの疑いがあります。!ブロック構築を異常終了します。おお・・、ちゃんと検知しました。OKじゃないでしょうか。今回はこんなところで。検索スポンサーリンク最近のアクセスTOP5ブクマ数TOP3IT的なTIPS・ノウハウイベントログから抽出したログオン・オフ時刻を見やすいように整形するEXCELのVBAマクロなど。Google検索は利用するけど、アクティビティを保存させたくない時もある文字コードで悩まされるなんて久しぶり/JIS7(ISO-2022-JP)とJIS8の話もっと見る作業時によく参照する「まとめ」djangoテンプレート内でforループで回す時の整理とデフォルト辞書利用時の注意など。djangoテンプレート内ので条件分岐(IF文)で注意することなどをまとめておくdjangoテンプレート/変数の値の参照の仕方が、Pythonと違う所があるので整理しておく。service」とサーバーレスコンピューティング関係をまとめてみる。PWA・SPA・・など「最近のWEBアプリケーションの種類」をざっくりまとめる。文系的まとめディープラーニング(ニューラルネットワーク)の「学習」の肝は「微分」らしいよ。Consoleもっと見るディープラーニングのデモをやってみるWord2Vecで「単語の足し算・引き算の結果(単語)を取得する」デモをやってみる。API」で入力文の疑わしい部分をAIが指摘するデモを作る。classで事前学習済のVGG16モデルを使った画像識別クラス/tensorflow2.0(tf.keras)ランダムフォレストで回帰してみる/気象情報と電力データその2もっと見るPythonでWebアプリやってみるviews.py(python)からデータを渡して、Chart.jsでRaderチャートを描く/Chart.js+djangoWEBブラウザ上にドラッグ&ドロップした画像ファイルをBase64に変換して表示するWEBブラウザで手描きしたイメージをJPEG・PNG変換後Base64エンコードするもっと見るPythonで自動化やってみるWebアプリケーションで自動的に値を参照、スクロール他Tips/Selenium&pythonWebアプリケーションで自動的に何かをクリックするTips/Selenium&pythonWebアプリケーションへの自動入力・選択のTipsあれこれ/Selenium&pythonもっと見るPythonで数学・グラフィックスやってみるモンティ・ホール問題で、ちょっと暇つぶし。最近、台風が怖すぎる!!!生産性向上しろと言いながら、片方で足をひっぱるなんて・・と呆れてます。/軽減税率のニュースを見てもっと見るBOKU62歳の文系SE”BOKU”です。<arakan_no_boku@yahoo.co.jp>興味の向いたものを、つまみ食い的に勉強してます。自分が消化した内容を、頭の整理と備忘を兼ねてブログに書いてます。IT系・・特に機械学習・プログラムネタが中心ですが、IT以外のネタになる時もあります。(43)スポンサーリンクはてなブログをはじめよう!arakan_no_bokuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。