2018年10月13日土曜日

ファイルのハッシュ値をBCHのブロックチェーン上に記録するスクリプト

# 概要

僕は今研究室に配属されているのですが,少し新しいことをしようと思い実験系の研究室に配属しています.その際に,わりと厳しく言われるのが実験ノートです.
実験ノートは研究者の不正防止のためのもので,書き換えが行えないようにボールペンで書き,きちんとページごとに日付と保存したファイルの名前などを書くことが要請されています.
しかし書き換え防止とかハッシュ値とブロックチェーンの出番という感じですし,僕は手書きよりテキストデータのほうを好むので,試しに適当なファイルのハッシュ値をBitcoin Cashのブロックチェーン上に記録するスクリプトを書いてみました(ここ).

# デモンストレーション

## 仕組み

BitcoinやBitcoin Cashなどはご存知の通り暗号通貨と呼ばれるタイプの新しい通貨で,他の人へお金を送ったり,また逆に受け取ったりすることができます.
そういった送金の際に,送金の理由などを記載することができるようになっており,そこに実験ノートなど改ざんされたら困るファイルのハッシュ値などを記載しておけば,Bitcoin Cashが使われなくなるまではハッシュ値や,ハッシュ値が保存された時間などが残り続けます.
今回は.vimrcのハッシュ値をBitcoin Cashのブロックチェーン上に記録する例を見せます.

## bitcashのインストール

bitcashはBitcoin Cashを扱うためのPythonライブラリです.pipでもインストールできるのですが,pipに登録されているバージョンは少し古く,書き込める文字列が40 byteまでしか出力できません.
なのでGitHubリポジトリからインストールする必要があります.
git clone https://github.com/sporestack/bitcash.git
cd bitcash
sudo python3 setup.py install

## スクリプトのダウンロード

僕の書いたスクリプトをGitHubからcloneします.
git clone https://github.com/TonyMooori/save_file_hash.git

## ウォレットの作成とお金の送信

main.pyは入力された文字列をブロックチェーン上に記録し,そのトランザクションidを表示するプログラムですが,最初の起動の際にウォレットの作成を行います(ウォレットの暗号鍵はprivate.secretというファイルに記録してあります.).
python3 main.py
>Making and saving new wallet...
>Send some money to bitcoincash:qzuagk4vvp8hmfzrwcgd9fmnuwvce6p6kv704adgav
この表示されたアドレスに持っているBitcoin Cashを送信してください.持ってない人は買うか,あるいはBitcoin.comのアプリを入れると5円分ぐらいもらえるのでもらってみてください.
ブロックチェーンに記録するのに必要な手数料は2018/10現在では0.2円ぐらいですので,5円もあればデモとしては十分でしょう.

## autosave.shの編集

autosave.shという名前のシェルスクリプトにハッシュ値を取得し,ブロックチェーン上に記録するまでのコマンドが書かれています.
sha256sum ~/.vimrcの部分を変えればハッシュ値を保存したいファイルを変えられます.
rm hash.txt
rm tx.txt
sha256sum ~/.vimrc | cut -d " " -f 1 >> hash.txt
cat hash.txt | python3 main.py >> tx.txt
echo "https://explorer.bitcoin.com/bch/tx/$(cat tx.txt))"

## autosave.shの実行

あとはautosave.shを実行するだけです.
>bash ./autosave.sh
https://explorer.bitcoin.com/bch/tx/ed1787e799e5fcb20eaeb891d060ec63e01a117a98f41e0c19d5776e9ee5c046
URLにアクセスすれば保存されたハッシュ値を見ることができます(下図のOP_RETURNを発見しましたの部分).

定期的に保存したい場合はcrontabとかで設定したら良いと思います.

# 所感

一応今は実験結果などをMarkdownでメモして,週一でそのファイルのハッシュ値を保存するスクリプトを走らせています.
xonshスクリプトが何故かcrontabで動かなかったり,bitcashのバージョンが古いことに気づかなかったりと割と苦戦しましたが形になってよかったです.


0 件のコメント:

コメントを投稿