> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# トラベルルールのサンドボックステストガイド

> DiditのテストVASPを相手に、サンドボックスでトラベルルールのすべての結果をエンドツーエンドで検証できます。対象は承認、却下、名前の不一致、到達不能、タイムアウト、セルフホスト型ウォレットです。

サンドボックスアプリケーションがトラベルルールのデータをやり取りする取引相手は、プラットフォームに組み込まれたテスト用VASPである**Didit Test VASP**のみです。Didit Test VASPは、実際の取引相手とのやり取りを処理するのと同じコードを通じて、指定どおりに各送金に応答します。そのため、本番環境に移行する前に、やり取りのすべてのステータス、タイムラインエントリ、Webhookを確認できます。

サンドボックスで送信したデータがDiditの外に出ることはありません。ネットワーク、メールの受信者、他のDidit顧客に連絡が行くことは一切なく、料金も発生しません。

## 始める前に

1. **サンドボックス**アプリケーションのAPIキーを使用してください。本番環境のアプリケーションがテスト用VASPに到達することはありません。
2. 法人名を指定して、トラベルルールを有効にします。

```bash theme={null}
curl -X PUT https://verification.didit.me/v3/travel-rule/settings/ \
  -H "x-api-key: YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"is_enabled": true, "legal_name": "Example CASP Sandbox"}'
```

3. 必要に応じて、Webhookの送信先を`travel_rule.status.updated`に登録します。サンドボックスでは、`"environment": "sandbox"`が設定されたこのイベントが配信されます。

## Didit Test VASP

`GET /v1/sandbox/scenarios/`は、テスト用VASPのプロファイルと、`travel_rule`オブジェクト内のすべてのシナリオを返します。そのため、テストではトリガー値をハードコードせずに読み取ることができます。

| フィールド | 値 |
| - | - |
| `legal_name` | `Didit Test VASP` |
| `lei` | `DIDITESTVASP00000001`。形式は正しいものの、登録はされていません |
| `jurisdiction` | `GB` |
| `compliance_email` | `didit.test`配下のアドレス。メールが送信されることはありません |
| `travel_address` | `.test`ホスト配下のトラベルアドレス。到達できることはありません |
| `network_codes` | 発信されることのないテストコード |
| `default_scenario` | `accept` |
| `inbound_scenarios` | `["accept", "name_mismatch"]` |

すべての値はテストデータです。テスト用VASPはいずれのトラベルルールネットワークのメンバーでもありません。サンドボックスでのどの結果も、実際の取引相手やネットワークに到達できることを示すものではありません。

## アウトバウンドシナリオ

情報交換が必要なサンドボックスアプリケーションのアウトバウンド`travelRule`取引は、すべてテスト用VASPに送られます。受取人のウォレットアドレス（大文字・小文字は区別されません）、または`Didit Test VASP <suffix>`形式の受取人名で選択します。両方が設定されている場合は、ウォレットが優先されます。どちらも指定されていない場合、または表にないサフィックスの場合、送金は完了します（`accept`）。

やり取りを必要としない送金が、テスト用VASPに到達することはありません。具体的には、`threshold_amount`未満の送金、ユーザー本人の検証済みウォレットへの送金、取引相手のウォレットをセルフホスト型と申告した送金です。あなたまたはエンドユーザーがディレクトリから手動で選択した取引相手VASPは、本番環境のアプリケーションが持つルートに基づいて判断されます。そのエントリにルート（検証済みの`TRP`エンドポイント、あなたのアプリケーションが送信に使用するネットワーク、またはコンプライアンス連絡先）がある場合、送金はテスト用VASPに送られます。ルートがない場合は、本番環境のアプリケーションと同様に、送金は`COUNTERPARTY_VASP_NOT_FOUND`で終了します。

