コンセンサス・ベイスブロックチェーン技術のポータルサイト。ビジネスに関する記事や技術メモ、最新のSNSでシェアされたニュースも見ることができます。参考資料:はじめに今回は、分散型ブロックチェーンプラットフォームである「Lisk」のトランザクションへの理解を深めるために、Liskのソースコードを読み解いていきます。ブロックチェーン、P2Pネットワークの知識Javascript(Node.js)のコードが読めることLiskのトランザクションの流れLiskHubはブロックチェーン自体のデータを保持していないため、ウォレット自体がトランザクションを行うことはありません。その代わりにLiskの開発チームが運営しているメインネットのノードのAPIを利用してトランザクションを実行します。ついてLiskは開発者向けに様々なAPIを公開しています。これらのAPIはメインネットやテストネットのノードのアドレスに対してPUTやGET形式でリクエストを送ることで利用できます。HEREのように太字になっている箇所の値を埋めてPUTすることで、LiskのノードのAPIを利用してトランザクションを実行することができます。Liskが運営しているノードのアドレスとポートは下記になります。http://83.136.252.99:5000https://node08.lisk.io:443メインネットは01番から08番の8つのノードが使えるようになっています。いずれかのノードがダウンしていても問題が無いよう、冗長性を持たせていると考えられます。ソースコードの解説それでは、APIから命令を受け取って実際にトランザクションを実行するLiskのフルノードのソースコードから実際のトランザクションの流れを確認していきましょう。下記のトランザクションの流れを図示したものをご覧いただき、全体像を掴んでください。Liskトランザクションの流れ図githubからソースコードをダウンロードLiskのソースコードはGithub上に公開されているので、下記のリンクよりまずソースコードをダウンロードしましょう。今回読んでいくソースコードはメインネットのノードのソースコードです。https://github.com/LiskHQ/lisk.gitしてください。ダウンロードしたソースは次のようなフォルダ構成になっています。それでは、APIの入力からトランザクションがメインネットにブロードキャストされるまでの過程を順番に見ていきます。postTransactionに渡します。postTransactionは第1引数で受け取ったtransactionのデータをクエリとして、クエリに含まれているtransaction,nonce,extraLogMessageの3つのプロパティを同じtransport.jsにあるreceiveTransactionに渡します。#L755,L770トランザクションの正規化、不正のチェックreceiveTransactionでは受け取ったトランザクションが正しい形式であるか、不正な値が含まれているかを確認します。はじめにあるtry/catch文はトランザクションの正規化を行い、トランザクションの形式に誤り、不正があればエラーを返すようになっています。processUnconfirmedTransactionにトランザクションなどのデータを渡します。processUnconfirmedTransactionに渡します。#L542,L552トランザクションプールの制御/logic/transaction_pool.jsのprocessUnconfirmedTransactionの動作を説明していきます。Liskではトランザクションを一旦キューをデータ構造として持っている、トランザクションプールに貯めて管理を行っているようです。そこでまず、トランザクションプールにトランザクションが含まれているかどうかを調べます。含まれていなければ、トランザクションプールのキューの番号を進めます。キューの番号が1000を超えていれば、キューの再構築を行います。#L566,L576次にトランザクションを同一ファイル内にある__private.processVerifyTransactionに渡します。#L582,L592トランザクションの承認__private.processVerifyTransactionはトランザクションを承認するプロセスです。ここでは、asyncライブラリのwaterfallという配列内の関数を順番に(同期的に)実行する機能を用いています。実行する関数について見ていきましょう。マルチシグネチャの確認。onUnconfirmedTransactionが呼び出されて、トランザクションがメインネットにブロードキャストされます。#L893,L899ジョブリストへトランザクションを追加__private.broadcaster.enqueueでブロードキャストのジョブリストのキューにトランザクションを追加します。websocketでLiskHub側へトランザクションの完了を通知します。#L359,L370ブロードキャストブロードキャストではまず、getPeers(waterCb)でブロードキャスト先のピアを選択します。getPeersは/logic/peers.jsのlistRandomConnectedでランダムなピアのリストを取得します。最後にピアのリストからそれぞれのピアにデータを送信してトランザクションは完了です。#L124,L153まとめ本記事では、Liskのトランザクションが実行されていく過程をソースコードから読み解いて行きました。同じようなトランザクションの検証作業を何度も繰り返すなど、かなり厳重なチェックを行っていることがソースコードからわかりました。トランザクションは実際にトークンをやり取りするとても重要なプロセスなのでこのような実装になっているのでしょう。0.9https://lisk.io/documentation/api-reference/lisk-api-0-9この記事の著者block-chain.jp編集部ブロックチェーン技術の専門企業が運営するブロックチェーンのメディア。掲載されている記事の内容につきましては、正しい情報を提供することに務めてはおりますが、提供している記事の内容及び参考資料からいかなる損失や損害などの被害が発生したとしても、弊社では責任を負いかねます。実施される際には、法律事務所にご相談ください。つきましてはblock-chani.jp運営者の個人的見解です。正確性・正当性を保証するものではありません。本記事掲載の記事内容のご利用は読者様個人の判断により自己責任でお願いいたします。コンセンサス・ベイス(株)とブロックチェーン事業を行なってみませんか?当サイトを運営するコンセンサス・ベイス株式会社は、2015年設立の国内で最も古いブロックチェーン専門企業です。これまでに、大手企業の顧客を中心に、日本トップクラスのブロックチェーンの開発・コンサルティング実績があります。ブロックチェーンに関わるビジネスコンサル・システム開発・教育・講演などご希望でしたら、お気軽にお問い合わせください。(ブロックチェーン技術書籍)本書は、ブロックチェーン技術に興味を持ったエンジニアや、その仕組みを学び、自分の仕事に活かしたいビジネスパーソンを対象にして、ブロックチェーンのコア技術とネットワーク維持の仕組みを平易な言葉で解説しています。この本を読んだうえで、実際にコードを書くような専門書、ブロックチェーンビジネスの解説書を読むことで、理解度が飛躍的に高まるでしょう。2017.03.20とりあえず、重要なところだけ簡単にまとめてみた。詳細はそのうち書くかも。最近、用語の使い方が変わった様子。2015.05.06A16Zやマーク・アンドリーセンがブロックチェイン・テクノロジーをどう思っているか?の動画の紹介。BYコンセンサス・ベイスはブロックチェーン技術の専門企業です。国内でブロックチェーン実証実験を初めて行い、その後、大企業を中心に実績多数。ビジネス・STOコンサル・システム開発などのソリューションを提供しています。WordPress.。