ステーブルコインの発行者
ステーブルコインは、外部世界の資産に裏付けられたトークンです。ステーブルコインにより、ユーザは身近な通貨で取引を行うことができ、ブロックチェーンへの資金の出し入れを便利にすることができます。ステーブルコインの発行者は、これらのサービスを提供する代わりに、ステーブルコインの出金や送金にかかる手数料など、さまざまな方法で収益を得ることができます。
XRP Ledgerでは、誰でも任意の通貨コードを持つトークンを発行することができますが、ステーブルコインの価値は、対応する資産と交換できるという保証に基づきます。また、ステーブルコインの発行には、管轄区域によって異なる規制上の制約がある場合があります。これらの理由から、一般的に、ステーブルコインの発行には、信頼できる事業者が必要です。
注記: XRP Ledger上のステーブルコイン発行者は、以前は「ゲートウェイ」と呼ばれていました。
この記事では、ステーブルコインを発行する前に知っておくべき情報、ステーブルコイン発行者の設定に関わる選択肢のまとめ、XRP Ledgerとの技術統合を実装するためのリソースを提供します。
背景情報
トラストラインとトークン
ネイティブ暗号通貨であるXRPを除くXRP Ledgerのすべての資産は、 トークン として表され、その意味を定義する特定の発行者に結びつけられています。XRP Ledgerは、ユーザが望むトークンだけを保有し、受け取ることができるようにするために、 トラストライン と呼ばれる双方向のアカウントの関係を持つシステムを備えています。
何らかの外部システムの資金に裏打ちされたトークンは、 ステーブルコイン と呼ばれることがあります。これには、銀行口座の不換紙幣、別のブロックチェーン上の暗号通貨、あるいは他の種類の資産や価値の形態に裏打ちされたトークンが含まれます。「ステーブルコイン」という言葉は、トークンとそれが表す資産との交換レートが1:1(手数料を差し引いた値)で「安定」しているという考えに由来しています。
より詳細な情報はトラストラインとトークン発行をご覧ください。
XRP
XRPは、XRP Ledgerのネイティブ暗号通貨です。XRPは、どのXRP Ledgerのアドレスからでも、他のアドレスに直接送ることができます。これはXRPをブリッジ通貨として活用するのに便利です。
トークン発行者は、XRPを蓄積したり交換したりする必要はありません。準備金要件を満たし、ネットワークを通じてトランザクションを送信するコストを支払うために、少量のXRP残高を保有する必要があるだけです。XRP換算で10USドルあれば、取引量の多い発行者にとっては、少なくとも1年間のトランザクションコストを賄えるはずです。
より詳細な情報はXRPとは?や準備金、トランザクションコストをご覧ください。
流動性と取引
XRP Ledgerには分散型取引所があり、どのユーザもXRPとトークンを任意の組み合わせで交換するための注文を出し、それを約定することができます。分散型取引所は、アトミックなクロスカレンシー決済を可能にする流動性も提供します。
ステーブルコインの発行者は、分散型取引所を直接利用する必要はありませんが、すべてのトークンは自動的に取引可能になります。トークンが広く使われていれば、ユーザ同士で自然に取引され、他の人気アセットへの流動性が生まれるはずです。発行者は、特にそのトークンが新しい場合、XRPや他の人気のあるトークンに基準レートで流動性を提供したいと考えるかもしれません。ステーブルコインの発行者が流動性を提供する場合のベストプラクティスは、取引用と発行用で異なるアドレスを使用することです。
分散型取引所の詳細については、分散型取引所をご覧ください。
推奨されるビジネスプラクティス
XRP Ledgerにおけるステーブルコイン発行者のトークンの価値は、顧客が必要なときにトークンを換金できるという信頼に直結します。事業停止のリスクを減らすには、以下のベストプラクティスに従う必要があります。
- ネットワーク上のリスク要因を限定するため、発行・運用アドレスを分けて使用する。
- 銀行秘密保護法 など、管轄区域のマネーロンダリング防止規制に従う。これには通常、"Know-Your-Customer" (KYC) 情報 を収集する要件が含まれます。
- XRP Ledger財団のトークン発行者自己評価 を完了する。
- すべての方針と手数料を公表する。
ホットウォレットとコールドウォレット
XRP Ledgerでは、金融機関は秘密鍵の漏えいに関連するリスクを最小限に抑えるために、複数のXRP Ledgerアドレスを使用するのが一般的です。業界標準では、以下のような役割分担をしています。
- 1つの発行アドレス。「コールドウォレット」とも呼ばれます。このアドレスは、レジャーでの金融機関の会計上の関係の中心となるものですが、トランザクションの送信は可能な限り少なく抑えます。
- 1つ以上の運用アドレス。「ホットウォレット」とも呼ばれます。インターネットに接続した自動システムが、これらのアドレスへの秘密鍵を使用して、顧客やパートナーへの送金といった日常業務を実施します。
- オプションの待機アドレス。「ウォームウォレット」とも呼ばれます。信頼できる人間のオペレーターが、これらのアドレスを使用して運用アドレスに送金します。
主な記事: 発行アドレスと運用アドレス
手数料および収益源
ステーブルコイン発行者は、以下のような様々な方法で収益を得ることができます。
- 出金または入金の手数料。発行者は、XRP Ledgerに資金を出し入れするサービスに対して、少額の手数料(1%など)を請求することができます。この手数料はXRP Ledger上では請求されませんが、発行者がユーザに発行または入金する金額を決定する際に、独自のシステムで請求されます。
- 送金手数料。発行者は、ユーザがXRP Ledger内でステーブルコインを送金する際に請求する手数料をパーセンテージで設定することができます。この金額は、ユーザが取引を行うたびにXRP Ledgerから引き落とされ、発行者がレジャーの外で保有する資産の量を減らすことなく、ステーブルコインの発行者がレジャー内でユーザに対する債務の総額を減少させることができます。
- 付加価値による間接的な収益。ステーブルコインは、他の関連するサービスの導入を容易にすることができる便利な機能を提供します。
- 担保への利息。担保の利子について発行者は、ステーブルコインの担保となる資産を利子のつく口座で保有することができます。もちろん、顧客の引き出しに対応できる十分な資金に常にアクセスできるようにする必要があります。
- 金融取引所。事業者は分散型取引所で自社のステーブルコインを売買し、クロスカレンシー決済に流動性を与え、場合によっては利益を得ることができます。(すべての金融取引と同様に、利益は保証されません)。
手数料の選択
トークンの手数料はオプションです。高い手数料は、そのトークンが使用されたときに、より多くの収益を得ることができます。一方、手数料が高いと、顧客のサービス使用意欲を低下させます。他の発行者、特に同じ種類の資産を裏付けとするトークンを持つ他の発行者が請求する手数料や、送金手数料のようなXRP Ledger以外の伝統的な決済システムなどを考慮するとよいでしょう。正しい手数料体系を選択するためには、あなたの価格設定と市場が支払うことを望んでいる価格とのバランスをとることが重要です。
コンプライアンス指針
トークン発行者は、各国の規制を遵守し、適切な機関に報告する責任があります。規制は国や州によって異なりますが、以下のセクションで説明する報告やコンプライアンスの要件が含まれる場合があります。トークンを発行する前に、管轄区域やユースケースの要件について、専門家の法的助言を求める必要があります。以下のリソースは、背景情報として参考になる可能性があります。
Know Your Customer (KYC)
KYC(Know Your Customer)とは、金融機関が犯罪行為に利用されるのを防ぐために、顧客の身元を特定し確認するために行うデューデリジェンス活動のことです。金融用語でいう犯罪行為には、マネーロンダリング、テロ資金調達、金融詐欺、個人情報盗難などが含まれます。顧客は、個人、仲介者、企業のいずれでもあり得ます。
KYCプロセスは、一般的に次のことを目的としています。
-
顧客(組織や企業の場合は、実質的な所有者)の特定
-
取引関係の目的および意図された事項の理解
-
想定される取引活動の把握
KYCは、金融機関や関連企業にとって、リスク、特に法的リスクや風評リスクを軽減するために重要です。KYCプログラムが不十分であったり、存在しなかったりすると、金融機関や従業員個人に対して民事上・刑事上の罰則が科される可能性があります。
関連項目:
マネーロンダリング防止(AML)およびテロ資金調達対策(CFT)について
マネーロンダリングとは、資金源、性質、所有者を偽装することによって違法な資金を移動させ、合法的な金融チャネルや信頼できる機関を通じて資金を合法的にアクセスまたは分配できるようにするプロセスである。つまり、「不正なお金」を「不正でないお金」に変換することです。アンチマネーロンダリング(AML)とは、マネーロンダリングの発生を阻止するために作られた法律と手続きのことです。
テロ資金とは、テロ活動に従事する組織、またはテロやその拡散を支援する組織に対する資金の勧誘、収集、提供のことです。テロ資金調達対策(CFT)とは、テロ資金調達に使われる資金の流れを特定し、報告し、阻止するプロセスを指します。
関連項目:
資金源
金融機関は、不正な資金がシステムを通過するのを防ぐために、顧客の資金源が犯罪行為と関連しているかどうかを合理的に判断する必要があります。
すべての顧客の正確な資金源を特定することは、管理上実行不可能な場合があります。その結果、規制当局の中には、すべての口座について特定の規制やガイダンスを提供しない場合もある。しかし、特定の場合には、当局は金融機関に対して資金源を特定し報告することを求めることができる。FATFのガイダンスでは、マネーロンダリングやテロ資金供与のリスクが高い場合(一般に「リスクに応じたアプローチ」と呼ばれる)、金融機関は顧客の資金源を特定することを含むがこれに限定されないデューデリジェンスの強化を行うことを勧告しています。
不審行為報告書
金融機関は、資金が犯罪行為に関連している可能性があると疑われる場合、適切な規制当局に不審行為報告書/Suspicious Activity Report (SAR)を提出する必要があります。疑わしい活動を報告しなかった場合、金融機関は罰則を受ける可能性があります。
関連項目:
トラベルルール
トラベルルールとは、銀行機密保護法(BSA)に基づき、資金送金が米ドル換算で3,000ドル以上の場合、資金送金を行う金融機関に特定の情報を次の金融機関に転送することを義務付けるルールです。送金指示書には、以下の情報を記載する必要があります。
- 送信者の氏名
- 送信者の口座番号(使用する場合)
- 送信者の住所
- 送金者の金融機関の名称
- 送信指示の金額
- 送金注文の金額、送金注文の実行日
- 受取人の金融機関の名称
関連項目:
手数料の開示と資金の追跡
-
米国では、Dodd Frank 1073 Electronic Fund Transfer Act (Regulation E)により、銀行は米国発の国際決済について、為替レート、手数料、外国の指定受取人が受け取る金額など、コストと配送条件に関する情報を提供することが義務付けられています。「Pre-payment disclosure」は国際電子決済を依頼する際に消費者に提供され、「Receiption disclosure」は消費者が送金を許可する際に消費者に提供されます。
関連項目
-
欧州連合(EU)では、EU資金移動規制により、マネーロンダリングやテロ資金供与を検知、調査、防止するために、送金元の銀行、受取人の銀行、仲介銀行がトランザクションの詳細に支払人と受取人の特定の情報を含めることが義務付けられています。
関連項目:
外国資産管理局(OFAC)
外国資産管理局(OFAC)は、米国財務省の機関であり、米国の外交政策および国家安全保障上の目的を支援するために、経済制裁および貿易制裁を管理・執行しています。すべての米国人、米国法人およびその海外支店は、OFACの規制に従う必要があります。OFACの規制では、米国の金融機関は、OFACの許可または法令による明示的な除外がない限り、OFACが管理・執行する制裁または禁輸プログラム下の個人、団体、または国との取引およびその他の取引を行うことが禁止されています。
関連項目:
仮想通貨・マネーサービス事業に関する指針について
-
米国:
-
ヨーロッパ:
-
FATFの金融事業者向けガイダンス:
XRP Ledgerの統合
本書では、ACME Exchangeという架空の暗号資産取引所が、XRP Ledger上でEURステーブルコインを発行することを決定した例を用いて、ステーブルコインの全体プロセスや資金フローを説明します。
統合前
暗号資産取引所としてのACMEは、すでに何らかのシステム(アプリやウェブサイトなど)を使って顧客からの出金や入金を受け付けています。ACMEは、各ユーザが数種類の資産のそれぞれをどれだけ取引所に保有しているかを追跡するための「記録システム」を持っています。このようなシステムは、単純な貸借対照表でモデル化することができますが、実際には、データベースやアプリケーションサーバ、その他信頼性や情報セキュリティなどを確保するためのさまざまなインフラが必要でしょう。
以下の図では、ACME Exchangeは、Bobの所有する1ユーロ、Charlieの所有する2ユーロ、さらにACME自身の所有する2ユーロの資本を含み、手元に5ユーロでスタートする。Aliceが5ユーロを入金したので、ACMEは彼女をバランスシートに加え、最終的に10ユーロになります。
前提条件: XRP Ledgerと連携するために、ACMEのような取引所が以下の前提を満たしていることを想定しています。
- ACMEはすでに、何らかの外部の決済手段から入出金を受け付けるシステムを持っています。
- ACMEは、ACMEの記録システムに入金される前に、入金の処理を待ちます。
- ACMEは、その条件に従って、要求に応じて引き出しを行うのに十分な資金を常に手元に置いています。
- ACMEは、そのビジネスモデルの必要に応じて、手数料、最低出金額、入出金の遅延時間などを設定することができます。
XRP Ledgerへの送金
XRP Ledgerに お金を送る には、ACMEがユーザの代わりに保有している金額に対して、新しいステーブルコインを発行する必要があります。フロー例としては、以下のようなものがあります。
- AliceはACMEの残高のうち3ユーロをXRP Ledgerに送るよう依頼します。
- ACMEの記録システムでは、アリスの残高€3が差し引かれます。
- ACMEはXRP Ledgerのトランザクションを提出し、アリスのXRP Ledgerのアドレスに3ユーロを送ります。3ユーロはXRP Ledgerで、ACMEによって「発行」されたものとしてマークされます(3 EUR.ACME)。
前提条件:
- AliceはすでにACMEアカウントとは別にXRP Ledgerにアドレスを持っています。Aliceは、サードパーティのクライアントアプリケーション(ウォレット)を使って、自分のXRP Ledgerのアドレスを管理しています。
この後、Aliceは自分のEUR.ACMEをXRP Ledgerの他のユーザに任意で送金したり取引したりすることができます。ACMEはいつでも、XRP Ledgerに照会して、誰が現在そのトークンを保持しているかを確認することができます。
XRP Ledgerへ送金するための要件
そのためには、ACMEが満たさなければならない前提条件がいくつかあります。
- ACMEは、自社のステーブルコインを支える資金を確保します。その方法にはいくつか考えられます。
- ACMEは、ACMEの記録システムにおいてXRP Ledger用担保口座を作成する。
- ACMEは、XRP Ledgerに割り当てられた資金を、別の銀行口座に保管することもできます。
- ステーブルコインが暗号資産によって支えられている場合、ACMEはXRP Ledgerに割り当てられた資金を保持するための別のウォレットを作成し、その準備金を公に検証可能な証明とすることができます。
- ACME は、2つの別々のXRP Ledgerアドレスを管理する必要があります。詳細は発行・運用アドレスをご覧ください。
- ACMEは、顧客がそのトークンを送受信するために、その発行アドレスでDefault Rippleフラグを有効にする必要があります。
- Aliceは自分のXRP LedgerアドレスからACMEの発行アドレスへのアカウント関係(トラストライン)を作成する必要があります。彼女はACMEの発行アドレスを知っている限り、どのXRP Ledgerのクライアントアプリケーションからでもトラストラインの作成を行うことができます。
- 発行アドレスは、ACMEのウェブサイト上で顧客が見つけることができるように公表する必要があります。また、
xrp-ledger.toml
ファイルを使用して、自動化されたシステムに発行アドレスを公開することも出来ます。 - また、ACMEはペイメントを送る代わりに、XRP LedgerにAliceに小切手を送付することもできます。この場合、資金はすぐに移動しませんが、アリスが小切手を現金化する際、トークンが送付されると同時にトラストラインが作成されます。
- 発行アドレスは、ACMEのウェブサイト上で顧客が見つけることができるように公表する必要があります。また、
- ACMEは、AliceがACME上の自身の資金をXRP Ledgerへ送ることを依頼するためのユーザインターフェイスを作成しなければなりません。
- ACMEはAliceのXRP Ledger・アドレスを把握する必要があります。ACMEはAliceにインターフェイスの一部として彼女のXRP Ledgerアドレスを入力させる事も出来ますし、ACMEはAliceに彼女のXRP Ledgerアドレスを事前に入力し、確認するよう要求する事も出来ます。
XRP Ledgerからの送金
XRP Ledgerからの支払いは、発行者がXRP Ledgerで支払いを受け取り、発行者の記録システムでユーザに入金することを意味します。
XRP Ledgerから入金されるフロー例
- BobはACMEの発行アドレスに1ユーロのXRP Ledgerのトランザクションを送信します。
- ACMEの記録システムでは、ACMEはBobの残高に€1を入金します。
- その後、ボブはACME独自のインターフェースを使って、SEPAシステム(欧州)やACH(米国)を使った銀行預金の依頼、他のブロックチェーンでの支払いの受け取りなど、別の口座にお金を引き出すことができます。
XRP Ledgerにおける発行者への支払いは、単一通貨建てでもクロスカレンシー建てでも可能ですが、発行者が受け取る金額は通常、発行したステーブルコイン建てとなります。
XRP Ledgerへの入金の要件
XRP Ledgerに送信するための要件に加えて、ACMEがXRP Ledgerでの入金を処理するために満たすべき前提条件がいくつかあります。
- ACMEは、XRP Ledgerのアドレスへの入金を監視する必要があります。
- ACMEは、入金された支払いについて、その記録システムでどのユーザに入金すべきかを特定する必要があります。
- ACMEは、不明な入金を送信者に返金する必要があります。
- 一般的に、入金を識別する方法としては、宛先タグを使用することが推奨されています。
注意事項
XRP Ledgerとの間で支払いを処理することは、当然ながらいくつかのリスクを伴うものであり、発行者はこれらの処理を実施する際には細心の注意を払う必要があります。ステーブルコインの発行者としては、以下の点に注意する必要があります。
- 可逆的な預金から身を守る。XRP Ledgerの支払いは不可逆的ですが、多くのデジタル支払いはそうではありません。悪質な業者はこれを悪用して、XRP Ledgerでトークンを受け取った後に取引所からの出金をキャンセルして、現金(fiat money)を奪い取ろうとすることがあります。
- XRP Ledgerに送金する際は、トークンの発行元として必ず発行者自身のアドレスを指定してください。そうでない場合、他のアドレスが発行した同じ通貨を送金するパスを誤って使用する可能性があります。
- XRP Ledgerに支払いを送信する前に、支払いのコストを再確認してください。あなたの運用アドレスから顧客への支払いは、宛先金額とあなたが設定した送金手数料を超える費用は発生しないはずです。
- XRP Ledgerから支払いを処理する前に、顧客の身元を確認するようにしてください。これにより、匿名の攻撃者による不正行為が難しくなります。いずれにせよ、ほとんどのマネーロンダリング防止規制はこれを求めています。XRP Ledgerから入金するユーザは、XRP Ledgerで最初に出金ユーザと異なる可能性があるため、これは特に重要です。
- XRP Ledgerのトランザクションを送信する際には、信頼性の高いトランザクション送信のためのガイドラインに従ってください。
- 入金をしっかりと監視し、正しい金額を把握する。相手が部分支払いによる送金にもかかわらず、間違っても全額を入金しないように注意する必要があります。
- XRP Ledger内の負債と残高を追跡し、担保口座の資産と比較してください。一致しない場合は、相違点を解決するまで、引き出しと入金の処理を停止してください。
- あいまいな状況を避けることを推奨しています。
- 顧客が誤ってXRPを送らないように、発行アドレスとすべての運用アドレスに対して「Disallow XRP」フラグを有効にしてください。(民間取引所は通常XRPを取引するため、このフラグを設定するべきではありません。)
- 発行アドレスとすべての運用アドレスに対して、
RequireDest
フラグを有効にすることで、顧客が誤って入金先を示す宛先タグなしで支払いを送信することがないようにします。 - 誤って通貨を発行できないように、すべての運用アドレスで
RequireAuth
フラグを有効にする。
- 疑わしい行動や不正な行動を監視する。例えば、ユーザがXRP Ledgerに繰り返し資金を出し入れすることで、運用アドレスの残高を実質的に空にするサービス拒否攻撃などが考えられます。不審な行動に関与している顧客のアドレスのXRP Ledgerの支払いを処理しないことで、その顧客の利用を一時停止することも考えられます。
XRP Ledger上での取引
XRP Ledgerでトークンが送付された後、XRP Ledgerのユーザはトークンを自由に譲渡したり取引したりすることができる。このような状況では、いくつかの影響が生じます。
- 誰でもXRP Ledger上でEUR.ACMEを売買することができます。ACMEが複数のトークンを発行する場合、それぞれ別のトラストラインが必要です。
- これには、ACME Exchangeのシステムにアカウントを持っていないXRP Ledgerのユーザも含まれます。ACMEから資金を適切に引き出すには、ユーザはACMEに登録する必要があります。
- オプションとして、ACMEは認可トラストライン機能を使用して、XRP LedgerでEUR.ACMEを保有できる人を制限することができます。
- ACMEは、顧客が不正な行為をしたと判断した場合、XRP LedgerにおいてそのユーザのACMEに対する会計関係を凍結し、そのユーザが発行者のトークンを取引できないようにすることができます。
- XRP Ledgerのユーザが互いにEUR.ACMEを取引・送信する場合、ACMEによる介入は一切不要です。
- XRP Ledger上のすべての取引所と残高はすべて公開されています。
次の図は、AliceからCharlieに2EUR.ACMEを送るXRP Ledgerの支払いを表しています。ACMEはトランザクションが発生した後、いつでもその残高の更新を確認するためにXRP Ledgerに問い合わせることができます。
凍結
発行者は、規制要件を満たすために、XRP Ledgerの会計関係を凍結することができます。
- 発行者は、顧客アドレスに不審な動きが見られたり、発行者の利用規約に違反した場合に備えて、個別の会計関係を凍結することができます。
- 発行者は、重大なセキュリティ侵害や新しい発行アドレスへの移行に備え、発行したトークンをすべて凍結することもできます。
- さらに、発行者は、会計関係を凍結する能力を永久的に放棄することができます。これにより、発行者は「物理的なお金に近い」サービスを提供し続けることを顧客に保証することができます。
より詳細な情報はトークンの凍結をご覧ください。
認可トラストライン
XRP Ledgerの認可トラストライン機能(旧称「認可アカウント」)は、発行者がその発行者のトークンを保有できる人を制限することを可能にし、未知のXRP Ledgerのアドレスがトークンを保有できないようにします。
より詳細な情報は認可トラストラインをご覧ください
送信タグと宛先タグ
宛先タグは、XRP Ledgerの支払いの機能の一つで、支払いの受取人または宛先を示すために使用されます。例えば、XRP Ledgerの発行者への支払いは、どの顧客にその支払いが入金されるかを示すために、宛先タグを含むことができます。発行者は、発行者の記録システムにおいて、宛先タグと口座のマッピングを保持する必要があります。
同様に、送金タグは、支払の発信者または送信元を示します。最も一般的なのは、支払いの受取人が支払いを返金する場所を知るために、送金タグを含めることです。受信した支払いを返金する場合、受信した支払いの送金タグを送信(返金)する支払いの宛先タグとして使用します。
顧客が送金しようとするときに、オンデマンドで宛先タグを生成することができます。顧客のプライバシーを守るため、その宛先タグは予定金額の支払いに対してのみ有効であると考え、同じ宛先タグを再利用する他のトランザクションは返金するか無視する必要があります。
発行アドレスと運用アドレスで宛先タグを要求する設定を有効にすることで、顧客は支払いを送る際に宛先タグを使用して資金の入金先を示す必要が生まれます。
より詳細な情報は送信タグと宛先タグをご覧ください
技術的な内容
インフラストラクチャ
あなた自身のセキュリティとネットワークの安定性のために、XRP Ledgerを利用する事業者は、1つのバリデータを含む独自のXRP Ledgerサーバを実行すべきです。
APIとミドルウェア
XRP Ledgerへの接続方法は、ニーズや 既存のソフトウェアに応じて、いくつかのインターフェイスを使用することができます。
- HTTP / WebSocket APIは、XRP Ledgerのすべてのコア機能への低レベルのインターフェースとして使用することができます。
- クライアントライブラリは、いくつかのプログラミング言語で利用でき、XRP Ledgerにアクセスするための便利なユーティリティを提供します。
- その他、xApps などのツールも利用可能です。
- サードパーティのウォレットアプリケーションも、特に待機アドレスを担当する人間には便利かもしれません。
ツールのセキュリティ
XRP Ledgerのトランザクションを送信するときはいつでも、あなたの秘密鍵を使って署名する必要があります。秘密鍵は、あなたのXRP Ledgerアドレスを完全にコントロールすることができます。決して他人が運営するサーバにあなたの秘密鍵を送ってはいけません。自分のサーバを使うか、クライアントライブラリを使用してローカルでトランザクションに署名してください。
安全な設定の手順や例については、安全な署名の設定をご覧ください。
発行者のセットアップ
トークンの発行を開始する前に、XRP Ledgerアカウントで設定する必要がある設定がいくつかあります。これらの設定の例については、代替可能トークンを発行するチュートリアルをご覧ください。
設定すべき項目は以下の通りです。
設定 | 備考 |
---|---|
Default Ripple | 発行者は、このフィールドを必ず有効にする必要があります。 |
Deposit Authorization | 明示的に承認していないユーザからの入金をすべてブロックします。 |
Require Auth | トークンの保持を、明示的に承認したユーザに限定します。 |
Tick Size | 分散型取引所の取引所為替レートを四捨五入して、より迅速な価格決定を可能にします。 |
Transfer Fee | ユーザ同士がトークンを送信する際に、一定割合の手数料を徴収します。 |
Default Ripple
Default Rippleフラグは、トラストラインの残高をデフォルトでRipplingを許可するかどうかを制御します。Ripplingは顧客同士のトークンの送信や取引を可能にするものなので、発行者はその発行アドレスへのすべてのトラストラインでのRipplingを許可しなければなりません(MUST)。
顧客に発行アドレスへのトラストラインの作成を依頼する前に、発行者はそのアドレスのDefault Rippleフラグを有効にする必要があります。そうでない場合、発行者は、他のアドレスが作成した各トラストラインのNo Rippleフラグを個別に無効化する必要があります。
Deposit Authorization
Deposit Authorizationの設定は、以下のいずれかを行わない限り、アカウントへのすべての入金をブロックします。
- 事前に送信者を事前認可している。
- 資金を受け取るためにトランザクションを送信します。例えば、他人が開始したエスクローを終了させることができます。
Deposit Authorizationは、不要なXRPの支払いをブロックするのに最も有効です。なぜなら、発行元へのトラストラインを作成しない限り、既にトークンを受け取ることはできないからです。しかし、ステーブルコインの発行者としては、ステーブルコインをレジャー外の価値と交換するために、ユーザからの支払いを受け取ることができる必要があります。顧客を事前認可することはできますが、そうすると、顧客それぞれのアドレスについてレジャーにオブジェクトを格納する必要があり、準備金が大幅に増加します。
したがって、未知または制裁を受けたエンティティからお金を受け取ることに関する規制要件を満たすために必要でない限り、Deposit Authorizationはステーブルコインの発行者に推奨されません。
より詳細な情報はDeposit Authorizationをご覧ください。
Disallow XRP
Disallow XRPの設定は、XRP Ledgerのユーザが誤ってXRPをアドレスに送信することを阻止するために設計されています。これは、XRPの受信と保持を意図していないアドレスからの不必要な返金コストと労力を削減するものです。なぜなら、そうすることでアドレスがXRPを誤って送金した場合に返金されずにXRPを失う可能性があるからです。クライアントアプリケーションは、デフォルトでDisallow XRPフラグを尊重すべきですが、ユーザがそれを無視することを許可する場合もあります。
Disallow XRPフラグはオプションですが、顧客からXRPを受け取るつもりがない場合は、発行アドレスとすべての運用アドレスで有効にしておくとよいでしょう。
Require Auth
Require Authの設定は、最初にトラストラインを明示的に承認しない限り、発行したトークンをユーザが保持することをブロックします。XRP Ledger内で誰があなたのトークンを保持するかが重要である場合、規制要件を満たすためにこの設定を使用することができます。しかし、この設定は、ユーザへの承認がトークンを使用するためのボトルネックとなるため、トークンの有用性を低下させる可能性があります。
また、トラストラインを認可するたびに発行アドレスを使用する必要があります。多くのトラストラインを認可する必要がある場合、発行アドレスを頻繁に使用することになるため、発行アドレスのセキュリティが損なわれる可能性があります。(発行アドレスの使用頻度が少ない場合は、秘密鍵の保護を強化することができます。使用頻度が高ければ高いほど、その保護は大きな負担となります)。
より詳細な情報はAuthorized Trust Linesをご覧ください。
Tick Size
Tick Sizeは、分散型取引所で為替レートを計算する際に使用する小数点以下の桁数を制御する設定です。Tick Sizeを大きくすると、より精度が高くなり、さまざまな取引の金額で丸め込みが少なくなります。取引は主に取引レートに基づいてランク付けされるため、トレーダーがリストの上位にわずかな金額を提供することができるため、精度が高すぎると不都合になることがあります。Tick Sizeを小さくすると、オークションの最低入札額と同じような効果があり、無関係な小額を徐々に入札する時間と労力が省けます。しかし、Tick Sizeを小さくすると四捨五入が多くなり、取引コストが高くなります。また、四捨五入前は完全に一致するように見えた2つのオファーが、四捨五入後は一致しなくなるという意外な結果になることもあります。
Tick Sizeはアカウントレベルの設定であり、同じアドレスで発行されたすべてのトークンに適用されます。
Tick Sizeは取引レートの精度を制御するだけで、トークン自体の精度を制御するものではありません。ユーザは、トークンの発行者が設定したTic Sizeに関係なく、非常に大きな金額や非常に小さな金額を送ったり保有したりすることができます。
より詳細な情報はTick Sizeをご覧ください。
Transfer Fees
送金手数料の設定は、ユーザ同士がトークンを送金する際に、一定割合の手数料を請求するものです。送金手数料は、トークンを発行したり、発行アドレスで直接トークンを交換したりする場合には適用されません。(ユーザが発行アドレスに送金ときには適用されます。)同じアドレスから複数のトークンを発行する場合、すべてのトークンに対して同じ送金手数料が適用されます。
ユーザが送金手数料が設定されたトークンを送信すると、送信側から送金先金額に加えて送金手数料の金額が引き落とされますが、受信側には送金先金額のみが入金されます。手数料の金額はXRP Ledgerから「消える」のです。ステーブルコインの発行者としては、XRP Ledgerの外にある準備金にそれだけ自己資本が増える、言い換えれば、ユーザが送金手数料を支払うたびに担保として持っておく必要がある金額が減少することを意味します。
プロトコルレベルでは、送金手数料はアカウント設定のTransferRate
で定義され、これは10億から20億までの整数で指定されます。
より詳細な情報はTransfer Feesをご覧ください。
運用アドレスと待機アドレスによる送金手数料
運用アドレスや待機アドレスを含むすべてのXRP Ledgerアドレスは、トークンを送信する際に発行者の送金手数料がかかります。送金手数料をゼロ以外に設定した場合、運用アドレスや待機アドレスから支払いを行う際に、(送金手数料を支払うために)余分に送金しなければなりません。つまり、あなたのアドレスは、支払いを行うたびに、あなたの発行アドレスが作った残高を少し返金する必要があります。
トランザクションパラメータSendMax
を送信先のAmount
パラメータよりもTransferRate
設定に基づく割合で高く設定します。
注記: 発行アドレスから、または発行アドレスへ直接トークンを送信する場合、送金手数料は適用されません。発行アドレスは、常にそのトークンをXRP Ledgerの額面価格で受け入れなければなりません。つまり、顧客が発行アドレスに直接支払いを送る場合は送金手数料を支払う必要はありませんが、運用アドレスに送る場合は支払う必要があります。両方のアドレスで支払いを受け付ける場合、顧客が運用アドレスに支払いを送る際に、顧客が支払う送金手数料を補うために、記録システムで顧客に入金する金額を調整する必要がある場合があります。
例えば、次のようなものです。ACMEが送金手数料を1%に設定した場合、顧客のアドレスからACMEの発行アドレスに5 EUR.ACMEを届けるためのXRP Ledger支払いは、ちょうど5 EUR.ACMEの費用がかかります。しかし、顧客は5 EUR.ACMEをACMEの運用アドレスに届けるために、5.05 EUR.ACMEを送る必要があります。ACMEの運用アドレスへの支払いを顧客に入金する際、ACMEは運用アドレスに届けられた金額と送金手数料を顧客に入金し、顧客はACMEのシステムで5.05ユーロを受け取ることができます。
支払いに関するモニタリングの徹底
入金チェックを確実に行うために、発行者は以下のことを行う必要があります。
- 直近に処理したトランザクションとレジャーを記録しておく。そうすれば、一時的に接続ができなくなったとしても、どこまで遡ればいいのか分かります。
- 受信したすべての支払いの結果コードを確認する。一部の支払いは、失敗したにもかかわらず、スパム対策料金を請求するためにレジャーに登録されます。結果コード
tesSUCCESS
を持つトランザクションだけが、XRP以外の残高を変更できます。また、検証されたレジャーからのトランザクションのみが確定的なものとなります。 - 部分支払いに注意してください。partial paymentフラグを有効にした場合、0以上の金額であれば、少額でも「成功」と判断されることがあります。
- トランザクションに
delivered_amount
フィールドがあるかどうか確認してください。もし存在すれば、そのフィールドはDestination
アドレスに実際にどれだけの金額が支払われたかを示しています。 - xrpl.jsでは、
xrpl.getBalanceChanges()
メソッド を使って、各アドレスがいくら受け取ったかを見ることができます。場合によっては、これを異なるトラストラインで複数回に分けて表示することも可能です。
- トランザクションに
- トランザクションの中には、アドレスの1つへの直接の支払いやアドレスからの支払いでなくても、残高を変更するものがあります。たとえば、ACMEがゼロ以外の送金手数料を設定した場合、BobとCharlieがACMEのトークンを交換するたびに、ACMEの発行アドレスの未払い負債が減少します。
顧客の利便性を高めるため、運用アドレスと発行アドレスの両方への支払いを受け付けることをお勧めします。
追加の防止策として、新しいXRP Ledgerの各レジャーバージョンにおいて、発行アドレスの残高と内部会計システムにおける担保資金を比較することをお勧めします。発行アドレスのマイナス残高は、ネットワーク外のXRP Ledgerに割り当てた資産と一致するはずです。もし両者が一致しないのであれば、その不一致を解決するまでXRP Ledgerへの出入りの支払い処理を中断する必要があります。
- 残高を確認するには、
gateway_balances
メソッドを使用します。 - Transfer Feeが設定されている場合、他のXRP Ledgerアドレスがあなたのトークンを転送するたびに、XRP Ledger内でのあなたの負債はわずかに減少します。
受信したトランザクションの詳細を確認する方法については、トランザクションの結果を確認するをご覧ください。
顧客への支払いを送信
顧客のためにXRP Ledgerに支払いを送る自動システムを構築する場合、そのシステムが支払いを厳密に構築していることを確認する必要があります。悪意ある人物は常に、システムを騙して必要以上に支払いをさせる方法を見つけようとしています。
一般的に、ステーブルコインを送る場合はPayment トランザクションを使用します。初めてトークンを発行するのか、ホットウォレットから顧客へ送金するのかによって、細かい点が異なる部分もあります。注意すべき点は以下の通りです。
- 発行アドレスから新しいトークンを発行する場合、
SendMax
フィールドを省略する必要があります。そうしないと、悪意のあるユーザは、意図した宛先のAmount
だけでなく、SendMax
の全量を発行するように設定を変更することができます。 - ホットウォレットからトークンを送信する場合、転送手数料がゼロでない場合は
SendMax
を指定する必要があります。この場合、SendMax
フィールドにAmount
フィールドで指定した金額と送金手数料を設定します。(計算の精度がXRP Ledgerと正確に一致しない場合に備えて、少し切り上げるとよいでしょう)。例えば、Amount
フィールドに99.47 USDが指定され、送金手数料が0.25%のトランザクションを送信する場合、SendMax
フィールドを124.3375、または切り上げる場合は124.34 USDに設定すべきです。 Paths
フィールドを省略します。このフィールドは、発行元から直接送信する場合や、送信するトークンと受信するトークンの通貨コードと発行元が同じである限り、つまり同じステーブルコインである限り、ホットウォレットから設定する必要はありません。Paths
フィールドはクロスカレンシー支払いやより長いマルチホップ(rippling)支払いを対象としています。単純に経路探索を行い、トランザクションにパスを設定すると、直接の経路が利用できない場合、支払いは失敗するのではなく、より高価な遠回りのパスを取るかもしれません。悪意のあるユーザはこれを利用して利益を上げる可能性があります。tecPATH_DRY
の結果コードが表示された場合、通常、必要なトラストラインを顧客がまだ設定していないか、発行者のripplingの設定が正しく設定されていないことを意味します。
ステーブルコインであろうとなかろうと、XRP Ledger上でトークンを発行するための詳しいチュートリアルは、代替可能トークンの発行をご覧ください。
不明な入金の返金
アドレスが不明な支払いを受け取った場合、送金者に返金することが推奨されます。これは、資金を保管するよりも手間がかかりますが、顧客に対する誠意を示すことになります。オペレーターが手動で支払いを返金することもできますし、自動的に返金するシステムを構築することもできます。
返金の失敗を防ぐための第一の条件は、入金を適切に監視することです。顧客から送られてきた金額以上の金額を誤って返金してしまうことは避けなければなりません!(悪意のあるユーザは、部分支払いを送信して、脆弱なシステムを利用します。)
第二に、返金を部分支払い(Partial Payment)として送信することです。第三者はアドレス間のパスのコストを操作することができるので、部分支払いを使えば、XRP Ledger内の取引レートを気にすることなく、支払い金額の全額を手放すことができます。利用規約の一部に、支払い失敗時のポリシーを公表する必要があります。失敗された支払いを、運用中のアドレスまたは待機中のアドレスのいずれかから送信します。
部分支払いを送信するには、トランザクションのtfPartialPayment
フラグを有効にします。Amount
フィールドに受け取った金額を設定し、SendMax
フィールドは省略します。受信した支払いのSourceTag
値を、返金する支払いのDestinationTag
値として使用する必要があります。
2つのシステムで返金が繰り返されるのを防ぐため、送信する返金に新しい送信タグを設定することができます。もしシステムが予期しない支払いを受け取った場合で、その支払いの宛先タグが送信した返金の送信元タグと一致する場合は、その支払いを再び返金させないようにします。
信頼性の高いトランザクションの送信
トランザクションを確実に送信するためには、次の2つを有限の時間で実現することが必要です。
- 冪等性 - トランザクションは一度のみ処理されるか、全く処理されないべきである。
- 検証可能性 - アプリケーションはトランザクションの最終結果を確認することができる。
トランザクションを確実に送信するために、以下のガイドラインに従ってください。
- トランザクションの詳細を保存してから送信する。
LastLedgerSequence
パラメータを使用します。(多くのクライアントライブラリでは、デフォルトでこのパラメータが使用されます)。- レジャーインデックスがトランザクションの
LastLedgerSequence
パラメータ以下である検証済みレジャーにトランザクションが含まれていない場合、トランザクションを再送信します。
より詳細な情報は信頼性の高いトランザクションの送信をご覧ください。
xrp-ledger.toml ファイル
不正や混乱から守るために、どの通貨を発行し、どのXRP Ledgerのアドレスを管理しているかという情報を、xrp-ledger.toml
ファイルを使って公表することができます。この機械判読可能なフォーマットは、クライアントアプリケーションが処理するのに便利です。XRP Ledgerのバリデータを実行する場合、同じファイルでキーを公開することもできます。