本文へ移動
    hazBasehazBaseDocs
    リファレンス実装

    準拠市場

    @hazbase/kit + ethersを使用した準拠トークン市場構築の実践的なエンドツーエンドリファレンス。デプロイ順序、ロール&接続設定、ガバナンス/緊急停止の伝播に焦点を当てています。

    概要

    このドキュメントは準拠市場パターンの完全なリファレンスを提供します。

    • 推奨デプロイ順序
    • 必要なロール&接続設定
    • ガバナンスと緊急停止の伝播
    • 最小限のSDKベースコード例(UI無し)

    想定シナリオ

    • KYC承認済みユーザーのみが取引可能(Whitelist経由)
    • 資産はMarketManagerを通じて取引
    • 流動性/買い戻しロジックはReservePoolが処理
    • 緊急時にはシステムを即座に停止可能
    • 復旧と設定変更はガバナンス + タイムロック経由

    推奨デプロイ順序

    1
    Whitelist
    2
    FlexibleToken / BondToken
    3
    MarketManager
    4
    ReservePool
    5
    EmergencyPauseManager
    6
    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 OpsKYC操作
    Users承認済み参加者
    Splitter手数料受取先

    ロール&接続設定マトリクス

    EmergencyPauseManager

    RoleHolderPurpose
    PAUSER_ROLEGuardian停止対象の登録
    GUARDIAN_ROLEGuardian停止の実行
    GOVERNOR_ROLETimelock停止解除の実行

    MarketManager

    SettingDescription
    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();

    ガバナンスフロー(概念図)

    ProposalVoteQueue (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
    GitHubで見る
    Stable
    このドキュメントは推奨アーキテクチャを反映しています。信頼境界とフローは設計上安定しています。