分12前回は,githubに公開されているbbc1のfile_proof.pyというサンプルアプリケーションの使い方を紹介しました。file_proof.pyは,ファイルをcoreノードに書き込み,改ざんがないかを検証し,ファイルの所有権を移転できるツールで,BBc-1アプリケーションの主要な要素を含んでいます。そのため,アプリケーションの開発においても参考になります。今回から数回の記事は,file_proof.pyのソースコードを中心に,BBc-1のアプリケーションプログラミングについて解説します。BBc-1のアプリケーションプログラミングについては,github内にもドキュメントがありますのでご参考ください。cloneしていただけば,examples/file_proof/ディレクトリの中に格納されいます。https://github.com/beyond-blockchain/bbc1/blob/develop/examples/file_proof/file_proof.pyアプリケーションプログラムの処理の流れの全体像BBc-1アプリケーションの処理は,主に次のような3つの流れがあります。BBc-1アプリケーション処理の主な流れドメイン作成は,coreノードごとに1度だけ実行します。鍵生成も1度実行すれば,署名に使う鍵を変更しない限り再実行の必要はありません。トランザクション登録は,アプリケーションの中で何度も実行する処理です。トランザクションを作成するためには,過去のトランザクション情報が必要になることがほとんどであるため,トランザクション検索は登録の処理の流れの中に含んでいます。このトランザクション登録という処理は,他のブロックチェーンプラットフォームにおいて「スマートコントラクト」と呼ばれる部分になります。それでは,図1に沿って順番にみていきましょう。pipコマンドを用いてbbc1をインストールし,新しいターミナルを立ち上げて,coreノードを起動しておきましょう。Coreのインストールや起動などをご参照ください。BBc-1の機能を利用するには,アプリケーションプログラムの冒頭で必要なモジュールをimportしておく必要があります。file_proof.pyの中では以下のように宣言しています。ご自身でアプリケーションを開発される際にも,プログラムの冒頭に同様の宣言を記載するようにしてください。*ドメインの作成ドメインとはデータを共有する範囲を表します。ドメインの作成は,アプリケーションの管理者(サービス提供者)が行うべき作業です。coreノード上にドメインを作成することにより,coreノードはドメインごとのデータベースを作成したりストレージを確保したりします。接続関係にあるcoreノードに同じドメインが設定されていれば,他のcoreノードに自分の存在を知らせます。coreノードごとにドメイン作成を実施する必要があります。ドメインを作成するコードは,file_proof.pyの129行目のdomain_setup()という関数で行われます。done.")この関数では,まずcoreノードに接続します。同じホストでbbc_core.pyが動作していれば,bbc_app.BBcAppClient()という関数を呼ぶことで接続できます。引数のmultiqは,bbc_coreに対して複数の機能を同時に要求する(非同期処理)場合にTrueに指定しますが,シンプルなアプリケーションではFalseで構いません。戻り値がクライアントオブジェクトになっており(tmpclient⁠)⁠,このオブジェクトがbbc_coreに対するさまざまな機能を提供します。tmpclient.domain_setup(domain_id)というところで,接続しているcoreノード上にdomain_idで指定された識別子のドメインを作成します。domain_idはPythonのbytes型の32バイトの適当な値です(file_proof.pyの42行目で設定しています⁠)⁠。32バイトは256ビットで,BBc-1では識別子の長さを256ビットとしています(第4回の「BBc-1の識別子たち」の節を参照⁠)⁠。tmpclient.callback.synchronize()は,戻り値を待ちます。いわゆる同期処理のための関数です。tmpclient.unregister_from_core()でcoreノードから切断します。鍵作成BBc-1のトランザクションには必ず署名(つまり電子署名)が必要です。署名を作るためには公開鍵ペアが必要で,ユーザ1人ひとりが異なる鍵ペアを作り,管理しておく必要があります。署名を付与する本人だけが秘密鍵を持っていて,トランザクションには対応する公開鍵と署名本体を付加します。実際には,第4回の「トランザクションの構造」の節で解説したBBcSignatureオブジェクトにこれらの情報が格納されます。bbc1モジュールでは,KeyPairというクラスを使うことで,鍵ペアを簡単に取り扱うことができます。file_proof.pyでは432行目のcreate_keypair()という関数で鍵を生成し,保存しています。bbclib.KeyPair()で鍵ペアオブジェクトを作成し,keypair.generate()で実際に秘密鍵と公開鍵のペアを生成します。生成された鍵は,この鍵ペアオブジェクト(keypair)が保持しています。鍵本体のバイナリデータはkeypair.private_keyやkeypair.public_keyで取得できます。file_proof.pyでは使っていませんが,KeyPairクラスはPEM形式やDER形式で鍵を読み書きすることも可能です。公開鍵についてはX509形式の公開鍵証明書を読み込むことも可能です。研究所での研究,企画部門でのプロジェクトマネジメントなどを経て,独立。One(BBc-1)のメイン開発者になっていたが,あくまで趣味の位置づけ。本業では,技術者・研究者も報われる会社を目指す。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。