Merge commit '94a050cbe0fc0d1a631d23a6589f40455cde3d83' into ja-concepts-accounts

This commit is contained in:
tequ
2023-09-27 10:19:48 +09:00
27 changed files with 314 additions and 6050 deletions

View File

@@ -4,10 +4,10 @@
<element>
<id>UMLObject</id>
<coordinates>
<x>40</x>
<y>70</y>
<x>100</x>
<y>340</y>
<w>220</w>
<h>70</h>
<h>80</h>
</coordinates>
<panel_attributes>Master Public Key
--
@@ -18,8 +18,8 @@
<element>
<id>UMLObject</id>
<coordinates>
<x>340</x>
<y>160</y>
<x>430</x>
<y>340</y>
<w>180</w>
<h>80</h>
</coordinates>
@@ -31,33 +31,34 @@
<element>
<id>Relation</id>
<coordinates>
<x>250</x>
<y>70</y>
<w>220</w>
<x>310</x>
<y>350</y>
<w>140</w>
<h>160</h>
</coordinates>
<panel_attributes>lt=&lt;-
RIPEMD160 of SHA-256
RIPEMD160 of
SHA-256
</panel_attributes>
<additional_attributes>90.0;110.0;40.0;110.0;40.0;40.0;10.0;40.0</additional_attributes>
<additional_attributes>120.0;20.0;10.0;20.0</additional_attributes>
</element>
<element>
<id>UMLObject</id>
<coordinates>
<x>670</x>
<y>160</y>
<x>960</x>
<y>320</y>
<w>180</w>
<h>80</h>
</coordinates>
<panel_attributes>Address
--
Type Prefix (1 byte)
AccountID (20 bytes)
Checksum (4 bytes)</panel_attributes>
<additional_attributes/>
@@ -65,9 +66,9 @@ Checksum (4 bytes)</panel_attributes>
<element>
<id>UMLObject</id>
<coordinates>
<x>40</x>
<y>160</y>
<w>190</w>
<x>430</x>
<y>210</y>
<w>180</w>
<h>80</h>
</coordinates>
<panel_attributes>Type Prefix
@@ -76,22 +77,11 @@ Checksum (4 bytes)</panel_attributes>
("r" in XRPL base58)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>220</x>
<y>200</y>
<w>140</w>
<h>30</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>120.0;10.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>UMLObject</id>
<coordinates>
<x>380</x>
<y>290</y>
<x>670</x>
<y>350</y>
<w>100</w>
<h>70</h>
</coordinates>
@@ -103,32 +93,32 @@ Checksum (4 bytes)</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>470</x>
<y>200</y>
<x>760</x>
<y>360</y>
<w>120</w>
<h>140</h>
<h>40</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>100.0;10.0;80.0;10.0;80.0;120.0;10.0;120.0</additional_attributes>
<additional_attributes>100.0;10.0;80.0;10.0;80.0;20.0;10.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>510</x>
<y>180</y>
<w>80</w>
<h>30</h>
<x>630</x>
<y>290</y>
<w>250</w>
<h>80</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>60.0;10.0;10.0;10.0</additional_attributes>
<additional_attributes>230.0;60.0;210.0;60.0;210.0;10.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>UMLState</id>
<coordinates>
<x>570</x>
<y>180</y>
<x>860</x>
<y>330</y>
<w>100</w>
<h>40</h>
<h>60</h>
</coordinates>
<panel_attributes>base58
type=sender</panel_attributes>
@@ -137,20 +127,20 @@ type=sender</panel_attributes>
<element>
<id>Relation</id>
<coordinates>
<x>400</x>
<y>230</y>
<w>130</w>
<x>630</x>
<y>290</y>
<w>180</w>
<h>80</h>
</coordinates>
<panel_attributes>lt=&lt;-
SHA-256 twice</panel_attributes>
<additional_attributes>10.0;60.0;10.0;10.0</additional_attributes>
<additional_attributes>60.0;60.0;60.0;10.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Text</id>
<coordinates>
<x>40</x>
<y>30</y>
<x>100</x>
<y>210</y>
<w>280</w>
<h>30</h>
</coordinates>
@@ -158,4 +148,26 @@ SHA-256 twice</panel_attributes>
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>610</x>
<y>200</y>
<w>50</w>
<h>240</h>
</coordinates>
<panel_attributes>lt=..</panel_attributes>
<additional_attributes>10.0;10.0;30.0;10.0;30.0;220.0;10.0;220.0</additional_attributes>
</element>
<element>
<id>Text</id>
<coordinates>
<x>510</x>
<y>300</y>
<w>30</w>
<h>30</h>
</coordinates>
<panel_attributes>+</panel_attributes>
<additional_attributes/>
</element>
</diagram>

View File

@@ -150,7 +150,7 @@ halign=center</panel_attributes>
</coordinates>
<panel_attributes>Address
--
24 bytes (classic)
25 bytes (classic)
32 bytes (X-address)</panel_attributes>
<additional_attributes/>
</element>

View File

@@ -0,0 +1,40 @@
---
html: ledger-close-times.html
parent: ledgers.html
blurb: XRP Ledgerが、レジャーバージョンごとに一意の閉鎖時刻を計算する方法。
labels:
- ブロックチェーン
---
# レジャーの閉鎖時刻
レジャーバージョンの閉鎖時刻は、[レジャーヘッダー](ledger-header.html)の`close_time`フィールドに記録されます。ネットワークの正確な閉鎖時刻についてコンセンサスを得やすくするため、この値は閉鎖時刻の精度に基づく秒数に丸められます(現在は10秒)。丸めによってレジャーの閉鎖時刻が親レジャーの閉鎖時刻と同じになる(または早くなる)場合、子レジャーの閉鎖時刻は親レジャーの閉鎖時刻に1を足した時刻に設定されます。これにより、有効なレジャーの閉鎖時刻が確実に増加することが保証されます。
通常、新しいレジャーバージョンは約35秒ごとに閉鎖するため、これらのルールの結果、レジャーの閉鎖時刻は、:00、:01、:02、:10、:11、:20、:21、...で終わるような、あいまいなパターンになります。2で終わることはあまりなく、3で終わることは非常にまれですが、どちらも、より多くのレジャーが10秒の時間内にランダムに閉鎖した場合にランダムに発生します。
一般的に、レジャーは閉鎖時刻よりも正確な時刻計測を行うことはできません。例えば、あるオブジェクトが有効期限を過ぎているかどうかを確認するには、親レジャーの閉鎖時刻と比較するルールになっています。(レジャーの閉鎖時刻は、そのレジャーに登録されるトランザクションの実行時点では確定していません)。これは、例えば[Escrow](escrow.html)が、Escrowオブジェクトで指定された時間ベースの有効期限より最大で約10秒遅い実世界の時刻に終了する可能性があることを意味します。
### 例
以下の例は、バリデータの観点から、レジャーの閉鎖時刻**12:00:00**の丸め動作を示しています。
**現在のコンセンサスラウンド**
1. バリデータは、レジャーが閉鎖してコンセンサスに達したのが**12:00:03**であったことを記録します。バリデータはこの閉鎖時刻を自分の提案に含めます。
2. バリデータは、(そのUNL上の)大多数のバリデータが閉鎖時刻を12:00:02と提案し、 残りのバリデータが閉鎖時刻を12:00:03と提案したことを確認します。そのバリデータは、提案された閉鎖時刻をコンセンサスの**12:00:02**に合わせます。
3. バリデータはこの値を最も近い時間に丸め、**12:00:00** とします。
4. 12:00:00は前のレジャーの閉鎖時刻より大きくないので、バリデータは閉鎖時刻を前のレジャーの閉鎖時刻のちょうど1秒後に調整します。その結果、調整後の閉鎖時刻は **12:00:01** となります。
5. バリデータはこれらの詳細情報を使ってレジャーを作成し、ハッシュを計算します。
検証を行わないサーバは、記録した閉鎖時刻をネットワークの他のサーバに提案しないことを除いて、すべて同じ手順を踏みます。
**次のコンセンサスラウンド**
1. 大多数のバリデータによると、次のレジャーは**12:00:04**にコンセンサスに入ります。
2. 閉鎖時刻は再び切り捨てられ、**12:00:00**となります。
3. これは前のレジャーの閉鎖時刻12:00:01より大きくないため、調整後の閉鎖時刻は**12:00:02**となります。
**その次のコンセンサスラウンド**
1. 大多数のバリデータによると、この次のレジャーは**12:00:05**にコンセンサスに入ります。
2. これは、閉鎖時刻の制度に基づいて、**12:00:10**に切り上げられます。
3. この値は前のレジャーの閉鎖時刻より大きいので、調整する必要はありません。**12:00:10**が正式な閉鎖時刻となります。

View File

