3.0 KiB
3.0 KiB
Midnight Network Integration (MidnightBox)
Status: Research Created: 2025-08-26 Priority: Low (Challenge-specific) Related: Privacy-preserving applications, ZK proofs
概要
Midnight Networkとの統合により、Nyashでプライバシー保護アプリケーションを開発可能にする。
背景
- Midnight Network Privacy Challenge ($5,000)への参加機会
- Compact言語(TypeScriptベースDSL)からTypeScript/JavaScript生成
- ZKプルーフを使用したプライバシー保護スマートコントラクト
実装アプローチ案
1. ビルトインBox実装
// MidnightBoxの使用例
local midnight = new MidnightBox()
midnight.connect("contract-address")
// ZKプルーフ生成
local proof = midnight.createProof("validVote", {
voterId: "Alice",
choice: "OptionA"
})
// トランザクション送信
local result = midnight.submitTransaction(proof)
2. HTML埋め込み戦略
<!-- Compact → TypeScript → JavaScript -->
<script src="midnight-js-sdk.js"></script>
<script src="voting-contract.js"></script>
<!-- Nyash WASM統合 -->
<script type="module">
window.midnightContract = new VotingContract();
// Nyashから extern_call() で呼び出し
</script>
3. 実装フロー
- Compact言語で契約記述
- CompactコンパイラでTypeScript生成
- HTML/JavaScriptに統合
- NyashのExternCallで呼び出し
チャレンジ向け実装例
プライバシー投票システム
box PrivateVotingApp {
init { midnight, publicLedger, privateLedger }
constructor() {
me.midnight = new MidnightBox()
me.publicLedger = new ArrayBox() // 証明のみ
me.privateLedger = new MapBox() // 暗号化データ
}
vote(voterId, choice) {
// ZKプルーフで投票の有効性を証明
local proof = me.midnight.proveValidVote({
hasRightToVote: true,
hasNotVotedYet: true,
choiceIsValid: true
})
// 公開台帳には証明のみ
me.publicLedger.push(proof)
// プライベート台帳に暗号化データ
me.privateLedger.set(
hash(voterId),
me.midnight.encrypt(choice)
)
return proof
}
}
技術的課題
- WASM統合: wasm-bindgenでJavaScript関数バインディング
- 型安全性: RustとTypeScriptの型マッピング
- 非同期処理: Midnight SDKの非同期APIとの連携
- エラーハンドリング: ZKプルーフ生成失敗時の処理
実装優先度
- チャレンジ応募時のみ必要
- モジュラービルトインBoxシステム実装後に検討
- プロトタイプはExternCallで十分
参考資料
- Midnight Network Documentation
- Compact Language Reference
- DEV.to Challenge Page
メモ
- 締切: 2025年9月7日
- "Protect That Data"トラック: $3,500賞金
- モックではなく実際のMidnight SDK使用が必要