Skip to main content

フェーズ4:CompactとDApp開発

DApp の組み立てかた(5つの部品)

Midnight の DApp は、契約・proof server・indexer・node・ウォレットの5部品でできています。TypeScript アプリが providers でそれらをつなぐしくみと、主要パッケージを開発者向けに整理。


Compact の書きかた で契約のレシピを学びました。 でも、契約だけでは DApp は動きません。まわりの部品と、それらをつなぐTSアプリが必要です。

たとえ話:レストランのチーム

Midnight の DApp は、レストランのチームに似ています。

部品 役わり レストランのたとえ
契約(Compact) ルール(やってよいこと)を決める メニューとレシピ
proof server 秘密を見せずに「正しい」を証明する。ポート6300 裏でこっそり検品する検査員
indexer チェーンの状態を読みやすく整理(GraphQL) 注文状況がわかる伝票係
node できあがった取引をチェーンに出す 料理を客席へ運ぶホール
ウォレット(Lace) カギ・残高・サインを管理 お客さんのお財布

そして、これらを指揮する店長が、あなたが書く TypeScript アプリです。

TSアプリは「providers」で部品とつなぐ

Midnight.js では、各部品との通信を providers(つなぎ役) にまとめます。 Counter チュートリアルの形を、雰囲気で(短く):

provider つなぐ相手 しごと
publicDataProvider indexer 公開状態を GraphQL で読む
zkConfigProvider コンパイル成果物 ZK回路の鍵(prover/verifier)を読む
proofProvider proof server 証明を作ってもらう
walletProvider / midnightProvider ウォレット 取引の残高合わせ・サイン・送信
privateStateProvider 手元の保管庫 秘密ステートを保存(LevelDB など)

契約を「デプロイ」して「呼ぶ」

providers がそろえば、契約をデプロイして、circuit を呼べます(雰囲気で短く):

callTx.increment() を呼ぶと、裏では proof server が証明を作り → ウォレットが残高合わせ&サイン → node に送信、という流れが起きます。

主なパッケージ(npm)

開発者が実際に使う @midnight-ntwrk/* パッケージの例:

パッケージ しごと
@midnight-ntwrk/compact-runtime 契約を動かすランタイム
@midnight-ntwrk/midnight-js-contracts デプロイ・契約呼び出し
@midnight-ntwrk/midnight-js-indexer-public-data-provider indexer から公開状態を読む
@midnight-ntwrk/midnight-js-http-client-proof-provider proof server と話す
@midnight-ntwrk/midnight-js-level-private-state-provider 秘密ステートを保存
@midnight-ntwrk/dapp-connector-api ブラウザ ↔ ウォレット(Lace)の接続
@midnight-ntwrk/wallet-sdk-* ウォレット(HD鍵・shielded・unshielded・dust)

2つの大きな SDK:Midnight.js(契約・ウォレット・証明をまとめた TS 実装)と Wallet SDK(独自ウォレットを作る用)。 ※ ledger-v8 のようにバージョンが名前に入るパッケージもあります。組み合わせは Support matrix(外部リンク・別タブで開きます) で確認。

公開・秘密・証明が、どこを流れるか

公開・秘密・証明の置きどころ の話を、部品にあてはめると:

  • 秘密ステートprivateStateProvider(手元)に保存。proof server に渡って証明の材料になる
  • 公開ステートpublicDataProvider(indexer)から読める
  • 証明 → proof server が作り、node に出す取引にのる

開発者として理解すべきこと

  • DApp = 契約 + proof server + indexer + node + ウォレット、指揮役が TSアプリ
  • TSアプリは providers で各部品につなぐ(読む=indexer、証明=proof server、送る=wallet/node)
  • deployContract / findDeployedContract / callTx.* が基本の流れ
  • パッケージ名とバージョンの組み合わせは Support matrix で確認

公式Docsではどこ?

今日のまとめ

  • 動く DApp は 5部品 + TSアプリ(指揮役)
  • TSは providers で部品をつなぐ
  • 流れ:証明を作る → サイン → 送信、を callTx が裏でやってくれる

今はここだけでOK

「契約のまわりに、検査員(proof server)・伝票係(indexer)・ホール(node)・お財布(wallet)がいて、店長(TS)がまとめる」——この絵が描ければOK。

📘 もっと正確に(原文準拠コース)

Academy 原文に忠実な詳しい版はこちら:

つぎに読むページ

➡️ 作る流れ全体(コンパイル〜実行)へ。開発の進めかた