| シナリオ | 名前のサフィックス | ウォレット（ETH） | 最終ステータス |
| - | - | - | - |
| `accept` | なし | `0xc00c4cd93ff83953ce3347b33656d68ab8f35cfb` | `COMPLETED`。その後、`payment_txn_id`を報告すると`FINISHED` |
| `decline` | `Decline` | `0x7694c5b0213859ef409107853a36ff7c85835f18` | `COUNTERPARTY_VASP_GENERAL_DECLINE` |
| `name_mismatch` | `Name Mismatch` | `0x501b7a0886e31f516aaf54fa99107d2377bd2d3e` | 名前ルールに基づき`COUNTERPARTY_MISMATCHED_DATA`（`NONE`の場合は完了） |
| `not_reachable` | `Not Reachable` | `0xf0e986c1a1c3ae41629bf5cdcee0a67dd1eb0cce` | 実際の再試行スケジュール（30秒後、その後2分、10分、30分、60分。合計約1時間45分）を経て`COUNTERPARTY_VASP_NOT_REACHABLE`となり、その後は再送可能 |
| `timeout` | `Timeout` | `0xb63a1b1d4bee82d109332187cbf5b657eb7da498` | 1分の期限を過ぎた後の最初の期限超過チェックで`EXPIRED`となるため、約15分以内に終了。その後、`timeout_outcome`が適用されます |
| `self_hosted` | `Self Hosted` | `0x33dcc2a7e69cf965f7f4eaf6ba657bcb078a2b65` | `UNCONFIRMED_OWNERSHIP`。その後、ウォレットの所有証明が記録されると`COMPLETED` |

```bash theme={null}
curl -X POST https://verification.didit.me/v3/transactions/ \
  -H "x-api-key: YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "sbx-tr-accept-001",
    "transaction_category": "travelRule",
    "transaction_details": {
      "direction": "outbound",
      "action_type": "transfer",
      "amount": "0.25",
      "currency": "ETH",
      "currency_kind": "crypto"
    },
    "subject": { "entity_type": "individual", "vendor_data": "user-042", "full_name": "Jane Doe" },
    "travel_rule_details": {
      "status": "AWAITING_COUNTERPARTY",
      "beneficiary_data": {
        "wallet_address": "0xc00c4cd93ff83953ce3347b33656d68ab8f35cfb",
        "name": "Carlos Ruiz"
      }
    }
  }'
```

送金の`rail`は`TEST_VASP`となり、送金一覧では受取人VASPとして`Didit Test VASP`が表示されます。`travel_rule.status.updated`のWebhookで追跡するか、`GET /v3/transactions/{transaction_id}/`で取得してください。