@@ -0,0 +1,68 @@
---
html: ledger-structure.html
parent: ledgers.html
blurb: 個別のレジャーブロックの要素を詳しく見てみましょう。
---
# レジャーの構成要素
XRP Ledgerはブロックチェーンであり、データブロックの履歴を順番に並べたものです。XRP Ledgerブロックチェーンのブロックは、 _レジャーバージョン_ または略して _レジャー_ と呼ばれます。
コンセンサスプロトコルは、以前のレジャーバージョンを起点として、次に適用するトランザクションのセットについてバリデータ間の合意を形成し、それらのトランザクションを適用することで全員が同じ結果を得たことを確認します。これが成功すると、結果として新しいレジャーバージョンが作成されます。そこから、次のレジャーバージョンを構築するプロセスが繰り返されます。
各レジャーバージョンには、 _状態データ__トランザクションセット_ 、メタデータを含む _ヘッダー_ が含まれます。
{{ include_svg("img/ledger.svg", "図: レジャーはヘッダー、トランザクションセット、状態データから構成されます。") }}
## 状態データ
{{ include_svg("img/ledger-state-data.svg", "図: レジャーの状態データは、さまざまなオブジェクトで構成され、グラフのようにリンクされていることもあります。") }}
_状態データ_ とは、そのレジャーバージョンにおけるすべてのアカウント、残高、設定、その他の情報のスナップショットを表します。サーバがネットワークに接続すると、最初に行うことの1つは、新しいトランザクションを処理し、現在の状態に関するクエリに答えることができるように、現在の状態データの完全なセットをダウンロードすることです。ネットワーク内のすべてのサーバが状態データの完全なコピーを持っているため、すべてのデータは公開され、どのコピーも同じように有効です。
状態データは _レジャーエントリ_ と呼ばれる個別のオブジェクトで構成され、ツリー形式で保存されます。各レジャーエントリには一意の256ビットのIDがあり、それを使用して状態ツリーから検索することができます。
## トランザクションセット
{{ include_svg("img/ledger-transaction-set.svg", "図: レジャーのトランザクションセット、正規の順序で並べられたトランザクションのグループ") }}
レジャーに加えられたすべての変更は、トランザクションの結果です。各レジャーバージョンには、特定の順序で新たに適用されたトランザクションのグループである _トランザクションセット_ が含まれています。あるレジャーのトランザクションセットを前のレジャーバージョンの状態データに適用すると、結果としてそのレジャーの状態データが得られます。
レジャーのトランザクションセット内のすべてのトランザクションは、以下の両方の要素を持ちます。
- 送信者がレジャーに何を指示したかを示す _トランザクションの内容_
- トランザクションがどのように処理され、レジャーの状態データにどのような影響を与えたかを正確に示す _トランザクションのメタデータ_
## レジャーヘッダー
_レジャーヘッダー_ は、レジャーバージョンの概略を示すデータのブロックです。レポートの表紙のように、レジャーバージョンを一意に識別し、その内容を記載し、他の注意事項とともに作成時刻を表しています。レジャーヘッダーには以下の情報が含まれます。
<!-- Note: the alt text for the diagrams is intentionally empty because any caption would be redundant with the text. -->
- {{include_svg("img/ledger-index-icon.svg", "", classes="floating-diagram")}} チェーン内でのレジャーの位置を示す _レジャーインデックス_ 。レジャーは、1つ小さいインデックスを持つレジャーの上に構築され、 _ジェネシスレジャー_ として知られるスタート地点に戻ります。これは、すべてのトランザクションと結果の公開履歴を形成します。
- {{include_svg("img/ledger-hash-icon.svg", "", classes="floating-diagram")}} レジャーの内容を一意に識別する _レジャーハッシュ_ 。ハッシュは、レジャーバージョンの内容が変更された場合、ハッシュが完全に異なるものになるように計算されます。これは、レジャーのデータが消失、変更、破損していないことを示すチェックサムのようなものでもあります。
- {{include_svg("img/ledger-parent-icon.svg", "", classes="floating-diagram")}} 親レジャーのハッシュ。レジャーバージョンは、その前の _親レジャー_ との違いによって定義されることが多く、ヘッダーには親レジャーの一意なハッシュも含まれます。
- {{include_svg("img/ledger-timestamp-icon.svg", "", classes="floating-diagram")}} このレジャーの内容が確定した正式なタイムスタンプとなる _閉鎖時刻_ 。この数値は秒数(一の位)が四捨五入され、通常は10です。
- {{include_svg("img/ledger-state-data-hash-icon.svg", "", classes="floating-diagram")}} このレジャーの状態データのチェックサムとして機能する _状態データのハッシュ_
- {{include_svg("img/ledger-tx-set-hash-icon.svg", "", classes="floating-diagram")}} このレジャーのトランザクションセットのデータのチェックサムとして機能する _トランザクションセットのハッシュ_
- {{include_svg("img/ledger-notes-icon.svg", "", classes="floating-diagram")}} その他、存在するXRPの総量や、閉鎖時刻が四捨五入された値など、いくつかのメモがあります。
レジャーのトランザクションセットと状態データのサイズは無制限ですが、レジャーヘッダーは常に固定サイズです。レジャーヘッダーの正確なデータとバイナリ形式については、[レジャーヘッダー](ledger-header.html)を参照してください。
## バリデーションの状況
{{ include_svg("img/ledger-validated-mark.svg", "Diagram: レジャーのバリデーション(検証)状況。レジャーの上に追加され、レジャー自体の一部ではありません。") }}
サーバの Unique Node List のバリデータのコンセンサスがレジャーバージョンの内容に合意すると、そのレジャーバージョンは検証済みであり、変更不可であるとみなされます。レジャーの内容は、後続のトランザクションが新しいレジャーバージョンを作成し、チェーンを更新することによってのみ変更できます。
レジャーバージョンが新しく作成された時点では、まだ未検証です。候補となるトランザクションが異なるサーバに到着するタイミングが異なるため、ネットワークはチェーンの次のステップとなる複数の異なるレジャーバージョンを構築し、提案する可能性があります。[コンセンサスプロトコル](consensus.html)は、そのうちのどれを有効化するかを決定します。(検証済みのレジャーバージョンに存在しなかったトランザクション候補は、通常、次のレジャーバージョンのトランザクションセットに含まれます)。
## レジャーインデックスとレジャーハッシュ
レジャーバージョンを識別する方法には、 _レジャーインデックス__レジャーハッシュ_ の2種類があります。この2つのフィールドはどちらもレジャーを識別しますが、その目的は異なります。レジャーインデックスはチェーン内でのレジャーの位置を表し、レジャーハッシュはレジャーの内容を表します。
異なるチェーンのレジャーは、レジャーインデックスは同じでもハッシュが異なることがあります。また、検証されていないレジャーバージョンを扱う場合、インデックスが同じでも内容が異なるため、ハッシュが異なる複数のレジャー候補が存在する可能性があります。
同じレジャーハッシュを持つ2つのレジャーは、常に完全に同一です。

View File

