リファレンス実装
準拠市場
@hazbase/kit + ethersを使用した準拠トークン市場構築の実践的なエンドツーエンドリファレンス。デプロイ順序、ロール&接続設定、ガバナンス/緊急停止の伝播に焦点を当てています。
概要
このドキュメントは準拠市場パターンの完全なリファレンスを提供します。
- 推奨デプロイ順序
- 必要なロール&接続設定
- ガバナンスと緊急停止の伝播
- 最小限のSDKベースコード例(UI無し)
想定シナリオ
- • KYC承認済みユーザーのみが取引可能(Whitelist経由)
- • 資産はMarketManagerを通じて取引
- • 流動性/買い戻しロジックはReservePoolが処理
- • 緊急時にはシステムを即座に停止可能
- • 復旧と設定変更はガバナンス + タイムロック経由
推奨デプロイ順序
1
Whitelist2
FlexibleToken / BondToken3
MarketManager4
ReservePool5
EmergencyPauseManager6
GenericGovernor + TimelockControllerクイックスタート(最小デプロイ&接続設定)
@hazbase/kit + ethersを使用した準拠市場のデプロイと接続設定を示す最小限の実行可能例です。
typescript
import { ethers } from "ethers";
import {
WhitelistHelper,
FlexibleTokenHelper,
MarketManagerHelper,
} from "@hazbase/kit";
const provider = new ethers.JsonRpcProvider(process.env.RPC_URL!);
const deployer = new ethers.Wallet(process.env.PRIVATE_KEY!, provider);
(async () => {
// 1. Deploy whitelist
const { helper: whitelist } = await WhitelistHelper.deploy(
{ admin: deployer.address },
deployer
);
// 2. Deploy payment token
const { helper: usdc } = await FlexibleTokenHelper.deploy(
{
name: "USD Coin",
symbol: "USDC",
decimals: 6,
transferable: true,
admin: deployer.address,
},
deployer
);
// 3. Deploy market manager
const { helper: market } = await MarketManagerHelper.deploy(
{
admin: deployer.address,
splitter: deployer.address,
bps: 10, // 0.1%
},
deployer
);
// 4. Wire compliance
await market.setWhitelist(whitelist.address);
await market.setPaymentToken(usdc.address, true);
console.log("Compliant market ready:", market.address);
})();主要アクター
| Actor | 責務 |
|---|---|
| Deployer | 初期デプロイと接続設定 |
| Timelock | 最終管理権限 |
| Governor | 提案と投票 |
| Guardian | 緊急停止 |
| Compliance Ops | KYC操作 |
| Users | 承認済み参加者 |
| Splitter | 手数料受取先 |
ロール&接続設定マトリクス
EmergencyPauseManager
| Role | Holder | Purpose |
|---|---|---|
| PAUSER_ROLE | Guardian | 停止対象の登録 |
| GUARDIAN_ROLE | Guardian | 停止の実行 |
| GOVERNOR_ROLE | Timelock | 停止解除の実行 |
MarketManager
| Setting | Description |
|---|---|
| setWhitelist | コンプライアンスの適用 |
| setPaymentToken | 決済の許可 |
| setFee(bps, splitter) | マーケットプレイス手数料 |
手数料ルール: bps = 1000 → 100%。一般的な手数料は5〜10 bps。
緊急停止(コードスニペット)
typescript
import { EmergencyPauseManagerHelper } from "@hazbase/kit";
// Register pause targets
await pauseManager.registerPausable(market.address);
await pauseManager.registerPausable(reservePool.address);
// Guardian triggers immediate pause
await pauseManager.connect(guardian).pauseAll();
// Recovery must go through governance (timelock)
await pauseManager.connect(timelock).unpauseAll();ガバナンスフロー(概念図)
Proposal→Vote→Queue (Timelock)→Execute
一般的なガバナンスアクション:
- システム停止解除
- 手数料の更新
- 決済トークンの追加/削除
- 準備金パラメータの調整
デプロイチェックリスト
デプロイ
Whitelist
Token(s)
MarketManager
ReservePool
EmergencyPauseManager
Governor + Timelock
接続設定
ホワイトリストを設定
決済トークンを許可
停止対象を登録
手数料を設定
管理者ロールをTimelockに移譲
スモークテスト
ホワイトリスト未登録ユーザーは取引不可
ホワイトリスト登録ユーザーは取引可能
Guardian停止で操作が停止
Timelock停止解除でシステム復旧
完全なリファレンスコード
完全な実行可能スクリプト(deploy / wire / flows):
reference/compliant-market/ ├── 00-deploy.ts ├── 01-wire.ts └── 02-flows.ts
Stable
このドキュメントは推奨アーキテクチャを反映しています。信頼境界とフローは設計上安定しています。