基本的なデータ型

さまざまなタイプのオブジェクトがそれぞれ異なる方法で一意に識別されます。

アカウントアドレスで識別されます。例えば、"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59"など。アドレスは常に「r」で始まります。rippledメソッドの多くは、16進数表記に対応しています。

トランザクションは、トランザクションのバイナリフォーマットのハッシュで識別されます。また、トランザクションは送信アカウントとシーケンス番号でも識別できます。

閉鎖された各レジャーは、レジャーインデックスハッシュ値を保有します。レジャーを指定する場合、いずれか1つを使用できます。

アドレス

Accounts in the XRP Ledger are identified by an address in the XRP Ledger's base58 format. The address is derived from the account's master public key , which is in turn derived from a secret key. An address is represented as a string in JSON and has the following characteristics:

  • Between 25 and 35 characters in length
  • Starts with the character r

    Note: The XRP community has proposed (and developed a codec to support) a new X-address format that exchanges and wallets could use instead of destination tags . These "packed" addresses start with an X instead of an r. For more information, see the XRPL 𝗫-address format site.

  • Uses alphanumeric characters, excluding the number "0" capital letter "O", capital letter "I", and lowercase letter "l"

  • Case-sensitive
  • Includes a 4-byte checksum so that the probability of generating a valid address from random characters is approximately 1 in 2^32

For more information, see Accounts and base58 Encodings.

ハッシュ

