611 Tests Later: AIのための信頼できるウォレット基盤をどのように構築したか

Dev.to / 2026/4/4

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical Usage

要点

  • ウォレットを制御するAIエージェントには厳格なガードレールが必要です。なぜなら、暗号資産のバグはブロックチェーンに「元に戻す」機能がないため、資金を永久に失う可能性があるからです。
  • この記事では、WAIaaSの3層によるセキュリティ設計を説明します。すなわち、時間制限付きのセッション認証、デフォルト拒否(default-deny)を強制するポリシーエンジン、そしてリスクの高い操作に対する人間の承認です。
  • 認証の役割を明確に分けています。管理操作のためのmasterAuth、制限の範囲内でAIエージェントが利用するsessionAuth、そして資金の所有者による承認/緊急時の制御を行うownerAuthです。
  • ポリシーエンジンは、4つのセキュリティティア(INSTANT、NOTIFY、DELAY、APPROVAL)にまたがって合計21種類のポリシータイプをサポートし、取引がどのように、いつ実行できるかを制御します。
  • 信頼性は、徹底したテスト(626+のテストファイル)と、実資金を扱うウォレット基盤を安全にし、開発者が信頼できるものにすることを目的とした3層の防護によって実現されました。

AIエージェント向けの信頼できるウォレット基盤を構築することは、トランザクションを動かすだけの話ではありません。安全に、確実に動作し、何か問題が起きたときにあなたの資金が減り続けないことを保証することが重要です。626本以上のテストファイルを書き、デフォルト拒否ポリシーによる3層セキュリティを実装する中で分かったのは、難しいのは暗号ではなく、ガードレール(安全柵)だということでした。

Why Testing Matters for Crypto Infrastructure

AIエージェントが制御するウォレット基盤を構築していると、あらゆるイレギュラーケースが資金流出の可能性になります。従来のアプリケーションでは、バグによって誤ったUIが表示されたり一部のデータが壊れたりするかもしれませんが、ウォレットのバグは金銭を恒久的に失うことにつながります。ブロックチェーンには「元に戻す」ボタンはありません。

だからこそ、セキュリティ・ファーストのアーキテクチャでWAIaaSを構築しました。3層の保護(セッション認証→ポリシー適用→人の承認)、デフォルト拒否ポリシー、そしてあらゆるコンポーネントに対する広範なテストを実施しています。その結果、開発者が実際の資金で使える、信頼できるウォレット基盤が得られます。

The Security Architecture

Layer 1: Session Authentication

AIエージェントには、ウォレットへの直接アクセスは与えません。その代わりに、特定の権限を持つ有効期限付きのセッショントークンを渡します:

# Create a session for an AI agent
curl -X POST http://127.0.0.1:3100/v1/sessions \
  -H "Content-Type: application/json" \
  -H "X-Master-Password: my-secret-password" \
  -d '{"walletId": "<wallet-uuid>"}'

セッションには3つの異なる認証方法があります:

  • masterAuth: システム管理者(ウォレット作成、ポリシー管理)
  • sessionAuth: AIエージェント(ポリシー上限内でのトランザクション)
  • ownerAuth: 資金の保有者(トランザクション承認、緊急時の制御)

Layer 2: Policy Engine with Default-Deny

ポリシーエンジンは、4つのセキュリティティア(INSTANT, NOTIFY, DELAY, APPROVAL)にまたがる21種類のポリシータイプを適用します。最も重要なのは、デフォルト拒否であることです。つまり、あなたのエージェントは明示的に許可されていないトークンには触れられません。

# Create a spending limit policy
curl -X POST http://127.0.0.1:3100/v1/policies \
  -H "Content-Type: application/json" \
  -H "X-Master-Password: my-secret-password" \
  -d '{
    "walletId": "<wallet-uuid>",
    "type": "SPENDING_LIMIT",
    "rules": {
      "instant_max_usd": 100,
      "notify_max_usd": 500,
      "delay_max_usd": 2000,
      "delay_seconds": 900,
      "daily_limit_usd": 5000
    }
  }'

