Qaupot Blog
Software Engineering, Trip

この文書はコンピューター工学知識なしでも理解できます。

Node And Miner

BlockchainサービスNetworkの構成は色んな形が有りますが、普通、NodeとMinerが中心になるP2P Networkを構成します。

Node

Blockchain P2P Networkに参加している全ての端末はNodeになります。

  • Full Node : 全てのデータを保存するNode。
  • Lightweight Node : 一部のデータ(普通、Block Header)のみ保存するNode。

Nodeそれぞれ元長データ(Ledger)を持ちますから、BlockchainをDistributed Ledgerと呼ぶことも有ります。

NodeはBlockやTransactionを他のNodeから伝達され、自分に繋がっている他のNodeへ伝送します。

Miner

Data Mining役割のNodeです。

MinerはBlockchain P2P Networkで発生しているTransactionをまとめ、Blockに書き込んで、作ったBlockをまた他のNodeへ伝送します。

Minerが多数存在する時、どのMinerにBlock生成権利が与えられのか、どのBlockが選ばれるのかはConsensusで決定されます。

Competition and Verification (競争と検証)

Nodeは互い競争し、互い疑って、互い検証します。

Blockchain P2P Networkの大切なポイントはCompetition(競争)とVerification(検証)です。 P2P Networkを考えると、Cooperation(協力)をイメージするになりますが、Blockchainでは各Nodeは協力関係じゃ有りません。

すでに、Byzantine Generals Problemを通じて理解したように、P2P Network中では誰でも私に嘘を話すことができます。 だから、Nodeは連結されている他のNodeを信頼していません。自分の持ちデータとルールだけ信頼して動きます。

Nodeが他のNodeからTransactionとかBlockを貰った時, TransactionやBlockが無効だと判断されるなら、このデータを無視して、伝播もしないです。

判断根拠は色々ですがConsensusによって定義されます。

  • すでに消費されたAssetを使うとかエラを起きるTransaction
  • 古いBlock

もし、Blockchainを使用するServiceを作るならば、直接Nodeを運営するのがおすすめになります。

  • 私が管理しているNodeは私のServiceに嘘をついていません。
  • 不特定管理者が運営する他のNodeはいつでも私のServiceに嘘ついている可能性が有ります。

Majority Vote (過半投票)

多数で決定されたことは正しさに関係無しで史実になります。

NodeはTransactionやBlockを受け入れることか無視することでTransactionとBlockに投票します。

P2P Network中、同じTransactionやBlockを伝達され、同じ選択をしたら、結果物も同じだと想像できます。 しかし、互い違う選択をしたら、Nodeは連鎖的に違う選択を起きる事になります。判断のデータ土台が互い違いますから、後の選択も影響を続き受けます。

それで、同じ選択をしているNodeでグループが決められます。このようにグループが別れ、互い違うBlockchainになることをHard forkと呼びます。

Hard forkは開発チームの作為で起きることも、技術的問題で起きることも有ります。

別れたBlockchainは別のBlockchainになって生存することも、多数Nodeが他のメーンBlockchainへ移動して掃滅することも有ります。 どれが正しい選択か悪い選択かは大切な問題じゃ有りませえん。多数が生存して少数は掃滅します。

Blockchain Nodeの運用者はいつもHard fork issueを確認してNodeがメーングループに入るように対応しなければなりません。

Discovery (発見)

Nodeは自分に起こったイベントだけ知ります。

Decentralizedを目標としているBlockchainなら、P2P Network中、全てのNodeを統率する存在がいません。 どんなNodeも他のNodeに自分の状態を報告しません。 それで、Nodeの持ちデータは自分がNetwork中で発見したデータに限定されます。

TransactionがNetwork中で伝播されている状況で, どのNodeはTransactionを発見して,どのNodeはTransactionを発見できなかった状態が共存できます。

例)

SeoulのNodeは101番Block同期を取って、New YorkのNodeは103番Block同期を取っていることができます。

  • NodeはどのBlockがChainのラストBlockか知るのができません。近いあるNodeが教えてくれるラストBlockをラストBlockで取り扱いします。
  • Nodeはどれほど同期を取っているのかで、API Queryに互い違う答えをすることが有ります。ちゃんと同期が取れていないNodeにAPI Callは注意が必要です。
  • Nodeが近いNodeにTransactionやBlockを知らせないとか、ちゃんと伝播されていないなら、流失可能性が有ります。

Reference

  • この文書は韓国語文書から翻訳されています。韓国語文書が原文になります。
이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.