* **`name_mismatch`**は、送信した受取人名とテスト用VASPが応答する名義人名を、受取人のエンティティタイプに対応する名前ルール（`matching_rules.individual.name`または`matching_rules.company.name`。設定するまでは`name_matching_strictness`に従います）で比較します。送金と、その判定を行ったタイムラインエントリには、`name_match`（`compared_with: "counterparty_vasp"`付き）と、`mismatched_fields: ["name"]`を含む`data_match`が記録されます。
* **`not_reachable`**は、再試行中は送金を`AWAITING_COUNTERPARTY`のままにし、`delivery.status`を`RETRYING`、`last_error`を`test VASP is not answering`とした後、`COUNTERPARTY_VASP_NOT_REACHABLE`にします。その後、`{"action": "resend"}`を送信すると再度実行できます。
* **`self_hosted`**では、テスト用VASPがウォレットはセルフホスト型であると応答します。[ウォレット所有権ウィジェット](https://docs.didit.me/ja/transaction-monitoring/wallet-ownership-widget.md)（`auto_wallet_verification`が有効な間はあなた用に発行されます）、または`{"confirmed": true}`を指定した[`POST .../travel-rule/ownership/`](https://docs.didit.me/ja/management-api/travel-rule/confirm-ownership)で証明を記録してください。ウォレットは受取人の名前でアドレス帳に追加され、名前の一致によって送金が判定されます。一致すれば送金は完了し、ウォレットは検証済みになります。`{"confirmed": false}`の場合、送金は却下されます。

## テストVASPからの受信送金

受信側をテストするには、`POST /v3/travel-rule/test-vasp/inbound/`でテストVASPから送金を送らせます。アプリケーション自身の[アドレス帳](https://docs.didit.me/ja/transaction-monitoring/travel-rule.md#ウォレットのアドレス帳)にあるウォレットを1つ指定してください。この送金は実際の送金と同じ受信経路で、アドレス帳、所有権モード、名前のルールに照らして判定されます。

```bash theme={null}
curl -X POST https://verification.didit.me/v3/travel-rule/test-vasp/inbound/ \
  -H "x-api-key: YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "beneficiary_wallet_address": "0xYourDepositWallet",
    "scenario": "accept",
    "reference": "sbx-inbound-001"
  }'
```

| フィールド | 説明 |
| - | - |
| `beneficiary_wallet_address` | 必須、最大128文字。自分のアドレス帳にあるウォレットを使用してください。それ以外のウォレットは`ON_HOLD`として記録されます。 |
| `scenario` | `accept`（デフォルト）: テストVASPはウォレットの保有者本人の名前を提示します。`name_mismatch`: どの保有者とも一致しない人物の名前を提示します。 |
| `chain`, `amount`, `currency` | 任意。デフォルトはそれぞれ`ETH`、`1`、`ETH`です。 |
| `reference` | 任意、最大128文字。同じ`reference`を再度送信すると最初のレスポンス（`201`）が返され、新たには何も記録されません。 |

`201`レスポンスには、`transaction_id`、`txn_id`、`scenario`、`travel_rule_status`、`detail`、`test_vasp: true`、および`travel_rule`送金が含まれます。本番アプリケーションでは`400`（`"The Didit Test VASP is only available on sandbox applications."`）が返され、それ以外の`scenario`では`400`、トラベルルールが無効なアプリケーションでは`409`が返されます。

| ウォレットの登録状況 | `accept` | `name_mismatch` |
| - | - | - |
| そのチェーン上に登録なし | `ON_HOLD` | `ON_HOLD` |
| [所有権モード](https://docs.didit.me/ja/transaction-monitoring/travel-rule.md#所有権検証モード)で所有権が証明されていない | `UNCONFIRMED_OWNERSHIP` | `UNCONFIRMED_OWNERSHIP` |
| 検証済み | `inbound_auto_accept`が有効な場合は`COMPLETED`、それ以外は`ON_HOLD` | `COUNTERPARTY_MISMATCHED_DATA`（名前のルールが`NONE`の場合は`accept`と同じ） |

判定待ちの送金は、実際の送金と同様に[`POST .../travel-rule/ownership/`](https://docs.didit.me/ja/management-api/travel-rule/confirm-ownership)で判定します。`{"confirmed": true}`で完了し、`{"confirmed": false}`で却下されます。

`POST /v3/transactions/`で自分で報告した入金は、テストVASPが送ったものではありません。送金元VASPを待つ`AWAITING_COUNTERPARTY`のままとなり、そのタイムラインには上記のエンドポイントが示されます。`confirmation_timeout_hours`の経過後に期限切れになるまで、Webhookは送信されません。本番アプリケーションと同様に、[`POST /v3/travel-rule/inbound/`](https://docs.didit.me/ja/management-api/travel-rule/register-inbound)では引き続き入金後の登録をアドレス帳に照らして確定できます。

## サンドボックスでのWebhook

サンドボックスアプリケーションでは、ステータスが変わるたびに`travel_rule.status.updated`が`"environment": "sandbox"`を含む形で送信されます。テストVASPが応答した送金には、さらに`rail: "TEST_VASP"`、`test_vasp: true`、`test_vasp_scenario`が含まれます。それ以外のサンドボックスの動作は[サンドボックスでのトランザクションモニタリング](https://docs.didit.me/ja/integration/sandbox-testing.md#サンドボックスでのトランザクションモニタリング)の説明どおりです。ルールは評価されず、`transaction.created`と`transaction.status.updated`は送信されず、何も請求されません。

## サンドボックスでは証明されないこと

* 実際の取引相手、ネットワークのメンバーシップ、またはDiditの公開TRPホストが機能すること。これらにはいずれも接続されません。
* ネットワークの認証情報が有効であること。接続済みのメンバーシップは、最初の本番環境でのやり取りによって証明されます。
* 実際のVASPの[ディレクトリ](https://docs.didit.me/ja/transaction-monitoring/travel-rule.md#ディレクトリ)ルート。サンドボックスアプリケーションでは、すべてのルートが`reason: sandbox_application`付きで`unavailable`となり、すべての行が`reachable: false`となります。

現在、本番環境で各レールがどこに到達できるかについては、[トラベルルールのネットワーク](https://docs.didit.me/ja/transaction-monitoring/travel-rule-networks.md)を参照してください。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.