セキュリティ上重要なポリシー:

  • ALLOWED_TOKENS: エージェントが転送できるトークンのホワイトリスト(デフォルト拒否)
  • CONTRACT_WHITELIST: エージェントが呼び出せるコントラクトのホワイトリスト(デフォルト拒否)
  • APPROVED_SPENDERS: トークン支出に対して承認できるプロトコルを制御
  • SPENDING_LIMIT: 金額ベースのセキュリティティア

これらのポリシーが設定されていない場合、トランザクションはブロックされます。驚きはありません。

Layer 3: Human-in-the-Loop Approval

ポリシー上限を超える高額なトランザクションについては、WAIaaSは複数のチャネルを通じて人の承認を要求します:

  • WalletConnect: モバイルウォレットの承認
  • Telegram: 暗号化されたボット通知
  • プッシュ通知: リアルタイムのアラート
# Approve a pending transaction
curl -X POST http://127.0.0.1:3100/v1/transactions/<tx-id>/approve \
  -H "X-Owner-Signature: <ed25519-or-secp256k1-signature>" \
  -H "X-Owner-Message: <signed-message>"

Testing Strategy: 626+ Test Files

信頼できる暗号基盤を構築するには、あらゆる層で包括的なテストが必要です。テストカバレッジには以下が含まれます:

  • ユニットテスト: 個々の関数やコンポーネント
  • 統合テスト: APIエンドポイントとサービス間の連携
  • エンドツーエンドテスト: 完全なトランザクションフロー
  • ポリシーテスト: セキュリティ適用シナリオ
  • ネットワークテスト: マルチチェーンでのトランザクション処理

7段階のトランザクションパイプラインは、特に徹底的にテストすることが重要です:

  1. Validate: トランザクション形式と基本要件を確認
  2. Authenticate: セッショントークンと権限を検証
  3. Policy: 支出上限、ホワイトリスト、セキュリティティアを適用
  4. Wait: DELAYティアのトランザクションに対する遅延を処理
  5. Execute: ブロックチェーンネットワークへトランザクションを送信
  6. Confirm: 確認の監視と失敗時の対応
  7. Stages: パイプライン全体の連携を調整

各ステージには、成功ケース、エラー条件、イレギュラーケースをカバーするそれぞれのテストスイートがあります。

Real-World Testing with 14 DeFi Protocols

WAIaaSは14のDeFiプロトコルプロバイダと統合し、それぞれに異なるトランザクションパターンとセキュリティ考慮が必要になります:

  • DEXs: Jupiter(Solana)、0x Protocol(EVM)
  • Lending: Aave V3、Kamino
  • Staking: Lido、Jito
  • Bridges: LI.FI、Across
  • Derivatives: Hyperliquidのパーペチュアル
  • Prediction markets: Polymarket

これらの統合をテストした結果、共通するセキュリティパターンが見つかりました:

# Test DeFi action with dry-run first
curl -X POST http://127.0.0.1:3100/v1/actions/jupiter-swap/swap \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer wai_sess_<token>" \
  -d '{
    "inputMint": "So11111111111111111111111111111111111111112",
    "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "amount": "1000000000",
    "dryRun": true
  }'

dry-run機能により、実行前にトランザクションをシミュレーションできます。これはテストとエージェント開発において極めて重要です。

Multi-Chain Testing Complexity

2種類のチェーン(EVMとSolana)を18のネットワークにまたがってサポートするには、各組み合わせごとにトランザクション形式、ガス推定、ノンス管理、そして確認(コンファーム)のパターンをテストする必要があります。各チェーンにはそれぞれ異なる:

  • トランザクション形式:EVMはRLPエンコーディング、Solanaはバイナリ形式
  • 署名スキーム:secp256k1 vs ed25519
  • ガスの仕組み:EVMのガスとSolanaのコンピュートユニット
  • 返却形式: {"translated": "翻訳されたHTML"}
  • 確認パターン: ブロック時間と最終性ルール

当社のテストスイートは、基盤となるブロックチェーンにかかわらず一貫した動作が保証されるように、これらの違いを検証します。

Docker Testing and Deployment

