# 取引所としてのXRPの上場 本書では、取引所がXRPを上場するために必要なステップを説明します。 ## Alpha Exchange 本書での説明目的で、架空の企業である *Alpha Exchange* を使用して、XRPを上場するために必要な手順の概要を説明します。本書では、Alpha Exchangeは以下のような取引所です。 * 現在BTC/USDの上場を専門としています * BTC/XRPとXRP/USDの取引ペアの追加を希望しています * すべての顧客の残高を保持しています * サポートしている各通貨の残高を保持しています ### ユーザの利益 Alpha Exchangeは、BTC/XRPおよびXRP/USDの取引ペアを上場することを希望しています。理由の1つとして、これらのペアがユーザにとって有用なものであることが挙げられます。特に、このサポートによりユーザは以下ができるようになります。 * XRP Ledger *から* Alpha Exchange *に* XRPを入金できます * Alpha Exchange *から* XRP Ledger *に* XRPを送金できます * XRPをBTCやUSDなどの他の通貨と交換できます ## XRPをサポートするための前提条件 XRPをサポートするために、Alpha Exchangeでは以下を行う必要があります。 * 新しい[アカウント](#%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88)を作成して維持します * [バランスシート](#%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9%E3%82%B7%E3%83%BC%E3%83%88)を作成して維持します 関連項目: * [コンプライアンス指針](/ja/docs/concepts/tokens/fungible-tokens/stablecoins/compliance-guidelines) — ゲートウェイと取引所は異なりますが、取引所は地域の規制に準拠し、適切な当局の監督下になければなりません。 * [注意事項](/ja/docs/concepts/tokens/fungible-tokens/stablecoins/precautions) ### Partial Payments 追加の前に、取引所は[Partial Payments](/ja/docs/concepts/payment-types/partial-payments)機能について知っておく必要があります。この機能を使用すると、XRP Ledgerのユーザは、`SendMax`を増やさずに、受取金額を減額して、支払いを正常に送信できます。この機能は、送信者側に追加費用が発生せず、[支払いの返金](/ja/docs/concepts/payment-types/bouncing-payments)に便利です。 #### Partial Paymentsに関する警告 [tfPartialPaymentフラグ](/ja/docs/references/protocol/transactions/types/payment#payment%E3%81%AE%E3%83%95%E3%83%A9%E3%82%B0)が有効にされると、`Amount`フィールド ***は受取り金額とは同じでなくなることがあります*** 。支払いのメタデータにある`delivered_amount`フィールドは、宛先アカウントが実際に受け取る通貨の金額を示しています。支払いを受信するときに、Amountフィールドの代わりに、`delivered_amount`を使用してアカウントで受信した金額を判断します。 この機能が悪用されることがあります。詳細については、[Partial Payments](/ja/docs/concepts/payment-types/partial-payments)をご覧ください。 ### アカウント XRPは、XRP Ledgerの *アカウント* ( *ウォレット* や *アドレス* とも呼ばれる)で保持されます。XRP Ledgerのアカウントは、例えばBitcoinのような、アカウントに経費がほとんどまたは一切かからない他のブロックチェーンの台帳とは異なります。XRP Ledgerでは、[アカウントの削除](/ja/docs/concepts/accounts/deleting-accounts)は可能が、各アカウントは個別の、他の人に送信することのできない、[XRPの準備金](/ja/docs/concepts/accounts/reserves)を保持する必要があります。このような理由から、Rippleでは利用機関に対し、必要のない過剰なアカウントを作成しないように勧めています。 Rippleが推奨するベストプラクティスに従い、Alpha Exchangeは、XRP Ledgerに最低2つのアカウントを作成する必要があります。シークレットキーが悪用された場合の危険を最小限にとどめるため、Rippleでは、[ *コールドアカウント* 、 *ホットアカウント* 、 *ウォームアカウント* ](/ja/docs/concepts/accounts/account-types)(それぞれコールドウォレット、ホットウォレット、ウォームウォレットとも呼ばれる)の作成をお勧めしています。コールド/ホット/ウォームのモデルは、セキュリティと利便性のバランスをとるためのものです。XRPを上場する取引所は、以下のアカウントを作成する必要があります。 * 大部分のXRPと顧客の資金を維持する[ *コールドウォレット* ](/ja/docs/concepts/accounts/account-types#%E7%99%BA%E8%A1%8C%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9)。取引所にとって、これはユーザが[預入れ](#%E5%8F%96%E5%BC%95%E6%89%80%E3%81%B8%E3%81%AExrp%E3%81%AE%E5%85%A5%E9%87%91)をするアドレスです。 セキュリティを最適化するため、このアカウントのシークレットキーはオフラインにする必要があります。 取引所のコールドウォレットが悪用されると、以下のような結果が生じるおそれがあります。 * 不正使用者が、コールドウォレットの全XRPにアクセスできます。 * マスターキーが悪用されると、不正使用者は(マスターキーを無効にし、新しいレギュラーキーや署名者リストを設定することにより)そのコールドウォレットを恒久的に制御できます。これにより、その不正使用者は今後そのコールドウォレットで受信するすべてのXRPも制御できるようになります。 * このような事態が発生した場合には、取引所は新しいコールドウォレットアドレスを作成し、顧客にその新しいアドレスを伝える必要があります。 * レギュラーキーや署名者リストが悪用された場合には、取引所はコールドウォレットの制御を取り戻すことができます。ただし、不正使用者の行為の中には、以下のように簡単に元に戻せないものもあります。 * 不正使用者が、コールドウォレットを使用してXRP Ledgerで通貨を発行しても、その通貨の価値はだれにも認められません。(取引所が明示的にゲートウェイでもあると示した場合を除きます)。 * 不正使用者が、アカウントにasfRequireAuthフラグを設定した場合。この設定は解除できません。ただし、これは通貨の発行のみに関係し、ゲートウェイではない取引所には影響しません。不正使用者がマスターキーで設定または設定解除したその他の設定は、元に戻すことができます。 * 顧客のXRP出金や入金を管理する、日常業務を遂行するための1つ以上の[ *ホットウォレット* ](/ja/docs/concepts/accounts/account-types#%E9%81%8B%E7%94%A8%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9)。例えば、ホットウォレットがあれば、取引所はこの種のXRPの自動送金を安全にサポートできます。出金リクエストにただちに応じるため、ホットウォレットはオンラインである必要があります。 不正使用されたホットウォレットによって発生するおそれのある結果についての詳細は、[Operational Account Compromise](/ja/docs/concepts/accounts/account-types#%E9%81%8B%E7%94%A8%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AE%E6%BC%8F%E3%81%88%E3%81%84)をご覧ください。 * オプションとして、コールドウォレットとホットウォレットの間で追加のセキュリティ層を提供する、1つ以上のウォームウォレット。ホットウォレットとは異なり、ウォームウォレットのシークレットキーはオンラインである必要はありません。さらに、ウォームウォレットのシークレットキーを複数の人に分散し、[マルチシグ](/ja/docs/concepts/accounts/multi-signing)を導入してセキュリティを強化することもできます。 不正使用されたウォームウォレットによって発生するおそれのある結果についての詳細は、[待機アドレスの漏えい](/ja/docs/concepts/accounts/account-types#%E5%BE%85%E6%A9%9F%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AE%E6%BC%8F%E3%81%88%E3%81%84)をご覧ください。 関連項目: * [発行アドレスと運用アドレス](/ja/docs/concepts/accounts/account-types) * [アカウントの作成](/ja/docs/concepts/accounts#%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90) * [準備金](/ja/docs/concepts/accounts/reserves) ### バランスシート 顧客のXRPを管理するため、Alpha Exchangeは各顧客のXRP残高と自身の保有残高を追跡する必要があります。このためには、Alpha Exchangeは別のバランスシートまたは会計システムを作成し、維持する必要があります。以下の表は、このバランスシートを説明するものです。 新しいXRP Ledgerアカウント( *Alpha Hot* 、 *Alpha Warm* 、 *Alpha Cold* )が、「*XRP LedgerのXRP残高*」表の*ユーザ*列に示されています。 「*Alpha ExchangeのXRP残高*」表は、新しい追加のバランスシートを表します。Alpha Exchangeのソフトウェアは、この会計システムでユーザのXRP残高を管理します。 table tr td b i XRP Ledgerの XRP残高 td td td b i Alpha Exchange のXRP残高 td td tr td b ユーザ td b 残高 td td b アカウント番号 td b ユーザ td b 残高 tr td Dave td 25,000 td td 123 td Alice td 0 tr td Edward td 45,000 td td 456 td Bob td 0 tr td Charlie td 50,000 td td 789 td Charlie td 0 tr td i Alpha Hot td 0 td td ... td td tr td i Alpha Warm td 0 td td td td tr td i Alpha Cold td 0 td td td td tr td ... td td td td td #### XRPの額 XRPの額は、XRP Ledgerで、符号なし整数の *drop* として示されます。1XRPは1,000,000 dropです。Rippleでは、ソフトウェアでXRP残高をdropの整数値として格納し、これらの数値に整数演算を実行することをお勧めしています。ただし、ユーザインターフェイスでは残高をXRPの単位で表示すべきです。 1drop(.000001XRP)はこれ以上分割できません。XRPと他の資産の間でFXレートを計算して表示するときには、この点にご注意ください。 詳細は、[通貨額の指定](/ja/docs/references/protocol/data-types/basic-data-types#%E9%80%9A%E8%B2%A8%E9%A1%8D%E3%81%AE%E6%8C%87%E5%AE%9A)をご覧ください。 #### 台帳上と台帳外 *Alpha Exchange* のような取引所では、XRPは「台帳上」または「台帳外」に存在します。 * **台帳上のXRP**: XRP保有者のパブリック[アドレス](/ja/docs/concepts/accounts/addresses)を指定し、パブリックのXRP Ledgerを通じて照会できるXRP。これらの残高の取引相手はXRP Ledgerです。詳細については、[XRP](/ja/docs/introduction/what-is-xrp)をご覧ください。 * **台帳外のXRP**: 取引所の会計システムに保持されている、取引所のインターフェイスで照会できるXRP。台帳外のXRP残高はクレジットペースです。取引相手は、XRPを保有している取引所です。 台帳外のXRP残高は、取引所の参加者の間で取引されます。このような取引をサポートするため、取引所は取引で使用可能な、 *台帳外* のXRP合計金額に等しい *台帳上* のXRP残高を保持する必要があります。 ## 資金の流れ 残りのセクションでは、ユーザによる入金、取引、XRP残高の換金の過程で、Alpha Exchangeが管理するアカウントを通じて資金がどのように流れるのかを説明します。資金の流れを解説するため、本書では、[「バランスシート」セクション](#%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9%E3%82%B7%E3%83%BC%E3%83%88)で使用した表を使用します。 取引所の一般的な資金の流れには、主要な4つステップが伴います。 1. [取引所へのXRPの入金](#%E5%8F%96%E5%BC%95%E6%89%80%E3%81%B8%E3%81%AExrp%E3%81%AE%E5%85%A5%E9%87%91) 2. [XRPの保有高のリバランス](#xrp%E3%81%AE%E4%BF%9D%E6%9C%89%E9%AB%98%E3%81%AE%E3%83%AA%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9) 3. [取引所からのXRPの出金](#%E5%8F%96%E5%BC%95%E6%89%80%E3%81%8B%E3%82%89%E3%81%AExrp%E3%81%AE%E5%87%BA%E9%87%91) 4. [取引所でのXRPの取引](#%E5%8F%96%E5%BC%95%E6%89%80%E3%81%A7%E3%81%AExrp%E3%81%AE%E5%8F%96%E5%BC%95) このリストには、取引所の[前提条件](#xrp%E3%82%92%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6)が含まれていません。 この時点で、 *Alpha Exchange* はXRP Ledgerの[ホットウォレット、ウォームウォレット、コールドウォレット](#%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88)を作成し、それらをバランスシートに追加しましたが、ユーザからの入金はまだ受け付けていません。 table tr td b i XRP Ledgerの XRP残高 td td td b i Alpha Exchange のXRP残高 td td tr td b ユーザ td b 残高 td td b アカウント番号 td b ユーザ td b 残高 tr td Dave td 25,000 td td 123 td Alice td 0 tr td Edward td 45,000 td td 456 td Bob td 0 tr td Charlie td 50,000 td td 789 td Charlie td 0 tr td i Alpha Hot td 0 td td ... td td tr td i Alpha Warm td 0 td td td td tr td i Alpha Cold td 0 td td td td tr td ... td td td td td ### 取引所へのXRPの入金 [台帳外のXRP残高](#%E5%8F%B0%E5%B8%B3%E4%B8%8A%E3%81%A8%E5%8F%B0%E5%B8%B3%E5%A4%96)を追跡するには、取引所は新しい[バランスシート](#%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9%E3%82%B7%E3%83%BC%E3%83%88)(または類似の会計システム)を作成する必要があります。以下の表は、ユーザがXRPを入金するにつれ、Alpha Exchangeの新しいバランスシートで発生する残高の変化を示すものです。 CharlieというユーザがAlpha Exchangeに50,000XRPを入金したいと希望しています。これには、以下のステップが伴います。 1. Charlieは50,000XRPの支払いを、Alpha Exchangeの[コールドウォレット](#%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88)に送信します。 a. Charlieは識別子(このケースでは`789`)を支払いに追加し、Alpha Exchangeにある自身のアカウントに関連付けます。これは、[ *宛先タグ* ](/ja/docs/concepts/transactions/source-and-destination-tags)と呼ばれます。(これを使用するには、Alpha Exchangeは、すべての入金でCharlieのような宛先タグを必要とするように、すべてのアカウントでasfRequireDestフラグをオンに設定している必要があります。詳細については、[AccountSet Flags](/ja/docs/references/protocol/transactions/types/accountset#accountset%E3%81%AE%E3%83%95%E3%83%A9%E3%82%B0)をご覧ください。) 2. Alpha Exchangeのソフトウェアは、受信される支払を検出し、`789`をチャーリーのアカウントの宛先タグとして認識します。 3. 受信される支払を検出すると、Alpha Exchangeのソフトウェアは、入金された50,000XRPがCharlieによって管理されるものであることを示すようにバランスシートを更新します。 Charlieは、これで、取引所で最大50,000XRPまで使用できます。例えば、XRPをBTCやその他のAlpha Exchangeでサポートされている通貨と取引するオファー(注文)を作成できます。 table tr td b i XRP Ledgerの XRP残高 td td td b i Alpha Exchange のXRP残高 td td tr td b ユーザ td b 残高 td td b アカウント番号 td b ユーザ td b 残高 tr td Dave td 25,000 td td 123 td Alice td 0 tr td Edward td 45,000 td td 456 td Bob td 0 tr td Charlie td s 100,000 br 50,000 td td 789 td Charlie td s 0 br 50,000 tr td td td td td td tr td Alpha Hot td 0 td td ... td td tr td Alpha Warm td 0 td td td td tr td Alpha Cold td s 0 br 50,000 td td td td tr td ... td td td td td ### 取引所でのXRPの取引 Alpha Exchangeユーザ(Charlieなど)は、Alpha Exchangeでクレジットベースの残高を取引できます。Alpha Exchangeは、これらの取引の作成時に、新しいバランスシートでユーザの残高を追跡する必要があります。これらの取引は、 *台帳外* であり、XRP Ledgerから独立しています。このため、この残高の変化はXRP Ledgerには記録されません。 XRPを自身のXRP Ledgerアカウントに保有している顧客は、XRP Ledgerに組み込まれた分散型取引所 を使用して、ゲートウェイによって発行された通貨を取引することもできます。XRP Ledger *上* での取引の詳細は、[オファーのライフサイクル](/ja/docs/concepts/tokens/decentralized-exchange/offers#%E3%82%AA%E3%83%95%E3%82%A1%E3%83%BC%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB)をご覧ください。 ### XRPの保有高のリバランス 取引所は、いつでもホットウォレットとコールドウォレットの間で残高を調整できます。各残高調整には、[トランザクションコスト](/ja/docs/concepts/transactions/transaction-cost)がかかりますが、それ以外にはすべてのアカウントの合計残高に影響はありません。台帳上の合計残高は、取引所で取引に使用できる合計残高を常に上回る必要があります。(XRP Ledgerのトランザクションコストをカバーできるだけの十分な余剰が必要です。) 以下の表は、(XRP Ledgerで[Paymentトランザクション](/ja/docs/references/protocol/transactions/types/payment)を介した)Alpha Exchangeのコールドウォレットとホットウォレットの間での80,000XRPの残高調整を示すものです。コールドウォレットから引き落としが行われ、ホットウォレットに入金が行われました。この支払いを逆にすると(ホットウォレットから引き落としが行われ、コールドウォレットに入金が行われる)、ホットウォレットの残高は減少します。このような残高調整は、取引所がオンラインホットウォレットにXRPを保持することに関連するリスクを抑えるために役立ちます。 table tr td b i Alpha Exchangeの 台帳外のXRP残高 td td td td b i Alpha Exchangeの台帳上のXRP残高 td tr td b アカウント番号 td b ユーザ td b 残高 td td b XRP Ledgerアカウント td b 残高 tr td 123 td Alice td 80,000 td td ホット td s 0 br 80,000 tr td 456 td Bob td 50,000 td td ウォーム td 0 tr td …. td td td td …. td tr td 789 td Charlie td 50,000 td td コールド td s 180,000 br 100,000 tr td td td td td td tr td ... td td td td ... td ### 取引所からのXRPの出金 出金により、取引所のユーザは、取引所の台帳外バランスシートから、XRP LedgerのアカウントにXRPを移動できます。 この例では、Charlieは、Alpha Exchangeから25,000XRPを出金します。これには、以下のステップが伴います。 1. Charlieは、Alpha ExchangeのWebサイトでプロセスを開始します。彼は、25,000XRPをXRP Ledgerの特定のアカウント(以下の表では、「Charlie XRP Ledger」という名前)に送金する指示を出します。 2. Charlieの指示に対応し、Alpha Exchangeは以下の作業を実行します。 A. その金額(25,000XRP)を台帳外バランスシートのCharlieのアカウントから引き出します。 B. XRP Ledgerで、Alpha ExchangeのホットウォレットからCharlieのXRP Ledgerアカウントに同じ金額(25,000XRP)の支払いを送信します。 table tr td b i XRP Ledger台帳上のXRP残高 td td td b i Alpha Exchangeの 台帳外のXRP残高 td td td td b i Alpha Exchangeの台帳上のXRP残高 td tr td b ユーザ td b 残高 td td b アカウント番号 td b ユーザ td b 残高 td td b XRP Ledgerアカウント td b 残高 tr td Dave td 25,000 td td 123 td Alice td 80,000 td td ホット td s 80,000 br 55,000 tr td Edward td 45,000 td td 456 td Bob td 50,000 td td ウォーム td 0 tr td …. td td td …. td td td td …. td tr td CharlieのXRP Ledger td s 50,000 br 75,000 td td 789 td Charlie td s 50,000 br 25,000 td td コールド td 100,000 tr td td td td td td td td td tr td ... td td td ... td td td td ... td