# Deposit Authorization Deposit Authorizationは、XRP Ledgerの[アカウント](/ja/docs/concepts/accounts)のオプション機能です。Deposit Authorizationが有効な場合、トランザクションはそのトランザクションの送信者がアカウント自体でない限り、アカウントへはどのような資産も送信できません。Deposit Authorizationのアカウントは、次の2つの方法でのみ入金することができます。 - [事前承認](#%E4%BA%8B%E5%89%8D%E6%89%BF%E8%AA%8D)されたアカウントから。 - トランザクションを送信して資金を受け取ることにより。例えば、Deposit Authorizationが設定されたアカウントは、他のアカウントによって開始された[エスクロー](/ja/docs/concepts/payment-types/escrow)を完了することができます。 デフォルトでは、新しいアカウントではDepositAuthが無効になっています。 DepositAuth ## 背景 金融サービスの規制やライセンスによっては、企業や組織に対して、受領するすべてのトランザクションの送信者を把握するよう義務付けています。これは、自由に生成できる偽名で参加者を識別し、デフォルトですべてのアドレスからあらゆる宛先への支払いを可能とするXRP Ledgerのような分散型システムとっては課題となります。 Deposit Authorizationフラグにより、XRP Ledgerを使用するユーザが分散型レジャーの基本的な特性を変えずにこのような規制に準拠するためのオプションを採用しました。Deposit Authorizationが有効な場合、アカウントはトランザクションを送信することで明示的に承認した資金のみを受領できます。Deposit Authorizationを使用するアカウントの所有者は、アカウントに資金を入金するトランザクションを送信する *前に* 、資金の送金元の確認に必要なデューディリジェンス(確認調査)を実施できます。 Deposit Authorizationを有効にすると、[Checks](/resources/known-amendments#checks)、[Escrow](/ja/docs/concepts/payment-types/escrow)、および[Payment Channel](/resources/known-amendments#paychan)から資金を受領できます。このような「二段階」トランザクションモデルでは、最初に送金元は資金の送金を承認するトランザクションを送信し、次に送金先は資金受領を承認するトランザクションを送信します。 Deposit Authorizationが有効になっている場合に[Paymentトランザクション](/ja/docs/references/protocol/transactions/types/payment)から資金を受領するには、このような支払の送金元を[事前承認](#%E4%BA%8B%E5%89%8D%E6%89%BF%E8%AA%8D)する必要があります。 ## 推奨される使い方 Deposit Authorizationを最大限に活用するため、以下の実施を推奨します。 - XRP残高が常に最低[必要準備金](/ja/docs/concepts/accounts/reserves)を上回るようにする。 - DefaultRippleフラグをデフォルトの状態(無効)にしておく。トラストラインに対して[Rippling](/ja/docs/concepts/tokens/fungible-tokens/rippling)を有効にしない。TrustSetトランザクションを送信するときには常に[`tfSetNoRipple`フラグ](/ja/docs/references/protocol/transactions/types/trustset)を使用する。 - [オファー](/ja/docs/references/protocol/transactions/types/offercreate)を行わない。このようなトランザクションの実行にあたり、消費される一致オファーを事前に把握することは不可能です。 ## 詳細なセマンティクス Deposit Authorizationが有効化されているアカウントの特徴は次のとおりです。 - [Paymentトランザクション](/ja/docs/references/protocol/transactions/types/payment)の送信先には**できません**。ただし**以下の例外**は除きます。 - 送金先により、支払の送金元が[事前承認](#%E4%BA%8B%E5%89%8D%E6%89%BF%E8%AA%8D)されている場合。 - アカウントのXRP残高がアカウントの最低[必要準備金](/ja/docs/concepts/accounts/reserves)以下で、XRP PaymentのAmountがアカウントの最低準備金(現時点では10XRP)以下である場合は、このアカウントを送金先に指定できます。これにより、アカウントがトランザクションを送信することも、XRPを受領することもできずに操作不可能な状態になるのを防ぎます。この場合、アカウントの所有者の準備金は関係ありません。 - **以下に該当する場合にのみ**[PaymentChannelClaimトランザクション](/ja/docs/references/protocol/transactions/types/paymentchannelclaim)からXRPを受領できます。 - PaymentChannelClaimトランザクションの送金元がPayment Channelの送金先である場合。 - PaymentChannelClaimトランザクションの送金先がPaymentChannelClaimの送金元を[事前承認している](#%E4%BA%8B%E5%89%8D%E6%89%BF%E8%AA%8D)場合。 - **以下に該当する場合にのみ**[EscrowFinishトランザクション](/ja/docs/references/protocol/transactions/types/escrowfinish)からXRPを受領できます。 - EscrowFinishトランザクションの送金元がEscrowの送金先である場合。 - EscrowFinishトランザクションの送金先がEscrowFinishの送金元を[事前承認している](#%E4%BA%8B%E5%89%8D%E6%89%BF%E8%AA%8D)場合。 - [CheckCash](/ja/docs/references/protocol/transactions/types/checkcash)トランザクションを送信してXRPまたはトークンを受領**できます**。 - [OfferCreateトランザクション](/ja/docs/references/protocol/transactions/types/offercreate)を送信してXRPまたはトークンを受領**できます**。 - 即時には完全に実行されないOfferCreateトランザクションがアカウントから送信される場合、このアカウントは、後でオファーが他のアカウントの[Payment](/ja/docs/references/protocol/transactions/types/payment)トランザクションと[OfferCreate](/ja/docs/references/protocol/transactions/types/offercreate)トランザクションによって消費される時点で、注文済みXRPとトークンのリマインダーを受信する**ことがあります**。 - アカウントが[NoRippleフラグ](/ja/docs/concepts/tokens/fungible-tokens/rippling)を有効にせずにトラストラインを作成している場合、またはDefaultRippleフラグを有効にして通貨を発行した場合は、アカウントはRipplingの結果として、[Paymentトランザクション](/ja/docs/references/protocol/transactions/types/payment)でそれらのトラストラインのトークンを受領**できます**。このようなトランザクションの送金先にすることはできません。 - 一般的に、以下のすべての条件に該当する場合は、XRP LedgerのアカウントはXRP LedgerでXRP以外の通貨を受領**できません**。(このルールは、DepositAuthフラグに特有のものではありません。) - アカウントにより、ゼロ以外の限度を指定したトラストラインが作成されていない。 - アカウントが、その他のアカウントにより作成されたトラストラインで通貨を発行していない。 - アカウントがまだオファーを出していない。 以下の表に、トランザクションタイプ別にDepositAuthが有効または無効な状態での入金の可否をまとめました。 table thead tr th th DepositAuth Disabled th th DepositAuth Enabled tr th Transaction Type th Sent by Destination th Sent by Others th th Sent by Destination th Sent by Others th Sent by Preauthorized Others tbody tr td AccountSet td (This transaction type never sends money.) tr td CheckCancel td (This transaction type never sends money.) tr td CheckCash td OK td No Permission td td OK td No Permission td No Permission tr td CheckCreate td (This transaction type never sends money.) tr td EscrowCancel td Can return XRP from an expired escrow tr td EscrowCreate td (This transaction type can only debit XRP, not credit it.) tr td EscrowFinish td OK td OK td td OK td No Permission td OK tr td OfferCancel td This transaction type never sends money. tr td OfferCreate td OK td Only if account previously created a matching offer td td OK td Only if account previously created a matching offer td Only if account previously created a matching offer tr td Payment div (If account has more than the minimum XRP reserve, enables No Ripple on all trust lines, and places no offers) td Cross-currency only td OK td td Cross-currency only sup 1 td No Permission td OK tr td Payment div (If account XRP balance is below the minimum XRP reserve) td Cross-currency only td OK td td Cross-currency only sup 1 td XRP payments up to the minimum reserve td OK tr td Payment div (If account has any trust lines with No Ripple disabled) td Cross-currency only td OK td td Cross-currency only sup 1 td Balance changes from rippling td OK tr td Payment div (If account has placed offers) td Cross-currency only td OK td td Cross-currency only sup 1 td Balance changes from executing offers td OK tr td PaymentChannelClaim td OK td OK td td OK td No Permission td OK tr td PaymentChannelCreate td (This transaction type can only debit XRP, not credit it.) tr td PaymentChannelFund td Can return XRP when closing a channel created by self tr td SetRegularKey td (This transaction type never sends money.) tr td SignerListSet td (This transaction type never sends money.) tr td TrustSet td (This transaction type never sends money.) p sup 1 : The DepositPreauth amendment fixes a bug in DepositAuth which causes cross-currency payments to oneself to fail if the account requires deposit authorization. If the DepositPreauth amendment is not enabled, these cases result in "No Permission" instead. style .depauth-txtype { font-weight: bold; } .depauth-status { text-align: center; } .depauth-na { background-color: var(--gray-dark); color: var(--white); } .depauth-ok { background-color: var(--success); color: black; } .depauth-no { background-color: var(--danger); color: black; } .depauth-maybe { background-color: var(--warning); color: black; } .depauth-subtype { font-weight: normal; font-size: 8pt; } .depauth-spacer { background-color: var(--secondary); padding: 2px !important; font-size: 2px; border: 1px solid var(--secondary); } ## Deposit Authorizationの有効化または無効化 アカウントのDeposit Authorizationを有効にするには、`SetFlag`フィールドに`asfDepositAuth`の値(9)を設定した[AccountSetトランザクション](/ja/docs/references/protocol/transactions/types/accountset)を送信します。アカウントのDeposit Authorizationを無効にするには、`ClearFlag`フィールドに`asfDepositAuth`の値(9)を設定した[AccountSetトランザクション](/ja/docs/references/protocol/transactions/types/accountset)を送信します。AccountSetフラグについての詳細は、[AccountSetフラグ](/ja/docs/references/protocol/transactions/types/accountset)をご覧ください。 ## AccountのDepositAuthの有効化の確認 アカウントのDeposit Authorizationの有効化の状態を確認するには、[account_infoメソッド](/ja/docs/references/http-websocket-apis/public-api-methods/account-methods/account_info)を使用してアカウントを調べます。`Flags`フィールド(`result.account_data`オブジェクト)の値を、[AccountRootレジャーオブジェクトのビット単位フラグ](/ja/docs/references/protocol/ledger-data/ledger-entry-types/accountroot)と比較します。 `Flags`値と`lsfDepositAuth`フラグ値(0x01000000)のビット単位のANDの結果がゼロ以外の場合、アカウントではDepositAuthが有効になっています。結果がゼロの場合、アカウントではDepositAuthが無効になっています。 ## 事前承認 DepositAuthが有効なアカウントは、特定の送金元を *事前承認* することにより、DepositAuthが有効になっていても、これらの送金元からの支払を受領することができます。これにより、特定の送金元からの資金の直接送金が可能となり、受取人はトランザクションごとに個別にアクションを実行する必要がなくなります。事前承認はDepositAuthの使用にあたり必須の要件ではありませんが、事前承認により特定の操作を実行しやすくなります。 事前承認は通貨に依存しません。特定の通貨のみについてアカウントを事前承認することはできません。 特定の送金元を事前承認するには、`Authorize`フィールドに事前承認する別のアカウントのアドレスを指定した[DepositPreauthトランザクション](/ja/docs/references/protocol/transactions/types/depositpreauth)を送信します。事前承認を取り消すには、当該アカウントのアドレスを`Unauthorize`フィールドに指定します。通常どおり、`Account`フィールドには自分自身のアドレスを指定します。現在DepositAuthを有効にしていない場合でも、アカウントを事前承認または承認解除できます。他のアカウントに設定した事前認証ステータスは保存されますが、DepositAuthを有効にしない限り、このステータスの影響はありません。アカウントがアカウント自体を事前認証することはできません。事前認証は一方向であり、反対方向の支払には影響しません。 別のアカウントを事前認証すると、レジャーに[DepositPreauthオブジェクト](/ja/docs/references/protocol/ledger-data/ledger-entry-types/depositpreauth)が追加されます。これにより、認証を提供するアカウントの[所有者準備金](/ja/docs/concepts/accounts/reserves#%E6%89%80%E6%9C%89%E8%80%85%E6%BA%96%E5%82%99%E9%87%91)が増加します。アカウントで事前承認が取り消されると、オブジェクトが削除され、準備金はこれに伴い減少します。 DepositPreauthトランザクションの処理が完了すると、承認済みアカウントからあなたのアカウントに資金を送金できるようになります。これは、以下のトランザクションタイプのいずれかを使用してDepositAuthを有効にしている場合にも該当します。 - [Payment](/ja/docs/references/protocol/transactions/types/payment) - [EscrowFinish](/ja/docs/references/protocol/transactions/types/escrowfinish) - [PaymentChannelClaim](/ja/docs/references/protocol/transactions/types/paymentchannelclaim) 事前承認は、DepositAuthが有効なアカウントへのその他の送金方法には影響しません。詳しいルールについては、[詳細なセマンティクス](#%E8%A9%B3%E7%B4%B0%E3%81%AA%E3%82%BB%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9)をご覧ください。 DepositPreauth ### 承認の確認 [deposit_authorizedメソッド](/ja/docs/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/deposit_authorized)を使用して、特定のアカウントに対し別のアカウントへの入金が許可されているかどうかを確認できます。このメソッドは次の2点を確認します。 - 送金先アカウントがDeposit Authorizationを必要としているかどうか。(承認を必要としていない場合は、すべての送金元アカウントが承認済みとみなされます。) - 送金元アカウントに対し、送金先への送金が事前承認されているかどうか。 ## 関連項目 - [DepositPreauthトランザクション](/ja/docs/references/protocol/transactions/types/depositpreauth)リファレンス。 - [DepositPreauthレジャーオブジェクトタイプ](/ja/docs/references/protocol/ledger-data/ledger-entry-types/depositpreauth)。 - [`rippled` API](/ja/docs/references/http-websocket-apis)の[deposit_authorizedメソッド](/ja/docs/references/http-websocket-apis/public-api-methods/path-and-order-book-methods/deposit_authorized)。 - [Authorized Trust Lines](/ja/docs/concepts/tokens/fungible-tokens/authorized-trust-lines)機能(`RequireAuth`フラグ)により、アカウントが発行したXRP以外の通貨を保有できる取引相手が制限されます。 - `DisallowXRP`フラグは、アカウントがXRPを受領してはならないことを示します。これはDeposit Authorizationよりもソフトな保護機能であり、XRP Ledgerにより強制されません。(クライアントアプリケーションはこのフラグに従うか、または少なくともこのフラグについて警告します。) - 送信トランザクションが[Destinationタグ](/ja/docs/concepts/transactions/source-and-destination-tags)を指定している場合には、`RequireDest`フラグは、アカウントが通貨額のみを受領できることを示します。これにより、ユーザが支払の目的を指定し忘れることがなくなりますが、恣意的な送金先タグを作成できる不明な送金元から受取人が保護されるわけではありません。 - [Partial Payment](/ja/docs/concepts/payment-types/partial-payments)により、アカウントは不要な支払を返金できます。この際、[送金手数料](/ja/docs/concepts/tokens/fungible-tokens/transfer-fees)と為替レートは送金額には追加されず、送金された金額から差し引かれます。