Skip to main content

フェーズ5:開発環境とチュートリアル

Bulletin Board(けいじ板)

公式 Bulletin Board チュートリアルの教材化。投稿と取り下げができるけいじ板で「名前を出さずに本人だけ取り下げできる」しくみ(コミットメント)を学ぶ。


2つめは Bulletin Board(けいじ板)。 メッセージを貼って、あとで自分だけが取り下げられる――しかもだれが貼ったかはチェーン上に出さない。Midnight らしさが出てきます。

何を作るの?

  • 1枚の board にメッセージを貼る(post)
  • 貼った本人だけ取り下げる(takeDown)
  • でも「本人」を公開のIDで持たない(名前は出さない)

何を学べるの?

  • 状態を enum(空き/使用中)で表す
  • コミットメント(秘密のカギから作るハッシュ)で「本人」を表す
  • witness で秘密のカギを渡し、disclose で公開してよい値だけ出す
  • TypeScript で API クラスを作り、画面とつなぐ

たとえ話:合言葉で取り下げる

掲示板に紙を貼るとき、名前を書くかわりに「自分だけ作れる合言葉のハンコ」を押すとします。 取り下げたい人は、同じハンコをもう一度作って「ほら、同じでしょ」と示す。 名前は分からないのに、本人だけが取り下げられる。これがコミットメントの考えかたです。

契約の中身(本物・短い)

bboard.compact(一部)

ポイント:

  • owner には公開鍵そのものではなく、秘密カギから作ったハッシュ(ハンコ)を入れる。だから名前は分からない。
  • takeDown で「もう一度同じハンコを作って一致するか」を assert で確認 → 本人だけ通る
  • 秘密カギ由来の値を公開する所には、必ず disclose

プロジェクトの形

TS 側のしくみ(雰囲気)

API クラスが、契約の呼び出しをやさしいメソッドにまとめます。

さらに、公開状態(indexer)+手元の秘密を合わせて「自分が owner かどうか」を計算し、画面に出します(RxJS で常に最新に)。

3つの部屋:Contract・API・CLI(Academy Unit 3〜4)

公式の Bulletin Board チュートリアルは、3つの部屋(パッケージ)に分かれています。Academy の Unit 3〜4 はこの3つを順に作ります。

部屋 役わり Academy
contract(Compact) けいじ板のルール(post / takeDown) Unit 3.1 Contract
api(TypeScript) 契約を使いやすく包む BBoardAPI クラス Unit 3.2 API Layer
bboard-cli(TypeScript) ターミナルから操作するアプリ Unit 3.3 CLI

① Contract(契約)

このページの「契約の中身」がこれ。compact compileTS API・ZK鍵・回路が生成されます。

② API Layer(つなぎの層)

契約をそのまま使うと大変なので、BBoardAPI クラスで包みます。

  • deploy() / join():新しく置く/既にあるものに参加する
  • post() / takeDown():貼る/取り下げる
  • state$:公開状態+手元の秘密を合わせた「いまの状態」を流し続ける(owner 判定もここ)

→ 画面や CLI は、この API クラスだけ見ればよくなります(関心の分離)。

③ CLI と デプロイ

  • CLI は BBoardAPI を呼ぶだけのうすいアプリ(メニューで post / takeDown)。
  • 動かすには providers(indexer / proof server / wallet …)をそろえます(→ DApp の組み立てかた)。

④ Preprod へデプロイ(Academy Unit 4.1)

  • まずローカルの undeployed(自分だけのネット)で試す。
  • うまくいったら Preprod(公開テストネット)へ。tNIGHT を faucet でもらい、tDUST を生成して手数料にします(→ 開発環境)。
  • 設定で「つなぎ先(indexer / node / proof server / network id)」を Preprod に切りかえます。

卒業制作として、この板を自分で拡張してみましょう → Capstone:けいじ板を拡張する

進む前に理解しておくこと

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

  • 公開IDを持たずに本人確認する=コミットメント(ハッシュ)と ZK の典型パターン
  • assert で「本人だけ」を強制し、disclose で漏洩をコントロールする
  • 契約の上に API レイヤーを作ると、画面側がぐっと書きやすくなる

公式Docsではどこ?

今日のまとめ

  • けいじ板=「名前を出さずに、本人だけ取り下げ」
  • カギは コミットメント(秘密カギ→ハッシュ)assertdisclose
  • 契約の上に API クラスを作って画面とつなぐ

今はここだけでOK

「owner に入れるのは名前じゃなくて、本人だけ作れるハンコ(ハッシュ)」——これが分かれば大きな前進です。

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

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

つぎに読むページ

➡️ 相手にぜったい見せない状態を扱う。Battleship チュートリアル