信頼できるインフラには、信頼できるデプロイが必要です。WAIaaSには、自動プロビジョニングとヘルスチェックを含む包括的なDockerサポートが含まれます。

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:3100/health"]
  interval: 30s
  timeout: 5s
  start_period: 10s
  retries: 3

Dockerのデプロイでは以下を処理します:

  • 自動プロビジョニング: 初回起動時に安全な認証情報を生成
  • ヘルスモニタリング: 継続的な可用性チェック
  • シークレット管理: 本番対応の認証情報の取り扱い
  • 非root実行: セキュリティ強化されたコンテナユーザー(UID 1001)

API Testing with OpenAPI Specification

全39のREST APIルートモジュールが、OpenAPI 3.0仕様でドキュメント化されており、包括的なテストカバレッジを含みます。/referenceにあるインタラクティブなAPIリファレンスにより、テストが簡単になります。

# テストツール用に完全なAPI仕様をダウンロード
curl http://127.0.0.1:3100/doc -o openapi.json

# インタラクティブなドキュメントを表示
open http://127.0.0.1:3100/reference

Quick Start: Deploy and Test

セキュリティアーキテクチャを自分でテストする準備はできていますか?最小限のセットアップはこちらです:

  1. Dockerでデプロイ:
git clone https://github.com/minhoyoo-iotrust/WAIaaS.git
cd WAIaaS
docker compose up -d
  1. ウォレットとセッションを作成:
# ウォレットを作成(masterAuth)
curl -X POST http://127.0.0.1:3100/v1/wallets \
  -H "Content-Type: application/json" \
  -H "X-Master-Password: my-secret-password" \
  -d '{"name": "test-wallet", "chain": "solana", "environment": "devnet"}'

# テスト用のセッションを作成
curl -X POST http://127.0.0.1:3100/v1/sessions \
  -H "Content-Type: application/json" \
  -H "X-Master-Password: my-secret-password" \
  -d '{"walletId": "<wallet-uuid>"}'
  1. デフォルト拒否ポリシーを設定:
# ALLOWED_TOKENSポリシーなしでは、すべての送金がブロックされます
curl -X POST http://127.0.0.1:3100/v1/policies \
  -H "Content-Type: application/json" \
  -H "X-Master-Password: my-secret-password" \
  -d '{
    "walletId": "<wallet-uuid>",
    "type": "ALLOWED_TOKENS", 
    "rules": {
      "tokens": [{"address": "native:solana", "symbol": "SOL", "chain": "solana"}]
    }
  }'
  1. セキュリティをテストする:
# これは成功します(SOLはホワイトリストされています)
curl -X POST http://127.0.0.1:3100/v1/transactions/send \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer wai_sess_<token>" \
  -d '{
    "type": "TRANSFER",
    "to": "test-address",
    "amount": "0.001",
    "dryRun": true
  }'

# これは失敗します(USDCはホワイトリストされていません)
curl -X POST http://127.0.0.1:3100/v1/transactions/send \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer wai_sess_<token>" \
  -d '{
    "type": "TOKEN_TRANSFER", 
    "token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "to": "test-address",
    "amount": "1.0",
    "dryRun": true
  }'
  1. テスト結果を確認する:
# APIのヘルスとステータスを表示
curl http://127.0.0.1:3100/health

# ポリシー強制のログを確認
docker compose logs waiaas-daemon | grep POLICY

セキュリティレイヤーは機能します。明示的なトークンのホワイトリストがない場合、送金はブロックされます。あなたのAIエージェントが触れるのは、あなたが明示的に許可した資金だけです。

包括的なセキュリティテストのために、ポリシーの設定、取引の監視、承認フローのテストを行うには、管理者Web UIのhttp://127.0.0.1:3100/adminを探索してください。

What's Next

626件以上のテストファイルは、実際の資金で本当に信頼できる暗号インフラを構築するという私たちの取り組みを表しています。デフォルト拒否ポリシー、3層のセキュリティ、包括的なテストは、単なる機能ではなく、安全なAIエージェント用ウォレットにとって必須の要件です。

AIエージェント向けの安全なウォレットインフラを作る準備はできていますか?GitHubで完全なコードベースを探索するか、waiaas.aiで実際のシステムをお試しください。