Many objects in the XRP Ledger, particularly transactions and ledgers, are uniquely identified by a 256-bit hash value. This value is typically calculated as a "SHA-512Half", which calculates a SHA-512 hash from some contents, then takes the first half of the output. (That's 256 bits, which is 32 bytes, or 64 characters of the hexadecimal representation.) Since the hash of an object is derived from the contents in a way that is extremely unlikely to produce collisions, two objects with the same hash can be considered the same.

An XRP Ledger hash value has the following characteristics:

  • Exactly 64 characters in length
  • Hexadecimal character set: 0-9 and A-F.
  • Typically written in upper case.

Note: SHA-512Half has similar security to the officially-defined SHA-512/256 hash function. However, the XRP Ledger's usage predates SHA-512/256 and is also easier to implement on top of an existing SHA-512 function. (As of this writing, SHA-512 support in cryptographic libraries is much more common than for SHA-512/256.)

ハッシュプレフィクス

[ソース]

多くの場合、XRP Ledgerではオブジェクトのバイナリデータに4バイトのプレフィクスを付けてからハッシュを計算するため、異なるタイプのオブジェクトが同じバイナリフォーマットである場合でも、異なるハッシュが設定されます。既存の4バイトコードは、ASCIIでエンコードされた英字3文字の後に0バイトが続く構成となっています。

ある種のハッシュは、APIの要求と応答に使用されます。またある種のデータに署名するときの最初のステップで計算されるだけのものや、より高度なハッシュを計算するためのものもあります。XRP Ledgerで使用されるすべての4バイトのハッシュプレフィクスは以下の表の通りです。

オブジェクトタイプ APIフィールド ハッシュプレフィクス(16進数) ハッシュプレフィクス(テキスト)
コンセンサスの提案 なし 0x50525000 PRP\0
レジャーバージョン ledger_hash 0x4C575200 LWR\0
レジャー状態データ account_stateレジャーヘッダー内) 0x4D4C4E00 MLN\0
レジャーデータ内部ノード なし 0x4D494E00 MIN\0
レジャーデータ内部ノード(SHAMapv2 なし 0x494E5200 INR\0
Payment Channelのクレーム なし 0x434C4D00 CLM\0
署名済みのトランザクション トランザクションのhash 0x54584E00 TXN\0
メタデータを持つトランザクション なし 0x534E4400 SND\0
未署名のトランザクション(シングル署名) なし 0x53545800 STX\0
未署名のトランザクション(マルチ署名) なし 0x534D5400 SMT\0
検証の投票 なし 0x56414C00 VAL\0
バリデータサブキー認証(「バリデータマニフェスト」) なし 0x4D414E00 MAN\0

レジャーオブジェクトIDも似た方法で計算されますが、ここで説明したプレフィクスの代わりに「スペースキー」という2バイトのプレフィクスを使用します。

アカウントシーケンス

A sequence number is a 32-bit unsigned integer that is used to make sure transactions from a given sender execute only once each, and in the correct order.

Every account in the XRP Ledger has a sequence number in its Sequence field, which increases by 1 whenever that account sends a transaction and that transaction gets included in a validated ledger. Each transaction also has a sequence number in its Sequence field, which must match the account's current sequence number when the transaction executes. For each account, each sequence number can only be used once, in numerical order.

With the DeletableAccounts amendment, the starting Sequence number for an account matches the Ledger Index of the ledger version where the account was created. Before DeletableAccounts, every account started with Sequence number 1.

Whenever a transaction is included in a ledger, it uses up a sequence number regardless of whether the transaction executed successfully or failed with a tec-class error code. Other transaction failures don't get included in ledgers, so they don't change the sender's sequence number (or have any other effects).

Within the ledger, an Address and a sequence number are sometimes used together to identify an object that was created by the validated transaction with that sender and sequence number. Escrows and Offers are examples of objects identified this way.

It is possible for multiple unconfirmed transactions to have the same sender and sequence number. Such transactions are mutually exclusive, and at most one of them can be included in a validated ledger. (Any others ultimately have no effect.)

レジャーインデックス

A ledger index is a 32-bit unsigned integer used to identify a ledger. The ledger index is sometimes known as the ledger's sequence number. (This is different from an account sequence.) The very first ledger was ledger index 1, and each new ledger has a ledger index that is 1 higher than the ledger index of the ledger immediately before it.

The ledger index indicates the order of the ledgers; the Hash value identifies the exact contents of the ledger. Two ledgers with the same hash are always the same. For validated ledgers, hash values and ledger indexes are equally valid and correlate 1:1. However, this is not true for in-progress ledgers:

  • Two different rippled servers may have different contents for a current ledger with the same ledger index, due to latency in propagating transactions throughout the network.
  • There may be multiple closed ledger versions competing to be validated by consensus. These ledger versions have the same ledger index but different contents (and different hashes). Only one of these closed ledgers can become validated.
  • The current open ledger's hash is not calculated. This is because a current ledger's contents change over time, which would cause its hash to change, even though its ledger index stays the same. The hash of a ledger is only calculated when the ledger is closed.

レジャーの指定

APIメソッドの多くは、レジャーのインスタンスを指定する必要があります。その場合、共有されたレジャーの特定バージョンで最新と見なされるデータで指定する必要があります。レジャーバージョンを受け入れるコマンドは、すべて同様に機能します。使用するレジャーを指定するには、以下の3つの方法があります。

  1. ledger_indexパラメーターにレジャーのレジャーインデックスを指定します。閉鎖された各レジャーには識別用のレジャーインデックスが付いていて、その前に検証されたレジャーより1つ大きい番号になります。(最初のレジャーのインデックスは1です。)
  2. ledger_hashパラメーターにレジャーのハッシュ値を指定します。
  3. ledger_indexパラメーターに以下のいずれかのショートカットを指定します。
    • validated: ネットワーク全体で検証された最新のレジャー
    • closed: 変更できないように閉鎖され、検証を提案されている最新のレジャー
    • current: サーバーで現在処理中のレジャーバージョン

上記3つのフォーマットすべてを受け入れる、廃止予定のledgerパラメーターもあります。このパラメーターは使用しないでください。今後予告なしに廃止される可能性があります。

レジャーを指定しない場合、デフォルトでcurrent(処理中)レジャーが選択されます。レジャーを指定するフィールドを複数指定した場合、廃止予定のledgerフィールドが最初に使用され(存在する場合)、ledger_hashに戻ります。ledger_indexフィールドは、他の2つのフィールドがいずれも存在しない場合を除いて無視されます。

注記: レジャーを指定する際に上記のデフォルトの動作に頼らないでください。変更される場合があります。可能であれば、常に要求にてレジャーバージョンを指定してください。

通貨

XRP Ledgerには2種類の通貨があります。XRPとその他のあらゆる通貨です。この2つには多くの相違点があります。

XRP 発行済み通貨
発行者なし 必ずXRP Ledgerアカウントが発行
文字列として指定 オブジェクトとして指定
アカウント内で追跡 トラストライン内で追跡
作成は一切不可、消却のみ可能 自由に発行または清算可能
最大値: 1000000000001e11 最大値: 9999999999999999e80
「drop」(0.000001 XRP)に近い精度 10進15桁の精度で非ゼロの最少絶対値は 1000000000000000e-96

注意: XRP Ledgerでは、通常の浮動小数点数とは異なる精度の小数点計算を使用するため、通貨額は常に文字列として表されます。

通貨額の指定

一部のAPIメソッドでは、通貨額を指定する必要があります。取扱通貨がネットワーク固有のXRP通貨であるかその他の通貨単位(イシュアンス)であるかによって、指定方法が大きく異なります。

XRP

XRPの額は文字列で表します。(XRPの精度は64ビット整数と同等ですが、JSON 整数は32ビットに制限されるため、JSON整数で表す場合はXRPがオーバーフローする恐れがあります。)XRPは正式には「drop」で指定します。これは0.000001(百万分の1)のXRPと等価です。したがって、JSON文書で1.0 XRPを表示するには、次のように書きます。

"1000000"

XRPをオブジェクトに指定しないでください。

単体テストでは、XRPの値(dropではありません)を小数点を使用して指定できます。例えば、「1.23」は1.23 XRPを意味します。それ以外のすべての場合では、XRPは常にdrop単位で指定し、小数点は使用しません。例えば、「1230000」は1.23 XRPを意味します。

非XRP

XRP以外の通貨(法定通貨としてのドル、貴金属、暗号資産、その他のカスタム通貨を含む)を指定する場合、通貨指定オブジェクトを使用して指定する必要があります。以下は、3つのフィールドを持つJSONオブジェクトです。

Field 説明
currency 文字列 - 通貨コード 通貨を発行するための任意コード。XRPは使用できません。
value 文字列 通貨の金額を表す引用符付き10進数表記。これには科学的記数法が含まれ、例えば1.23e11は123,000,000,000を意味します。eEのどちらも使用できます。
issuer 文字列 通貨を発行する組織の一意のアカウントアドレス。つまり、通貨を清算できる個人または企業です。

注意: これらのフィールド名は大文字小文字の区別があります。

例えば、アカウントr9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59によって発行された$153.75 USドルは、以下のように指定します。

{
    "currency": "USD",
    "value": "153.75",
    "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59"
}

単体テストでは、非XRP通貨の金額値をスラッシュで区切られた文字列で指定できます。例えば、"amount/currency/issuer"のフォーマットになります。その他すべての場合では、前述のJSONオブジェクトのフォーマットを使用する必要があります。

金額なしでの通貨の指定

XRP以外の通貨を金額なしで指定する場合は(主に、通貨取引オファーのオーダーブックを定義する場合など)、上記のように指定しますが、valueフィールドは省略します。

XRPを金額なしで指定する場合は(主に、オーダーブックを定義する場合など)、JSONオブジェクトとして指定しますが、使用するフィールドはcurrencyフィールド のみ です。XRPの場合はissuerフィールドを指定してはいけません。

最後に、支払いの受取人アカウントが複数のイシュアー(通貨発行者)を信頼している場合は、受取人が受け入れているイシュアーがどのように組み合わされても支払いが行われるように指定できます。これを行うには、受取人アカウントのアドレスをJSONオブジェクトにissuer値として指定します。

通貨コード

The rippled APIs support two formats of currency code for issued currencies:

Currencies with the same code can ripple across connected trust lines. Currency codes have no other behavior built into the XRP Ledger.

時間の指定

rippledサーバーとそのAPIでは、時間を符号なし整数で表します。この数値は、「Rippleエポック」である2000年1月1日(00:00 UTC)から経過した秒数を表しています。これはUNIXエポック と同様に機能しますが、RippleエポックはUNIXエポックより946684800秒遅れています。

Rippleエポック時間を32ビット変数でUNIXエポック時間に変換しないでください。整数のオーバーフローが発生する恐れがあります。