ブロックチェーンの課題と可能性~BBc-1(Beyond Blockchain One)から学ぶブロックチェーン開発

第10回 file_proof.pyでBBc-1を体験しよう

この記事を読むのに必要な時間:およそ 4 分

ファイルの登録

では,ファイルを生成してから,ファイルを登録してみましょう。 今回はtestfile.txtという名前のテキストファイルにしますが,どんな形式のファイルでも構いません。またすでに存在するファイルを登録することも可能ですので,下記の説明の中の⁠testfile.txt⁠の部分を適宜読み替えてください。

# cat > testfile.txt
BBC HEAVEN.

念の為,⁠ls⁠コマンドでファイルが作成されているかを確認しましょう。

# ls

./      ../     testfile.txt

このように,testfile.txtが表示されれば大丈夫です。次に別のターミナルを開いて(新規ウィンドウを開いて⁠⁠,ファイルを登録します。

# file_proof.py store testfile.txt -o userA

これで,testfile.txtで指定したファイルがcoreノードに登録され,さらにuserAという名前のユーザが所有者である旨がトランザクションとして登録されます。そして登録したトランザクションの情報が表示されます。以下はその実行結果のターミナル出力の一部です。Bodyというところに,指定した名前のuserAが書かれている(body: b'Owner is userA')のが確認できます。

Relation[]: 1
 [0]
  asset_group_id: b'45b2a200ccdcdcc3fb80cc9d423e1069f3ca726157f6492b4a70a48e4a1713ab'
  Asset:
     asset_id: b'd2e509a4002b664b9c651c3bbf95f583bbfe2065eeeb63a5f20e903de20a2ba5'
     user_id: b'9367417d63903350aeb7e092bca792263d4fd82d4912252e014e073a8931b4c1'
     nonce: b'78d4e9d8c78175bc5bae25393d7afb66e39610ce73908f00a1203efe0a0614ae'
     file_size: 12
     file_digest: b'6aa951c7eb5886694b56ec7f74075f9d410cf9c9fb68d66ca889da5097066e3c'
     body_size: 14
     body: b'Owner is userA’

なお,先ほどご紹介したように⁠.bbc1/⁠配下にトランザクションやアセットが格納されており,とても長い名前のディレクトリやファイルが含まれています。もしご興味がありましたら,中を覗いてみてください。

登録したファイルの検証

では,次に登録したファイルを検証してみましょう。

# file_proof.py verify testfile.txt

上記のコマンドで,指定したファイルが登録されているファイルと同一であるかを検証します。少しわかりにくいですが,出力された結果の最初の行に,

testfile.txt is valid
done verify testfile.txt

となっていれば問題なしです。

試しにtestfile.txtの中身を,テキストエディタなどで,1文字書き換えて保存して,もう一度⁠verify⁠のコマンドを入力してみてください。すると以下のように,

testfile.txt is invalid
done verify testfile.txt

と,validがinvalidというように,表示内容が変わります。

ファイル所有権の移転

file_proofでは,生成したファイルを削除や復元したり,送受信したりできます。基本的なコマンドや操作は前述のBBc-1 Coreチュートリアル:file_proofを用いてで説明していますので,今回はファイル所有権の移転を紹介します。もう1つ別のターミナルを起動して(新規ウィンドウで開いて⁠⁠,別のディレクトリで鍵ペアを作ってください。便宜上,このディレクトリでの作業はBさん,さきほどstoreしたのをAさんという,2人のユーザの作業とします。

~Bさん(新規ウィンドウで)
# source venv/bin/activate
# mkdir otherDir/
# cd otherDir
# file_proof.py keypair

次に,ファイルの移転を待ち受けます

# file_proof.py wait -o userB

すると,次のように表示され,待受状態になります。

Your name is [ userB ] and user_id is [ 16進数の文字列 ]
Waiting for file transfer.....
~Aさん(さきほどstoreしたターミナルで)

testfile.txtで指定したファイルの所有権をBさんに移転します。

# file_proof.py send testfile.txt -o userA

すると,次のように表示され,入力待ち状態になります。

Your name is [ userA ] and user_id is [ 16進数の文字列 ]
Please enter the receiver user name for file testfile.txt.
>> 

最後に,送り先のユーザ名の入力を求められるので,userBと入力してenterキーを押します。

~Bさんでのファイル受け入れ~

Bさんのターミナルに次のように表示されます。

--------------------------
File digest written in the transaction data:   ⁠16進数の文字列⁠⁠
File digest calculated from the received file: ⁠16進数の文字列⁠⁠
--------------------------
====> Do you want to accept the file?
(Y/N) >>

⁠16進数の文字列⁠の部分はファイルによって異なりますが,大事なのは2つがまったく同じ文字列であることです。一致していないものは何らかの不正が考えられます。このファイルの所有権を受け入れるならYを,受け入れないならNを入力して,enterキーを押します。 ここでは,Yを押しておきましょう。

Waiting for the message from the sender...
--> file name is testfile.txt and the transaction_id is ⁠16進数の文字列⁠

と出れば,移転完了です。なお,ファイル自体が手に入るわけではなく,所有権のみが移転しました。ファイルが必要な場合は,下記のようにしてファイルを取得してください。

# file_proof.py get testfile.txt

以上がfile_proof.pyの一部使い方の紹介です。

まとめ

今回は,サンプルアプリケーションのfile_proof.pyの使い方を紹介しました。このfile_proof.pyには,BBc-1の多くの要素が含まれています。次回以降,file_proof.pyをベースにして,BBc-1プログラミングについて紹介する予定です。

著者プロフィール

久保健(くぼたけし)

1977年生まれ,大阪出身。

株式会社ゼタント代表取締役/一般社団法人ビヨンドブロックチェーン理事。大手通信会社の研究所での研究,企画部門でのプロジェクトマネジメントなどを経て,独立。気がつけばBeyond Blockchain One(BBc-1)のメイン開発者になっていたが,あくまで趣味の位置づけ。本業では,技術者・研究者も報われる会社を目指す。