@@ -1,93 +1,35 @@
---
html: ledgers.html
parent: concepts.html
blurb: XRP Ledgerは、rippledによって内部データベースに保持されている一連の個別レジャーレジャーバージョンで構成されています。これらのレジャーの構造と内容について説明します。
blurb: XRP Ledgerは、rippledによって内部データベースに保持されている一連の個別レジャー(レジャーバージョン)で構成されています。これらのレジャーの構造と内容について説明します。
labels:
- ブロックチェーン
- データ保持
---
# レジャー
XRP Ledgerは完全にオープンな共有グローバルレジャーです。個々の参加者はこのレジャーを管理する個々の機関を信頼しなくても、レジャーの整合性を信頼できます。`rippled`サーバーソフトウェアは、非常に特殊なルールにってのみ更新可能なレジャーデータベースを管理することにより、これを実現しています。`rippled`インスタンスはレジャーの完全なコピーを保持し、`rippled`サーバーからなるピアツーピアネットワークはトランザクション候補を各サーバーに配信します。コンセンサスプロセスによって、レジャーの新しいバージョンに適用されるトランザクションが決定します。関連項目: [コンセンサスプロセス](consensus.html)。
XRP Ledgerは、誰にでも開かれた共有グローバル台帳(レジャー)です。個々の参加者は、単一の機関に台帳の管理を任せることなく、台帳の正当性を信頼することができます。XRP Ledgerプロトコルは、非常に特殊なルールにってのみ更新可能な台帳データベースを管理すること、これを実現しています。ピアツーピアネットワークのサーバは台帳データベースの完全なコピーを保持し、ネットワークは候補となるトランザクションを配信し、[コンセンサスプロセス](consensus.html)に従ってブロック単位で適用されます
![図: 各レジャーは、その前のレジャーバージョンにトランザクションを適用して生成されます](img/ledger-changes.ja.png)
{{ include_svg("img/ledger-changes.svg", "図: 各レジャーは、その前のレジャーバージョンにトランザクションを適用して生成されます")}}
この共有グローバルレジャーは、実際には`rippled`の内部データベースに保持されている一連の個別レジャー(レジャーバージョン)です。各レジャーバージョンには、レジャーの生成順を示す[レジャーインデックス][]が付いています。各閉鎖済みレジャーバージョンにも、レジャーの内容を示す識別ハッシュ値があります。`rippled`インスタンスには常に、1つの処理中の「現行」オープンレジャー、コンセンサスにより承認されていないいくつかの閉鎖済みレジャー、およびコンセンサスによる検証済みの任意の数の履歴レジャーがあります。検証済みレジャーだけが、その内容が正確で変更できません
共有グローバル台帳は、レジャーバージョンまたは単に _レジャー_ と呼ばれる一連のブロックから構成されます。すべてのレジャーバージョンには、台帳の正しい順序を識別する[レジャーインデックス][]があります。永続的にクローズされる各台帳には、固有の識別ハッシュ値も存在します
1つのレジャーバージョンはさまざまな要素で構成されています:
各XRP Ledgerサーバは常に、進行中の _オープン_ レジャー、保留中の _閉鎖済み_ レジャー、そして確定済みの _検証済み_ レジャーの履歴を持っており、これらは変更不可(immutable)です。
![図: レジャーにはトランザクション、状態ツリー、閉鎖時刻、検証情報を含むヘッダーが含まれています。](img/anatomy-of-a-ledger-simplified.ja.png)
1つのレジャーバージョンはいくつかの要素から構成されています。
{{ include_svg("img/anatomy-of-a-ledger-simplified.svg", "レジャーにはトランザクション、状態ツリー、閉鎖時刻、検証情報を含むヘッダーが含まれています。")}}
* **ヘッダー** - [レジャーインデックス][]、レジャーのその他のコンテンツのハッシュ、その他のメタデータ。
* **トランザクションツリー** - このレジャーの作成時に、直前のレジャーに適用された[トランザクション](transaction-formats.html)。トランザクションは、レジャーの変更を可能にする _唯一の_ 手段です。
* **状態ツリー** - このバージョンのレジャーの設定、残高、オブジェクトを含むすべての[レジャーオブジェクト](ledger-object-types.html)。
* **状態ツリー** - このレジャーの設定、残高などを含むすべての[レジャーエントリ](ledger-object-types.html)。
## ツリーの形式
レジャーの状態ツリーは、その名前のとおりツリー型データ構造です。状態ツリーの各オブジェクトは256ビットのオブジェクトIDで識別されます。JSONではレジャーオブジェクトのIDは`index`フィールドです。このフィールドには64文字の16進数文字列が含まれています例: `"193C591BF62482468422313F9D3274B5927CA80B4DD3707E42015DD609E39C94"`。状態ツリーの各オブジェクトには、オブジェクトの検索に使用できるIDが設定されています。各トランザクションには、トランザクションツリーでトランザクションを検索するときに使用できる識別用ハッシュが含まれています。レジャーオブジェクトの`index`IDと[レジャーの`ledger_index`(シーケンス番号)][レジャーインデックス]を混同しないでください。
**ヒント:** レジャーの状態ツリーのオブジェクトは「レジャーノード」と呼ばれることもあります。たとえばトランザクションメタデータは`AffectedNodes`のリストを返します。これをピアツーピアネットワークの「ノード」(サーバー)と混同しないでください。
トランザクションの場合、識別用ハッシュは署名済みトランザクションの指示に基づいていますが、検索時のトランザクションオブジェクトにはトランザクションの結果とメタデータが含まれています。これは、ハッシュの生成時には反映されません。
<!-- TODO: translate these new sections -->
## Open, Closed, and Validated Ledgers
The `rippled` server makes a distinction between ledger versions that are _open_, _closed_, and _validated_. A server has one open ledger, any number of closed but unvalidated ledgers, and an immutable history of validated ledgers. The following table summarizes the difference:
| Ledger Type: | Open | Closed | Validated |
|:---------------------------------|:----------------------------|:-------------------------------------------|:--|
| **Purpose:** | Temporary workspace | Proposed next state | Confirmed previous state |
| **Number used:** | 1 | Any number, but usually 0 or 1 | One per ledger index, growing over time |
| **Can contents change?** | Yes | No, but the whole ledger could be replaced | Never |
| **Transactions are applied in:** | The order they are received | Canonical order | Canonical order |
Unintuitively, the XRP Ledger never "closes" an open ledger to convert it into a closed ledger. Instead, the server throws away the open ledger, creates a new closed ledger by applying transactions on top of a previous closed ledger, then creates a new open ledger using the latest closed ledger as a base. This is a consequence of [how consensus solves the double-spend problem](consensus-principles-and-rules.html#問題の単純化).
For an open ledger, servers apply transactions in the order those transactions appear, but different servers may see transactions in different orders. Since there is no central timekeeper to decide which transaction was actually first, servers may disagree on the exact order of transactions that were sent around the same time. Thus, the process for calculating a closed ledger version that is eligible for [validation](consensus-structure.html#検証) is different than the process of building an open ledger from proposed transactions in the order they arrive. To create a "closed" ledger, each XRP Ledger server starts with a set of transactions and a previous, or "parent", ledger version. The server puts the transactions in a canonical order, then applies them to the previous ledger in that order. The canonical order is designed to be deterministic and efficient, but hard to game, to increase the difficulty of front-running Offers in the [decentralized exchange](decentralized-exchange.html).
Thus, an open ledger is only ever used as a temporary workspace, which is a major reason why transactions' [tentative results may vary from their final results](finality-of-results.html).
## Ledger Close Times
The time that a ledger version closed is recorded at the `close_time` field of the [ledger header](ledger-header.html). To make it easier for the network to reach a consensus on an exact close time, this value is rounded to a number of seconds based on the close time resolution, currently 10 seconds. If rounding would cause a ledger's close time to be the same as (or earlier than) its parent ledger's, the child ledger has its close time set to the parent's close time plus 1. This guarantees that the close times of validated ledgers are strictly increasing. <!-- STYLE_OVERRIDE: a number of -->
Since new ledger versions usually close about every 3 to 5 seconds, these rules result in a loose pattern where ledgers' close times end in :00, :01, :02, :10, :11, :20, :21, and so on. Times ending in 2 are less common and times ending in 3 are very rare, but both occur randomly when more ledgers randomly happen to close within a 10-second window.
Generally speaking, the ledger cannot make any time-based measurements that are more precise than the close time resolution. For example, to check if an object has passed an expiration date, the rule is to compare it to the close time of the parent ledger. (The close time of a ledger is not yet known when executing transactions to go into that ledger.) This means that, for example, an [Escrow](escrow.html) could successfully finish at a real-world time that is up to about 10 seconds later than the time-based expiration specified in the Escrow object.
### Example
The following examples demonstrate the rounding behavior of ledger close times, from the perspective of an example validator, following a ledger with the close time **12:00:00**:
**Current consensus round**
1. A validator notes that it was **12:00:03** when the ledger closed and entered consensus. The validator includes this close time in its proposals.
2. The validator observes that most other validators (on its UNL) proposed a close time of 12:00:02, and one other proposed a close time of 12:00:03. It changes its proposed close time to match the consensus of **12:00:02**.
3. The validator rounds this value to the nearest close time interval, resulting in **12:00:00**.
4. Since 12:00:00 is not greater than the previous ledger's close time, the validator adjusts the close time to be exactly 1 second after the previous ledger's close time. The result is an adjusted close time of **12:00:01**.
5. The validator builds the ledger with these details, calculates the resulting hash, and confirms in the [validation step](consensus-structure.html#検証) that others did the same.
Non-validating servers do all the same steps, except they don't propose their recorded close times to the rest of the network.
**Next consensus round**
1. The next ledger enters consensus at **12:00:04** according to most validators.
2. This rounds down again, to a close time of **12:00:00**.
3. Since this is not greater than the previous ledger's close time of 12:00:01, the adjusted close time is **12:00:02**.
**Next consensus round after that**
1. The ledger after that enters consensus at **12:00:05** according to most validators.
2. This rounds up, based on the close time resolution, to **12:00:10**.
3. Since this value is larger than the previous ledger's close time, it does not need to be adjusted. **12:00:10** becomes the official close time.
## 関連項目
レジャーヘッダー、レジャーオブジェクトID、レジャーオブジェクトタイプについての詳細は、[レジャーデータフォーマット](ledger-data-formats.html)を参照してください。
- レジャーヘッダー、レジャーオブジェクトID、レジャーオブジェクトタイプの詳細については、[レジャーデータ](ledger-data-formats.html)をご覧ください。
- レジャーの状態の変更履歴を追跡する方法については、[レジャーの履歴](ledger-history.html)をご覧ください。
<!--{# common link defs #}-->

View File

@@ -0,0 +1,23 @@
---
html: open-closed-validated-ledgers.html
parent: ledgers.html
blurb: レジャーオブジェクトには、オープン、閉鎖済み、検証済みの3つの状態があります。
labels:
- ブロックチェーン
---
# オープン、閉鎖済み、および検証済みレジャー
`rippled`サーバはレジャーのバージョンを _オープン(open)_、_閉鎖済み(closed)_、_検証済み(validated)_ に区別します。サーバはオープンなレジャーを1つ、閉鎖済みだが未検証のレジャーをいくつでも、そして検証済みレジャーの変更不可能な履歴を持ちます。以下の表はその違いをまとめたものです。
| レジャーの種類: | オープン | 閉鎖済み | 検証済み |
|:--------------------------|:--------------|:--------------------------------------------|:--|
| **目的:** | 一時的な作業領域 | 次の状態の提案 | 直前の状態の確認 |
| **使用する数:** | 1 | 任意の数、通常は0または1 | レジャーインデックスごとに1つ、時間の経過とともに増加 |
| **内容は変更可能?** | はい | いいえ、ただし、別のレジャーが採用される可能性あり。 | いいえ |
| **トランザクションの適用方法:** | 受信順 | 正規順序 | 正規順序 |
直感に反し、XRP Ledgerはオープンレジャーを「閉鎖」して閉鎖済みレジャーへと変換することはありません。その代わりに、サーバはオープンレジャーを捨て、以前の閉鎖済みレジャーの上にトランザクションを適用して閉鎖済みレジャーを作成し、最新の閉鎖済みレジャーをベースとして新しいオープンレジャーを作成します。これは、[コンセンサスが二重支出問題を解決する方法](consensus-principles-and-rules.html#simplifying-the-problem)の結果と言えます。
オープンレジャーでは、サーバはトランザクションを受信した順番にトランザクションを適用しますが、サーバによってトランザクションが異なる順番で表示されることがあります。実際にどのトランザクションが先だったかを決定するための中心的なタイムキーパーが存在しないため、同じ時刻に送信されたトランザクションの正確な順序について、サーバ間で見解が一致しない可能性があります。したがって、[検証](consensus-structure.html#validation)の対象となる閉鎖済みのレジャーバージョンを計算するプロセスは、提案されたトランザクションを受信順に並べてオープンレジャーを構築するプロセスとは異なります。「閉鎖済み」レジャーを作成するために、各XRP Ledgerサーバは、トランザクションのセットと、以前、つまり「親」レジャーを使用します。サーバはトランザクションを正規順序に並べ、その順序で前のレジャーに適用します。正規順序は、[分散型取引所](decentralized-exchange.html)におけるオファーのフロントランニングの難易度を高めるために、決定論的で効率的であるが、悪用されにくいように設計されています。
このように、オープンレジャーは一時的な作業領域としてしか使用されないため、トランザクションの[暫定的な結果と最終的な結果が異なる可能性がある](finality-of-results.html)という大きな特徴があります。

View File

@@ -51,7 +51,7 @@ Amendmentが有効になるには、信頼できるバリデータの80%超か
### Amendmentブロックされたサーバ
<a id="amendment-blocked"></a>
AmendmentブロックはXRP Ledgerデータの正確性を守るためのセキュリティ機能です。Amendmentが有効になると、Amendmentのソースコードなしで以前のバージョンの`rippled`を実行しているサーバは、ネットワークのルールを認識できなくなります。レジャーデータを推測して誤って解釈するのではなく、これらのサーバーは**Amendmentブロック**された状態になります。Amendmentブロック状態のサーバは次のことが行えません。
AmendmentブロックはXRP Ledgerデータの正確性を守るためのセキュリティ機能です。Amendmentが有効になると、Amendmentのソースコードなしで以前のバージョンの`rippled`を実行しているサーバは、ネットワークのルールを認識できなくなります。レジャーデータを推測して誤って解釈するのではなく、これらのサーバーは**Amendmentブロック**された状態になります。Amendmentブロック状態のサーバは次のことが行えません。
* レジャーのバリデータの判断
* トランザクションの送信または処理

View File

@@ -8,7 +8,7 @@ labels:
---
# 認可トラストライン
XRP Ledgerの認可トラストライン機能により、発行者は、発行者が許可したアカウントのみが保有できるトークンを作成することができます。認可トラストライン機能はトークンにのみ適用され、XRPには影響しません。
XRP Ledgerの認可トラストライン機能により、発行者は、発行者が許可したアカウントのみが保有できるトークンを作成することができます。認可トラストライン機能はトークンにのみ適用され、XRPには影響しません。
認可トラストライン機能を使用するには、発行アドレスで**RequireAuth**フラグを有効にします。その後、他のアカウントは、あなたがそのアカウントのトラストラインをあなたの発行アカウントに承認した場合にのみ、あなたが発行したトークンを保持することができます。
@@ -27,7 +27,7 @@ XRP Ledger上のステーブルコインと認可トラストラインの使用
3. 顧客は[TrustSetトランザクション][]を送信し、発行者のアドレスにトラストラインを作成し、正のリミットを設定します。
4. 発行者はTrustSetトランザクションを送信し、顧客のトラストラインを認可します。
**ヒント:** 2つのTrustSetトランザクションステップ3および4は、どちらの順序で発生しても構いません。発行者がトラストラインを先に認可した場合、これにより限度額が0に設定されたトラストラインが作成され、顧客のTrustSetトランザクションは、事前に認可されたトラストラインの限度額を設定することになります。([TrustSetAuth amendment][]によって追加されました。)_
**ヒント:** 2つのTrustSetトランザクションステップ3および4は、どちらの順序で発生しても構いません。発行者がトラストラインを先に認可した場合、これにより限度額が0に設定されたトラストラインが作成され、顧客のTrustSetトランザクションは、事前に認可されたトラストラインの限度額を設定することになります。([TrustSetAuth amendment][]によ追加されました。)_
## 注意事項
認可トラストラインを使用するつもりがない場合でも、[運用アカウントと予備アカウント](account-types.html)のRequire Auth設定を有効にし、これらのアカウントにトラストラインを認可させないようにすることができます。これは、これらのアカウントが誤ってトークンを発行することを防止しますたとえば、ユーザーが誤って間違ったアドレスをトラストしてしまった場合など。これはあくまで予防措置であり、運用アカウントと予備アカウントが意図したとおりに _発行者の_ トークンを転送することを止めるものではありません。

View File

@@ -37,7 +37,7 @@ _([ExpandedSignerList amendment][]により更新されました。)_
また、リスト内の各署名者のエントリに最大256ビットの任意のデータを追加することができます。このデータはネットワークで必要とされたり使用されたりすることはありませんが、スマートコントラクトや他のアプリケーションが署名者に関する他のデータを特定したり確認したりするために使用することができます。
_([ExpandedSignerList amendment][]によって追加されました。)_
_([ExpandedSignerList amendment][]によ追加されました。)_
### Signer WeightとQuorumの使用例

View File

@@ -15,10 +15,10 @@ labels:
ネットワークとの同期は、通常はおよそ5分から15分で完了します。その間に、サーバーは次のようなさまざまなことを行います。
- 推奨バリデータリストを読み込み(通常は`vl.ripple.com`から)、信頼できるバリデータを判断します。
- 推奨バリデータリストを読み込み(例: `vl.ripple.com`)、信頼できるバリデータを判断します。
- [ピアサーバーを検出](peer-protocol.html#ピアの検出)して接続します。
- ピアから最新のレジャーの[ヘッダー](ledger-header.html)と完全な[状態情報](ledgers.html#ツリーの形式)をダウンロードし、それを使用してレジャーデータの内部データベースを構築します。
- 信頼できるバリデータをリッスンして、最近検証されたレジャーハッシュを見つけます。
- ピアから最新のレジャーを完全にダウンロードし、それを使ってレジャーデータの内部データベースを構築します。
- 新たにブロードキャストされたトランザクションを収集し、それを進行中のレジャーに適用します。
サーバーがこれらのタスクを行うときにネットワークに同調して対応できなかった場合は、サーバーはネットワークと同期しない状態になります。

View File

@@ -174,10 +174,10 @@ Connecting to 127.0.0.1:5005
|:----------------------------|:-----------------|:----------------------------|
| `hash` | 文字列 | (省略される場合があります)要求されるレジャーの[ハッシュ][](サーバーがこのハッシュを認識している場合)。 |
| `have_header` | ブール値 | 要求されたレジャーのヘッダーセクションがサーバーにあるかどうか。 |
| `have_state` | ブール値 | (省略される場合があります)要求されたレジャーの[アカウント状態セクション](ledgers.html#ツリーの形式)がサーバーにあるかどうか。 |
| `have_transactions` | ブール値 | (省略される場合があります)要求されたレジャーのトランザクションセクションがサーバーにあるかどうか。 |
| `needed_state_hashes` | 文字列の配列 | (省略される場合があります)サーバーが取得する必要がある[状態ツリー](ledgers.html#ツリーの形式)内のオブジェクトのハッシュ最大16個。 |
| `needed_transaction_hashes` | 文字列の配列 | (省略される場合があります)サーバーが取得する必要があるトランザクションツリー内のオブジェクトのハッシュ最大16個。 |
| `have_state` | ブール値 | (省略される場合があります)要求されたレジャーの完全な状態データがサーバーにあるかどうか。 |
| `have_transactions` | ブール値 | (省略される場合があります)要求されたレジャーの完全なトランザクションセットがサーバーにあるかどうか。 |
| `needed_state_hashes` | 文字列の配列 | (省略される場合があります)サーバーが取得する必要がある完全な状態データ内のオブジェクトのハッシュ最大16個。 |
| `needed_transaction_hashes` | 文字列の配列 | (省略される場合があります)サーバーが取得する必要があるトランザクションセットのオブジェクトのハッシュ最大16個。 |
| `peers` | 数値 | このレジャーを見つけるためにサーバーが照会するピアの数。 |
| `timeouts` | 数値 | これまでにこのレジャーの取得操作がタイムアウトした回数。 |

View File

@@ -206,7 +206,7 @@ rippled json ledger_entry '{ "directory": { "owner": "rf1BiGeXwwQoi8Z2ueFYTEXSwu
| フィールド | 型 | 説明 |
|:------------------------|:---------------------------|:----------------------|
| `offer` | オブジェクトまたは 文字列 | 取得する[オファーオブジェクト](offer.html)。文字列の場合、オファーに対する[一意のオブジェクトID](ledgers.html#ツリーの形式)を指定します。オブジェクトの場合、オファーを一意に識別するためのサブフィールド`account``seq`を指定します。 |
| `offer` | オブジェクトまたは 文字列 | 取得する[オファーオブジェクト](offer.html)。文字列の場合、オファーに対する[一意のオブジェクトID](ledger-object-ids.html)を指定します。オブジェクトの場合、オファーを一意に識別するためのサブフィールド`account``seq`を指定します。 |
| `offer.account` | 文字列 - [アドレス][] | _(`offer`がオブジェクト形式で指定されている場合、必須)_ オファーを作成したアカウント。 |
| `offer.seq` | 符号なし整数 | _(`offer`がオブジェクト形式で指定されている場合、必須)_ オファーオブジェクトを作成したトランザクションの[シーケンス番号][]。 |

View File

@@ -55,7 +55,7 @@ labels:
| `PreviousTxnLgrSeq` | 数値 | UInt32 | はい | 最後にこのオブジェクトを変更したトランザクションが記録された[レジャーインデックス][]。 |
| `RegularKey` | 文字列 | AccountID | いいえ | このアカウントのトランザクションに署名するときにマスターキーの代わりに使用できる[キーペア](cryptographic-keys.html)のアドレス。この値を変更するには[SetRegularKeyトランザクション][]を使用してください。 |
| `Sequence` | 数値 | UInt32 | はい | このアカウントの有効な次のトランザクションの[シーケンス番号](basic-data-types.html#アカウントシーケンス) を表します。 |
| `TicketCount` | 数値 | UInt32 | いいえ | このアカウントが台帳に保有する[チケット](tickets.html)の数です。これは、アカウントが一度に250 チケットという上限以内に留まることを保証するために自動的に更新されます。このフィールドは、チケットの数がゼロの場合は省略されます。 _([TicketBatch amendment][]によって追加されました)_ |
| `TicketCount` | 数値 | UInt32 | いいえ | このアカウントが台帳に保有する[チケット](tickets.html)の数です。これは、アカウントが一度に250 チケットという上限以内に留まることを保証するために自動的に更新されます。このフィールドは、チケットの数がゼロの場合は省略されます。 _([TicketBatch amendment][]によ追加されました)_ |
| `TickSize` | 数値 | UInt8 | いいえ | このアドレスが発行した通貨が関わるオファーの為替レートに使用する有効桁数。有効な値は`3`以上`15`以下です。_[TickSize Amendment][]が必要です。_ |
| `TransferRate` | 数値 | UInt32 | いいえ | このアカウントが発行した通貨を他のユーザーが相互に送金する際に、これらのユーザーに請求する[送金手数料](transfer-fees.html)。 |
| `WalletLocator` | 文字列 | Hash256 | いいえ | ユーザーが設定できる任意の256bit値。 |

View File

@@ -9,7 +9,7 @@ labels:
# DirectoryNode
[[ソース]](https://github.com/XRPLF/rippled/blob/5d2d88209f1732a0f8d592012094e345cbe3e675/src/ripple/protocol/impl/LedgerFormats.cpp#L44 "Source")
`DirectoryNode`オブジェクトタイプは、レジャーの状態ツリー内の他オブジェクトへのリンクのリストを提供します。概念上の1つの _ディレクトリー_ は、1つ以上の各DirectoryNodeオブジェクトが含まれる二重リンクリストの形式になっています。各DirectoryNodeオブジェクトには、他オブジェクトの[ID](ledgers.html#ツリーの形式)が最大32個まで含まれています。1番目のオブジェクトはディレクトリーのルートと呼ばれ、ルートオブジェクト以外のオブジェクトはすべて必要に応じて自由に追加または削除できます。
`DirectoryNode`オブジェクトタイプは、レジャーの状態ツリー内の他オブジェクトへのリンクのリストを提供します。概念上の1つの _ディレクトリー_ は、1つ以上の各DirectoryNodeオブジェクトが含まれる二重リンクリストの形式になっています。各DirectoryNodeオブジェクトには、他オブジェクトの[ID](ledger-object-ids.html)が最大32個まで含まれています。1番目のオブジェクトはディレクトリーのルートと呼ばれ、ルートオブジェクト以外のオブジェクトはすべて必要に応じて自由に追加または削除できます。
2種類のディレクトリーがあります。

View File

@@ -7,7 +7,7 @@ labels:
---
# NegativeUNL
_([NegativeUNL amendment][]によって追加されました。)_
_([NegativeUNL amendment][]によ追加されました。)_
`NegativeUNL`オブジェクトタイプは、[ネガティブUNL](negative-unl.html)の現在の状態、つまり現在オフラインであると考えられる信頼できるバリデーションのリストを含んでいます。

View File

@@ -73,7 +73,7 @@ _[MultiSign Amendment][]が必要です。_
|:---------------|:----------|:--------------|:--------------------------------|
| `Account` | 文字列 | AccountID | 署名がマルチシグに提供されるXRP Ledgerアドレス。レジャーの資金供給のあるアドレスである必要はありません。 |
| `SignerWeight` | 数値 | UInt16 | この署名者による署名の重み。マルチシグは、付与された署名の重みの合計がSignerListの`SignerQuorum`値を超えている場合にのみ有効となります。 |
| `WalletLocator` | 文字列 | Hash256 | 省略可任意の16進数データ。これは署名者を識別するため、または他の関連する目的のために使用することができます。[ExpandedSignerList amendment][]によって追加されました。 |
| `WalletLocator` | 文字列 | Hash256 | 省略可任意の16進数データ。これは署名者を識別するため、または他の関連する目的のために使用することができます。[ExpandedSignerList amendment][]によ追加されました。 |
マルチシグトランザクションを処理する際に、サーバーはトランザクション実行時にレジャーに関する`Account`値を間接参照します。アドレスが資金供給のある[AccountRootオブジェクト](accountroot.html)に対応して _いない_ 場合、そのアドレスに関連付けられているマスターシークレットによってのみ有効な署名を生成できます。アカウントがレジャーに _確かに_ 存在している場合は、アカウントの状態により異なります。アカウントにレギュラーキーが設定されている場合はレギュラーキーを使用できます。アカウントのマスターキーが無効化されていない場合に限り、アカウントのマスターキーを使用できます。マルチシグを別のマルチシグの一部として使用することはできません。

View File

@@ -7,7 +7,7 @@ labels:
---
# UNLModify
_([NegativeUNL amendment][]によって追加されました)_
_([NegativeUNL amendment][]によ追加されました)_
`UNLModify`[疑似トランザクション](pseudo-transaction-types.html)は[Negative UNL](negative-unl.html)の変更を示し、信頼できるバリデータがオフラインになったかオンラインに戻ってきたことを示します。

View File

@@ -38,9 +38,9 @@ AccountSetトランザクションは、[XRP Ledgerのアカウント](accountro
| `NFTokenMinter` | 文字列 | Blob | _(省略可)_ あなたのために[NFTokensをミントする](assign-an-authorized-minter-using-javascript.html)ことができる別のアカウント。 _([NonFungibleTokensV1_1 amendment][]により追加されました.)_ |
| [`SetFlag`](#accountsetのフラグ) | 数値 | UInt32 | _省略可_ このアカウントについてオプションを有効にするための整数フラグ。 |
| [`TransferRate`](#transferrate) | 符号なし整数 | UInt32 | _省略可_ ユーザーがこのアカウントの発行済み通貨を送金するときに請求される手数料。通貨単位の10億分の1で表現されます。手数料なしを意味する特殊なケースの`0`を除いて、`2000000000`より大きくしたり、`1000000000`より小さくしたりすることはできません。 |
| [`TickSize`](ticksize.html) | 符号なし整数 | UInt8 | _省略可_このアドレスによって発行されている通貨が関係するオファーに使用する為替レートの呼値の単位。それらのオファーの為替レートは、この有効桁数へと丸められます。有効な値は`3`から`15`、または無効にするための`0`です_[TickSize Amendment][]によって追加されました。_ |
| [`TickSize`](ticksize.html) | 符号なし整数 | UInt8 | _省略可_このアドレスによって発行されている通貨が関係するオファーに使用する為替レートの呼値の単位。それらのオファーの為替レートは、この有効桁数へと丸められます。有効な値は`3`から`15`、または無効にするための`0`です_[TickSize Amendment][]によ追加されました。_ |
| `WalletLocator` | 文字列 | Hash256 | _省略可_ 任意の256ビット値です。指定された場合、この値はアカウントの設定の一部として保存さ れますが、固有の定義や要件を持ちません。 |
| `WalletSize` | 数値 | UInt32 | _省略可_ 使用されません。このフィールドはAccountSetトランザクションで有効ですが、何の機能もありません。。 |
| `WalletSize` | 数値 | UInt32 | _省略可_ 使用されません。このフィールドはAccountSetトランザクションで有効ですが、何の機能もありません |
これらのオプションがいずれも指定されていない場合、AccountSetトランザクションは取引コストの消却以外に意味がありません。詳細は、[トランザクションのキャンセルまたはスキップ](cancel-or-skip-a-transaction.html)を参照してください。
@@ -74,7 +74,7 @@ AccountSetトランザクションは、[XRP Ledgerのアカウント](accountro
| `asfAccountTxnID` | 5 | (なし) | このアカウントの直近のトランザクションのIDを追跡します。[AccountTxnID](transaction-common-fields.html#accounttxnid)については必須です。 |
| `asfAuthorizedNFTokenMinter` | 10 | (なし) | このアカウントの代わりに、別のアカウントが非代替性トークンNFTokenをミントすることを許可するために使用します。認可されたアカウントを[AccountRoot](accountroot.html)オブジェクトの`NFTokenMinter`フィールドで指定します。認可されたアカウントを削除するには、このフラグを有効にして`NFTokenMinter`フィールドを省略します。 _([NonFungibleTokensV1_1 amendment][]により追加されました。)_ |
| `asfDefaultRipple` | 8 | `lsfDefaultRipple` | このアカウントのトラストラインでの[リップリング](rippling.html)をデフォルトで有効にします。 |
| `asfDepositAuth` | 9 | `lsfDepositAuth` | このアカウントに対して[Deposit Authorization](depositauth.html)を有効にします _[DepositAuth Amendment][]によって追加されました。_ |
| `asfDepositAuth` | 9 | `lsfDepositAuth` | このアカウントに対して[Deposit Authorization](depositauth.html)を有効にします _[DepositAuth Amendment][]によ追加されました。_ |
| `asfDisableMaster` | 4 | `lsfDisableMaster` | マスターキーペアの使用を禁止します。[レギュラーキー](cryptographic-keys.html)や[署名者リスト](multi-signing.html)など、トランザクションに署名するための別の手段がアカウントで設定されている場合のみ有効にできます。 |
| `asfDisallowIncomingCheck` | 13 | `lsfDisallowIncomingCheck` | チェックの着信をブロックします。_([DisallowIncoming amendment][] :not_enabled: が必要です。)_ |
| `asfDisallowIncomingNFTokenOffer` | 12 | `lsfDisallowIncomingNFTokenOffer` | NFTokenOffersの着信をブロックします。_([DisallowIncoming amendment][] :not_enabled: が必要です)_。 |

View File

@@ -99,7 +99,7 @@ AMMのLPトークンを使って落札すると、落札額はAMMに返金され
P = M
**注記:** 台帳を作成する際に、ネットワーク上のすべてのサーバーが同じ結果になるように、時間の計測は前回の台帳の[正規の終了時刻](ledgers.html#ledger-close-times) に基づいており、これはおおよその目安の時間です。
**注記:** 台帳を作成する際に、ネットワーク上のすべてのサーバーが同じ結果になるように、時間の計測は前回のレジャーの[正規の閉鎖時刻](ledger-close-times.html) に基づいており、これはおおよその目安の時間です。
## 払い戻し
@@ -115,7 +115,7 @@ R = B × (1 - t)
特殊なケースとして、オークションスロットの最終20番目区間では、払い戻し額は0となる。
**注記:** XRP Ledgerの時刻と同様に、トランザクション処理では _前回の_ 台帳の[正規の終了時刻](ledgers.html#ledger-close-times)を使用するため、実時間と最大で約10秒の差が生じる場合があります。
**注記:** XRP Ledgerの時刻と同様に、トランザクション処理では _前回の_ レジャーの[正規の閉鎖時刻](ledger-close-times.html)を使用するため、実時間と最大で約10秒の差が生じる場合があります。
## エラーケース

View File

@@ -8,7 +8,7 @@ labels:
# NFTokenMint
[[Source]](https://github.com/XRPLF/rippled/blob/master/src/ripple/app/tx/impl/NFTokenMint.cpp "Source")
The `NFTokenMint` transaction creates a non-fungible token and adds it to the relevant [NFTokenPage object][] of the `NFTokenMinter` as an [NFToken][] object. A required parameter to this transaction is the `Token` field specifying the actual token. This transaction is the only opportunity the `NFTokenMinter` has to specify any token fields that are defined as immutable (for example, the `TokenFlags`).
The `NFTokenMint` transaction creates a non-fungible token and adds it to the relevant [NFTokenPage object][] of the `NFTokenMinter` as an [NFToken][] object. This transaction is the only opportunity the `NFTokenMinter` has to specify any token fields that are defined as immutable (for example, the `TokenFlags`).
_(Added by the [NonFungibleTokensV1_1 amendment][].)_

View File

@@ -920,28 +920,32 @@ pages:
targets:
- en
# TODO: update translation. Some parts split into "ledger structure"
- md: concepts/ledgers/ledgers.ja.md
outdated_translation: true
targets:
- ja
# TODO: translate. Some parts taken from "ledgers.md"
- md: concepts/ledgers/ledger-structure.md
targets:
- en
- md: concepts/ledgers/ledger-structure.ja.md
targets:
- ja
# TODO: translate. Content mostly split off from "ledgers.md"
- md: concepts/ledgers/open-closed-validated-ledgers.md
targets:
- en
- md: concepts/ledgers/open-closed-validated-ledgers.ja.md
targets:
- ja
# TODO: translate. Content mostly split off from "ledgers.md"
- md: concepts/ledgers/ledger-close-times.md
targets:
- en
- md: concepts/ledgers/ledger-close-times.ja.md
targets:
- ja
# TODO: add a "ledger history" page that doesn't go too deep into
@@ -3730,7 +3734,7 @@ pages:
- name: キー生成メソッド
html: key-generation-methods.html
parent: admin-api-methods.html
blurb: 以下のメソッドを使用してキーを生成および管理することができます。
blurb: 以下のメソッドを使用してキーを生成および管理することができます。
template: pagetype-category.html.jinja
targets:
- ja
@@ -4256,6 +4260,7 @@ pages:
# TODO: translate
- md: infrastructure/rippled/installation/build-run-rippled-in-reporting-mode.md
top_nav_grouping: 人気ページ
untranslated_warning: true
targets:
- ja

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
<svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="850" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" viewBox="20 10 850 370" height="370" xmlns="http://www.w3.org/2000/svg" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto"
<svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="1080" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" viewBox="80 180 1080 350" height="350" xmlns="http://www.w3.org/2000/svg" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto"
><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs"
/><g
><defs id="defs1"
@@ -9,92 +9,95 @@
><path d="M0 0 L2147483647 0 L2147483647 2147483647 L0 2147483647 L0 0 Z"
/></clipPath
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"
><path d="M0 0 L0 30 L280 30 L280 0 Z"
><path d="M0 0 L0 30 L30 30 L30 0 Z"
/></clipPath
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath3"
><path d="M0 0 L0 40 L100 40 L100 0 Z"
><path d="M0 0 L0 30 L280 30 L280 0 Z"
/></clipPath
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath4"
><path d="M0 0 L0 70 L100 70 L100 0 Z"
><path d="M0 0 L0 60 L100 60 L100 0 Z"
/></clipPath
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath5"
><path d="M0 0 L0 80 L190 80 L190 0 Z"
><path d="M0 0 L0 70 L100 70 L100 0 Z"
/></clipPath
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath6"
><path d="M0 0 L0 80 L180 80 L180 0 Z"
/></clipPath
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath7"
><path d="M0 0 L0 70 L220 70 L220 0 Z"
><path d="M0 0 L0 80 L220 80 L220 0 Z"
/></clipPath
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath8"
><path d="M0 0 L0 80 L130 80 L130 0 Z"
><path d="M0 0 L0 240 L50 240 L50 0 Z"
/></clipPath
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath9"
><path d="M0 0 L0 30 L80 30 L80 0 Z"
><path d="M0 0 L0 80 L250 80 L250 0 Z"
/></clipPath
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath10"
><path d="M0 0 L0 140 L120 140 L120 0 Z"
><path d="M0 0 L0 40 L120 40 L120 0 Z"
/></clipPath
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath11"
><path d="M0 0 L0 30 L140 30 L140 0 Z"
/></clipPath
><clipPath clipPathUnits="userSpaceOnUse" id="clipPath12"
><path d="M0 0 L0 160 L220 160 L220 0 Z"
><path d="M0 0 L0 160 L140 160 L140 0 Z"
/></clipPath
></defs
><g font-size="14px" font-weight="bold" font-family="sans-serif" transform="translate(40,30)"
><g font-family="sans-serif" font-size="14px" transform="translate(510,300)"
><text x="5" xml:space="preserve" y="18.1094" clip-path="url(#clipPath2)" stroke="none"
>+</text
></g
><g font-size="14px" font-weight="bold" font-family="sans-serif" transform="translate(100,210)"
><text x="5" xml:space="preserve" y="18.1094" clip-path="url(#clipPath3)" stroke="none"
>Address Encoding</text
></g
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(570,180)" stroke-opacity="0" stroke="rgb(255,255,255)"
><path d="M0.5 0.5 L80.5 0.5 L99 20.5 L80.5 39 L0.5 39 Z" stroke="none" clip-path="url(#clipPath3)"
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(860,330)" stroke-opacity="0" stroke="rgb(255,255,255)"
><path d="M0.5 0.5 L80.5 0.5 L99 30.5 L80.5 59 L0.5 59 Z" stroke="none" clip-path="url(#clipPath4)"
/></g
><g transform="translate(570,180)"
><path fill="none" d="M0.5 0.5 L80.5 0.5 L99 20.5 L80.5 39 L0.5 39 Z" clip-path="url(#clipPath3)"
/><text x="24" font-size="14px" y="25.0547" clip-path="url(#clipPath3)" font-family="sans-serif" stroke="none" xml:space="preserve"
><g transform="translate(860,330)"
><path fill="none" d="M0.5 0.5 L80.5 0.5 L99 30.5 L80.5 59 L0.5 59 Z" clip-path="url(#clipPath4)"
/><text x="24" font-size="14px" y="35.0547" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" xml:space="preserve"
>base58</text
></g
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(380,290)" stroke-opacity="0" stroke="rgb(255,255,255)"
><rect x="0.5" width="98.5" height="68.5" y="0.5" clip-path="url(#clipPath4)" stroke="none"
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(670,350)" stroke-opacity="0" stroke="rgb(255,255,255)"
><rect x="0.5" width="98.5" height="68.5" y="0.5" clip-path="url(#clipPath5)" stroke="none"
/></g
><g transform="translate(380,290)"
><rect fill="none" x="0.5" width="98.5" height="68.5" y="0.5" clip-path="url(#clipPath4)"
/><text x="13" font-size="14px" y="29.5" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" xml:space="preserve"
><g transform="translate(670,350)"
><rect fill="none" x="0.5" width="98.5" height="68.5" y="0.5" clip-path="url(#clipPath5)"
/><text x="13" font-size="14px" y="29.5" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" xml:space="preserve"
>Checksum</text
><path fill="none" d="M1 35.5 L99 35.5" clip-path="url(#clipPath4)"
/><text x="18" font-size="14px" y="50.6094" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" xml:space="preserve"
><path fill="none" d="M1 35.5 L99 35.5" clip-path="url(#clipPath5)"
/><text x="18" font-size="14px" y="50.6094" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" xml:space="preserve"
>(4 bytes)</text
></g
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(40,160)" stroke-opacity="0" stroke="rgb(255,255,255)"
><rect x="0.5" width="188.5" height="78.5" y="0.5" clip-path="url(#clipPath5)" stroke="none"
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(430,210)" stroke-opacity="0" stroke="rgb(255,255,255)"
><rect x="0.5" width="178.5" height="78.5" y="0.5" clip-path="url(#clipPath6)" stroke="none"
/></g
><g transform="translate(40,160)"
><rect fill="none" x="0.5" width="188.5" height="78.5" y="0.5" clip-path="url(#clipPath5)"
/><text x="55" font-size="14px" y="26.4453" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" xml:space="preserve"
><g transform="translate(430,210)"
><rect fill="none" x="0.5" width="178.5" height="78.5" y="0.5" clip-path="url(#clipPath6)"
/><text x="50" font-size="14px" y="26.4453" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
>Type Prefix</text
><path fill="none" d="M1 32.4453 L189 32.4453" clip-path="url(#clipPath5)"
/><text x="77" font-size="14px" y="47.5547" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" xml:space="preserve"
><path fill="none" d="M1 32.4453 L179 32.4453" clip-path="url(#clipPath6)"
/><text x="72" font-size="14px" y="47.5547" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
>0x00</text
><text x="23" font-size="14px" y="63.6641" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" xml:space="preserve"
><text x="18" font-size="14px" y="63.6641" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
>("r" in XRPL base58)</text
></g
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(670,160)" stroke-opacity="0" stroke="rgb(255,255,255)"
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(960,320)" stroke-opacity="0" stroke="rgb(255,255,255)"
><rect x="0.5" width="178.5" height="78.5" y="0.5" clip-path="url(#clipPath6)" stroke="none"
/></g
><g transform="translate(670,160)"
><g transform="translate(960,320)"
><rect fill="none" x="0.5" width="178.5" height="78.5" y="0.5" clip-path="url(#clipPath6)"
/><text x="61" font-size="14px" y="26.4453" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
/><text x="61" font-size="14px" y="18.3906" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
>Address</text
><path fill="none" d="M1 32.4453 L179 32.4453" clip-path="url(#clipPath6)"
/><text x="16" font-size="14px" y="47.5547" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
><path fill="none" d="M1 24.3906 L179 24.3906" clip-path="url(#clipPath6)"
/><text x="20" font-size="14px" y="39.5" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
>Type Prefix (1 byte)</text
><text x="16" font-size="14px" y="55.6094" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
>AccountID (20 bytes)</text
><text x="19" font-size="14px" y="63.6641" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
><text x="19" font-size="14px" y="71.7188" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
>Checksum (4 bytes)</text
></g
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(340,160)" stroke-opacity="0" stroke="rgb(255,255,255)"
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(430,340)" stroke-opacity="0" stroke="rgb(255,255,255)"
><rect x="0.5" width="178.5" height="78.5" y="0.5" clip-path="url(#clipPath6)" stroke="none"
/></g
><g transform="translate(340,160)"
><g transform="translate(430,340)"
><rect fill="none" x="0.5" width="178.5" height="78.5" y="0.5" clip-path="url(#clipPath6)"
/><text x="51" font-size="14px" y="34.5" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
>Account ID</text
@@ -102,46 +105,50 @@
/><text x="54" font-size="14px" y="55.6094" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
>(20 bytes)</text
></g
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(40,70)" stroke-opacity="0" stroke="rgb(255,255,255)"
><rect x="0.5" width="218.5" height="68.5" y="0.5" clip-path="url(#clipPath7)" stroke="none"
><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(100,340)" stroke-opacity="0" stroke="rgb(255,255,255)"
><rect x="0.5" width="218.5" height="78.5" y="0.5" clip-path="url(#clipPath7)" stroke="none"
/></g
><g transform="translate(40,70)"
><rect fill="none" x="0.5" width="218.5" height="68.5" y="0.5" clip-path="url(#clipPath7)"
/><text x="47" font-size="14px" y="21.4453" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" xml:space="preserve"
><g transform="translate(100,340)"
><rect fill="none" x="0.5" width="218.5" height="78.5" y="0.5" clip-path="url(#clipPath7)"
/><text x="47" font-size="14px" y="26.4453" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" xml:space="preserve"
>Master Public Key</text
><path fill="none" d="M1 27.4453 L219 27.4453" clip-path="url(#clipPath7)"
/><text x="33" font-size="14px" y="42.5547" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" xml:space="preserve"
><path fill="none" d="M1 32.4453 L219 32.4453" clip-path="url(#clipPath7)"
/><text x="33" font-size="14px" y="47.5547" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" xml:space="preserve"
>33 bytes (secp256k1)</text
><text x="12" font-size="14px" y="58.6641" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" xml:space="preserve"
><text x="12" font-size="14px" y="63.6641" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" xml:space="preserve"
>0xED + 32 bytes (Ed25519)</text
></g
><g transform="translate(400,230)"
><path fill="none" d="M10.5 59.5 L10.5 10.5" clip-path="url(#clipPath8)"
/><path fill="none" d="M17 48.7417 L10.5 60 L4 48.7417" clip-path="url(#clipPath8)"
/><text x="14" font-size="14px" y="43.0547" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" xml:space="preserve"
><g stroke-dasharray="1,2" stroke-miterlimit="5" transform="translate(610,200)" stroke-linecap="butt"
><path fill="none" d="M10.5 10.5 L30.5 10.5" clip-path="url(#clipPath8)"
/><path fill="none" d="M30.5 10.5 L30.5 220.5" clip-path="url(#clipPath8)"
/><path fill="none" d="M30.5 220.5 L10.5 220.5" clip-path="url(#clipPath8)"
/></g
><g transform="translate(630,290)"
><path fill="none" d="M60.5 59.5 L60.5 10.5" clip-path="url(#clipPath6)"
/><path fill="none" d="M60.5 10.5 L10.5 10.5" clip-path="url(#clipPath6)"
/><path fill="none" d="M67 48.7417 L60.5 60 L54 48.7417" clip-path="url(#clipPath6)"
/><text x="64" font-size="14px" y="43.0547" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve"
>SHA-256 twice</text
></g
><g transform="translate(510,180)"
><path fill="none" d="M59.5 10.5 L10.5 10.5" clip-path="url(#clipPath9)"
/><path fill="none" d="M48.7417 4 L60 10.5 L48.7417 17" clip-path="url(#clipPath9)"
><g transform="translate(630,290)"
><path fill="none" d="M229.5 60.5 L210.5 60.5" clip-path="url(#clipPath9)"
/><path fill="none" d="M210.5 60.5 L210.5 10.5" clip-path="url(#clipPath9)"
/><path fill="none" d="M210.5 10.5 L10.5 10.5" clip-path="url(#clipPath9)"
/><path fill="none" d="M218.7417 54 L230 60.5 L218.7417 67" clip-path="url(#clipPath9)"
/></g
><g transform="translate(470,200)"
><g transform="translate(760,360)"
><path fill="none" d="M99.5 10.5 L80.5 10.5" clip-path="url(#clipPath10)"
/><path fill="none" d="M80.5 10.5 L80.5 120.5" clip-path="url(#clipPath10)"
/><path fill="none" d="M80.5 120.5 L10.5 120.5" clip-path="url(#clipPath10)"
/><path fill="none" d="M80.5 10.5 L80.5 20.5" clip-path="url(#clipPath10)"
/><path fill="none" d="M80.5 20.5 L10.5 20.5" clip-path="url(#clipPath10)"
/><path fill="none" d="M88.7417 4 L100 10.5 L88.7417 17" clip-path="url(#clipPath10)"
/></g
><g transform="translate(220,200)"
><path fill="none" d="M119.5 10.5 L10.5 10.5" clip-path="url(#clipPath11)"
/><path fill="none" d="M108.7417 4 L120 10.5 L108.7417 17" clip-path="url(#clipPath11)"
/></g
><g transform="translate(250,70)"
><path fill="none" d="M89.5 110.5 L40.5 110.5" clip-path="url(#clipPath12)"
/><path fill="none" d="M40.5 110.5 L40.5 40.5" clip-path="url(#clipPath12)"
/><path fill="none" d="M40.5 40.5 L10.5 40.5" clip-path="url(#clipPath12)"
/><path fill="none" d="M78.7417 104 L90 110.5 L78.7417 117" clip-path="url(#clipPath12)"
/><text x="44" font-size="14px" y="66.9453" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" xml:space="preserve"
>RIPEMD160 of SHA-256</text
><g transform="translate(310,350)"
><path fill="none" d="M119.5 20.5 L10.5 20.5" clip-path="url(#clipPath11)"
/><path fill="none" d="M108.7417 14 L120 20.5 L108.7417 27" clip-path="url(#clipPath11)"
/><text x="16.2153" font-size="14px" y="48.2188" clip-path="url(#clipPath11)" font-family="sans-serif" stroke="none" xml:space="preserve"
>RIPEMD160 of </text
><text x="35.5166" font-size="14px" y="64.3281" clip-path="url(#clipPath11)" font-family="sans-serif" stroke="none" xml:space="preserve"
>SHA-256</text
></g
></g
></svg

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

View File

@@ -36,7 +36,7 @@
>Address</text
><path fill="none" d="M1 24.1094 L159 24.1094" clip-path="url(#clipPath2)"
/><text x="5" font-size="14px" y="39.2188" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
>24 bytes (classic)</text
>25 bytes (classic)</text
><text x="5" font-size="14px" y="55.3281" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve"
>32 bytes (X-address)</text
></g

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -298,77 +298,6 @@
<div class="position-relative d-none-sm">
<img alt="" src="./img/backgrounds/funding-orange.svg" id="funding-orange">
</div>
<section class="container-new py-26">
<div class="p-0 col-lg-6 mx-lg-auto" style="max-width: 520px;">
<div class="d-flex flex-column-reverse">
<h1 class="mb-0 h4">{% trans %}XRPL Bounties{% endtrans %}</h1>
<h6 class="eyebrow mb-3">{% trans %}Go Deep{% endtrans %}</h6>
</div>
<p class="mt-3 py-3 p-0 longform pb-4 mb-0">{% trans %}Bounties are awards for developing software and integrations that enable and improve specific use cases for the XRP Ledger.{% endtrans %}</p>
<div class="row m-0 funding-list pt-2 mt-2 pt-lg-2 mt-lg-5">
<!-- funding list -->
<div class="col-12 col-lg-6 p-0 pr-lg-4">
<div class="pb-3 mb-lg-5 funding-box">
<img id="funding-01" src="data:," />
<div class="pt-3">
<h6 class="mb-3">{% trans %}Best for{% endtrans %}</h6>
<p>{% trans %}Software developers and teams{% endtrans %}</p>
</div>
</div>
<!-- Hide on large -->
<div class="pb-3 d-lg-none">
<img id="funding-02" src="data:," />
<div class="pt-3">
<h6 class="mb-3">{% trans %}Required{% endtrans %}</h6>
<p>{% trans %}Coding experience <span style="color: #7919FF;">&bull;</span> Specialized skills (depending on the bounty){% endtrans %}</p>
</div>
</div>
<div class="pb-3">
<img id="funding-03" src="data:," />
<div class="pt-3">
<h6 class="mb-3">{% trans %}Level{% endtrans %}</h6>
<p>{% trans %}Intermediate to advanced (prior XRPL experience not required){% endtrans %}</p>
</div>
</div>
<!-- Hide on large -->
<div class="px-lg-3 pb-3 d-lg-none">
<img id="funding-04" src="data:," />
<div class="pt-3">
<h6 class="mb-3">{% trans %}Funding Levels{% endtrans %}</h6>
<p>{% trans %}$500 - $100,000 per milestone{% endtrans %}</p>
</div>
</div>
</div>
<!-- end col 1 -->
<!-- Show on large -->
<div class="col-12 col-lg-6 p-0 d-none d-lg-block">
<div class="px-lg-3 pb-3 mb-lg-5 funding-box">
<img id="funding-02" src="data:," />
<div class="pt-3">
<h6 class="mb-3">{% trans %}Required{% endtrans %}</h6>
<p>{% trans %}Intermediate to advanced (prior XRPL experience not required){% endtrans %}</p>
</div>
</div>
<div class="px-lg-3 pb-3">
<img id="funding-04" src="data:," />
<div class="pt-3">
<h6 class="mb-3">{% trans %}Funding Levels{% endtrans %}</h6>
<p>{% trans %}$500 - $100,000 per milestone{% endtrans %}</p>
</div>
</div>
</div>
<!-- end col 2 -->
</div>
<div class="d-none d-lg-block py-lg-3">
<a class="btn btn-primary btn-arrow-out" target="_blank" href="https://xrplbounties.org/">{% trans %}Visit XRPL Bounties{% endtrans %}</a>
</div>
</div>
</section>
{% endblock %}

View File

@@ -5,6 +5,5 @@
TZ="UTC" pybabel extract -F ./locale/babel.cfg -o ./locale/messages.pot ./
pybabel update -l ja -d ./locale/ -i ./locale/messages.pot
pybabel update -l hi -d ./locale/ -i ./locale/messages.pot
pybabel compile -f -d ./locale/