ロール
プロトコルを構成する各ロールの責務と相互関係
INTMAX は、ロールアップ(Rollup)システムにおける独自のロールアーキテクチャを導入しています。状態管理やブロック生成に関わる責務を分散させ、スケーラビリティ、並列処理、検閲耐性を実現しつつ、オンチェーンの信頼性要件と調整オーバーヘッドを最小化します。
ユーザー(L2 参加者)
ユーザーは自身の状態を完全に所有・管理する主体的なエージェントです。以下の責務を担います:
独自のトランザクションバッチの構築(受取人 → 金額)
Merkle ハッシュプレイメージ(Preimage)の生成とコミットメントルート(Commitment Root)への署名
受信トランザクションに対する ZK proof の受領・保管
Withdrawal 用の残高証明(Balance Proof)の構築と提出
重要な点として、ユーザーは残高の更新や検証においていかなる管理者(Central Coordinator)にも依存 しません。すべての状態遷移はクライアントサイドで実行され、オンチェーンとのやり取りは Deposit、署名(Signature)の集約、Withdrawal に限定されます。
これにより、アカウントモデルは事実上 自己完結型の状態マシンに回帰します。グローバルな状態はグローバルに利用可能ではなく、認証済みデータとゼロ知識証明を通じてローカルで再構築されます。
アグリゲーター
アグリゲーターは ステートレス(Stateless)なデータバンドラーです。その役割は以下に厳密に限定されます:
ユーザーからのトランザクションハッシュコミットメント(Commitment)の受信
これらのコミットメントで Merkle Tree を構築
ユーザーへの Merkle Inclusion Proof の返却
Merkle root に対するユーザー署名の収集
Merkle root + 集約署名(Aggregate Signature)+ 公開鍵(Public Key)リストをロールアップコントラクトに送信
アグリゲーターは以下を 行いません:
トランザクション内容の閲覧
状態遷移の実行
トランザクションの順序付けや並べ替え
残高の把握や状態履歴の保持
このため、アグリゲーターの役割は **完全にトラストレス(Trustless)かつパーミッションレス(Permissionless)**です。誰でもアグリゲーターになることができ、唯一の制約は Merkle root が含まれるユーザーによって署名されていることです。アグリゲーターは従来のブロックプロデューサーというよりも、メッセージリレイヤーに近い存在です。
受取人
受取人は、トランザクションを受信するアクター(ユーザーまたはスマートコントラクト)です。その責務は以下のとおりです:
トランザクション有効性の ZK proof の検証
新しい受信トランザクションごとのローカル残高証明の更新
他のユーザーとの状態マージによる再帰的な残高証明の構築(オプション)
受取人は受動的に動作しますが、包含を検証するために送信者から正しいオフチェーンデータ(ZK proof + Merkle path)を必要とします。このやり取りは純粋にピアツーピア(P2P)で行われ、ロールアップコントラクトを介しません。
リレイヤーコントラクト(オプション)
敵対的な環境下でのタイミング攻撃やリプレイ攻撃を軽減するため、アグリゲーターは Transfer ブロックの送信を L1 リレイヤーコントラクトに委任できます。これにより以下が強制されます:
ブロック公開の期限(遅延包含の防止)
ブロックタイムスタンプの単調性(リプレイ攻撃の防止)
署名の検証と送信者の認可
これらのコントラクトは中立的な Liveness と順序の強制者として機能し、特に高度に敵対的またはレイテンシーに敏感な環境で有用です。ただし、正確性のためには厳密には必須ではありません。
設計上の意義
このロールの分離により、以下のようなシステムが実現されます:
ユーザー — プライベートな状態を保持
アグリゲーター — コミットメントメタデータをリレー
スマートコントラクト — 集約プルーフを検証するが、トランザクションロジックは検証しない
いかなるアクターも — ロールアップを一方的に停止・検閲する権限を持たない
単一のシーケンサー(Sequencer)が信頼されたアクターやプロトコルのボトルネックとなるモノリシックなロールアップとは対照的に、INTMAX は緩やかに連携する多数のアクター間で 並列・分散・プライベートな計算を実現します。
最終更新