# Multi-Purpose Token (MPT)

Multi-Purpose Token(MPT)は、XRP Ledgerにおける[代替可能トークン](/ja/docs/concepts/tokens/fungible-tokens)の一種です。XRP Ledgerの[トラストライントークン](/ja/docs/concepts/tokens/fungible-tokens/trust-line-tokens)から得られた知見をもとに、効率と使いやすさを高める目的で設計されました。

MPTを使用することで、トークン化機能を数行のコードですぐに導入できます。1つの統合から多様なトークンの提供形態を実現でき、負荷の高い処理はXRP Ledgerブロックチェーンのコードが担います。

_Added by the [MPTokensV1 amendment](/resources/known-amendments#mptokensv1). (Enabled: 2025-10-01)_

## XRPLにおけるMPTの基本的な特性

以下の特性は、MPTを含むXRP Ledger上のすべての代替可能トークンに共通するものです。

- **誰でも発行者になれます。** すべてのアカウントがトークン発行者になる能力を備えていて、1つのアカウントから大量かつ多様なトークンを発行できます。発行者は[Paymentトランザクション](/ja/docs/references/protocol/transactions/types/payment)を送信することで、設定された上限の範囲内で、いつでも自分の発行分を追加発行できます。
- **発行者と保有者は別です。** 発行者は自分のトークンを保有できません。発行者にトークンを送ると、そのトークンは自動的にバーンされます。自分のトークンを保有したい発行者は、[運用アドレス](/ja/docs/concepts/accounts/account-types)（ホットウォレット）を別に用意してください。
- **保有を強制することはできません。** 保有者は、トークンを受け取る前に、保有する意思を示すトランザクションを送信する必要があります。


トラストライントークンとは異なり、個々のMPT発行は **MPT Issuance ID** で一意に識別されます。これは192ビットの数値で、人が読むことを想定していません。たとえば `00070C4495F14B0E44F78A264E41713C64B5F89242540EE255534400000000000000` のような値です。MPTには表示のされ方を左右するメタデータを設定できますが、通貨コードの存在や一意性が保証されるわけではありません。

## XRPLにおけるMPTの主な機能

MPTは分散型金融のために設計されているため、機関向けのユースケースを想定した設定と機能を最初から備えています。

- **オンチェーンメタデータ:** MPT発行ごとに、主要なプロパティがレジャー上で定義されます。誰でもそのデータをオンチェーンで参照でき、レジャーのトランザクションエンジンが特定のルールを自動的に適用します。MPTの設定は発行単位で定義されるため、設定の異なるトークンを発行する際に別のアカウントを用意する必要がなく、サイバー攻撃にさらされる範囲を最小限に抑えることができます。
- **譲渡制御:** MPTは、譲渡不可にすることも、承認されたユーザのみが保有できるようにすることもできます。
- **供給上限:** 発行数量の上限を設定すれば、流通量がその数を超えることはありません。
- **送金手数料:** 発行者は、ユーザ間でトークンを送金する際に、一定の割合の手数料を請求できます。
- **コンプライアンス管理:** 発行者は保有者の残高を凍結したり、トークンを回収したりできます。逆に、凍結も回収もできないMPT発行として設定することも可能です。
- **よりシンプルな概念モデル:** MPTは一方向で、残高の相殺がなく、保有者と発行者が明確に分かれています。加えて、複雑なエッジケースを引き起こすRipplingのような機能は、意図的に排除されています。


### オンチェーンメタデータ

すべてのMPT発行は、[MPTokenIssuanceエントリ](/ja/docs/references/protocol/ledger-data/ledger-entry-types/mptokenissuance)としてレジャーに定義された一連の主要プロパティを持ちます。このオブジェクトには、そのMPTに関する *機能的* なデータと *非機能的* なデータの両方が含まれます。

- 機能的なデータとは、送金手数料や最大数量といった設定です。トークンの譲渡可否などを制御するオンオフのフラグもここに含まれます。
- 非機能的なデータとは、アセットスケール（資産をどこまで細分できるか、つまり小数点をどこに置くか）と、最大1024バイトの任意のメタデータです。慣例として、メタデータは[XLS-89](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0089-multi-purpose-token-metadata-schema)で定義されたスキーマに従うJSONデータにします。


発行後も、MPTのメタデータ、送金手数料、発行フラグはデフォルトでは変更可能です。今後変更する予定がなければ、発行者はこれらのプロパティを変更不可と宣言できます。詳しくは[ダイナミックMPT](/ja/docs/concepts/tokens/fungible-tokens/mutable-mpts)を参照してください。

_Requires the [DynamicMPT amendment](/resources/known-amendments#dynamicmpt). (Open for Voting: 31.43%)_

#### メタデータスキーマ

1024バイトの上限に収めるため、MPTのメタデータは圧縮されたJSONキーを使用する必要があります。キーと対応するフィールドは以下のとおりです。

| フィールド名 | キー | 型 | 必須 | 説明 |
|  --- | --- | --- | --- | --- |
| ticker | `t` | 文字列 | はい | トークンを表すティッカーシンボル。英大文字(A-Z)と数字(0-9)のみ。6文字以内を推奨。 |
| name | `n` | 文字列 | はい | トークンの表示名。任意のUTF-8文字列を使用できる。 |
| desc | `d` | 文字列 | いいえ | トークンの短い説明。任意のUTF-8文字列を使用できる。 |
| icon | `i` | 文字列 | はい | トークンアイコンのURI。`ホスト名/パス` の形式（HTTPSとみなされる）か、他のプロトコルであれば完全なURIを指定する。 |
| asset_class | `ac` | 文字列 | はい | トークンを主たる目的と裏付けで分類します。詳しくは[アセットクラス](#%E3%82%A2%E3%82%BB%E3%83%83%E3%83%88%E3%82%AF%E3%83%A9%E3%82%B9)を参照してください。 |
| asset_subclass | `as` | 文字列 | いいえ | 任意のサブカテゴリ。`asset_class` が `rwa` の場合にのみ必要です。詳しくは[アセットサブクラス](#%E3%82%A2%E3%82%BB%E3%83%83%E3%83%88%E3%82%B5%E3%83%96%E3%82%AF%E3%83%A9%E3%82%B9)を参照してください。 |
| issuer_name | `in` | 文字列 | はい | トークンを発行する主体の名称。任意のUTF-8文字列を使用できる。 |
| uris | `us` | 配列 | いいえ | ウェブサイト、ドキュメント、ソーシャルメディアなど、関連URIのリスト。詳しくは[URI](#uri)を参照してください。 |
| additional_info | `ai` | オブジェクトまたは文字列 | いいえ | 金利、満期日、期間など、トークンの重要な詳細を自由に記述するフィールド。有効なJSONオブジェクトかUTF-8文字列を使用できる。 |


##### アセットクラス

`asset_class` フィールドは、トークンを主たる目的と裏付けで分類します。この分類があると、アプリケーション側でトークンの性質と想定用途を把握しやすくなります。

| カテゴリ | 定義 |
|  --- | --- |
| `rwa` | 現実資産(RWA)を表すトークン。物理資産やオフチェーンの金融資産に対する、法的に強制可能な請求権から価値を得る。 |
| `memes` | 本質的な裏付けやユーティリティの主張を持たない、コミュニティ主導のトークン。主にインターネット文化や投機によって生み出される。 |
| `wrapped` | 他のブロックチェーンの資産を表すトークン。通常はブリッジやカストディアンによって1対1で裏付けられる。 |
| `gaming` | ゲームや仮想世界で使用されるトークン。ゲーム内通貨やアセット、報酬を表すことが多い。 |
| `defi` | DeFiプロトコルに固有の、あるいはその中で使用されるトークン。ガバナンストークン、DEXトークン、レンディング資産などを含む。 |
| `other` | 定義されたカテゴリのどれにも明確には当てはまらないトークン。実験的、テスト用、他に該当のない独自のユースケースを持つトークンを含む場合がある。 |


##### アセットサブクラス

`asset_class` に `rwa` を設定した場合、`asset_subclass` を指定してより細かく分類できます。トークンをどの種類の現実資産が裏付けているのか、そしてどの法的あるいは規制上の枠組みが適用されうるのかを示します。

| サブクラス | 定義 |
|  --- | --- |
| `stablecoin` | 安定した価値に連動するトークン。通常は米ドルなどの法定通貨に連動し、現金や国債、暗号資産の担保などの準備金で裏付けられる。 |
| `commodity` | 金や銀、石油といった実物コモディティを表すトークン。オフチェーンの準備資産と償還可能な形か法的に結び付いていることが多い。 |
| `real_estate` | 不動産の所有権や請求権を表すトークン。分割された不動産持分やREIT型の商品を含む。 |
| `private_credit` | 民間主体の債務を表すトークン。ローン、請求書、売掛債権など。 |
| `equity` | 企業の所有持分を表すトークン。伝統的な株式や持分商品に相当する。 |
| `treasury` | 米国財務省短期証券や国債といった、政府債務証券に裏付けられたトークン。 |
| `other` | あらかじめ定義されたカテゴリに当てはまらないトークン。実験的、ハイブリッド、あるいは新しく登場した現実資産の類型を含む。 |


##### URI

`us` 配列には、URIオブジェクトのリストを格納します。各オブジェクトはURIリンク、カテゴリ、および人間が読みやすい表示名を持ちます。

| フィールド名 | キー | 型 | 必須 | 説明 |
|  --- | --- | --- | --- | --- |
| uri | `u` | 文字列 | はい | 関連リソースへの `ホスト名/パス` または完全なURIリンク。 |
| category | `c` | 文字列 | はい | 提供するリンクのカテゴリ。指定できる値は `website`、`social`、`docs`、`other`。 |
| title | `t` | 文字列 | はい | 人間が読みやすい、リンクの表示名。 |


#### JSONメタデータの例

米国債を裏付けとするトークンのメタデータの例です。

```json
{
  "t": "TBILL",
  "n": "T-Bill Yield Token",
  "d": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.",
  "i": "example.org/tbill-icon.png",
  "ac": "rwa",
  "as": "treasury",
  "in": "Example Yield Co.",
  "us": [
    {
      "u": "exampleyield.co/tbill",
      "c": "website",
      "t": "Product Page"
    },
    {
      "u": "exampleyield.co/docs",
      "c": "docs",
      "t": "Yield Token Docs"
    }
  ],
  "ai": {
    "interest_rate": "5.00%",
    "interest_type": "variable",
    "yield_source": "U.S. Treasury Bills",
    "maturity_date": "2045-06-30",
    "cusip": "912796RX0"
  }
}
```

### 譲渡制御

MPTには、以下のフラグを調整することで様々な水準の譲渡制御を設定できます。

- **Can Transfer:** 有効になっている場合、保有者が相互にトークンを譲渡できます。無効の場合、そのMPTは譲渡不可となり、発行者に直接送り返すことしかできません。
- **Require Auth:** 有効になっている場合、保有者はこのトークンを保有する前に発行者から明示的な承認を得る必要があります。つまり、許可リスト方式になります。無効の場合、保有を望む人は誰でも保有できます。
- **Can Trade:** 有効にすると、保有者は分散型取引所でトークンを取引できます。ただし、DEXでのMPT取引は現時点では実装されていません。
- **Can Escrow:** 有効になっている場合、保有者はトークンをエスクローに預けることができます。無効の場合、そのトークンはエスクローできません。 _Added by the [TokenEscrow amendment](/resources/known-amendments#tokenescrow). (Enabled: 2026-02-12)_


### 供給上限

MPTには供給上限を設定できます。設定すると、流通しているトークンの数がこの値を超えることはありません。

これは、これまでに発行された累計のトークン数に対する上限ではない点に注意してください。保有者が発行者にトークンを送り返して「バーン」した場合、発行者は流通量が上限に達するまで追加で発行できます。

発行者は自分のトークンを保有できませんが、バーンはトークンを発行者に返すことと同じであるため、発行者が保有する量は「供給上限から現在の流通量を引いた値」だと考えることもできます。

### 送金手数料

MPTには送金手数料を設定できます。設定すると、保有者が相互にトークンを送金する際に、割合で手数料を支払うことになります。この手数料は、発行者に直接送る場合にはかからず、譲渡不可のトークンには設定できません。

MPTの送金手数料は **0** から **50.000%** までの範囲で、**0.0001%** 刻みで指定します。手数料は届ける金額に上乗せして課され、トークンをバーンする形で支払われます。たとえば送金手数料0.5%で$100.00を届ける場合、送金者は$100.50を支払い、受取人は$100.00を受け取り、残りの$0.50がバーンされます。

### コンプライアンス管理

MPTには、[譲渡制御](#%E8%AD%B2%E6%B8%A1%E5%88%B6%E5%BE%A1)に加えて、トークンを管理するための制御を設定できます。具体的には以下のものです。

- 発行者は、特定の保有者の残高をロックおよび解除できます。ロックされている間、その残高は発行者への直接の支払いを除いて増減しません。トラストライントークンにおける[ディープフリーズ](/ja/docs/concepts/tokens/fungible-tokens/deep-freeze)と機能的に同等です。
- 発行者は、特定の発行分のすべてのMPTをグローバルにロック（フリーズ）することもできます。
- 発行者は、特定の保有者から資金を回収（クローバック）できます。トークンを失効させたい場合や、保有者がアカウントの鍵を紛失してトークンを再割り当てする場合に使えます。


これらの操作を実行する権限は、MPT発行の2つのフラグで制御します。

- **Can Lock:** 有効にすると、発行者はMPTを個別にもグローバルにもロックできます。無効の場合、そのMPTはいかなる形でもロックやフリーズができません。
- **Can Clawback:** 有効にすると、発行者は保有者からトークンを回収できます。無効の場合、そのMPTは回収できません。


### よりシンプルな概念モデル

トラストライントークンの双方向モデルでは、トランザクション処理の途中で2人のユーザが発行者と保有者の役割を交代できるため、複雑さや厄介なエッジケースの原因となり、MPTの設計では意図的に除外されています。

MPTの発行はそれぞれ完全に独立しており、トークン間の連鎖的な影響はなく、保有者間でのみ移転が行われます。MPTの残高は常に正の値で、浮動小数点演算ではなく固定小数点精度の整数を使用します。

ただし、MPTも[Partial Payment](/ja/docs/concepts/payment-types/partial-payments)には対応しています。MPTの支払いを処理する際は、Partial Paymentに関連する問題を回避する必要があります。

## 発行数の制限

作成できるMPT発行の数そのものに上限を設ける意図はありません。ただし、技術的には、厳格な制限と緩やかな制限が間接的にかかります。

- MPT発行を定義するレジャーエントリは、発行者の[所有者準備金](/ja/docs/concepts/accounts/reserves#%E6%89%80%E6%9C%89%E8%80%85%E6%BA%96%E5%82%99%E9%87%91)の対象となるオブジェクト1つとしてカウントされます。そのため、発行者は、MPT発行1件につき0.2 XRPを確保しておく必要があります。
- 各保有者のMPT残高は、保有者と発行者の双方の[オーナーディレクトリ](/ja/docs/references/protocol/ledger-data/ledger-entry-types/directorynode)で追跡されます。オーナーディレクトリに格納できる項目数の上限は非常に大きいものの有限であり、これが発行できるMPT発行の数に対する厳格な上限になります。


MPTの残高を保持するデータ型の有効範囲は **0** から **263-1** まで（両端を含む）の整数です。1箇所に保持できる残高は最大でこの範囲までとなります。ただし、複数の保有者がそれぞれこの量を保有することは可能であるため、流通総量はこれより大きくなりえます。MPT発行の供給上限を設定する場合も、この範囲に収まる必要があります。

## 関連項目

- **コンセプト:**
  - [ダイナミックMPT](/ja/docs/concepts/tokens/fungible-tokens/mutable-mpts)
- **ユースケース:**
  - [資産担保型Multi-Purpose Tokenの作成](/ja/docs/use-cases/tokenization/creating-an-asset-backed-multi-purpose-token)
- **チュートリアル:**
  - [Multi-Purpose Token(MPT)の送信](/ja/docs/tutorials/payments/send-an-mpt)
- **リファレンス:**
  - [MPToken](/ja/docs/references/protocol/ledger-data/ledger-entry-types/mptoken)
  - [MPTokenIssuance](/ja/docs/references/protocol/ledger-data/ledger-entry-types/mptokenissuance)
  - [MPTokenAuthorize](/ja/docs/references/protocol/transactions/types/mptokenauthorize)
  - [MPTokenIssuanceCreate](/ja/docs/references/protocol/transactions/types/mptokenissuancecreate)
  - [MPTokenIssuanceDestroy](/ja/docs/references/protocol/transactions/types/mptokenissuancedestroy)
  - [MPTokenIssuanceSet](/ja/docs/references/protocol/transactions/types/mptokenissuanceset)