Wait a moment...

【NEM技術勉強会】8.6 ブロックチェーン処理【Symbol白書】

nem41.40xem (4)
670
0
2020-03-18 10:42:12
【NEM技術勉強会】8.6 ブロックチェーン処理【Symbol白書】

ハーベストするアカウント選びや、フォーク対策について理解したところで、いよいよ実際のブロックがどのように作られるかについての概要です。かなり端折ってあるので、実際には開発者用文書などを当たったほうが良いでしょう。


8.6 ブロックチェーン処理

実行

 

概論的には、ノードがブロックを受け取った時に、一連の処理をおこなう。処理の前に、ブロックとトランザクションは、一連の通知(notification)に分解される。通知とは、Symbolで使われる基本的な処理単位のことである(2.1 プラグインでも出てきましたが、単なるメッセージ情報というよりは、トランザクション処理の単位という意味らしいですね)。

 

ブロックから通知を取り出して、順序よく並べるために、トランザクションは、一旦バラバラに分解される過程で、ブロックレベルデータ(ブロックに含まれるデータという意味か?)と結合される。それぞれの分離過程で作られたパーツは、一連のストリーム(stream)状につなげられていく。結果、この通知ストリームは、ブロック内で起きたすべての状態変化とトランザクションを描き出している(実際に次々とトランザクションが放り込まれてくる状態に近い?)。

 

通知ストリームの準備ができたら、通知ごとの処理がはじまる。まず、ブロックチェーン状態(blockchain state;一般的にはアカウントの残高が変化した状態などのこと)とは切り離された状態での内容の検証である。次に、現在のブロックチェーン状態と突き合わせての検証がおこなわれる。この検証処理のどこかで矛盾が見つかった場合には、そのブロックは棄却される。合格ならば、通知によって引き起こされた状態変化は、新たなブロックチェーン状態としてメモリー上に書き込まれ、次の通知の処理が始まる。この処理方法によって、同じブロック内のトランザクションが、それ以前のトランザクションによる状態変化にきちんと依存するようになる(ブロック内部の連続性が保たれる)。

 

ブロックに含まれるすべての通知処理が終わったら、レシートハッシュ(7.2.4 レシートハッシュ参照)と状態ハッシュ(7.3 状態ハッシュ参照)が計算される。さらに、network:enableVerificationStateがオンになっていれば、状態(ステート)のパトリシアツリーがすべて最新のものにアップデートされる。

 

ロールバック(巻き戻し)

 

一度承認されたブロックが、後で破棄されなければならない状況がときどき起きる。フォーク(ブロックチェーンの分岐)を解決するためである。たとえば、現在のブロックを、より良い(ブロックチェーンスコアが高いチェーンに含まれる)ブロックと置き換える時などである。Symbolでは、network:maxRollbackBlocksが許すブロック数のロールバックが可能になっている。この数を超えてしまうと、フォークの解決はできなくなる。

 

ブロックがロールバックされる場合には、一旦通知ストリームに還元される。このストリームは先の実行過程で作られるストリームとは反対向きになる。トランザクションは同じブロックに含まれるそれ以前のトランザクションに影響を受けることがあるので、(トランザクション間の)依存関係を解体するのではなく、まず後ろのトランザクションから解体するのである。

 

通知ストリームができたら、それぞれの通知が独立に処理される。ロールバックは以前の状態にブロックチェーンを巻き戻すので、検証は必要ない(時間的に古いブロック状態は、さらにそれ以前のブロック状態との関係で検証済みであり、未来の通知に影響を受けることはない)。その代わり、通知によって起きる状態変化は、現在のメモリ上のブロックチェーン状態から過去に巻き戻されて、次の(より古い)通知の処理へと移っていく。

 

すべてのブロックチェーンに関連する通知の巻き戻し処理が終わった後、(メモリー上のブロックチェーン状態は)それ以前のブロックチェーン状態へと戻る。network:enableVerifiableStateがオンになっている場合は、メモリー内の状態ハッシュもアップデートが必要である。その場合も、パトリシアツリーの再構築をおこなわず、ロールバック前の共通ブロックまで、強制的にメモリー内の状態ハッシュを巻き戻す。


かなり抽象的にですが、メモリー内に新しいブロックやブロックチェーン状態を保存したり、ロールバックの場合はどのようにして処理を巻き戻していくかの概要が書かれています。必要ない処理はおこなわず、処理を軽くするというポリシーがここでも徹底していますね。

 

目指せ北海道

この記事を書いた人
趣味はバイクでツーリングしながら、ブログを書いたり、動画配信したりすること。 ラズパイをバイクに積載して、ボタン一つでYoutubeライブ配信できるシステムを作りました。それを発展させて、XEMの価格を常時監視、取引するボットも作って活用してます。子供の頃から技術書を読むのが好きなので、NEMの技術文書を訳したりもしています。 本業は再生医療研究者です。歯の神経の中にいる「歯髄(しずい)細胞」を活用して新しい医療を開拓するために、しずい細胞プロジェクトを推進中。細胞の流通(トレーサビリティー)管理にNEMを使っています。管理システムの名称は「ShizuiNet」。 NEM HUBを通じてNEM/Symbolのマーケティングに参加中。下の紹介リンクから登録すると、登録者の活動に対して、3ヶ月間、5%のポイントボーナスが僕と登録者の両方に入るのでお得です。ホームページアイコンも同じリンク先に飛ぶようになってます。 https://community.nem.io/signup/MBWxTxUGfj