和記システムの基本設計:アーキテクチャ設計 gossipアルゴリズムは不要 | 続・ティール組織 研究会のブログ

続・ティール組織 研究会のブログ

ティール組織が話題になっているが、具現化するにはどうしたらよいか?
その研究を続けるにあたり、さらに次の形態である、続・ティール組織なるものまで視野に入れ、具体的な施策・行動内容を研究・支援する会。

先までは、"和記"についての記載で、どのようにブロックチェーンSNSに組み込んで実装していけばよいのか、概念的なところからアプローチ方法を記載していった。概念設計としてはひとまず終えた。次は、フェデレーションモデル全体の基本設計といえるところまで、基本設計書に着手できるようなところまで、概念を具体化していきたい。そして、それにつながるDApps側である「和記システム」を、Pythonプログラムで開発していきたい。

 

では、DApps側での設計の続きを記載していこう。和記システムを設計するための基本手順を以下に示す。このシステムは、Pythonを用いて市町村のブロックチェーンと連携し、個人および市町村単位での和の行動のデータを収集、記録し、決算書(PL、BS)として公表するものである。

基本設計のステップ

  1. 要件定義
  2. アーキテクチャ設計
  3. データベース設計
  4. API設計
  5. ブロックチェーンインターフェース
  6. 決算書の生成
  7. フロントエンド開発
  8. テストとデプロイ

基本設計の各ステップを順番に進めることで、ブロックチェーンとDAppsとして繋がる「和記システム」の詳細な設計が可能になる。各ステップでは、関係者との協議やレビューを通じて設計内容を確定していくことが重要である。

 

2.アーキテクチャ設計

ブロックチェーンにおいて、なぜブロックにする必要あるのか?なお、suiはブロックにせず、トランザクションのままをオブジェクトにしてDAGにて処理している。私のフェデレーションモデルにおいて、suiを真似したアルゴリズムを独自設計して実装したい。一つずつやってみよう。

 

今回は、MongoDBにて完了トランザクションを保持しているのに、なんでgossipにする必要あるのかを検証したい。suiやほかのDAGシステムたちはDAGだけで保存している。gossipって、もしかしてブロックチェーンたちがやってる古い技術なのかもしれない。私のフェデレーションモデルにおいて、本当に必要なのかを検証したい。

 

フェデレーションモデルにおけるGossipの必要性を再評価

Gossipによる分散保持が本当に必要なのか? という点を根本的に考え直す。


1️⃣ Gossipは本当に必要なのか?

✅ Gossipとは何か?

Gossipプロトコルは、情報をノード間で効率よく伝播させる 方法で、ブロックチェーンのP2Pネットワークなどでよく使われる。例えば、BitcoinやEthereum では、新しいブロックやトランザクションをノード間でGossipを使って拡散している。

✅ じゃあ、DAGシステム(Suiなど)はどうしている?

Suiや他のDAGベースのシステムは、GossipではなくDAG自体をデータ保存の基盤 にしている。
つまり:

  • DAGにデータを保存し、DAGの同期を通じて情報を伝播
  • ブロックチェーンのようにGossipで分散する必要がない

✅ フェデレーションモデルではどうするべきか?

私のフェデレーションモデルにおいても、DAGが未完トランザクションと完了トランザクションの両方を保持 するなら、Gossipは不要になる可能性が高い。


2️⃣ Gossipの役割をフェデレーションモデルで考える

フェーズ DAGだけで処理する場合 Gossipを使う場合
送信 DAGに未完トランザクションを保存  Gossipを使って送信者のノードから周辺ノードへ拡散
承認待ち DAG上で承認プロセスを管理  Gossipで未承認データを周辺ノードに拡散
承認完了 DAG上で状態を「完了」に変更し、そのまま保存  Gossipを使って完了データを拡散
データ共有 DAGの同期でデータを全ノードに広める  Gossipを使って一部のノードにコピーし、分散保存


結論: DAGの同期を適切に管理すれば、Gossipでデータを広める必要がなくなる!


3️⃣ なぜ他のDAGシステム(Suiなど)はGossipを使わないのか?

DAGシステムでは、トランザクションの追加と同期をDAG自身が管理 するため、Gossipを使わずとも、DAGのデータ構造の中で自然に情報が伝播 する。

例えば:

  • Sui はオブジェクトベースのDAGを使い、トランザクションの承認をDAG内の関係性を使って行う
  • IOTA(Tangle) は、新しいトランザクションが既存のDAG内の2つの過去トランザクションを承認することで、ネットワーク内の同期が自然に進む
  • Avalanche も、DAGのコンセンサスに基づいてトランザクションを確定するため、Gossipを使わずにDAG自身で情報を管理

4️⃣ 私のフェデレーションモデルにおける最適解

💡 Gossipは不要。DAGがすべてのデータを管理する

あなたのフェデレーションモデルでは:

  • 未完トランザクションはDAGに保存
  • 完了トランザクションもDAGに保存し、DAG自体をMongoDB & immuDBと連携させる
  • Gossipを使わず、DAGの同期メカニズムを強化することで、情報の伝播を管理する

📌 最適なデータ保存戦略

データ種別 保存方法 目的
未完トランザクション DAGに分散保存 受信者の承認待ち
完了トランザクション DAGに分散保存 + MongoDB(市町村)+ immuDB(大陸・グローバル) 履歴管理と検索
DAGの同期メカニズム DAGノード間で直接同期(Gossipなし) ネットワークのオーバーヘッドを削減

5️⃣ DAGによる同期メカニズムの強化

Gossipを使わず、DAG自身が自然に同期を進める方法を実装する必要がある。

✅ DAGノードの自動同期

  • 各ノードは定期的にDAG全体をスキャンし、新しいトランザクションを取得
  • 未完トランザクションが承認されたら、DAGの状態を更新
  • 新しいDAGノードをネットワークに追加する際、自動で最新のDAGデータを取得

PythonでのDAG同期メカニズム

class DAG:
    def __init__(self):
        self.nodes = {}  # トランザクションノードを保存
        self.peers = []  # 他のノード情報

    def add_node(self, tx_id, sender, receiver, status="pending"):
        self.nodes[tx_id] = {"sender": sender, "receiver": receiver, "status": status}

    def sync_with_peers(self):
        for peer in self.peers:
            new_data = peer.request_dag_data()
            self.nodes.update(new_data)  # 新しいDAGデータを取得

    def finalize_transaction(self, tx_id):
        if tx_id in self.nodes:
            self.nodes[tx_id]["status"] = "completed"

 

この方法なら、Gossipを使わなくてもDAGノード間でデータが自然に同期される!


6️⃣ まとめ

フェデレーションモデルではGossipは不要!
DAG自体が同期の役割を持つため、自然に情報が伝播する
完了トランザクションもDAGに保存し、DAGとMongoDB / immuDBを連携させる
DAGノードの自動同期機能を実装し、Gossipの代わりにDAGのメカニズムを強化

結論:Gossipは不要!DAGとDBの組み合わせで最適な設計に! 

 


次のステップ

  1. DAGノード間の同期メカニズムを設計・実装
  2. MongoDBとimmuDBの連携を強化し、DAGが完了トランザクションを管理
  3. DAGの分散保存と復元スピードをテストし、1秒以内の処理を目指す

これでGossipを排除し、DAGを最大限活用する設計になった!

 

 

いかがであろうか、gossipアルゴリズムが不要になったので、とてもスッキリした。