Checkの正確な金額での換金
Checks Amendmentにより追加されました。
Checkがレジャーに含まれており有効期限切れではない場合は、指定の受取人はAmount
フィールドを指定したCheckCashトランザクションを送信することで、Checkを換金し、Checkに指定されている額までの正確な額を受領できます。請求書の額面通りの金額を回収したい場合など、特定の金額の受領を希望する際には、この方法でCheckを換金できます。
指定の受取人は、Checkを変動金額で換金することもできます。
前提条件
Checkを換金するための前提条件は、正確な金額を換金する場合も変動金額を換金する場合も同じです。
- 現在レジャーに記録されているCheckオブジェクトのIDが必要です。
- 例えば、以下の例では、あるCheckのIDとして
838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334
を使用していますが、各ステップをご自分で行う際には、異なるIDを使用する必要があります。
- 例えば、以下の例では、あるCheckのIDとして
- Checkに記載されている受取人のアドレスと秘密鍵。このアドレスは、Checkオブジェクトの
Destination
アドレスと一致している必要があります。 - 発行済み通貨用のCheckの場合は、ご自身(受取人)にイシュアーに対するトラストラインがある必要があります。このトラストライン上のご自身の限度額は、受け取る金額を追加するための残高より十分高くなければなりません。
- トラストラインと限度額について詳しくは、トークンおよびトラストラインと発行をご覧ください。
- トランザクションに安全に署名できる手段。
- XRP Ledgerに接続できるクライアントライブラリか、それともHTTPライブラリ、WebSocketライブラリなど。
1. CheckCashトランザクションの準備
CheckCashトランザクションのフィールドの値を決定します。Checkを正確な金額で換金する場合、以下のフィールドが最低限必要です。それ以外のフィールドはオプションまたは署名時に自動入力可能なフィールドです。
フィールド | 値 | 説明 |
---|---|---|
TransactionType | 文字列 | 値がCheckCash の場合、これはCheckCashトランザクションです。 |
Account | 文字列(アドレス) | Checkを換金する送信者のアドレス。(あなたのアドレスです。) |
CheckID | 文字列 | レジャーで換金するCheckオブジェクトのID。この情報を確認するには、txメソッドを使用してCheckCreateトランザクションのメタデータを調べるか、またはaccount_objectsメソッドを使用してCheckを探します。 |
Amount | 文字列またはオブジェクト(額) | Checkから精算する額。XRPの場合、XRPのdrop数を示す文字列でなければなりません。トークンの場合、これはcurrency 、issuer 、およびvalue フィールドを持つオブジェクトです。currency フィールドとissuer フィールドは、Checkオブジェクトの対応するフィールドに一致しており、value はCheckオブジェクトの額以下でなければなりません。(送金手数料のかかる通貨の場合、SendMax で送金手数料を支払えるように、SendMax よりも低い額を換金する必要があります。)この額を受領できない場合はCheckの換金が失敗し、Checkがレジャーに残るので、後で換金を再試行できます。詳細は、通貨額の指定をご覧ください。 |
正確な金額で換金するCheckCashトランザクションの準備の例
Checkを正確な金額で換金するためのトランザクションを準備する手順を以下の例に示します。
{ "Account": "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", "TransactionType": "CheckCash", "Amount": "100000000", "CheckID": "838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334", "Fee": "12" }
2. CheckCashトランザクションの署名
トランザクションに署名する最も安全な方法は、クライアントライブラリを使用してローカルで署名することです。signメソッドを使用してトランザクションに署名することもできますが、その場合は信頼できる暗号化された接続を使用するか、ローカル接続を使用して、自分が管理しているサーバに対してのみに行うようにしてください。
いずれの場合も、後のために、署名したトランザクションの識別用ハッシュを書き留めておいてください。
リクエストの例
rippled sign s████████████████████████████ '{
"Account": "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy",
"TransactionType": "CheckCash",
"Amount": "100000000",
"CheckID": "838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334",
"Fee": "12"
}'
レスポンスの例
Loading: "/etc/opt/ripple/rippled.cfg" 2018-Jan-24 01:17:54 HTTPClient:NFO Connecting to 127.0.0.1:5005 { "result" : { "status" : "success", "tx_blob" : "120011228000000024000000015018838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334614000000005F5E10068400000000000000C732102F135B14C552968B0ABE8493CC4C5795A7484D73F6BFD01379F73456F725F66ED74473045022100C64278AC90B841CD3EA9889A4847CAB3AC9927057A34130810FAA7FAC0C6E3290220347260A4C0A6DC9B699DA12510795B2B3414E1FA222AF743226345FBAAEF937C811449FF0C73CA6AF9733DA805F76CA2C37776B7C46B", "tx_json" : { "Account" : "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", "Amount" : "100000000", "CheckID" : "838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334", "Fee" : "12", "Flags" : 2147483648, "Sequence" : 1, "SigningPubKey" : "02F135B14C552968B0ABE8493CC4C5795A7484D73F6BFD01379F73456F725F66ED", "TransactionType" : "CheckCash", "TxnSignature" : "3045022100C64278AC90B841CD3EA9889A4847CAB3AC9927057A34130810FAA7FAC0C6E3290220347260A4C0A6DC9B699DA12510795B2B3414E1FA222AF743226345FBAAEF937C", "hash" : "0521707D510858BC8AF69D2227E1D1ADA7DB7C5B4B74115BCD0D91B62AFA8EDC" } } }
3. 署名済みCheckCashトランザクションの送信
前のステップで署名したトランザクションblobをrippled
サーバに送信します。これはrippled
サーバを実行していなくても安全にできます。レスポンスには仮の結果が含まれ、それはtesSUCCESS
であるべきですが、この結果は通常は最終的なものではありません。キューに入れられたトランザクションは通常、次のオープンレジャーのバージョンに含まれるからです(通常、送信から約10秒後となります)。
ヒント: 仮の結果が tefMAX_LEDGER
であった場合、そのトランザクションのLastLedgerSequence
パラメータが現在のレジャー番号よりも低いため、そのトランザクションが失敗しています。これは、トランザクション情報を準備してから送信するまでに、予想されるレジャーのバージョン数よりも長くかかった場合に起こります。このような場合は、LastLedgerSequence
の値を大きくしてステップ1からやり直してください。
リクエストの例
rippled submit 120011228000000024000000015018838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334614000000005F5E10068400000000000000C732102F135B14C552968B0ABE8493CC4C5795A7484D73F6BFD01379F73456F725F66ED74473045022100C64278AC90B841CD3EA9889A4847CAB3AC9927057A34130810FAA7FAC0C6E3290220347260A4C0A6DC9B699DA12510795B2B3414E1FA222AF743226345FBAAEF937C811449FF0C73CA6AF9733DA805F76CA2C37776B7C46B
レスポンスの例
Loading: "/etc/opt/ripple/rippled.cfg" 2018-Jan-24 01:17:54 HTTPClient:NFO Connecting to 127.0.0.1:5005 { "result" : { "engine_result" : "tesSUCCESS", "engine_result_code" : 0, "engine_result_message" : "The transaction was applied. Only final in a validated ledger.", "status" : "success", "tx_blob" : "120011228000000024000000015018838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334614000000005F5E10068400000000000000C732102F135B14C552968B0ABE8493CC4C5795A7484D73F6BFD01379F73456F725F66ED74473045022100C64278AC90B841CD3EA9889A4847CAB3AC9927057A34130810FAA7FAC0C6E3290220347260A4C0A6DC9B699DA12510795B2B3414E1FA222AF743226345FBAAEF937C811449FF0C73CA6AF9733DA805F76CA2C37776B7C46B", "tx_json" : { "Account" : "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", "Amount" : "100000000", "CheckID" : "838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334", "Fee" : "12", "Flags" : 2147483648, "Sequence" : 1, "SigningPubKey" : "02F135B14C552968B0ABE8493CC4C5795A7484D73F6BFD01379F73456F725F66ED", "TransactionType" : "CheckCash", "TxnSignature" : "3045022100C64278AC90B841CD3EA9889A4847CAB3AC9927057A34130810FAA7FAC0C6E3290220347260A4C0A6DC9B699DA12510795B2B3414E1FA222AF743226345FBAAEF937C", "hash" : "0521707D510858BC8AF69D2227E1D1ADA7DB7C5B4B74115BCD0D91B62AFA8EDC" } } }
4. 検証の待機
本番環境のネットワークやTestnetでは、レジャーが自動的に閉鎖するまでに4~7秒かかる場合があります。
スタンドアロンモードでrippled
を実行している場合は、[ledger_acceptメソッド][]を使用してレジャーを手動で閉鎖します。
5.最終結果の確認
トランザクションのステータスを確認するには、CheckCashトランザクションの識別用ハッシュを指定したtxメソッドを使用します。トランザクションが成功したことを示す"TransactionResult": "tesSUCCESS"
フィールドをトランザクションメタデータから検索し、またこの結果が最終結果であることを示す"validated": true
フィールドを結果から検索します。
Checkが正確なAmount
で換金された場合は、受取人に対し正確な額が入金されたと想定できます(トークンの金額が極めて大きい場合や小さい場合は、金額が丸められることがあります)。
Checkを換金できない場合、Checkはレジャーに残るため、後日換金を再試行できます。代わりにCheckを変動金額で換金することができます。
リクエストの例
rippled tx 0521707D510858BC8AF69D2227E1D1ADA7DB7C5B4B74115BCD0D91B62AFA8EDC
レスポンスの例
Loading: "/etc/opt/ripple/rippled.cfg" 2018-Jan-24 01:18:39 HTTPClient:NFO Connecting to 127.0.0.1:5005 { "result" : { "Account" : "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", "Amount" : "100000000", "CheckID" : "838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334", "Fee" : "12", "Flags" : 2147483648, "Sequence" : 1, "SigningPubKey" : "02F135B14C552968B0ABE8493CC4C5795A7484D73F6BFD01379F73456F725F66ED", "TransactionType" : "CheckCash", "TxnSignature" : "3045022100C64278AC90B841CD3EA9889A4847CAB3AC9927057A34130810FAA7FAC0C6E3290220347260A4C0A6DC9B699DA12510795B2B3414E1FA222AF743226345FBAAEF937C", "date" : 570071920, "hash" : "0521707D510858BC8AF69D2227E1D1ADA7DB7C5B4B74115BCD0D91B62AFA8EDC", "inLedger" : 9, "ledger_index" : 9, "meta" : { "AffectedNodes" : [ { "ModifiedNode" : { "FinalFields" : { "Flags" : 0, "Owner" : "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", "RootIndex" : "032D861D151E38E86F46805ED1896D1A50144F65459717B6D12470A9E6E3B66E" }, "LedgerEntryType" : "DirectoryNode", "LedgerIndex" : "032D861D151E38E86F46805ED1896D1A50144F65459717B6D12470A9E6E3B66E" } }, { "ModifiedNode" : { "FinalFields" : { "Account" : "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", "Balance" : "1000099999988", "Flags" : 0, "OwnerCount" : 0, "Sequence" : 2 }, "LedgerEntryType" : "AccountRoot", "LedgerIndex" : "38E1EF3284A45B090D549EFFB014ACF68927FE0884CDAF01CE3629DF90542D66", "PreviousFields" : { "Balance" : "1000000000000", "Sequence" : 1 }, "PreviousTxnID" : "3E14D859F6B4BE923323EFC94571606455921E65173147A89BC6EDDA4374B294", "PreviousTxnLgrSeq" : 5 } }, { "DeletedNode" : { "FinalFields" : { "Account" : "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo", "Destination" : "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", "DestinationNode" : "0000000000000000", "DestinationTag" : 1, "Expiration" : 570113521, "Flags" : 0, "InvoiceID" : "6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B", "OwnerNode" : "0000000000000000", "PreviousTxnID" : "0FD9F719CDE29E6F6DF752B93EB9AC6FBB493BF989F2CB63B8C0E73A8DCDF61A", "PreviousTxnLgrSeq" : 8, "SendMax" : "100000000", "Sequence" : 4 }, "LedgerEntryType" : "Check", "LedgerIndex" : "838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334" } }, { "ModifiedNode" : { "FinalFields" : { "Flags" : 0, "Owner" : "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo", "RootIndex" : "AD136EC2A266027D8F202C97D294BBE32F6FC2AD5501D9853F785FE77AB94C94" }, "LedgerEntryType" : "DirectoryNode", "LedgerIndex" : "AD136EC2A266027D8F202C97D294BBE32F6FC2AD5501D9853F785FE77AB94C94" } }, { "ModifiedNode" : { "FinalFields" : { "Account" : "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo", "Balance" : "4999899999952", "Flags" : 0, "OwnerCount" : 1, "Sequence" : 5 }, "LedgerEntryType" : "AccountRoot", "LedgerIndex" : "D3A1DBAA28717975A9119EC4CBC891BA9A66236C484F03C9911F463AD3B66DE0", "PreviousFields" : { "Balance" : "4999999999952", "OwnerCount" : 2 }, "PreviousTxnID" : "0FD9F719CDE29E6F6DF752B93EB9AC6FBB493BF989F2CB63B8C0E73A8DCDF61A", "PreviousTxnLgrSeq" : 8 } } ], "TransactionIndex" : 0, "TransactionResult" : "tesSUCCESS" }, "status" : "success", "validated" : true } }