Update Japanese translation files

This commit is contained in:
mDuo13
2020-06-05 17:21:18 -07:00
parent 5d47d4f288
commit fcad9d0376
110 changed files with 9094 additions and 2955 deletions

46
CODE_OF_CONDUCT.ja.md Normal file
View File

@@ -0,0 +1,46 @@
# コントリビューター行動規範
## 誓約
私たちコントリビューターとメンテナーは、オープンで友好的な環境を育むために、年齢、体格、身体障害、民族、性的特徴、性自認および性表現、経験の度合い、学歴、社会経済的地位、国籍、容姿、人種、宗教、性的同一性および性的指向などを問わず、誰もが私たちのプロジェクトとコミュニティーに不快な思いをすることなく参加できるよう努めることを誓います。
## 標準
前向きな環境を作り上げることに貢献する行動の例:
* 友好的で差別のない言葉の使用
* 異なる観点や経験の尊重
* 建設的な批判の素直な受け入れ
* コミュニティーにとっての最善への注力
* 他のコミュニティーメンバーへの共感の表示
前向きな環境を作り上げることに貢献しない行動の例:
* 性的な意味を含む言葉や画像の使用、望まない性的注目や誘いかけ
* あおり、侮辱的または軽蔑的なコメント、個人攻撃や政治攻撃
* 公的または私的な嫌がらせ
* 住所やメールアドレスなどの個人情報の、明確な許可なしでの公開
* 職場において不適切であると合理的に考えられる、その他の行為
## 責任
プロジェクトのメンテナーは、許容できる行動の基準を明確にする責任があります。また、許容できない行動がなされた場合に、適切かつ公平な是正処置を講じることが期待されます。
プロジェクトのメンテナーは、この行動規範に沿わないコメント、コミット、コード、wiki編集、issueなどの投稿を削除、編集、拒否する権利と義務を有します。また、他の不適切、脅迫的、攻撃的、嫌がらせと考えられる行動を取ったコントリビューターを一時的もしくは恒久的に追放する権利と義務を有します。
## 適用範囲
この行動規範はすべてのプロジェクトスペース内で適用されます。また、個人がパブリックスペースでプロジェクトやコミュニティーを代表する際にも適用されます。プロジェクトやコミュニティーを代表する際の例としては、プロジェクトの公式メールアドレスを使用すること、公式ソーシャルメディアアカウントで投稿すること、もしくはオンラインまたはオフラインのイベントで、任命された代表者を務めることが挙げられます。プロジェクトを代表する行為については、プロジェクトのメンテナーがさらに細かく定義して明確にすることができます。
## 執行
暴言、嫌がらせ、またはその他の許容できない行動は、プロジェクトチーム(<xpring@ripple.com>)に連絡して報告することができます。すべての申し立ては確認、調査されたうえで、その状況に対して必要かつ適切と判断された対応が取られます。プロジェクトチームは、事象の報告者に関する秘密を保持する義務があります。特定の執行方針の詳細は、別途掲載される場合があります。
この行動規範を誠実に遵守または執行することができないプロジェクトのメンテナーは、プロジェクトを率いる他のメンバーの判断により、一時的または恒久的な措置が執られることがあります。
## 帰属
この行動規範は、[コントリビューター行動規範][ホームページ]バージョン1.4https://www.contributor-covenant.org/version/1/4/code-of-conduct.htmlから抜粋したものです。
[ホームページ]: https://www.contributor-covenant.org
この行動規範に関するよくある質問と回答については、https://www.contributor-covenant.org/faq をご覧ください。

183
CONTRIBUTING.ja.md Normal file
View File

@@ -0,0 +1,183 @@
# コントリビューション
XRP Ledger開発者ポータルへのコントリビューションをご検討いただきありがとうございます。
ぜひ、皆様の力をお貸しくださいますようお願いいたします。ご協力いただくことで、XRP LedgerXRPLへの理解を深めることができます。
また、XRPLと併せて、[インターレジャープロトコルILP](https://interledger.org/)を学習することもおすすめいたします。ILPも[Xpring開発者エコシステム](https://xpring.io)の一部です。
皆様からのプルリクエストをお待ちしております。プルリクエストのレビュー工程をできるだけ円滑に進めるためにも、本ドキュメントをお読みいただき、記載されているガイドラインに従ってください。
ご提供いただいたコードは、XRP Ledgerプロジェクトの著作物となり、MIT[ライセンス](LICENSE)に基づいて提供いたします。
## このサイトについて
XRPL開発者ポータルは、XRP Ledgerに関するドキュメントを幅広く提供します。これには、開発者がビルドを始めるためのサンプルコードなどの情報も含まれます。
## リポジトリーのレイアウト
- [assets/](assets/) - サイトのテンプレートに使用する静的ファイル。
- [content/](content/) - ドキュメントのビルドに使用するソースファイル。主にMarkdownです。
- [content/\_code-samples/](content/_code-samples/) - ドキュメントに使用するか、ドキュメントで参照するコードサンプル。可能であれば、完全に機能するか実行可能なスクリプトです。
- [content/\_img-sources/](content/_img-sources/) - ドキュメントで使用する画像のソースファイル。`.uxf`ファイルはすべて、[Umlet](https://www.umlet.com/)で作成された図です。
- [content/\_snippets/](content/_snippets/) - 再利用可能なMarkdownテキストのまとまり。Dactylプリプロセッサーを使用して他のコンテンツファイルに組み込みます。
- [img/](img/) - ドキュメントのコンテンツに使用する画像。
- [tool/](tool/) - テンプレート、スタイルチェッカーのルール、その他スクリプト。
- [`dactyl-config.yml`](dactyl-config.yml) - メインの設定ファイル。すべてのドキュメントのメタデータが含まれます。規約についての詳細は、[設定の書式](#設定の書式)を参照してください。
## プルリクエストを成功させるための要件
プルリクエストがレビューまたはマージの対象になるためには、各プルリクエストが以下を満たしている必要があります。
- 継続的インティグレーションテストに合格している。
- レビューの準備ができるまでは[ドラフトのマークが付けられている](https://github.blog/2019-02-14-introducing-draft-pull-requests/)。
- このリポジトリーの[行動規範](CODE_OF_CONDUCT.md)に従っている。
## Dactylのセットアップ
このポータルは、[Dactyl](https://github.com/ripple/dactyl)を使用して構築されています。
Dactylには[Python 3](https://python.org/)が必要です。以下のようにして[pip](https://pip.pypa.io/en/stable/)でインストールしてください。
`sudo pip3 install dactyl`
## サイトのビルド
このリポジトリーでは、[**Dactyl**](https://github.com/ripple/dactyl)を使用して、すべてのドキュメントのHTML表示のバージョンをビルドできます。[Dactylのセットアップ](#dactylのセットアップ)が完了したら、プロジェクトのルートディレクトリーから以下のコマンドを使用してドキュメントをビルドできます。
```
dactyl_build
```
生成されたコンテンツが`out/`ディレクトリーに出力されます。これらのコンテンツは、ウェブブラウザーでファイルとして開くことも、ウェブサーバーで静的コンテンツとして提供することもできます。
同様に、ルートディレクトリーからリンクチェックやスタイルチェックを実行することもできます。
リンクチェックは、出力フォルダーを空にし、ドキュメントをビルドしてから実行する必要があります。
```
dactyl_link_checker
```
スタイルチェックは試験的なものです。
```
dactyl_style_checker
```
## 設定の書式
このリポジトリー内のテンプレートは`dactyl-config.yml`ファイルのメタデータを使用して、生成されたサイトをナビゲートする際のページ階層を生成します。ナビゲーションを正しく生成するには、ページの定義に適切なフィールドを含める必要があります。以下の例に、すべてのフィールドを指定したページを示します。
```
- md: concept-authorized-trust-lines.md
funnel: Docs
doc_type: Concepts
category: Payment System
subcategory: Accounts
targets:
- local
```
ナビゲーションには、フィールド`funnel``doc_type``category`、および`subcategory`をこの順序広範から詳細へで使用します。各階層では、新しい値が最初に記載されるページが、その階層の親かランディングとなります。例えば、「Accounts」サブカテゴリーの親には`subcategory: Accounts`フィールドがあり、子より前に記載されている必要があります。ランディングページの場合は、下位階層フィールドを省きます。例えば、「Concepts」doc_typeのランディングページには、`doc_type`フィールドは必要ですが、`category`フィールドは不要です。)
**警告:** いずれかのフィールドに入力ミスがあると、ページがナビゲーションに表示されないか、誤った場所に表示されるおそれがあります。
規約として、親ページには、親である階層と同じ名前が必要です。(例えば、`Payment System`カテゴリーのランディングページの名前は`Payment System`である必要があります。)`md`をソースとするファイルの名前は、そのファイルの最初の行のヘッダーによって自動的に決まります。
Markdownソースコンテンツのないページの場合は、`md`行を省き、代わりに以下のフィールドを記載します。
| フィールド | 内容 |
|:----------|:----------|
| `name` | 人間が読めるページ名(プレーンテキストのみ) |
| `html` | ページの出力ファイル名`.html`で終わり、ターゲット内で一意である必要があります。 |
## 翻訳
XRP Ledger開発者ポータルは主に英語で記載されているため、通常は英語版が最新かつ正確なバージョンです。しかし、XRP Ledgerのソフトウェアとコミュニティーの利用者を拡大するため、このリポジトリーには翻訳版のドキュメントも含まれています。他の言語を理解するコミュニティーのメンバーの皆様には、どうか開発者ポータルのコンテンツを母国語に翻訳していただけますようお願いいたします。
`dactyl-config.yml`には、使用可能な各言語の「ターゲット」項目が含まれます。2019年11月18日現在、使用可能な言語は英語と日本語です。この項目には、テンプレートファイルで使用する文字列の辞書が含まれています。例:
```yaml
- name: en
lang: en
display_name: XRP Ledger Dev Portal
# These github_ fields are used by the template's "Edit on GitHub" link.
# Override them with --vars to change which fork/branch to edit.
github_forkurl: https://github.com/ripple/xrpl-dev-portal
github_branch: master
strings:
blog: "Blog"
search: "Search site with Google..."
bc_home: "Home"
# ...
```
サポート対象の各言語のプロパティーをいくつか定義する最上位の`languages`リストもあります。各言語のショートコードは、[IETF BCP47](https://tools.ietf.org/html/bcp47)に沿ったものである必要があります。.例えば、英語は「en」、スペイン語は「es」、日本語は「ja」、簡体字中国語は「zh-CN」、繁体字中国語台湾で使用は「zh-TW」になります。`display_name`フィールドでは、言語名をその言語で記載して定義します。`prefix`フィールドでは、その言語版のサイトへのハイパーリンクに使用されるプレフィックスを定義します。`languages`のサンプルの定義を以下に示します。
```yaml
languages:
- code: en
display_name:English
prefix: "/"
- code: ja
display_name:日本語
prefix: "/ja/"
```
同じ`dactyl-config.yml`ファイルに、XRP Ledger開発者ポータルの各コンテンツページの項目が記載されています。ページが翻訳されている場合は、翻訳ごとに別個の項目があり、その翻訳「ターゲット」にリンクされています。ページがまだ翻訳されていない場合は、すべての対象に英語版が使用されます。各ページで、HTMLファイル名`html`フィールド)とナビゲーションフィールド(`funnel``doc_type``supercategory``category`、および`subcategory`。それぞれ、指定される場合)は、どの言語版のページでも同じである必要があります。翻訳版のページで内容の異なるフィールドは、以下のとおりです(いずれの場合においても、そのフィールドが項目で使用される場合に限ります)。
- **`name`** - ページのタイトル。通常は、Markdownソースファイルを使用しないランディングページや、[開発者用ツール](https://xrpl.org/dev-tools.html)などの独自のテンプレートを使用する特殊なページでのみ指定されます。通常、Markdownのファイルではこのフィールドが省かれます。Dactylはファイルの最初の行のヘッダーからタイトルを引き出すためです。
- **`md`** - ページのソースコンテンツとして使用するMarkdownファイル。規約として、翻訳したMarkdownソースファイルには英語版と同じファイル名を使用する必要があります。ただし、ファイルの拡張子は英語版のように`.md`のみでなく、`.{language code}.md`とする必要があります。例えば、日本語の翻訳ファイルは`.ja.md`で終わります。
- **`blurb`** - ページの要約。このテキストは主にcategoryランディングページで使用されます。
以下の例に、`server_info`メソッドページの英語の項目と日本語の項目を示します。
```yaml
- md: references/rippled-api/public-rippled-methods/server-info-methods/server_info.md
html: server_info.html
funnel: Docs
doc_type: References
supercategory: rippled API
category: Public rippled Methods
subcategory: Server Info Methods
blurb: Retrieve status of the server in human-readable format.
targets:
- en
- md: references/rippled-api/public-rippled-methods/server-info-methods/server_info.ja.md
html: server_info.html
funnel: Docs
doc_type: References
supercategory: rippled API
category: Public rippled Methods
subcategory: Server Info Methods
blurb: rippledサーバーについての各種情報を、人間が読めるフォーマットでサーバーに要求します。
targets:
- ja
```
翻訳されていないページの項目の例は以下のとおりです。
```yaml
- md: concepts/payment-system-basics/transaction-basics/source-and-destination-tags.md
html: source-and-destination-tags.html
funnel: Docs
doc_type: Concepts
category: Payment System Basics
subcategory: Transaction Basics
blurb: Use source and destination tags to indicate specific purposes for payments from and to multi-purpose addresses.
targets:
- en
- ja
```
### 最初にすべきこと
XRP Ledger開発者ポータルを任意の母国語に翻訳いただける場合は、XRP Ledgerの主要なプロパティーと機能について説明する[XRP Ledgerの概要ファイル](https://github.com/ripple/xrpl-dev-portal/blob/master/content/concepts/introduction/xrp-ledger-overview.md)から始めてください。
ファイル名は`xrp-ledger-overview.{language code}.md`で保存してください。`{language code}`は[IETF BCP47](https://tools.ietf.org/html/bcp47)の言語コードです。例えば、スペイン語は「es」、日本語は「ja」、簡体字中国語は「zh-CN」、台湾で使用される繁体字中国語は「zh-TW」などです。その後、このリポジトリーにファイルを追加する[プルリクエスト](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests)を開きます。リポジトリーのメンテナーが、サイトに言語を追加するために必要なその他のセットアップについてお手伝いします。
Markdownコンテンツのファイルについては、以下の規則に従ってください。
- 改行には改行文字(`\n`のみを使用しますUnix形式。復帰改行文字`\r`は使用しないでくださいWindows形式
- UTF-8エンコーディングを使用します。バイトオーダーマークは使用しないでください。

View File

@@ -0,0 +1,161 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.3.0">
<zoom_level>10</zoom_level>
<element>
<id>UMLObject</id>
<coordinates>
<x>0</x>
<y>70</y>
<w>220</w>
<h>70</h>
</coordinates>
<panel_attributes>マスター公開鍵
--
33バイト (secp256k1)
0xED + 32バイト (Ed25519)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLObject</id>
<coordinates>
<x>300</x>
<y>160</y>
<w>180</w>
<h>80</h>
</coordinates>
<panel_attributes>アカウントID
--
(20バイト)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>210</x>
<y>70</y>
<w>210</w>
<h>160</h>
</coordinates>
<panel_attributes>lt=&lt;-
SHA-256のRIPEMD160
</panel_attributes>
<additional_attributes>90.0;110.0;40.0;110.0;40.0;40.0;10.0;40.0</additional_attributes>
</element>
<element>
<id>UMLObject</id>
<coordinates>
<x>630</x>
<y>160</y>
<w>180</w>
<h>80</h>
</coordinates>
<panel_attributes>アドレス
--
アカウントID (20バイト)
チェックサム (4バイト)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLObject</id>
<coordinates>
<x>0</x>
<y>160</y>
<w>190</w>
<h>80</h>
</coordinates>
<panel_attributes>プレフィックスを入力
--
0x00
(XRPL base58の「r」)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>180</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>340</x>
<y>290</y>
<w>100</w>
<h>70</h>
</coordinates>
<panel_attributes>チェックサム
--
(4バイト)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>430</x>
<y>200</y>
<w>120</w>
<h>140</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>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>470</x>
<y>180</y>
<w>80</w>
<h>30</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>60.0;10.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>UMLState</id>
<coordinates>
<x>530</x>
<y>180</y>
<w>100</w>
<h>40</h>
</coordinates>
<panel_attributes>base58
type=sender</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>360</x>
<y>230</y>
<w>120</w>
<h>80</h>
</coordinates>
<panel_attributes>lt=&lt;-
SHA-256を2回</panel_attributes>
<additional_attributes>10.0;60.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Text</id>
<coordinates>
<x>0</x>
<y>30</y>
<w>280</w>
<h>30</h>
</coordinates>
<panel_attributes>*アドレスのエンコード*
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
</diagram>

View File

@@ -0,0 +1,414 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.3.0">
<zoom_level>11</zoom_level>
<element>
<id>UMLGeneric</id>
<coordinates>
<x>561</x>
<y>594</y>
<w>220</w>
<h>99</h>
</coordinates>
<panel_attributes>halign=left
rippledサーバー</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>594</x>
<y>528</y>
<w>55</w>
<h>88</h>
</coordinates>
<panel_attributes>lt=()-[WS]</panel_attributes>
<additional_attributes>20.0;10.0;20.0;60.0</additional_attributes>
</element>
<element>
<id>UMLGeneric</id>
<coordinates>
<x>341</x>
<y>396</y>
<w>187</w>
<h>77</h>
</coordinates>
<panel_attributes>halign=left
ripple-lib (JavaScript)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>660</x>
<y>528</y>
<w>99</w>
<h>88</h>
</coordinates>
<panel_attributes>lt=()-[JSON-RPC]</panel_attributes>
<additional_attributes>40.0;10.0;40.0;60.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>418</x>
<y>462</y>
<w>231</w>
<h>88</h>
</coordinates>
<panel_attributes>lt=)-</panel_attributes>
<additional_attributes>180.0;50.0;180.0;30.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>275</x>
<y>99</y>
<w>528</w>
<h>77</h>
</coordinates>
<panel_attributes>アプリとサービス
(取引所、ウォレット、エクスプローラー、他)
bg=white
style=wordwrap
transparency=0
group=1</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>264</x>
<y>88</y>
<w>528</w>
<h>77</h>
</coordinates>
<panel_attributes>bg=white
transparency=0
group=1</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>594</x>
<y>165</y>
<w>55</w>
<h>385</h>
</coordinates>
<panel_attributes>lt=)-</panel_attributes>
<additional_attributes>20.0;320.0;20.0;10.0</additional_attributes>
</element>
<element>
<id>UMLGeneric</id>
<coordinates>
<x>341</x>
<y>264</y>
<w>143</w>
<h>77</h>
</coordinates>
<panel_attributes>
halign=left
データAPI*</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>352</x>
<y>330</y>
<w>132</w>
<h>88</h>
</coordinates>
<panel_attributes>lt=[RippleAPI]-</panel_attributes>
<additional_attributes>70.0;60.0;10.0;30.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>352</x>
<y>209</y>
<w>99</w>
<h>77</h>
</coordinates>
<panel_attributes>lt=()-[REST相当]</panel_attributes>
<additional_attributes>40.0;10.0;40.0;50.0</additional_attributes>
</element>
<element>
<id>Text</id>
<coordinates>
<x>693</x>
<y>627</y>
<w>55</w>
<h>55</h>
</coordinates>
<panel_attributes>valign=center
halign=center
fontsize=7.5
内部
DB
bg=white
transparency=0
customelement=
// DB Symbol
drawArc(0,0,width,height*2/5,0,180,true) fg=black bg=white //Parameters (x, y, width, height, start, extent, open)
drawArc(0,0,width,height*2/5,180,180,true) fg=black //Parameters (x, y, width, height, start, extent, open)
drawLine(0,height/5,0,height*4/5)fg=black //Parameters (x1, y1, x2, y2)
drawLine(width,height/5,width,height*4/5)fg=black //Parameters (x1, y1, x2, y2)
drawArc(0,height*3/5,width,height*2/5,180,180,true) fg=black bg=white //Parameters (x, y, width, height, start, extent, open)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>253</x>
<y>77</y>
<w>528</w>
<h>77</h>
</coordinates>
<panel_attributes>bg=white
transparency=0
group=1</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>374</x>
<y>165</y>
<w>55</w>
<h>66</h>
</coordinates>
<panel_attributes>lt=)-</panel_attributes>
<additional_attributes>20.0;30.0;20.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>396</x>
<y>165</y>
<w>154</w>
<h>253</h>
</coordinates>
<panel_attributes>lt=-</panel_attributes>
<additional_attributes>10.0;210.0;120.0;180.0;120.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>682</x>
<y>165</y>
<w>55</w>
<h>385</h>
</coordinates>
<panel_attributes>lt=)-</panel_attributes>
<additional_attributes>20.0;320.0;20.0;10.0</additional_attributes>
</element>
<element>
<id>Text</id>
<coordinates>
<x>275</x>
<y>275</y>
<w>55</w>
<h>55</h>
</coordinates>
<panel_attributes>valign=center
halign=center
fontsize=7.0
リレーショナル
DB
bg=white
transparency=0
customelement=
// DB Symbol
drawArc(0,0,width,height*2/5,0,180,true) fg=black bg=white //Parameters (x, y, width, height, start, extent, open)
drawArc(0,0,width,height*2/5,180,180,true) fg=black //Parameters (x, y, width, height, start, extent, open)
drawLine(0,height/5,0,height*4/5)fg=black //Parameters (x1, y1, x2, y2)
drawLine(width,height/5,width,height*4/5)fg=black //Parameters (x1, y1, x2, y2)
drawArc(0,height*3/5,width,height*2/5,180,180,true) fg=black bg=white //Parameters (x, y, width, height, start, extent, open)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>473</x>
<y>660</y>
<w>132</w>
<h>33</h>
</coordinates>
<panel_attributes>lt=[ピア]-[ピア]</panel_attributes>
<additional_attributes>90.0;10.0;20.0;10.0</additional_attributes>
</element>
<element>
<id>UMLGeneric</id>
<coordinates>
<x>286</x>
<y>616</y>
<w>220</w>
<h>77</h>
</coordinates>
<panel_attributes>rippledサーバー
(直接ピアおよび間接ピア)
halign=left</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>264</x>
<y>594</y>
<w>242</w>
<h>99</h>
</coordinates>
<panel_attributes/>
<additional_attributes>20.0;70.0;10.0;70.0;10.0;10.0;200.0;10.0;200.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>253</x>
<y>583</y>
<w>242</w>
<h>99</h>
</coordinates>
<panel_attributes/>
<additional_attributes>20.0;70.0;10.0;70.0;10.0;10.0;200.0;10.0;200.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>319</x>
<y>286</y>
<w>44</w>
<h>44</h>
</coordinates>
<panel_attributes/>
<additional_attributes>10.0;20.0;20.0;20.0</additional_attributes>
</element>
<element>
<id>Text</id>
<coordinates>
<x>44</x>
<y>99</y>
<w>176</w>
<h>44</h>
</coordinates>
<panel_attributes>*アプリとサービス*
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>0</x>
<y>209</y>
<w>913</w>
<h>33</h>
</coordinates>
<panel_attributes>lt=..</panel_attributes>
<additional_attributes>10.0;10.0;810.0;10.0</additional_attributes>
</element>
<element>
<id>Text</id>
<coordinates>
<x>44</x>
<y>275</y>
<w>176</w>
<h>44</h>
</coordinates>
<panel_attributes>*ミドルウェアAPI*
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>0</x>
<y>352</y>
<w>913</w>
<h>33</h>
</coordinates>
<panel_attributes>lt=..</panel_attributes>
<additional_attributes>10.0;10.0;810.0;10.0</additional_attributes>
</element>
<element>
<id>Text</id>
<coordinates>
<x>44</x>
<y>407</y>
<w>176</w>
<h>44</h>
</coordinates>
<panel_attributes>*プログラミング*
*ライブラリー*
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>0</x>
<y>528</y>
<w>913</w>
<h>33</h>
</coordinates>
<panel_attributes>lt=..</panel_attributes>
<additional_attributes>10.0;10.0;810.0;10.0</additional_attributes>
</element>
<element>
<id>Text</id>
<coordinates>
<x>44</x>
<y>561</y>
<w>176</w>
<h>77</h>
</coordinates>
<panel_attributes>*ピアツーピア*
*ネットワーク*
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>880</x>
<y>33</y>
<w>33</w>
<h>737</h>
</coordinates>
<panel_attributes>lt=..</panel_attributes>
<additional_attributes>10.0;650.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>253</x>
<y>561</y>
<w>550</w>
<h>165</h>
</coordinates>
<panel_attributes>lt=.
halign=left
XRP Ledger</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Text</id>
<coordinates>
<x>341</x>
<y>308</y>
<w>143</w>
<h>33</h>
</coordinates>
<panel_attributes>style=wordwrap
fontsize=8
*ミッションクリティカル
サービスには使用不可。</panel_attributes>
<additional_attributes/>
</element>
</diagram>

View File

@@ -0,0 +1,136 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.3.0">
<zoom_level>10</zoom_level>
<element>
<id>UMLObject</id>
<coordinates>
<x>30</x>
<y>60</y>
<w>120</w>
<h>70</h>
</coordinates>
<panel_attributes>パスフレーズ
--
(省略可)
任意の文字列
lt=.</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>140</x>
<y>80</y>
<w>170</w>
<h>50</h>
</coordinates>
<panel_attributes>lt=.&gt;
SHA-512、最初の
16バイトを保持</panel_attributes>
<additional_attributes>10.0;20.0;150.0;20.0</additional_attributes>
</element>
<element>
<id>UMLObject</id>
<coordinates>
<x>290</x>
<y>60</y>
<w>120</w>
<h>70</h>
</coordinates>
<panel_attributes>シード
--
(16バイト)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLObject</id>
<coordinates>
<x>180</x>
<y>200</y>
<w>230</w>
<h>70</h>
</coordinates>
<panel_attributes>秘密鍵
--
(32バイト)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>300</x>
<y>120</y>
<w>110</w>
<h>100</h>
</coordinates>
<panel_attributes>lt=&lt;-
SHA-512Half</panel_attributes>
<additional_attributes>10.0;80.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>UMLObject</id>
<coordinates>
<x>180</x>
<y>330</y>
<w>230</w>
<h>70</h>
</coordinates>
<panel_attributes>公開鍵
--
(32バイト)</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLObject</id>
<coordinates>
<x>90</x>
<y>330</y>
<w>90</w>
<h>70</h>
</coordinates>
<panel_attributes>0xED
プレフィクス
--
(1バイト)
</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>240</x>
<y>260</y>
<w>100</w>
<h>90</h>
</coordinates>
<panel_attributes>lt=-&gt;
公開鍵導出</panel_attributes>
<additional_attributes>10.0;10.0;10.0;70.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>80</x>
<y>400</y>
<w>350</w>
<h>70</h>
</coordinates>
<panel_attributes>lt=..
マスター公開鍵
(33バイト)</panel_attributes>
<additional_attributes>10.0;10.0;10.0;30.0;330.0;30.0;330.0;10.0</additional_attributes>
</element>
<element>
<id>Text</id>
<coordinates>
<x>30</x>
<y>20</y>
<w>280</w>
<h>30</h>
</coordinates>
<panel_attributes>*Ed25519鍵導出*
style=wordwrap</panel_attributes>
<additional_attributes/>
</element>
</diagram>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.3.0">
<help_text/>
<zoom_level>10</zoom_level>
</diagram>

View File

@@ -0,0 +1,10 @@
Checkを換金するための前提条件は、正確な金額を換金する場合も変動金額を換金する場合も同じです。
- 現在レジャーに記録されているCheckオブジェクトのIDが必要です。
- 例えば、以下の例では、あるCheckのIDとして`838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334`を使用していますが、各ステップをご自分で行う際には、異なるIDを使用する必要があります。
- Checkに記載されている受取人の**アドレス**と**秘密鍵**。このアドレスは、Checkオブジェクトの`Destination`アドレスと一致している必要があります。
- 発行済み通貨用のCheckの場合は、ご自身受取人にイシュアーに対するトラストラインがある必要があります。このトラストライン上のご自身の限度額は、受け取る金額を追加するための残高より十分高くなければなりません。
- トラストラインと限度額について詳しくは、[発行済み通貨](issued-currencies.html)および[トラストラインと発行](trust-lines-and-issuing.html)を参照してください。
- トランザクションに安全に署名できる手段([RippleAPI][]や各自の[`rippled`サーバー](install-rippled.html)など)。
- `rippled`サーバーに接続できるクライアントライブラリ([RippleAPI][]、HTTPライブラリ、WebSocketライブラリなど
- 詳細は、[`rippled` APIの使用開始](get-started-with-the-rippled-api.html)を参照してください。

View File

@@ -0,0 +1,11 @@
シーケンス番号とは、32ビットの符号なし整数であり、指定された送金元からのトランザクションが正しい順序で1回だけ実行されるようにするために使用されます。
すべての[XRP Ledgerアカウント](accounts.html)には、`Sequence`フィールドに1つのシーケンス番号があり、アカウントがトランザクションを送信し、そのトランザクションが[検証済みレジャー](ledgers.html)に記録されるたびに、1ずつ増加します。シーケンス番号は各[トランザクション](transaction-basics.html)の`Sequence`フィールドにもあり、そのトランザクションが実行される際にアカウントの現在のシーケンス番号と一致している必要があります。各アカウントで、各シーケンス番号は番号順に一度だけ使用できます。
[DeletableAccounts Amendment](known-amendments.html#deletableaccounts) :not_enabled: を適用する場合、アカウントの`Sequence`番号の始まりが、アカウントが作成されたレジャーバージョンの[レジャーインデックス][]と一致します。DeletableAccountsを適用しない場合、どのアカウントの`Sequence`番号も1で始まります。
トランザクションがレジャーに記録されると、トランザクションの実行が成功したか[`tec`クラスのエラーコード](tec-codes.html)で失敗したかを問わず、シーケンス番号が1つ消費されます。トランザクションのその他の失敗についてはレジャーに記録されないため、送金元のシーケンス番号は変更されませんその他の影響もありません
レジャー内では、[アドレス][]とシーケンス番号を一緒に使用して、その送金元とシーケンス番号を持つ検証済みトランザクションによって作成されたオブジェクトが識別されることがあります。この方法で識別されたオブジェクトの例として、[Escrow](escrow.html)と[オファー](offers.html)が挙げられます。
複数の未確定のトランザクションが、同じ送金元と同じシーケンス番号を持つことが可能です。そのようなトランザクションは互いに排他的であり、検証済みレジャーに記録されるのはいずれか一方のみです。(それ以外は最終的に影響ありません。)

View File

@@ -0,0 +1,13 @@
XRP Ledgerのアカウントは、XRP Ledgerの[base58][]フォーマットのアドレスで識別されます。このアドレスはアカウントのマスター[公開鍵](https://en.wikipedia.org/wiki/Public-key_cryptography)から生成され、マスター公開鍵は秘密鍵から生成されます。アドレスはJSON文字列で記述され、以下の特徴があります。
* 長さは25から35文字です
* 文字`r`で始まります
**注記:** XRPコミュニティは、取引所およびウォレットで[宛先タグ](https://xrpl.org/source-and-destination-tags.html)の代わりに使用できる新しいフォーマット、**X**アドレスを[提案](https://github.com/xrp-community/standards-drafts/issues/6)(これをサポートする[コーデック](https://github.com/xrp-community/xrpl-tagged-address-codec)も開発)しました。これらの「パック化」したアドレスは、`r`ではなく`X`で開始します。詳細は、[XRPL 𝗫-address format](https://xrpaddress.info/)のサイトを参照してください。
* 英数字を使用します(数字「`0`」、大文字「`O`」、大文字「`I`」、小文字「`l`」を除く)
* 大/小文字を区別します
* 4バイトのチェックサムを含むため、ランダムな文字から有効なアドレスが生成される確率はおよそ2^32分の1となります
{% if currentpage.md != "concept-accounts.md" %}
詳しくは、[アカウント](accounts.html)と[base58エンコード](base58-encodings.html)を参照してください。{% endif %}

View File

@@ -0,0 +1,4 @@
XRP Ledgerには、以下の2種類の通貨コードがあります。
* 3文字の通貨コード。[ISO 4217の通貨コード](http://www.xe.com/iso4217.php)をすべて大文字で使用することをお勧めします。しかし、次の文字の組み合わせであれば、いずれも許可されます。すなわち、すべての大文字と小文字、数字、記号(`?``!``@``#``$``%``^``&``*``<``>``(``)``{``}``[``]`)、および<code>&#124;</code>です。通貨コード`XRP`すべて大文字はXRP用に予約されているため、発行済み通貨には使用できません。
* 160ビットの16進値。例えば`0158415500000000C1F76FF6ECB0BAC600000000`など、XRP Ledgerの内部[通貨フォーマット](currency-formats.html)に準じたものです。この表記は一般的ではありません。

View File

@@ -0,0 +1,9 @@
XRP Ledger内の多くのオブジェクト、特にトランザクションとレジャーは、256ビットのハッシュ値で一意に識別されます。通常、この値は「SHA-512Half」として算出されます。SHA-512Halfは、あるコンテンツから[SHA-512](http://dx.doi.org/10.6028/NIST.FIPS.180-4)ハッシュを計算し、出力の前半を取得したものです。これは256ビット、つまり32バイトで、16進数表記では64文字です。オブジェクトのハッシュは、極めて競合の発生しにくい方法でコンテンツから生成されるため、2つのオブジェクトが同じハッシュを持つ場合、それらのオブジェクトは同じものと見なされます。
XRP Ledgerのハッシュ値には、以下の特徴があります。
* 長さは64文字ちょうどです
* [16進数](https://en.wikipedia.org/wiki/Hexadecimal)の文字セット: 0-9およびA-Fです。
* 通常は大文字で記述されます。
**注記:** SHA-512Halfは、公式に定義されている _SHA-512/256_ ハッシュ関数とほぼ同等のセキュリティーを持ちます。しかし、XRP LedgerはSHA-512/256より前から利用されているため、既存のSHA-512関数上に実装することも容易にできます。この記事の時点で、暗号ライブラリーでのSHA-512のサポートはSHA-512/256よりはるかに一般的です。

View File

@@ -0,0 +1,7 @@
レジャーインデックスは、32ビットの符号なし整数であり、レジャーを識別するために使用します。レジャーインデックスは、レジャーの _シーケンス番号_ と呼ばれることもあります。([アカウントシーケンス](basic-data-types.html#アカウントシーケンス)とは異なります。一番最初のレジャーでは、レジャーインデックスは1でした。新しいレジャーのレジャーインデックスは、その直前のレジャーのレジャーインデックスに1を加算した値になります。
レジャーインデックスがレジャーの順番を示すのに対し、[ハッシュ][]値はレジャーの正確なコンテンツを示します。2つのレジャーが同じハッシュ値を持つ場合、それらは必ず同じものです。検証済みレジャーでは、ハッシュ値とレジャーインデックスは等しく有効で、1:1の関係です。しかし、進行中のレジャーに対しては、以下の理由によりその限りでありません。
* ネットワーク全体でのトランザクションの伝搬遅延が原因で、2つの異なる`rippled`サーバーで、同じレジャーインデックスを持つ現行レジャーに対するコンテンツが異なる場合があります。
* 決済済みレジャーバージョンが複数あり、コンセンサスによる検証が競合している場合があります。このようなレジャーバージョンでは、レジャーインデックスは同じですが、コンテンツは異なりますハッシュも異なります。これらの決済済みレジャーのうち、検証済みになるのは1つだけです。
* 現行のオープンレジャーのハッシュは計算されません。これは、現行レジャーのレジャーインデックスは同じままであっても、コンテンツは時間とともに変化し、ハッシュが変わる可能性があるためです。レジャーのハッシュは、レジャーが閉鎖されるときにのみ計算されます。

View File

@@ -0,0 +1,13 @@
XRP Ledgerは、以下のようなさまざまな状況で暗号署名を検証するために、公開鍵を使用します。
* トランザクションを承認するため。トランザクションに公開鍵が添付されます。公開鍵は、送信元のXRP Ledgerのアドレスか送信者のレギュラーキーアドレスに数学的に関連付けられている必要があります。
* `rippled`サーバー間のピアツーピア通信の安全を確保するため。これには、データベースが空の状態でサーバーが起動する場合に、サーバーがランダムに生成する「ノード公開鍵」が使用されます。
* コンセンサスプロセスの一環として検証投票に署名するため。これには、サーバーの運用者が[設定ファイルに定義](run-rippled-as-a-validator.html)した「バリデータ公開鍵」が使用されます。
バリデータ公開鍵とノード公開鍵は、まったく同じフォーマットを使用します。
公開鍵は、16進数かbase-58で表すことができます。16進数では、公開鍵は3種類すべて、長さが33バイト66文字です。
base-58フォーマットでは、バリデータ公開鍵とード公開鍵は必ず文字`n`から始まり、その後に文字`9`が続くのが一般的です。base-58フォーマットのバリデータ公開鍵は、最長で53文字にできます。ード公開鍵の例を以下に示します。`n9Mxf6qD4J55XeLSCEpqaePW4GjoCR5U1ZeGZGJUCNe3bQa4yQbG`
XRP Ledgerのアドレスは、公開鍵に数学的に関連付けられます。この公開鍵がbase-58でエンコードされることはめったにありませんが、その場合は文字`a`から始まります。

View File

@@ -0,0 +1,5 @@
XRP Ledgerでは、金融機関は秘密鍵の漏えいに関連するリスクを最小限に抑えるために、複数のXRP Ledgerアドレスを使用するのが一般的です。Rippleでは、以下のように役割を分離することを強くお勧めします。
* 1つの**発行アドレス**。「コールドウォレット」とも呼ばれます。このアドレスは、レジャーでの金融機関の会計上の関係の中心となるものですが、トランザクションの送信は可能な限り少なく抑えます。<!-- STYLE_OVERRIDE: cold wallet, wallet -->
* 1つ以上の**運用アドレス**。「ホットウォレット」とも呼ばれます。インターネットに接続した自動システムが、これらのアドレスへの秘密鍵を使用して、顧客やパートナーへの送金といった日常業務を実施します。<!-- STYLE_OVERRIDE: hot wallet, wallet -->
* オプションの**スタンバイアドレス**。「ウォームウォレット」とも呼ばれます。信頼できる人間のオペレーターが、これらのアドレスを使用して運用アドレスに送金します。<!-- STYLE_OVERRIDE: warm wallet, wallet -->

View File

@@ -0,0 +1,5 @@
| `Field` | 型 | 説明 |
|:--------------|:-------|:----------------------------------------------------|
| `node` | 文字列 | この予約の対象となるピアサーバーの[ノード秘密鍵][][base58][])。 |
| `description` | 文字列 | _省略される場合があります_ このピアリザベーションの説明(ある場合)。 |

View File

@@ -0,0 +1,50 @@
`rippled`が残りのネットワークと同期されるまでには数分かかることがあります。その間、レジャーがない旨を知らせる警告が出力されます。
`rippled`ログメッセージの詳細は、[ログメッセージについて](understanding-log-messages.html)を参照してください。
`rippled`が残りのネットワークと同期されたら、ストック`rippled`サーバーが完全に機能するようになります。このサーバーを、ローカル署名やXRP LedgerへのAPIアクセスに使用できます。`rippled`サーバーがネットワークと同期されているかどうかを判別するには、[`rippled`サーバーの状況](rippled-server-states.html)を使用します。[`rippled`のコマンドラインインターフェイス](get-started-with-the-rippled-api.html#commandline)を使用すれば、これを迅速にテストできます。
{% if currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-ubuntu.md" or
currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-macos.md" %}
$ ./rippled server_info
{% else %}
$ /opt/ripple/bin/rippled server_info
{% endif %}
rippled APIを使用した`rippled`サーバーとの通信について詳しくは、[rippled API reference](rippled-api.html)を参照してください。
ストック`rippled`サーバーを実行できたら、次に検証サーバーとして実行してみましょう。検証サーバーについて、そして検証サーバーを実行する理由については、[バリデータとしてのrippledの実行](run-rippled-as-a-validator.html)を参照してください。
`rippled`サーバーの起動でお困りですか? [rippledサーバーが起動しない](server-wont-start.html)を参照してください。
### その他の構成
`rippled`は、デフォルト構成でXRP Ledgerに接続する必要があります。ただし、`rippled.cfg`ファイルを編集すれば、設定を変更できます。推奨される構成設定については、[容量の計画](capacity-planning.html)を参照してください。
{% include '_snippets/conf-file-location.md' %}<!--_ -->
すべての構成オプションの説明については、[`rippled` GitHubリポジトリー](https://github.com/ripple/rippled/blob/master/cfg/rippled-example.cfg)を参照してください。
構成の変更を有効にするには、`rippled`を再起動する必要があります。
{% if currentpage.md == "tutorials/manage-the-rippled-server/installation/install-rippled-on-ubuntu.md" or
currentpage.md == "tutorials/manage-the-rippled-server/installation/install-rippled-on-centos-rhel-with-yum" %}
$ sudo systemctl restart rippled.service
{% elif currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-ubuntu.md" or
currentpage.md == "tutorials/manage-the-rippled-server/installation/build-run-rippled-macos.md" %}
* Ctrl-Cを使用して`rippled`を停止し、その後再起動します。
$ ./rippled
{% endif %}
`[debug_logfile]`セクションまたは`[database_path]`セクションを変更すると、`rippled`を実行するユーザーに、新しく構成したパスの所有権を付与する必要が生じる場合があります。
### 更新
`rippled`を定期的に更新して、残りのXRP Ledgerネットワークと同期させておく必要があります。[rippledのGoogleグループ](https://groups.google.com/forum/#!forum/ripple-server)をサブスクライブすれば、`rippled`の新しいリリースに関する通知を受け取ることができます。
`rippled`のパッケージには、[Linuxでの自動更新を有効にする](update-rippled-automatically-on-linux.html)ために使用できるスクリプトが含まれています。その他のプラットフォームでは、手動での更新が必要です。

View File

@@ -0,0 +1 @@
**注記:** XRP Ledgerの全履歴では、トランザクションハッシュは一意であるというルールに例外があります。初期の2つの[SetFee疑似トランザクション][]にはまったく同じフィールドがあったため、ハッシュが同じ`1C15FEA3E1D50F96B6598607FC773FF1F6E0125F30160144BE0C5CBC52F5151B`になっています。これらのトランザクションのうち1つ目は[レジャー3715073に](websocket-api-tool.html?server=wss%3A%2F%2Fs2.ripple.com%2F&req=%7B%22id%22%3A%22setfee_nonunique_hash_1%22%2C%22command%22%3A%22transaction_entry%22%2C%22tx_hash%22%3A%221C15FEA3E1D50F96B6598607FC773FF1F6E0125F30160144BE0C5CBC52F5151B%22%2C%22ledger_index%22%3A3715073%7D)表示され、2つ目は[レジャー3721729に](websocket-api-tool.html?server=wss%3A%2F%2Fs2.ripple.com%2F&req=%7B%22id%22%3A%22setfee_nonunique_hash_1%22%2C%22command%22%3A%22transaction_entry%22%2C%22tx_hash%22%3A%221C15FEA3E1D50F96B6598607FC773FF1F6E0125F30160144BE0C5CBC52F5151B%22%2C%22ledger_index%22%3A3721729%7D)表示されます。新しい[SetFee疑似トランザクション][]には`LedgerSequence`フィールドが含まれるため、ハッシュは一意であることが保証されています。

View File

@@ -0,0 +1,3 @@
トランザクションに署名する最も安全な方法は、[RippleAPI](rippleapi-reference.html)などの署名ライブラリーを使用してローカルで署名することです。[signメソッド](sign.html)を使用してトランザクションに署名することもできますが、その場合は信頼できる暗号化された接続を使用するか、ローカル接続を使用して、自分が管理しているサーバーに対してのみに行うようにしてください。
いずれの場合も、後のために、署名したトランザクションの識別用ハッシュを書き留めておいてください。

View File

@@ -0,0 +1 @@
サーバー起動後の最初の515分間に、サーバーがネットワークの他の部分と同期せず、このようなメッセージが出力されることは特に異常な動作ではありません。サーバー起動後かなり経過してからこれらのメッセージが書き込まれる場合は、問題が発生している可能性があります。一般的な原因としては、ネットワーク接続の信頼性が低いことや、[ハードウェアのスペック](system-requirements.html)が不十分であることが考えられます。また、同じハードウェアで実行されている他のプロセスがリソースをめぐって`rippled`と競合している場合にも発生する可能性があります。(`rippled`とリソースをめぐって競合する可能性のある他のプロセスの例としては、スケジュール済みバックアップ、ウィルススキャナー、定期的なデータベースクリーナーなどがあります。)

View File

@@ -0,0 +1,3 @@
本番環境のネットワークやRipple Test Netでは、レジャーが自動的に閉鎖するまでに47秒かかる場合があります。
スタンドアロンモードで`rippled`を実行している場合は、[ledger_acceptメソッド][]を使用してレジャーを手動で閉鎖します。

View File

@@ -0,0 +1,530 @@
# 既知のAmendment
[[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/Feature.cpp "Source")
以下に示すのは、本番環境のXRP Ledgerに関する既知のAmendmentのすべてとそのステータスをまとめた総合リストです。
| 名前 | 導入済み | ステータス |
|:--------------------------------|:-----------|:------------------------------------|
| [CryptoConditionsSuite][] | 未定 | [開発中: 未定]( "BADGE_LIGHTGREY") |
| [OwnerPaysFee][] | 未定 | [開発中: 未定]( "BADGE_LIGHTGREY") |
| [SHAMapV2][] | 未定 | [開発中: 未定]( "BADGE_LIGHTGREY") |
| [Tickets][] | 未定 | [開発中: 未定]( "BADGE_LIGHTGREY") |
| [DeletableAccounts][] | v1.4.0 | [計画済み: 未定]( "BADGE_LIGHTGREY") |
| [fixCheckThreading][] | v1.4.0 | [予定: 2020/01/18](https://xrpl.org/blog/2020/fixcheckthreading-fixpaychanrecipientownerdir-expected.html "BADGE_BLUE") |
| [fixPayChanRecipientOwnerDir][] | v1.4.0 | [予定: 2020/01/18](https://xrpl.org/blog/2020/fixcheckthreading-fixpaychanrecipientownerdir-expected.html "BADGE_BLUE") |
| [Checks][] | v0.90.0 | [計画済み: 未定]( "BADGE_LIGHTGREY") |
| [FlowCross][] | v0.70.0 | [計画済み: 未定]( "BADGE_LIGHTGREY") |
| [fixMasterKeyAsRegularKey][] | v1.3.1 | [有効: 2019/10/02](https://xrpcharts.ripple.com/#/transactions/61096F8B5AFDD8F5BAF7FC7221BA4D1849C4E21B1BA79733E44B12FC8DA6EA20 "BADGE_GREEN") |
| [MultiSignReserve][] | v1.2.0 | [有効: 2019/04/17](https://xrpcharts.ripple.com/#/transactions/C421E1D08EFD78E6B8D06B085F52A34A681D0B51AE62A018527E1B8F54C108FB "BADGE_GREEN") |
| [fixTakerDryOfferRemoval][] | v1.2.0 | [有効: 2019/04/02](https://xrpcharts.ripple.com/#/transactions/C42335E95F1BD2009A2C090EA57BD7FB026AD285B4B85BE15F669BA4F70D11AF "BADGE_GREEN") |
| [fix1578][] | v1.2.0 | [有効: 2019/03/23](https://xrpcharts.ripple.com/#/transactions/7A80C87F59BCE6973CBDCA91E4DBDB0FC5461D3599A8BC8EAD02FA590A50005D "BADGE_GREEN") |
| [DepositPreauth][] | v1.1.0 | [有効: 2018/10/09](https://xrpcharts.ripple.com/#/transactions/AD27403CB840AE67CADDB084BC54249D7BD1B403885819B39CCF723DC671F927 "BADGE_GREEN") |
| [fix1515][] | v1.1.0 | [有効: 2018/10/09](https://xrpcharts.ripple.com/#/transactions/6DF60D9EC8AF3C39B173840F4D1C57F8A8AB51E7C6571483B4A5F1AA0A9AAEBF "BADGE_GREEN") |
| [fix1543][] | v1.0.0 | [有効: 2018/06/21](https://xrpcharts.ripple.com/#/transactions/EA6054C9D256657014052F1447216CEA75FFDB1C9342D45EB0F9E372C0F879E6 "BADGE_GREEN") |
| [fix1623][] | v1.0.0 | [有効: 2018/06/20](https://xrpcharts.ripple.com/#/transactions/4D218D86A2B33E29F17AA9C25D8DFFEE5D2559F75F7C0B1D016D3F2C2220D3EB "BADGE_GREEN") |
| [fix1571][] | v1.0.0 | [有効: 2018/06/19](https://xrpcharts.ripple.com/#/transactions/920AA493E57D991414B614FB3C1D1E2F863211B48129D09BC8CB74C9813C38FC "BADGE_GREEN") |
| [DepositAuth][] | v0.90.0 | [有効: 2018/04/06](https://xrpcharts.ripple.com/#/transactions/902C51270B918B40CD23A622E18D48B4ABB86F0FF4E84D72D9E1907BF3BD4B25 "BADGE_GREEN") |
| [fix1513][] | v0.90.0 | [有効: 2018/04/06](https://xrpcharts.ripple.com/#/transactions/57FE540B8B8E2F26CE8B53D1282FEC55E605257E29F5B9EB49E15EA3989FCF6B "BADGE_GREEN") |
| [fix1201][] | v0.80.0 | [有効: 2017/11/14](https://xrpcharts.ripple.com/#/transactions/B1157116DDDDA9D9B1C4A95C029AC335E05DB052CECCC5CA90118A4D46C77C5E "BADGE_GREEN") |
| [fix1512][] | v0.80.0 | [有効: 2017/11/14](https://xrpcharts.ripple.com/#/transactions/63F69F59BEFDC1D79DBF1E4060601E05960683AA784926FB74BC55074C4F6647 "BADGE_GREEN") |
| [fix1523][] | v0.80.0 | [有効: 2017/11/14](https://xrpcharts.ripple.com/#/transactions/97FD0E35654F4B6714010D3CBBAC4038F60D64AD0292693C28A1DF4B796D8469 "BADGE_GREEN") |
| [fix1528][] | v0.80.0 | [有効: 2017/11/14](https://xrpcharts.ripple.com/#/transactions/27AEE02DA4FE22B6BB479F850FBBC873FDC7A09A8594753A91B53098D726397E "BADGE_GREEN") |
| [SortedDirectories][] | v0.80.0 | [有効: 2017/11/14](https://xrpcharts.ripple.com/#/transactions/6E2309C156EBF94D03B83D282A3914671BF9168FB26463CFECD068C63FFFAB29 "BADGE_GREEN") |
| [EnforceInvariants][] | v0.70.0 | [有効: 2017/07/07](https://xrpcharts.ripple.com/#/transactions/17593B03F7D3283966F3C0ACAF4984F26E9D884C9A202097DAED0523908E76C6 "BADGE_GREEN") |
| [fix1373][] | v0.70.0 | [有効: 2017/07/07](https://xrpcharts.ripple.com/#/transactions/7EBA3852D111EA19D03469F6870FAAEBF84C64F1B9BAC13B041DDD26E28CA399 "BADGE_GREEN") |
| [Escrow][] | v0.60.0 | [有効: 2017/03/31](https://xrpcharts.ripple.com/#/transactions/C581E0A3F3832FFFEEB13C497658F475566BD7695B0BBA531A774E6739801515 "BADGE_GREEN") |
| [fix1368][] | v0.60.0 | [有効: 2017/03/31](https://xrpcharts.ripple.com/#/transactions/3D20DE5CD19D5966865A7D0405FAC7902A6F623659667D6CB872DF7A94B6EF3F "BADGE_GREEN") |
| [PayChan][] | v0.33.0 | [有効: 2017/03/31](https://xrpcharts.ripple.com/#/transactions/16135C0B4AB2419B89D4FB4569B8C37FF76B9EF9CE0DD99CCACB5734445AFD7E "BADGE_GREEN") |
| [TickSize][] | v0.50.0 | [有効: 2017/02/21](https://xrpcharts.ripple.com/#/transactions/A12430E470BE5C846759EAE3C442FF03374D5D73ECE5815CF4906894B769565E "BADGE_GREEN") |
| [CryptoConditions][] | v0.50.0 | [有効: 2017/01/03](https://xrpcharts.ripple.com/#/transactions/8EB00131E1C3DB35EDFF45C155D941E18C3E86BC1934FF987D2DA204F4065F15 "BADGE_GREEN") |
| [Flow][] | v0.33.0 | [有効: 2016/10/21](https://xrpcharts.ripple.com/#/transactions/C06CE3CABA3907389E4DD296C5F31C73B1548CC20BD7B83416C78CD7D4CD38FC "BADGE_GREEN") |
| [TrustSetAuth][] | v0.30.0 | [有効: 2016/07/19](https://xrpcharts.ripple.com/#/transactions/0E589DE43C38AED63B64FF3DA87D349A038F1821212D370E403EB304C76D70DF "BADGE_GREEN") |
| [MultiSign][] | v0.31.0 | [有効: 2016/06/27](https://xrpcharts.ripple.com/#/transactions/168F8B15F643395E59B9977FC99D6310E8708111C85659A9BAF8B9222EEAC5A7 "BADGE_GREEN") |
| [FeeEscalation][] | v0.31.0 | [有効: 2016/05/19](https://xrpcharts.ripple.com/#/transactions/5B1F1E8E791A9C243DD728680F108FEF1F28F21BA3B202B8F66E7833CA71D3C3 "BADGE_GREEN") |
| [FlowV2][] | v0.32.1 | [禁止: v0.33.0で削除](https://xrpl.org/blog/2016/flowv2-vetoed.html "BADGE_RED") |
| [SusPay][] | v0.31.0 | [禁止: v0.60.0で削除](https://xrpl.org/blog/2017/ticksize-voting.html#upcoming-features "BADGE_RED") |
**注記:** 多くの場合、旧バージョンのソフトウェアには不完全バージョンの修正用コードが存在します。上の表内の「導入済み」バージョンは最初の安定バージョンです。「未定」は、修正がまだ安定していないと見なされていることを示します。
## Checks
[Checks]: #checks
| Amendment ID | ステータス |
|:-----------------------------------------------------------------|:----------|
| 157D2D480E006395B76F948E3E07A45A05FE10230D88A7993C71F97AE4B1F2D1 | 計画済み |
「Checks」をXRP Ledgerに導入します。Checksは個人用の紙の小切手と同様の機能を持っています。送信者はトランザクションに署名して、具体的な最高額と受取人を入力したCheckを作成します。その後、受取人はCheckを換金して、指定された金額を上限として現金を受け取ることができます。金銭の移動が実際に発生するのはCheckが換金されるときなので、送信者の現在の残高と流動性の状況によっては、Checkを換金できない場合があります。Checkを換金できない場合、Checkオブジェクトはレジャーに残るため、後日換金できるようになる場合があります。
送信者と受信者は、換金前であればいつでもCheckを取り消すことができます。Checkには有効期限を設定できます。有効期限が過ぎた後は換金できなくなり、誰でもそのCheckを取り消すことができます。
新たに導入するトランザクションタイプは次の3つです。CheckCreate、CheckCancel、CheckCash。また、新しいレジャーオブジェクトタイプはCheckです。新たに追加するトランザクション結果コード`tecEXPIRED`は、有効期限が過去の日時であるCheckを作成しようとすると発生します。
この修正はまた、有効期限が過去の日時であるオファーを作成しようとすると、OfferCreateトランザクションが`tecEXPIRED`を返すように変更しています。この修正を行わない場合、OfferCreateの有効期限が過去の日時であっても`tesSUCCESS`が返されますが、オファーの作成や実行は行われません。
## CryptoConditions
[CryptoConditions]: #cryptoconditions
| Amendment ID | ステータス |
|:-----------------------------------------------------------------|:----------|
| 1562511F573A19AE9BD103B5D6B9E01B3B46805AEC5D3C4805C902B514399146 | 有効 |
この修正は有効ですが、[SusPay](#suspay) Amendmentも有効にならなければ効果がありません。RippleではSusPayを有効にする予定はありません。代わりに、Crypto-Conditionsを[Escrow](#escrow) Amendmentに組み込む予定です。
## CryptoConditionsSuite
[CryptoConditionsSuite]: #cryptoconditionssuite
| Amendment ID | ステータス |
|:-----------------------------------------------------------------|:----------|
| 86E83A7D2ECE3AD5FA87AB2195AE015C950469ABF0B72EAACED318F74886AE90 | 開発中 |
[EscrowCreate][]トランザクションと[EscrowFinish][]トランザクションで使用するために、公式の[Crypto-Conditions仕様](https://tools.ietf.org/html/draft-thomas-crypto-conditions-03)から数種類のCrypto-Conditionsを導入します。この修正を行わない場合、サポートされるのはPREIMAGE-SHA-256タイプのみです。
**注意:** この修正は[開発中](https://github.com/ripple/rippled/pull/2170)です。`rippled`v0.60.0以降のバージョンでは、完全な機能は導入されません。
## DeletableAccounts
[DeletableAccounts]: #deletableaccounts
| Amendment ID | ステータス |
|:----------|:----------|
| 30CD365592B8EE40489BA01AE2F7555CAC9C983145871DC82A42A31CF5BAE7D9 | 計画済み |
[アカウント](accounts.html)を削除できるようになります。
この修正を適用しない場合、新しいアカウントは`Sequence`番号が必ず1で始まります。また、レジャーの状態データからアカウントを削除できません。
この修正を適用した場合、新しいアカウントは、そのアカウントが作成された[レジャーのインデックス][レジャーインデックス]に一致する`Sequence`番号に等しい`Sequence`番号で始まります。この変更により、一度削除され、その後再作成されたアカウントが、古いトランザクションを再度実行しないように保護することができます。新しい`AccountDelete`トランザクションタイプを追加すると、アカウントと、そのアカウントがレジャーに所有する特定のオブジェクトが削除されます。ただし、特定の種類のオブジェクトはこの方法で削除できないため、そのようなオブジェクトに関連付けられているアカウントは削除できません。また、現行のレジャーインデックスから256を引いた値がアカウントの現行`Sequence`番号より低い場合も、アカウントは削除できません。この修正に関する詳しい解説については、[XRP Community Standards Draft 7](https://github.com/xrp-community/standards-drafts/issues/8)を参照してください。
## DepositAuth
[DepositAuth]: #depositauth
| Amendment ID | ステータス |
|:----------|:----------|
| F64E1EABBE79D55B3BB82020516CEC2C582A98A6BFE20FBE9BB6A0D233418064 | 有効 |
新しいアカウントフラグ`DepositAuth`を追加します。これにより、他のアカウントから送信されたトランザクションに係る入金が厳密に拒否されます。企業はこのフラグを使用することで、あらゆる送金人からの送金を受け入れる前に規則に準拠して適切に対処することができます。
支払先のアカウントのこのフラグが有効になっている場合、支払いがXRPでなされるか、発行済み通貨でなされるかにかかわらず、Paymentトランザクションは失敗となります。アカウントが支払先である場合、支払先アカウント自体から上記のトランザクションが送信されなければ、EscrowFinishトランザクションとPaymentChannelClaimトランザクションは失敗します。[Checks][] amendmentが有効である場合、CheckCashトランザクションを送信することによってXRPまたは発行済み通貨をアカウントで受け取ることができます。
例外として、`DepositAuth`が有効になっているアカウントでは、現在のXRP残高がアカウントの準備金を下回る場合、少額のXRP[アカウント準備金](reserves.html)の最低額以下のPaymentトランザクションを受け取ることができます。
また、EscrowCreateトランザクションとPaymentChannelCreateトランザクションで誤ってDisallowXRPフラグを適用してしまうバグも修正します。これは強制力のない勧告フラグとするものです。レジャー自体にDisallowXRPフラグを適用しないことで、[アカウント準備金](reserves.html)を満たし[トランザクションコスト](transaction-cost.html)を支払うのに必要なXRPを、アカウントが引き続き受け取ることができます。
## DepositPreauth
[DepositPreauth]: #depositpreauth
| Amendment ID | ステータス |
|:----------|:----------|
| 3CBC5C4E630A1B82380295CDA84B32B49DD066602E74E39B85EF64137FA65194 | 有効 |
[Deposit Authorization](depositauth.html)のユーザーに特定の送信者を事前承認する手段を提供して、承認された送信者が支払いを直接送信できるようにします。
事前承認の追加または削除のために新しいトランザクションタイプDepositPreauthを、あるアカウントから別のアカウントへの事前承認の追跡のためにDepositPreauthレジャーオブジェクトタイプを追加します。JSON-RPCコマンド`deposit_authorized`を追加します。これは、アカウントが別のアカウントへ支払いを直接送金することが承認されているかどうかを問い合わせるためのものです。
また、アカウントにDeposit Authorizationが必要な場合、アカウントから自身への異なる通貨間での支払いの動作も変更します。この修正を行わない場合、これらの支払いはコードtecNO_PERMISSIONにて常に失敗します。この修正を行う場合、これらの支払いはDeposit Authorization無効時と同様に成功します。
## EnforceInvariants
[EnforceInvariants]: #enforceinvariants
| Amendment ID | ステータス |
|:----------|:----------|
| DC9CA96AEA1DCF83E527D1AFC916EFAF5D27388ECA4060A88817C1238CAEE0BF | 有効 |
トランザクション処理にサニティーチェックを追加して、所定の条件が常に満たされるようにします。これにより、トランザクション処理時のバグを防ぐ独立した追加のレイヤーができます。このレイヤーがなければXRP Ledgerが脆弱なものとなり悪用される可能性が生じます。Rippleは、Amendmentを追加せずに、将来バージョンの`rippled`に不変性チェックをさらに追加する予定です。
2つの新しいトランザクションエラーコード、`tecINVARIANT_FAILED``tefINVARIANT_FAILED`を導入します。新しいチェックを追加するためにトランザクション処理を変更します。
不変性チェックの例:
- トランザクションによって消却されたXRPの合計額は、[トランザクションコスト](transaction-cost.html)と正確に一致していなければなりません。
- XRPは作成できません。
- [レジャー内の`AccountRoot`オブジェクト](accountroot.html)は、[DeletableAccounts](#deletableaccounts)が有効でない限り削除できません。(関連項目: [アカウントの削除](accounts.html#アカウントの削除)
- [レジャー内のオブジェクト](ledger-object-types.html)のタイプは変更できません。(`LedgerEntryType`フィールドは変更できません。)
- XRPにトラストラインはありません。
## Escrow
[Escrow]: #escrow
| Amendment ID | ステータス |
|:----------|:----------|
| 07D43DCE529B15A10827E5E04943B496762F9A88E3268269D69C44BE49E21104 | 有効 |
[SusPay](#suspay)および[CryptoConditions](#cryptoconditions) Amendmentを置き換えます。
XRP Ledger内のEscrowにXRPの「停止された支払い」機能を提供します。これには[Interledger Protocol Crypto-Conditions](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02)のサポートが含まれます。停止された支払い用のレジャーオブジェクトタイプと、停止された支払いを作成、実行、取り消すためのトランザクションタイプを新規作成します。
## FeeEscalation
[FeeEscalation]: #feeescalation
| Amendment ID | ステータス |
|:----------|:----------|
| 42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE | 有効 |
提案されたトランザクションに[トランザクションコスト](transaction-cost.html)を適用する方法を変更します。トランザクションコストの高いトランザクションの優先順位が高くなるよう、コンセンサスプロセスを変更します。 <!-- STYLE_OVERRIDE: prioritize -->
この修正により、前のコンセンサスラウンドに含められなかったトランザクションに固定サイズのトランザクションキューが導入されます。コンセンサスネットワーク内の`rippled`サーバーに重い負荷が課されている場合、トランザクションコストの低いトランザクションは後のレジャーのキューに入れられます。各コンセンサスラウンドでは、トランザクションコスト(`Fee`値)が高いキューのトランザクションが優先され、コンセンサスネットワークで処理できる限りのトランザクションが含められます。トランザクションキューが一杯になると、トランザクションコストが最も低いトランザクションから順にキューから完全に除外されます。
コンセンサスネットワークに重い負荷がかかる一方で、正規のユーザーは高めのトランザクションコストを支払い、トランザクションを確実に処理することができます。この状況は、未処理の低コストのトランザクションが完全に処理または除外されるまで続きます。
1つのトランザクションは、以下のいずれかが発生するまでキュー内に残ります。
* 検証済みレジャーに適用される(成功か失敗かには関係ありません)
* 無効になる(例えば、[`LastLedgerSequence`](transaction-common-fields.html)によって有効期限切れとなる)
* キュー内にトランザクションコストの高いトランザクションがたくさんあるため除外される
## fix1201
[fix1201]: #fix1201
| Amendment ID | ステータス |
|:----------|:----------|
| B4D44CC3111ADD964E846FC57760C8B50FFCD5A82C86A72756F6B058DDDF96AD | 有効 |
[送金手数料](transfer-fees.html)に限度を正しく導入し、100%の料金にします。これは、`TransferRate`値の最大値である`2000000000`を表します。この場合の100%の料金とは、送信する1ユニットごとに2ユニットの発行済み通貨を送信する必要があることを意味します。この修正を行わない場合、有効な限度は`TransferRate`値の2<sup>32</sup>-1、つまり約329%の料金となります。
この修正を行う場合、[AccountSet][]トランザクションの`TransferRate``2000000000`より高く設定すると、トランザクションは結果コード`temBAD_TRANSFER_RATE`にて失敗します。以前のルールに従って高い値が設定されている既存のすべての`TransferRate`には、そのまま高い率が適用されます。
## fix1368
[fix1368]: #fix1368
| Amendment ID | ステータス |
|:----------|:----------|
| E2E6F2866106419B88C50045ACE96368558C345566AC8F2BDF5A5B5587F0E6FA | 有効 |
有効であるべき一部の支払いが失敗となる、トランザクション処理の小さなバグを修正します。具体的には、支払い処理中に、特定金額の通貨を生成する支払いステップの一部で、浮動小数点の表示に関する精度の不良により、わずかに異なる金額が生成されてしまうことがあります。この状況が発生すると、正確な金額を送金できないため支払いが失敗します。fix1368 Amendmentにより、トランザクション処理が修正されれば、このような支払いの失敗はなくなります。
## fix1373
[fix1373]: #fix1373
| Amendment ID | ステータス |
|:----------|:----------|
| 42EEA5E28A97824821D4EF97081FE36A54E9593C6E4F20CBAE098C69D2E072DC | 有効 |
特定の[支払いパス](paths.html)を作成する際にエラーを引き起こすトランザクション処理の小さなバグを修正します。この結果、有効であっても正しく作成されていないパスを、支払いで使用できなくなりました。この修正を行わない場合、支払い時に好ましくないパスの使用を強制されたり、失敗したりする恐れがあります。
fix1373 Amendmenによりこの問題は修正されるため、正しく作成されたパスを使用して支払いを行えます。また、現在は許可されているものの適切ではない一部のパスが無効になります。これには、同じオブジェクトを2回以上ループしてコンフリクトを起こすフィールドやパスを含む[ステップ](paths.html#パスの仕様)を持つパスが含まれます。
## fix1512
[fix1512]: #fix1512
| Amendment ID | ステータス |
|:----------|:----------|
| 6C92211186613F9647A89DFFBAB8F94C99D4C7E956D495270789128569177DA1 | 有効 |
一部の無効な[PaymentChannelClaim][]トランザクションが、不正確なエラーコードで失敗するトランザクション処理のバグを修正します。この修正を行わない場合、トランザクションの結果コードは`tec`クラスとなりますが、レジャーに入力されず、[トランザクションコスト](transaction-cost.html)は支払われません。
この修正により、トランザクションは適切な結果コード`temBAD_AMOUNT`にて失敗します。
## fix1513
[fix1513]: #fix1513
| Amendment ID | ステータス |
|:----------|:----------|
| 67A34F2CF55BFC0F93AACD5B281413176FEE195269FA6D95219A2DF738671172 | 有効 |
`FeeEscalation` Amendmentが行われると、新しい`STAmountCalcSwitchovers`コードが使用されないトランザクション処理のバグを修正します。
この修正により、新しい`STAmountCalcSwitchovers`コードが適用されるため、計算の違いによってトランザクション処理に若干の変更を生じる場合があります。金額の四捨五入のやり方が異なり、その結果、オファーが異なる順序で実行される場合があります。
## fix1515
[fix1515]: #fix1515
| Amendment ID | ステータス |
|:----------|:----------|
| 5D08145F0A4983F23AFFFF514E83FAD355C5ABFBB6CAB76FB5BC8519FF5F33BE | 有効 |
Paymentトランザクションがオファーを処理していく方法を変更して、支払処理とオファー処理における流動性の消費の仕方のわずかな違いをなくします。[FlowCross][]が有効の場合、オファーCreateトランザクションの処理方法にも影響します。
この修正を行わない場合、トランザクションが同じ為替レートで2000を超えるオファーを消費すると、支払い処理は特定のオーダーブックを使用しなくなります。この場合、支払いはそれらのオファーの流動性を使用せず、支払いを完了するときにそのオーダーブックに残された流動性を考慮しません。
この修正により、同じ為替レートで1000を超えるオファーを処理するトランザクションはすべて、そのトランザクションの最初の1000のオファーの流動性を消費し、支払いを完了時にはそのオーダーブックに残された流動性は考慮されません。
どちらの場合でも、トランザクション処理は他のパスまたは為替レートからの流動性を使用して完了できます。
## fix1523
[fix1523]: #fix1523
| Amendment ID | ステータス |
|:----------|:----------|
| B9E739B8296B4A1BB29BE990B17D66E21B62A300A909F25AC55C22D6C72E1F9D | 有効 |
支払先アカウント別の追跡機能を[Escrow](escrow.html)に追加します。この修正を行わない場合、保留中のEscrowは送信者別にしか追跡できません。この修正により、[account_objectsメソッド][]を使用して支払先アドレスごとに保留中のEscrowを調べることができます。ただし、この修正が有効になる前に作成された保留中のEscrowを除きます。また、この修正では、[EscrowCreateトランザクション][]を支払先のトランザクション履歴に表示することができます。これは[account_txメソッド][]による表示と同様です。
この修正により、新しいEscrowが送信者と受信者両方の[所有者ディレクトリー](directorynode.html)に追加されます。また、[Escrowレジャーオブジェクト](escrow-object.html)に新しい`DestinationNode`フィールドも追加され、支払先の所有者ディレクトリのどのページにEscrowがあるかを表示します。
## fix1528
[fix1528]: #fix1528
| Amendment ID | ステータス |
|:----------|:----------|
| 1D3463A5891F9E589C5AE839FFAC4A917CE96197098A1EF22304E1BC5B98A454 | 有効 |
バリデータがさまざまなタイムスタンプでコンセンサスレジャーを構築できることが原因で、検証済みレジャーの宣言プロセスに遅れをもたらす可能性があるバグを修正します。このような状況の発生は正確なタイミングを要するため、管理テスト環境の外部にいるバリデータがこのバグに遭遇することはあまりありません。
この修正は、バリデータがコンセンサスレジャーの終了時刻の交渉方法を変更して、レジャー内容について合意を得ることはできないが、異なるタイムスタンプでレジャーバージョンを構築できるようにします。
## fix1543
[fix1543]: #fix1543
| Amendment ID | ステータス |
|:----------|:----------|
| CA7C02118BA27599528543DFE77BA6838D1B0F43B447D4D7F53523CE6A0E9AC2 | 有効 |
予約済のフラグ範囲を、まだ正しく適用されていないトランザクションタイプに適用します。未定義または未知のフラグ、または予約された範囲のフラグが有効になっている場合、影響を受けるトランザクションタイプのトランザクションは無効と見なされるようになります。(この変更による影響を受けないトランザクションには、すでに同じルールが正しく適用されています。)
この修正を行わない場合、特定のタイプのトランザクションで未定義または予約されたフラグが有効になっていても、そのトランザクションタイプは有効と見なされます。
影響を受けるトランザクションタイプは以下のとおりです。
- Escrowトランザクション: [EscrowCancel][]、[EscrowCreate][]、[EscrowFinish][]
- Payment Channelトランザクション: [PaymentChannelClaim][]、[PaymentChannelCreate][]、[PaymentChannelFund][]
## fix1571
[fix1571]: #fix1571
| Amendment ID | ステータス |
|:----------|:----------|
| 7117E2EC2DBF119CA55181D69819F1999ECEE1A0225A7FD2B9ED47940968479C | 有効 |
以下のようにEscrowの問題を修正します。
- [EscrowCreateトランザクション][]に`Condition`フィールドまたは`FinishAfter`フィールド(またはその両方)が必要となるように変更します。この修正以前に作成された、`Condition``FinishAfter`のいずれも持たないEscrowは、`CancelAfter`時間より前ならいつでも誰でも終了できます。
- 時間ベースのEscrowが特定の状況下で終了されるのを誤って妨げる欠陥を修正します。
## fix1578
[fix1578]: #fix1578
| Amendment ID | ステータス |
|:----------|:----------|
| FBD513F1B893AC765B78F250E6FFA6A11B573209D1842ADC787C850696741288 | 有効 |
以下の2つのトランザクションタイプから返される結果コードを変更します。
- [オファーCreateトランザクション][]を変更して、オファーが`tfFillOrKill`フラグを使用していて中止された場合に、新しい結果コード`tecKILLED`が返されるようにします。この修正を行わない場合、オファーは中止されますが、トランザクション結果は`tesSUCCESS`になります。
- [TrustSetトランザクション][]を変更して、トラストラインがマイナス残高であるため、[NoRippleフラグ](rippling.html#norippleフラグ)を有効にしようとしてもできない場合に、`tecNO_PERMISSION`で失敗するようにします。この修正を行わない場合、トランザクションでNoRippleフラグを有効にできなくても、トランザクション結果は`tesSUCCESS`になります。
## fix1623
[fix1623]: #fix1623
| Amendment ID | ステータス |
|:----------|:----------|
| 58BE9B5968C4DA7C59BA900961828B113E5490699B21877DEF9A31E9D0FE5D5F | 有効 |
変動金額で換金されたCheckCashトランザクションのメタデータに送金額を追加します。[Checks](#checks) Amendmentが有効でないかぎり効果がありません。
この修正を行うと、トランザクション処理にて変動金額の[CheckCashトランザクション][]のメタデータに`DeliveredAmount`フィールドが追加されます(`DeliverMin`フィールドを使用します)。この変更はレジャーデータに書き込まれるため、この修正を行わずにトランザクションを処理した場合とは異なるレジャーハッシュとなります。これは実際に送信される金額には影響しません。また、この修正を有効にすると、[txメソッド][]と[account_txメソッド][]によってCheckCashトランザクションの[`delivered_amount`フィールド](transaction-metadata.html#delivered_amount)が返されます。(`delivered_amount`フィールドはトランザクションの検索時に計算されるものであり、レジャーに書き込まれるデータの一部ではありません。)
fix1623 Amendmentは、固定金額の[CheckCashトランザクション][]`Amount`フィールドを使用)またはその他のトランザクションタイプには影響しません。
**注意:** `rippled`1.0.0では、fix1623 Amendmentの前にChecks Amendmentを有効にした場合、fix1623 Amendmentが行われる前の変動金額のCheckCashトランザクションについては、トランザクションがゼロ以外の金額であっても、`delivered_amount`に「0」と表示される場合があります。Rippleでは、fix1623を[Checks][] Amendmentと同時に本番ネットワーク環境で有効にするよう計画していますが、この状況は[並列ネットワーク](parallel-networks.html)上で発生する可能性があります。
## fixCheckThreading
[fixCheckThreading]: #fixcheckthreading
| Amendment ID | ステータス |
|:----------|:----------|
| 8F81B066ED20DAECA20DF57187767685EEF3980B228E0667A650BAF24426D3B4 | 予定 |
Checksトランザクションがアカウントのメタデータに影響を及ぼす方法を変更し、Checksが受信アカウントの[アカウント](accounts.html)履歴に適切に追加されるようにします。(具体的には、受信アカウントの[AccountRootオブジェクト](accountroot.html)の`PreviousTxnID`フィールドと`PreviousTxnLedgerSeq`フィールドを更新します。これは、アカウントと、アカウントが所有するオブジェクトに影響を及ぼしたトランザクションの「スレッド」を追跡するために使用できます。)
この修正を適用しない場合、Checksトランザクション[CheckCreate][]、[CheckCash][]、および[CheckCancel][])は送信者のアカウント履歴のみを更新します。この修正を適用した場合、これらのトランザクションは、送信アカウントにも受信アカウントにも影響します。この修正は、[Checks Amendment](#checks)も有効でないかぎり効果がありません。
## fixMasterKeyAsRegularKey
[fixMasterKeyAsRegularKey]: #fixmasterkeyasregularkey
| Amendment ID | ステータス |
|:----------|:----------|
| C4483A1896170C66C098DEA5B0E024309C60DC960DE5F01CD7AF986AA3D9AD37 | 有効 |
アカウントのレギュラーキーペアがマスターキーペアと一致するように設定できるものの、マスターキーが無効になった場合に、そのキーによって署名されたトランザクションを送信できなくなるバグを修正します。
この修正を適用しない場合、ユーザーは、レギュラーキーがマスターキーと一致するように設定し、その後マスターキーを無効にすることで、意図せずアカウントを「ブラックホール」にしてしまうおそれがあります。ネットワークは、マスターキーペアとレギュラーキーペアの両方で署名されたトランザクションを拒否します。コードは、トランザクションが現在有効なレギュラーキーで署名されていると認識する前に、無効なマスターキーで署名されていると解釈するためです。
この修正を有効にした場合、SetRegularKeyトランザクションはレギュラーキーがマスターキーに一致するよう設定できないため、そのようなトランザクションでは、トランザクションコードが`temBAD_REGKEY`になります。また、この修正により、署名検証コードが変更されるため、レギュラーキーがマスターキーに一致するよう_すでに_設定しているアカウントは、そのキーペアを使用して正常にトランザクションを送信できます。
## fixPayChanRecipientOwnerDir
[fixPayChanRecipientOwnerDir]: #fixpaychanrecipientownerdir
| Amendment ID | ステータス |
|:----------|:----------|
| 621A0B264970359869E3C0363A899909AAB7A887C8B73519E4ECF952D33258A8 | 予定 |
[PaymentChannelCreateトランザクション][]タイプを変更し、受取人の[所有者ディレクトリー](directorynode.html)に新しい[Payment Channel](payment-channels.html)が追加されるようにします。この修正を適用しない場合、新しいPayment Channelは送金者の所有者ディレクトリーにのみ追加されます。この修正を有効にする場合、新しく作成したPayment Channelは両者の所有者ディレクトリーに追加されます。既存のPayment Channelは変更されません。
この変更により、受取人によるPayment Channelの検索が容易になります。また、アカウントがオープンPayment Channelの受取人だった場合に、そのアカウントが削除されないようにしますただし、この修正の前に作成されたチャンネルを除きます
## fixTakerDryOfferRemoval
[fixTakerDryOfferRemoval]: #fixtakerdryofferremoval
| Amendment ID | ステータス |
|:----------|:----------|
| 2CD5286D8D687E98B41102BDD797198E81EA41DF7BD104E6561FEB104EFF2561 | 有効 |
XRP Ledger内にドライオファーを残す可能性がある[オートブリッジ](autobridging.html)のバグを修正します。ドライオファーとは、オファーを掛け合わせても資金を調達できないオファーのことです。
この修正を行わなければ、ドライオファーがレジャー上に残り、所有者の[必要準備金](reserves.html#所有者準備金)に加算されることになり、所有者に何も利益をもたらしません。正しいタイプとクオリティで掛け合わせた別のオファーによって、ドライオファーを除去することができます。ただし、タイプとクオリティがうまく掛け合わされたオファーがめったにない場合、ドライオファーの除去には時間がかかることがあります。
この修正により、これらのドライオファーがオートブリッジで一致した場合に、XRP Ledgerによって除去されます。
## Flow
[Flow]: #flow
| Amendment ID | ステータス |
|:----------|:----------|
| 740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11 | 有効 |
支払い処理エンジンを、より堅固で効率的に作られたFlowエンジンに置き換えます。この新バージョンの支払い処理エンジンは、旧バージョンと同じルールを踏襲しますが、浮動小数点の丸め処理により異なる結果をもたらすことがあります。この修正は[FlowV2](https://xrpl.org/blog/2016/flowv2-vetoed.html) Amendmentに代わるものです。
また、Flowエンジンは、さらなるAmendmentを通じて、支払いエンジンの改善や拡張を容易にします。
## FlowCross
[FlowCross]: #flowcross
| Amendment ID | ステータス |
|:----------|:----------|
| 3012E8230864E95A58C60FD61430D7E1B4D3353195F2981DC12B0C7C0950FFAC | 計画済み |
XRP Ledgerの分散型取引所において、オファーの掛け合わせのロジックを合理化します。[Flow](#flow) Amendmentから更新されたコードを使用してオファーの掛け合わせを行うため、[OfferCreateトランザクション][]と[Paymentトランザクション][]は多くのコードを共有します。オファーの処理方法には微妙な違いがあります。
- 丸め方が一部のケースで少し異なります。
- 丸め方の違いが原因で、一部のオファーの組み合わせのランク付けが以前のロジックより上下したり、優先されたりします。
- 新しいロジックによって、以前のロジックより多めまたは少なめにオファーが削除される場合があります。(これには、丸め方の違いによるケースや、以前のロジックによって資金供給なしとして不正に削除されたオファーが含まれます。)
## FlowV2
[FlowV2]: #flowv2
| Amendment ID | ステータス |
|:----------|:----------|
| 5CC22CFF2864B020BD79E0E1F048F63EF3594F95E650E43B3F837EF1DF5F4B26 | 禁止 |
これは[Flow](#flow) Amendmentの旧バージョンです。[バグが原因で不採用となり](https://xrpl.org/blog/2016/flowv2-vetoed.html)、バージョン0.33.0で除外されました。
## MultiSign
[MultiSign]: #multisign
| Amendment ID | ステータス |
|:----------|:----------|
| 4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373 | 有効 |
トランザクションの承認方法として[マルチ署名](multi-signing.html)を導入します。[`SignerList`レジャーオブジェクトタイプ](signerlist.html)と[`SignerListSet`トランザクションタイプ](signerlistset.html)を作成します。省略可能な`Signers`フィールドをすべてのトランザクションタイプに追加します。一部のトランザクション結果コードを変更します。
この修正により、マルチ署名のアドレスからトランザクションを承認できる署名者のリストをそのアドレスに保持できるようになります。このリストには定数があり、1から8で重み付けされた署名者が記載されています。これにより、「5人のうち任意の3人」や「Aの署名とその他任意の2人の署名」などの多様な設定が可能になります。
署名者は資金供給のあるアドレスでも資金供給のないアドレスでも可能です。署名者リストのうち資金供給のあるアドレスは、レギュラーキー(定義済みの場合)またはマスターキー(無効でない場合)を使用して署名できます。資金供給のないアドレスは、マスターキーを使用して署名できます。マルチ署名済みトランザクションは、レギュラーキーで署名されたトランザクションと同じ権限を持ちます。
SignerListを持つアドレスは、レギュラーキーが定義されていなくてもマスターキーを無効にすることができます。また、SignerListを持つアドレスは、マスターキーが無効な場合でもレギュラーキーを削除することができます。`tecMASTER_DISABLED`トランザクション結果コードは`tecNO_ALTERNATIVE_KEY`に名前が変更されます。`tecNO_REGULAR_KEY`トランザクション結果コードは廃止となり、`tecNO_ALTERNATIVE_KEY`に代わります。さらに、この修正は以下の新しい[トランザクション結果コード](transaction-results.html)を追加します。
* `temBAD_SIGNER`
* `temBAD_QUORUM`
* `temBAD_WEIGHT`
* `tefBAD_SIGNATURE`
* `tefBAD_QUORUM`
* `tefNOT_MULTI_SIGNING`
* `tefBAD_AUTH_MASTER`
## MultiSignReserve
[MultiSignReserve]: #multisignreserve
| Amendment ID | ステータス |
|:----------|:----------|
| 586480873651E106F1D6339B0C4A8945BA705A777F3F4524626FF1FC07EFE41D | 有効 |
XRP Ledgerアカウントが[マルチ署名](multi-signing.html) SignerListを所有する場合、アカウントに加算される[所有者準備金](reserves.html#所有者準備金)を削減します。
この修正を行わない場合、SignerListの所有者準備金は、リスト内の署名者数に応じて1550 XRPの範囲となります。
この修正により、新しいSignerListの所有者準備金は、署名者数に関係なく5 XRPとなります。以前に作成されたSignerListオブジェクトの準備金は、そのまま変更されません。この修正の後に作成されたSignerListオブジェクトの準備金を削減するには、この修正実施後に、[SignerListSetトランザクション](signerlistset.html)を使用してSignerListを置き換えます。この置き換えは、前のバージョンの場合とまったく同じです。
## OwnerPaysFee
[OwnerPaysFee]: #ownerpaysfee
| Amendment ID | ステータス |
|:----------|:----------|
| 9178256A980A86CF3D70D0260A7DA6402AAFE43632FDBCB88037978404188871 | 開発中 |
[OfferCreate](offercreate.html)トランザクションタイプと[Payment](payment.html)トランザクションタイプで、[送金手数料](transfer-fees.html)の計算方法に相違があるのを修正します。この修正を行わない場合、オファーがオファープレースメントで実行される際にイシュアンスの保有者が送金手数料を支払いますが、トランザクションの最初の送信者は支払い処理の過程で実行されるオファーの送金手数料を支払います。この修正により、オファーがPaymentトランザクションまたはOfferCreateトランザクションの一部として実行されるかどうかにかかわらず、イシュアンスの保有者が常に送金手数料を支払います。支払い以外のオファー処理は影響を受けません。
この修正については、[Flow Amendment](#flow)を有効にする必要があります。
**注記:** この修正の未完成のバージョンがv0.33.0で導入されましたが、v0.80.0で削除されました。適用されませんでした。Rippleは、コードが十分に安定してからAmendmentを再度追加する予定です。
## PayChan
[PayChan]: #paychan
| Amendment ID | ステータス |
|:----------|:----------|
| 08DE7D96082187F6E6578530258C77FAABABE4C20474BDB82F04B021F1A68647 | 有効 |
XRPの「Payment Channel」を作成します。Payment Channelは、2名の当事者間で一方向の繰り返しの支払い、またはそれに伴う一時的な貸付を容易に行えるようにするツールです。Rippleは、この機能が[Interledger Protocol](https://interledger.org/)に役立つと期待しています。ある当事者がPayment Channelを作成し、そのチャンネル内に有効期限を事前に設定してXRPをいくらか確保します。次に、レジャー外部の安全な通信を介して、送信者は「クレーム」メッセージを受信者に送信できます。受信者は有効期限の終了前にクレームメッセージを清算することも、支払いが必要ない場合は清算しないことも選択できます。受信者は、クレームを実際にネットワークに分散させてコンセンサスプロセスで清算されるのを待たなくとも、請求を個々に確認してから、有効期限内であれば多数の少額クレームをまとめて後で清算することができます。
新たに作成するトランザクションタイプは次の3つです。[PaymentChannelCreate][]、[PaymentChannelClaim][]、[PaymentChannelFund][]。新たに作成するレジャーオブジェクトタイプは[PayChannel](paychannel.html)です。レジャー外のデータ構造`Claim`を定義し、ChannelClaimトランザクションに使用します。新たに作成する`rippled` APIメソッドは次のとおりです。[`channel_authorize`](channel_authorize.html) (署名されたクレームを作成します)、[`channel_verify`](channel_verify.html)(署名されたクレームを検証します)、[`account_channels`](account_channels.html)(アカウントに関連するチャンネルをリストを作成します)。
詳細は、[Payment Channelsのチュートリアル](use-payment-channels.html)を参照してください。
## SHAMapV2
[SHAMapV2]: #shamapv2
| Amendment ID | ステータス |
|:----------|:----------|
| C6970A8B603D8778783B61C0D445C23D1633CCFAEF0D43E7DBCD1521D34BD7C3 | 開発中 |
`rippled`がレジャーを表示する際に使用するハッシュツリー構造を変更します。新しい構造は以前のバージョンよりもコンパクトで効率的です。この修正はレジャーハッシュの計算方法が変わりますが、その他にユーザーに与える影響はありません。
この修正が適用されると、ネットワークでハッシュツリー構造への変更を計算している間、XRP Ledgerはしばらく使用できなくなります。 <!-- STYLE_OVERRIDE: will -->
## SortedDirectories
[SortedDirectories]: #sorteddirectories
| Amendment ID | ステータス |
|:----------|:----------|
| CC5ABAE4F3EC92E94A59B1908C2BE82D2228B6485C00AFF8F22DF930D89C194E | 有効 |
[DirectoryNodeレジャーオブジェクト](directorynode.html)内の項目をソートして、削除されるべき所有者ディレクトリのページが場合によっては削除されないというバグを修正します。
**警告:** この修正が適用されていない旧バージョンの`rippled`は、新しいルールでソートされたDirectoryNodeによって機能が停止するおそれがあります。この問題を回避するには、`rippled`バージョン0.80.0以降に[アップグレード](install-rippled.html)してください。
## SusPay
[SusPay]: #suspay
| Amendment ID | ステータス |
|:----------|:----------|
| DA1BD556B42D85EA9C84066D028D355B52416734D3283F85E216EA5DA6DB7E13 | 禁止 |
この修正は、[Escrow](escrow-object.html) Amendmentに置き換えられました。
## Tickets
[Tickets]: #tickets
| Amendment ID | ステータス |
|:----------|:----------|
| C1B8D934087225F509BEB5A8EC24447854713EE447D277F69545ABFA0E0FD490 | 開発中 |
後で実行できるようトランザクションシーケンス番号を予約する方法としてTicketsを導入します。`Ticket`レジャーオブジェクトタイプと、`TicketCreate`および`TicketCancel`のトランザクションタイプを作成します。
**注意:** この修正は開発中です。
## TickSize
[TickSize]: #ticksize
| Amendment ID | ステータス |
|:----------|:----------|
| 532651B4FD58DF8922A49BA101AB3E996E5BFBF95A913B3E392504863E63B164 | 有効 |
オーダーブック内で[オファー](offers.html#オファーのライフサイクル)をランク付けする方法を変更して、通貨発行者がオファーを為替レートでランク付けする際に考慮する有効桁数を設定できるようにします。この修正により、オファーの交換レートが設定された有効桁数に丸められるため、同じ交換レートを持つオファーが増加します。この修正の目的は、以前のオファーよりもランク付けを高くするには、価格面で意味のある改善をしなければならないようにすることです。主要な発行者がこれを採用すれば、既存のオファーよりわずかなパーセンテージだけ上回るオファーでレジャーを攻撃しようとするスパムが低減します。また、よりバラツキの少ない為替レートでオファーをグループ化できるため、レジャー内のオーダーブックを効率的に保管できます。
アカウントに`TickSize`フィールドを追加します。このフィールドは[AccountSetトランザクションタイプ](accountset.html)を使用して設定できます。通貨発行者が`TickSize`フィールドを設定すれば、発行者の通貨を取引するオファーの為替レート資金の入出金率がXRP Ledgerによって丸められ、丸められた為替レートに合わせてオファーの金額が調整されます。トランザクションにて1つの通貨にのみ`TickSize`が設定されていれば、その有効桁数が適用されます。異なる`TickSize`値が設定された2つの通貨を取引する場合は、有効桁数が最も小さい`TickSize`が適用されます。XRPに`TickSize`は設定されません。
## TrustSetAuth
[TrustSetAuth]: #trustsetauth
| Amendment ID | ステータス |
|:----------|:----------|
| 6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC | 有効 |
[承認されたトラストライン](authorized-trust-lines.html)を使用する場合に、会計関係の事前承認(ゼロバランストラストライン)を許可します。
この修正が適用されれば、[`tfSetfAuth`を有効にした](trustset.html#trustsetのフラグ)`TrustSet`トランザクションにおいて、`RippleState`ノードの他のすべての値をデフォルト状態にしたままでも、新しい[`RippleState`レジャーオブジェクト](ripplestate.html)を作成できます。新しい`RippleState`ノードでは、トランザクションの送信者が低いノードと見なされるか高いノードと見なされるかに応じて、[`lsfLowAuth`フラグまたは`lsfHighAuth`フラグ](ripplestate.html#ripplestateのフラグ)が有効になります。トランザクションの送信者は、[asfRequireAuthフラグを有効](accountset.html#accountsetのフラグ)にして[AccountSetトランザクション](accountset.html)を送信することで、事前に[`lsfRequireAuth`](accountroot.html#accountrootのフラグ)を有効にしておく必要があります。
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -19,25 +19,25 @@ XRP Ledger上でアプリケーションを構築する場合は、XRP Ledger AP
レジャーバージョンに含まれるデータの詳細な技術説明については、[レジャーフォーマットのリファレンス](ledger-data-formats.html)を参照してください。 レジャーバージョンに含まれるデータの詳細な技術説明については、[レジャーフォーマットのリファレンス](ledger-data-formats.html)を参照してください。
[![図1: XRP Ledgerの要素](img/anatomy-of-a-ledger-complete.ja.png)](img/anatomy-of-a-ledger-complete.ja.png) [![図1: XRP Ledgerの要素](img/anatomy-of-a-ledger-complete.png)](img/anatomy-of-a-ledger-complete.png)
_図1: XRP Ledgerの要素_ _図1: XRP Ledgerの要素_
XRP Ledgerでは、数秒ごとに新しいレジャーバージョンが作成されます。あるレジャーバージョンの内容にネットワークが同意すると、そのレジャーバージョンは _検証済み_ となり、その内容が変更されることはありません。それ以前の検証済みのレジャーバージョンによって、レジャー履歴が形成されます。検証済みの最新のレジャーも、少し前の時点のネットワークの状態を表しており、履歴の一部となります。現時点で、ネットワークは次のレジャーバージョンに適用されてファイナライズされる可能性のあるトランザクションを評価しています。この評価が行われている間、ネットワークには、検証前のレジャーバージョン候補が存在します。 XRP Ledgerでは、数秒ごとに新しいレジャーバージョンが作成されます。あるレジャーバージョンの内容にネットワークが同意すると、そのレジャーバージョンは _検証済み_ となり、その内容が変更されることはありません。それ以前の検証済みのレジャーバージョンによって、レジャー履歴が形成されます。検証済みの最新のレジャーも、少し前の時点のネットワークの状態を表しており、履歴の一部となります。現時点で、ネットワークは次のレジャーバージョンに適用されてファイナライズされる可能性のあるトランザクションを評価しています。この評価が行われている間、ネットワークには、検証前のレジャーバージョン候補が存在します。
[![図2: XRP Ledgerのシーケンスと履歴](img/ledger-history.ja.png)](img/ledger-history.ja.png) [![図2: XRP Ledgerの履歴](img/ledger-history.png)](img/ledger-history.png)
_図2: XRP Ledgerのシーケンスと履歴_ _図2: XRP Ledgerの履歴_
レジャーバージョンには2つの識別子があります。1つ_レジャーインデックス_ で、 _シーケンス番号_ とも呼ばれます。レジャーバージョンの番号は1つずつ増加します。例えば、現行のレジャーバージョンのレジャーインデックスが100の場合、1つ前はレジャーインデックス99、1つ後はレジャーインデックスは101です。もう1つの識別子は _レジャーハッシュ_ で、レジャーの内容のデジタル指紋を表します。 レジャーバージョンには2つの識別子があります。1つ目の識別子は、そのレジャーバージョンの _レジャーインデックス_す。レジャーバージョンの番号は1つずつ増加します。例えば、現行のレジャーバージョンのレジャーインデックスが100の場合、1つ前はレジャーインデックス99、1つ後はレジャーインデックスは101です。もう1つの識別子は _レジャーハッシュ_ で、レジャーの内容のデジタル指紋を表します。
サーバーがレジャーに適用するトランザクションを提案するときに、内容がわずかに異なる複数の候補レジャーバージョンが作成される場合があります。このような候補レジャーバージョンでは、レジャーインデックスは同じですがレジャーハッシュが異なります。多くの候補のうち、検証済みとなるのは1つだけです。それ以外の候補レジャーバージョンはすべて、破棄されます。そのため、履歴内の各レジャーインデックスに対して存在する検証済みのレジャーハッシュは1つのみです。 サーバーがレジャーに適用するトランザクションを提案するときに、内容がわずかに異なる複数の候補レジャーバージョンが作成される場合があります。このような候補レジャーバージョンでは、レジャーインデックスは同じですがレジャーハッシュが異なります。多くの候補のうち、検証済みとなるのは1つだけです。それ以外の候補レジャーバージョンはすべて、破棄されます。そのため、履歴内の各レジャーインデックスに対して存在する検証済みのレジャーハッシュは1つのみです。
レジャーに対するユーザーレベルの変更は、トランザクションによってなされます。[トランザクション](transaction-formats.html)の例としては、決済、アカウントの設定またはトラストラインの変更、取引のオファー注文などがあります。各トランザクションは、レジャーに対する1つ以上の変更を承認するものであり、アカウント所有者によって暗号署名されます。アカウントの変更を承認したり、レジャーのそれ以外の内容を変更したりするには、トランザクションによるしかありません レジャーに対するユーザーレベルの変更は、トランザクションによってなされます。[トランザクション](transaction-formats.html)の例としては、決済、アカウントの設定またはトラストラインの変更、取引のオファー注文などがあります。各トランザクションは、レジャーに対する1つ以上の変更を承認するものであり、アカウント所有者によって暗号署名されます。アカウントの変更を承認したり、レジャーのそれ以外の内容を変更したりするには、トランザクションだけが唯一の方法です
各レジャーバージョンには、一連のトランザクションと、そのようなトランザクションに関するメタデータも含まれています。それらのトランザクションは、新しいレジャーバージョンを作成するために前のバージョンのレジャーに適用されたものです。メタデータには、レジャーの状態データに対する、トランザクションの影響が正確に記録されています。 各レジャーバージョンには、一連のトランザクションと、そのようなトランザクションに関するメタデータも含まれています。それらのトランザクションは、新しいレジャーバージョンを作成するために前のバージョンのレジャーに適用されたものです。メタデータには、レジャーの状態データに対する、トランザクションの影響が正確に記録されています。
[![図3: レジャーバージョンに適用されるトランザクション](img/ledger-changes.ja.png)](img/ledger-changes.ja.png) [![図3: レジャーバージョンに適用されるトランザクション](img/ledger-changes.png)](img/ledger-changes.png)
_図3: レジャーバージョンに適用されるトランザクション_ _図3: レジャーバージョンに適用されるトランザクション_
@@ -57,27 +57,27 @@ _図3: レジャーバージョンに適用されるトランザクション_
ピアツーピアのXRP Ledgerネットワークは、トランザクションを承認して処理する多数の独立したXRP Ledgerサーバー通常、[`rippled`](the-rippled-server.html)を実行で構成されています。クライアントアプリケーションは、トランザクションに署名してXRP Ledgerサーバーに送信します。サーバーは、これらの候補トランザクションを処理するためにネットワーク内を中継します。クライアントアプリケーションには、モバイルおよびウェブウォレット、金融機関へのゲートウェイ、電子取引プラットフォームなどがあります。 ピアツーピアのXRP Ledgerネットワークは、トランザクションを承認して処理する多数の独立したXRP Ledgerサーバー通常、[`rippled`](the-rippled-server.html)を実行で構成されています。クライアントアプリケーションは、トランザクションに署名してXRP Ledgerサーバーに送信します。サーバーは、これらの候補トランザクションを処理するためにネットワーク内を中継します。クライアントアプリケーションには、モバイルおよびウェブウォレット、金融機関へのゲートウェイ、電子取引プラットフォームなどがあります。
[![図4: XRP Ledgerプロトコルの参加者](img/xrp-ledger-network.ja.png)](img/xrp-ledger-network.ja.png) [![図4: XRP Ledgerプロトコルの参加者](img/xrp-ledger-network.png)](img/xrp-ledger-network.png)
_図4: XRP Ledgerプロトコルの参加者_ _図4: XRP Ledgerプロトコルの参加者_
トランザクションを受信、中継、処理するサーバーは、追跡サーバーとバリデータのいずれかです。追跡サーバーの主な機能には、クライアントからのトランザクションの分散やレジャーに関する照会への応答が含まれます。検証サーバーは、追跡サーバーと同じ機能を実行し、さらにレジャーのシーケンスを進めます<a href="#footnote_3" id="from_footnote_3"><sup>3</sup></a> トランザクションを受信、中継、処理するサーバーは、追跡サーバーとバリデータのいずれかです。追跡サーバーの主な機能には、クライアントからのトランザクションの分散やレジャーに関する照会への応答が含まれます。検証サーバーは、追跡サーバーと同じ機能を実行し、さらにレジャー履歴を進めます<a href="#footnote_3" id="from_footnote_3"><sup>3</sup></a>
クライアントアプリケーションによって送信されたトランザクションを受け入れるときに、各追跡サーバーは最後に検証されたレジャーを開始点として使用します。受け入れられたトランザクションは候補トランザクションとなります。サーバーから候補トランザクションがそれぞれのピアに中継され、候補トランザクションがネットワーク全体に伝達されます。理想的には、各候補トランザクションはすべてのサーバーに伝達される必要があります。その結果、各サーバーは最後に検証されたレジャーに同じ一連のトランザクションを適用できる可能性が高くなります。しかし、トランザクションが伝達されるまでには時間がかかるため、サーバーは常に同じ候補トランザクションを処理するわけではありません。このことを考慮に入れて、XRP Ledgerでは、コンセンサスと呼ばれるプロセスを使用して、同一のトランザクションが処理され、ピアツーピアのXRP Ledgerネットワーク全体で検証済みのレジャーの一貫性が確保できるようにしています。 クライアントアプリケーションによって送信されたトランザクションを受け入れるときに、各追跡サーバーは最後に検証されたレジャーを開始点として使用します。受け入れられたトランザクションは候補トランザクションとなります。サーバーから候補トランザクションがそれぞれのピアに中継され、候補トランザクションがネットワーク全体に伝達されます。理想的には、各候補トランザクションはすべてのサーバーに伝達される必要があります。その結果、各サーバーは最後に検証されたレジャーに同じ一連のトランザクションを適用できる可能性が高くなります。しかし、トランザクションが伝達されるまでには時間がかかるため、サーバーは常に同じ候補トランザクションを処理するわけではありません。このことを考慮に入れて、XRP Ledgerでは、コンセンサスと呼ばれるプロセスを使用して、同一のトランザクションが処理され、ピアツーピアのXRP Ledgerネットワーク全体で検証済みのレジャーの一貫性が確保できるようにしています。
### コンセンサス ### コンセンサス
ネットワーク内のサーバーは、候補トランザクションに関する情報を共有します。コンセンサスプロセスを通じて、バリデータは、候補トランザクションの特定のサブセットが次のレジャーで考慮されることに同意します。コンセンサスとは、サーバーが提案や一連の候補トランザクションを中継する反復プロセスです。サーバーは、選択されたバリデータの過半<a href="#footnote_4" id="from_footnote_4"><sup>4</sup></a>が同じ候補トランザクションのセットについて合意するまで、提案の通信と更新を行います。 ネットワーク内のサーバーは、候補トランザクションに関する情報を共有します。コンセンサスプロセスを通じて、バリデータは、候補トランザクションの特定のサブセットが次のレジャーで考慮されることに同意します。コンセンサスとは、サーバーが提案や一連の候補トランザクションを中継する反復プロセスです。サーバーは、選択されたバリデータの圧倒的多<a href="#footnote_4" id="from_footnote_4"><sup>4</sup></a>が同じ候補トランザクションのセットについて合意するまで、提案の通信と更新を行います。
コンセンサスの間、各サーバーは、そのサーバーの信頼できるバリデータ_ユニークードリストUNL_と呼ばれる特定のサーバー群からの提案を評価します。<a href="#footnote_5" id="from_footnote_5"><sup>5</sup></a>信頼できるバリデータとは、提案を評価するサーバーを欺こうと共謀しない、全体として「信頼できる」ネットワークのサブセットを表します。この「信頼」の定義では、選択された個々のバリデータが信頼されている必要はありません。バリデータの選択は、ネットワークに中継されたデータを改ざんする組織的な試みで共謀しないという想定に基づいて行われます<a href="#footnote_6" id="from_footnote_6"><sup>6</sup></a><!-- STYLE_OVERRIDE: will --> コンセンサスの間、各サーバーは、そのサーバーの信頼できるバリデータ( _ユニークードリストUNL_ )と呼ばれる特定のサーバー群からの提案を評価します。<a href="#footnote_5" id="from_footnote_5"><sup>5</sup></a>信頼できるバリデータとは、提案を評価するサーバーを欺こうと共謀しない、全体として「信頼できる」ネットワークのサブセットを表します。この「信頼」の定義では、選択された個々のバリデータが信頼されている必要はありません。バリデータの選択は、ネットワークに中継されたデータを改ざんする組織的な試みで共謀しないという想定に基づいて行われます<a href="#footnote_6" id="from_footnote_6"><sup>6</sup></a><!-- STYLE_OVERRIDE: will -->
[![図5: バリデータによるトランザクションセットの提案と修正](img/consensus-rounds.ja.png)](img/consensus-rounds.ja.png) [![図5: バリデータによるトランザクションセットの提案と修正](img/consensus-rounds.png)](img/consensus-rounds.png)
_図5: バリデータによるトランザクションセットの提案と修正 - コンセンサスの開始時点で、バリデータ毎に異なるトランザクションセットを持っている可能性があります。後のラウンドで、サーバーは現在の提案を信頼できるバリデータの提案と一致するように変更します。このプロセスでは、現在議論しているレジャーバージョンに適用するトランザクションと、それ以降のレジャーバージョンに適用するトランザクションを決定します。_ _図5: バリデータによるトランザクションセットの提案と修正 - コンセンサスの開始時点で、バリデータ毎に異なるトランザクションセットを持っている可能性があります。後のラウンドで、サーバーは現在の提案を信頼できるバリデータの提案と一致するように変更します。このプロセスでは、現在議論しているレジャーバージョンに適用するトランザクションと、それ以降のレジャーバージョンに適用するトランザクションを決定します。_
合意済みの提案に含まれていない候補トランザクションは、その後も候補トランザクションとして残ります。これらは次のレジャーバージョンで再度検討される可能性があります。通常、1つのレジャーバージョンから除外されたトランザクションは、次のレジャーバージョンに含まれます。 合意済みの提案に含まれていない候補トランザクションは、その後も候補トランザクションとして残ります。これらは次のレジャーバージョンで再度検討される可能性があります。通常、1つのレジャーバージョンから除外されたトランザクションは、次のレジャーバージョンに含まれます。
状況によっては、いつまでもコンセンサスに達することができないトランザクションもあります。そのような状況として、ネットワークが、必要な[トランザクションコスト](transaction-cost.html)を、トランザクションで指定されたものよりも高い値に変更している場合が考えられます。将来のある時点でこの手数料が引き下げられると、そのトランザクションが成功する可能性があります。トランザクションの成功または失敗が一定時間内に確定するように、トランザクションが特定のレジャーインデックスによって一定時間処理されない場合は期限切れになるように設定することができます。詳細については、[信頼できるトランザクションの送信](reliable-transaction-submission.html)を参照してください。 状況によっては、いつまでもコンセンサスに達することができないトランザクションもあります。そのような状況として、ネットワークが、必要な[トランザクションコスト](transaction-cost.html)を、トランザクションで指定されたものよりも高い値に変更している場合が考えられます。将来のある時点でこの手数料が引き下げられると、そのトランザクションが成功する可能性があります。トランザクションの成功または失敗が一定時間内に確定するように、トランザクションが特定のレジャーインデックスによって一定時間処理されない場合は期限切れになるように設定することができます。詳細は、[信頼できるトランザクションの送信](reliable-transaction-submission.html)を参照してください。
### 検証 ### 検証
@@ -95,23 +95,22 @@ _図5: バリデータによるトランザクションセットの提案と修
1. 一つ前の検証済みのレジャーから始めます。 1. 一つ前の検証済みのレジャーから始めます。
2. すべてのサーバーが同じ方法で処理できるように、合意済みのトランザクションセットを _正規順序_ で並べ変えます。 2. すべてのサーバーが同じ方法で処理できるように、合意済みのトランザクションセットを _正規順序_ で並べ変えます。
[正規順序](https://github.com/ripple/rippled/blob/8429dd67e60ba360da591bfa905b58a35638fda1/src/ripple/app/misc/CanonicalTXSet.cpp#L25-L36)は、トランザクションを受け取った順序ではありません(サーバーが同じトランザクションを異なる順序で受け取る可能性があるため)。参加者がトランザクションの順序付けで競合しないように、故意に操作するのが困難な正規順序を使います。 [正規順序](https://github.com/ripple/rippled/blob/8429dd67e60ba360da591bfa905b58a35638fda1/src/ripple/app/misc/CanonicalTXSet.cpp#L25-L36)は、トランザクションを受け取った順序ではありません(サーバーが同じトランザクションを異なる順序で受け取る可能性があるため)。参加者がトランザクションの順序付けで競合しないように、故意に操作するのが困難な正規順序を使います。
3. 指示に従って、各トランザクションを順番に処理します。それに応じてレジャーの状態データを更新します。 3. 指示に従って、各トランザクションを順番に処理します。それに応じてレジャーの状態データを更新します。
トランザクションを正常に実行できない場合は、[`tec`クラス結果コード](tec-codes.html)を持つトランザクションを含めます。<a href="#footnote_1" id="from_footnote_1"><sup>1</sup></a> トランザクションを正常に実行できない場合は、[`tec`クラス結果コード](tec-codes.html)を持つトランザクションを含めます。<a href="#footnote_1" id="from_footnote_1"><sup>1</sup></a>
特定の「再試行可能な」トランザクションの失敗に対しては、同じレジャーバージョンの他のトランザクションが実行された後に再試行されるように、そのトランザクションを正規順序の最後に移動します。 特定の「再試行可能な」トランザクションの失敗に対しては、同じレジャーバージョンの他のトランザクションが実行された後に再試行されるように、そのトランザクションを正規順序の最後に移動します。
4. 適切なメタデータでレジャーヘッダーを更新します。 4. 適切なメタデータでレジャーヘッダーを更新します。
これには、レジャーインデックス、前に検証済みのレジャーの識別ハッシュ(このレジャーの「親」)、このレジャーバージョンの予定終了時刻、このレジャーの内容の暗号化ハッシュなどのデータが含まれます。 これには、レジャーインデックス、前に検証済みのレジャーの識別ハッシュ(このレジャーの「親」)、このレジャーバージョンの予定終了時刻、このレジャーの内容の暗号化ハッシュなどのデータが含まれます。
5. 新しいレジャーバージョンの識別用ハッシュを計算します。 5. 新しいレジャーバージョンの識別用ハッシュを計算します。
[![図7: XRP Ledgerサーバーでレジャー検証を計算する](img/consensus-calculate-validation.png)](img/consensus-calculate-validation.png)
[![図7: XRP Ledgerサーバーでレジャー検証を計算する](img/consensus-calculate-validation.ja.png)](img/consensus-calculate-validation.ja.png)
_図7: XRP Ledgerサーバーでレジャー検証を計算する - 各サーバーは、同意済みのトランザクションを前の検証済みレジャーに適用します。バリデータは結果をネットワーク全体に送信します。_ _図7: XRP Ledgerサーバーでレジャー検証を計算する - 各サーバーは、同意済みのトランザクションを前の検証済みレジャーに適用します。バリデータは結果をネットワーク全体に送信します。_
@@ -119,17 +118,17 @@ _図7: XRP Ledgerサーバーでレジャー検証を計算する - 各サーバ
バリデータはそれぞれ、計算したレジャーバージョンのハッシュを含む署名付きメッセージの形式で結果を中継します。 _検証_ と呼ばれるこれらのメッセージによって、各サーバーで計算したレジャーとそのピアのレジャーを比較することができます。 バリデータはそれぞれ、計算したレジャーバージョンのハッシュを含む署名付きメッセージの形式で結果を中継します。 _検証_ と呼ばれるこれらのメッセージによって、各サーバーで計算したレジャーとそのピアのレジャーを比較することができます。
[![図8: 過半数のピアが同じ結果を計算するとレジャーが検証される](img/consensus-declare-validation.ja.png)](img/consensus-declare-validation.ja.png) [![図8: 圧倒的多数のピアが同じ結果を計算するとレジャーが検証される](img/consensus-declare-validation.png)](img/consensus-declare-validation.png)
_図8: 過半数のピアが同じ結果を計算するとレジャーが検証される - 各サーバーは、計算されたレジャーを、選択されたバリデータから受け取ったハッシュと比較します。一致しない場合、サーバーは正しいレジャーを再計算または取得する必要があります。_ _図8: 圧倒的多数のピアが同じ結果を計算するとレジャーが検証される - 各サーバーは、計算されたレジャーを、選択されたバリデータから受け取ったハッシュと比較します。一致しない場合、サーバーは正しいレジャーを再計算または取得する必要があります。_
ネットワーク内のサーバーは、圧倒的多数のピアが同じ検証ハッシュに署名してそれをブロードキャストしたときに、そのレジャーインスタンスを検証済みと認識します <a href="#footnote_7" id="from_footnote_7"><sup>7</sup></a>。それ以降のトランザクションは、シーケンス番号N+1の更新および検証済みのこのレジャーに適用されます。 ネットワーク内のサーバーは、圧倒的多数のピアが同じ検証ハッシュに署名してそれをブロードキャストしたときに、そのレジャーインスタンスを検証済みと認識します <a href="#footnote_7" id="from_footnote_7"><sup>7</sup></a>。それ以降のトランザクションは、レジャーインデックスN+1の更新および検証済みのこのレジャーに適用されます。
サーバーが少数で、ピアと異なるレジャーを計算した場合、計算したレジャーは無視されます<a href="#footnote_8" id="from_footnote_8"><sup>8</sup></a>。正しいレジャーを再計算するか、必要に応じて正しいレジャーを取得します。 サーバーが少数で、ピアと異なるレジャーを計算した場合、計算したレジャーは無視されます<a href="#footnote_8" id="from_footnote_8"><sup>8</sup></a>。正しいレジャーを再計算するか、必要に応じて正しいレジャーを取得します。
ネットワークで、検証に関する過半数の同意が得られない場合、コンセンサスプロセスで一貫した提案を作成するにはトランザクション量が多すぎるか、ネットワーク遅延が大きすぎることを意味します。この場合、サーバーはコンセンサスプロセスを繰り返します。コンセンサスが始まってから時間が経過するにつれて、各コンセンサスラウンドで不一致は減少するため、過半数のサーバーが同じ候補トランザクションのセットを受け取った可能性が高くなります。XRP Ledgerは、これらの状況に応じて[トランザクションコスト](transaction-cost.html)と、コンセンサスを待つ時間を動的に調整します。 ネットワークで、検証に関する圧倒的多数の同意が得られない場合、コンセンサスプロセスで一貫した提案を作成するにはトランザクション量が多すぎるか、ネットワーク遅延が大きすぎることを意味します。この場合、サーバーはコンセンサスプロセスを繰り返します。コンセンサスが始まってから時間が経過するにつれて、各コンセンサスラウンドで不一致は減少するため、過半数のサーバーが同じ候補トランザクションのセットを受け取った可能性が高くなります。XRP Ledgerは、これらの状況に応じて[トランザクションコスト](transaction-cost.html)と、コンセンサスを待つ時間を動的に調整します。
検証について過半数の合意が得られると、サーバーは検証済みの新しいレジャー、シーケンス番号N+1との作業に入ることができます。最後のラウンドに含まれなかった候補トランザクションと、その間に送信された新しいトランザクションに対して、コンセンサスと検証プロセスが繰り返されます<a href="#footnote_9" id="from_footnote_9"><sup>9</sup></a> 検証について圧倒的多数の合意が得られると、サーバーは検証済みの新しいレジャー、レジャーインデックスN+1との作業に入ることができます。最後のラウンドに含まれなかった候補トランザクションと、その間に送信された新しいトランザクションに対して、コンセンサスと検証プロセスが繰り返されます<a href="#footnote_9" id="from_footnote_9"><sup>9</sup></a>
## 要点 ## 要点
@@ -140,47 +139,58 @@ XRP Ledgerに送信されたトランザクションはすぐには処理され
- アカウント所有者によってトランザクションが作成され、署名されます。 - アカウント所有者によってトランザクションが作成され、署名されます。
- トランザクションがネットワークに送信されます。 - トランザクションがネットワークに送信されます。
- 書式が正しくないトランザクションはその場で拒否される可能性があります。 - 書式が正しくないトランザクションはその場で拒否される可能性があります。
- 書式が正しいトランザクションは暫定的に成功し、その後で失敗する可能性があります。 - 書式が正しいトランザクションは暫定的に成功し、その後で失敗する可能性があります。
- 書式が正しトランザクションは暫定的に失敗し、その後で成功する可能性があります。 - 書式が正しトランザクションは暫定的に失敗し、その後で成功する可能性があります。
- コンセンサスの間、トランザクションはレジャーに含まれます。 - コンセンサスの間、トランザクションはレジャーに含まれます。
- コンセンサスラウンドが成功すると、レジャーが有効になります。 - コンセンサスラウンドが成功すると、レジャーが有効になります。
- コンセンサスラウンドが失敗すると、成功するまでコンセンサスプロセスが繰り返されます。 - コンセンサスラウンドが失敗すると、成功するまでコンセンサスプロセスが繰り返されます。
- 検証済みレジャーには、トランザクションとレジャーの状態への反映が含まれます。 - 検証済みレジャーには、トランザクションとレジャーの状態への反映が含まれます。
アプリケーションでは、候補トランザクションの暫定的な結果ではなく、検証済みのレジャーの情報のみを信頼してください。一部の[`rippled` API](rippled-api.html)では、トランザクションの暫定的な結果が最初に返されます。そのトランザクションが検証済みレジャーに含まれている場合、またはトランザクションに`LastLedgerSequence`が含まれ、そのシーケンス番号以下の検証済みレジャーにそのトランザクションが出現しない場合にのみ、トランザクションの結果は不変になります。 アプリケーションでは、候補トランザクションの暫定的な結果ではなく、検証済みのレジャーの情報のみを信頼してください。一部の[`rippled` API](rippled-api.html)では、トランザクションの暫定的な結果が最初に返されます。トランザクションの結果が不変になるのは、そのトランザクションが検証済みレジャーに含まれている場合、トランザクションに`LastLedgerSequence`が含まれ、そのレジャーインデックス以下の検証済みレジャーに出現しない場合に限られます。
トランザクションを送信するアプリケーションのベストプラクティスは次のとおりです。 トランザクションを送信するアプリケーションのベストプラクティスは次のとおりです。
- `LastLedgerSequence`パラメーターを使用して、トランザクションが確定的かつ迅速な方法で検証されるか、失敗するようにします。 - `LastLedgerSequence`パラメーターを使用して、トランザクションが確定的かつ迅速な方法で検証されるか、失敗するようにします。
- 検証されたレジャーでトランザクションの結果を確認します。 - 検証されたレジャーでトランザクションの結果を確認します。
- トランザクションを含むレジャーが検証されるか、`LastLedgerSequence`が経過するまで、結果は暫定的です。 - トランザクションを含むレジャーが検証されるか、`LastLedgerSequence`が経過するまで、結果は暫定的です。
- 結果コードが**tesSUCCESS**で`"validated": true`のトランザクションは、恒久的に成功しています。 - 結果コードが**tesSUCCESS**で`"validated": true`のトランザクションは、恒久的に成功しています。
- 結果コードがそれ以外の場合で`"validated": true`のトランザクションは、恒久的に失敗しています。 - 結果コードがそれ以外の場合で`"validated": true`のトランザクションは、恒久的に失敗しています。
- トランザクションの`LastLedgerSequence`によって識別された検証済みレジャーを含め、これまでの検証済みのレジャーに出現しないトランザクションは、恒久的に失敗しています。 - トランザクションの`LastLedgerSequence`によって識別された検証済みレジャーを含め、これまでの検証済みのレジャーに出現しないトランザクションは、恒久的に失敗しています。
- このようなケースを検出するために、レジャーの継続的な履歴を有するサーバーを使用には注意してください<a href="#footnote_10" id="from_footnote_10"><sup>10</sup></a> - このようなケースを検出するために、レジャーの継続的な履歴を有するサーバーを使用には注意してください<a href="#footnote_10" id="from_footnote_10"><sup>10</sup></a>
- `LastLedgerSequence`で識別されるレジャーが検証されるまで、トランザクションの状態を繰り返し確認する必要がある場合があります。 - `LastLedgerSequence`で識別されるレジャーが検証されるまで、トランザクションの状態を繰り返し確認する必要がある場合があります。
## 関連項目
- **コンセプト:**
- [コンセンサスについて](intro-to-consensus.html)
- [コンセンサスの研究](consensus-research.html)
- [Rippleコンセンサスの動画](https://www.youtube.com/watch?v=pj1QVb1vlC0)
- **チュートリアル:**
- [信頼できるトランザクションの送信](reliable-transaction-submission.html)
- [バリデータとしての`rippled`の実行](run-rippled-as-a-validator.html)
- **リファレンス:**
- [レジャーフォーマットのリファレンス](ledger-data-formats.html)
- [トランザクションフォーマットのリファレンス](transaction-formats.html)
- [Consensus_infoメソッド][]
- [Validator_list_sitesメソッド][]
- [Validatorsメソッド][]
## その他のリソース
- [コンセンサスホワイトペーパー](https://ripple.com/files/ripple_consensus_whitepaper.pdf)
- [レジャーフォーマットのリファレンス](ledger-data-formats.html)
- [Ripple コンセンサスの動画](https://www.youtube.com/watch?v=pj1QVb1vlC0)
- [信頼できるトランザクションの送信](reliable-transaction-submission.html)
## 脚注 ## 脚注
<a href="#from_footnote_1" id="footnote_1"><sup>1</sup></a> **tec**結果コードを含むトランザクションでは、リクエストされたアクションは実行されませんが、レジャーには影響します。ネットワークの悪用を防ぎ、トランザクションの分散コストを賄うために、XRPのトランザクションコストが消却されます。同じ送信者によって同時に送信された他のトランザクションをブロックしないようにするには、送信者のアカウントのシーケンス番号を都度増やしてゆきます。期限切れのオブジェクトや資金のない取引注文を削除するなどのメンテナンスも行います。 <a href="#from_footnote_1" id="footnote_1"><sup>1</sup></a> [**tec**結果コード](tec-codes.html)を持つトランザクションでは、リクエストされたアクションは実行されませんが、レジャーには影響します。ネットワークの悪用を防ぎ、トランザクションの分散コストを賄うために、XRPの[トランザクションコスト](transaction-cost.html)が消却されます。同じ送信者によって同時に送信された他のトランザクションをブロックしないようにするには、送信者のアカウントの[シーケンス番号](basic-data-types.html#アカウントシーケンス)を都度増やしてゆきます。`tec`クラスの結果を持つトランザクションは、期限切れのオブジェクトや資金のない取引注文を削除するなどのメンテナンスも行います。
<a href="#from_footnote_2" id="footnote_2"><sup>2</sup></a> 例えば、Aliceが100ドルを持っていて、全額をBobに送信するシナリオを考えてみましょう。アプリケーションは最初にPaymentトランザクションを送信し、Aliceの残高を確認したらすぐにAPIから0ドルが返されます。この値は、候補トランザクションの暫定結果に基づいています。支払いが失敗し、Aliceの残高が100ドルのままになるまたは他のトランザクションによって別の金額になる場合があります。AliceからBobへの支払いが成功したことを確実に知る唯一の方法は、そのトランザクションが検証済みのレジャー内にあり、かつ結果コードが**tesSUCCESS**になるまで、トランザクションの状況を確認することです。トランザクションが有効なレジャーにあるが、結果コードが異なる場合、支払いは失敗したことを意味します。 <a href="#from_footnote_2" id="footnote_2"><sup>2</sup></a> 例えば、Aliceが100ドルを持っていて、全額をBobに送信するシナリオを考えてみましょう。アプリケーションは最初にPaymentトランザクションを送信し、Aliceの残高を確認したらすぐにAPIから0ドルが返されます。この値は、候補トランザクションの暫定結果に基づいています。支払いが失敗し、Aliceの残高が100ドルのままになるまたは他のトランザクションによって別の金額になる場合があります。AliceからBobへの支払いが成功したことを確実に知る唯一の方法は、そのトランザクションが検証済みのレジャー内にあり、かつ結果コードが**tesSUCCESS**になるまで、トランザクションの状況を確認することです。トランザクションが検証済みレジャーにあるが、結果コードが異なる場合、支払いは失敗したことを意味します。
<a href="#from_footnote_3" id="footnote_3"><sup>3</sup></a> 厳密に言えば、バリデータは追跡サーバーのサブセットです。同じ機能を提供することに加えて、「検証」メッセージを送信します。追跡サーバーは、レジャー履歴全体を保持しているか、部分的なレジャー履歴を保持しているかによって、さらに分類することができます。 <a href="#from_footnote_3" id="footnote_3"><sup>3</sup></a> 厳密に言えば、バリデータは追跡サーバーのサブセットです。同じ機能を提供することに加えて、「検証」メッセージを送信します。追跡サーバーは、レジャー履歴全体を保持しているか、部分的なレジャー履歴を保持しているかによって、さらに分類することができます。
<a href="#from_footnote_4" id="footnote_4"><sup>4</sup></a> トランザクションを認識したピアの割合(%がしきい値を下回った場合、コンセンサスのラウンドは失敗します。各ラウンドは反復プロセスです。第1ラウンドの開始時には、少なくともピアの50%が同意する必要があります。コンセンサスラウンドの最終的なしきい値は80%の合意です。これらの具体的な値は変更される可能性があります。 <a href="#from_footnote_4" id="footnote_4"><sup>4</sup></a> トランザクションを認識したピアの割合(%がしきい値を下回った場合、コンセンサスのラウンドは失敗します。各ラウンドは反復プロセスです。第1ラウンドの開始時には、少なくともピアの50%が同意する必要があります。コンセンサスラウンドの最終的なしきい値は80%の合意です。これらの具体的な値は変更される可能性があります。
<a href="#from_footnote_5" id="footnote_5"><sup>5</sup></a> 各サーバーは独自の信頼できるバリデータを定義しますが、ネットワークの一貫性は、様々なサーバーで重複の度合いが高いバリデータのリストが選択されるかどうかにかかっています。このため、Rippleでは推奨するバリデータのリストを公開しています。 <a href="#from_footnote_5" id="footnote_5"><sup>5</sup></a> 各サーバーは独自の信頼できるバリデータを定義しますが、ネットワークの一貫性は、様々なサーバーで重複の度合いが高いバリデータのリストが選択されるかどうかにかかっています。このため、Rippleでは推奨するバリデータのリストを公開しています。
<a href="#from_footnote_6" id="footnote_6"><sup>6</sup></a> 共謀しないとされるバリデータからだけでなくすべてのバリデータからの提案が評価される場合は、悪意のある攻撃者によって、無効なトランザクションが導入されたり、提案から有効なトランザクションが除外されたりする可能性があります。選択されたバリデータリストによって、[シビル攻撃](consensus-protections.html#シビル攻撃)から保護することができます。 <a href="#from_footnote_6" id="footnote_6"><sup>6</sup></a> 共謀しないとされるバリデータからだけでなくすべてのバリデータからの提案が評価される場合は、悪意のある攻撃者によって、無効なトランザクションが導入されたり、提案から有効なトランザクションが除外されたりする可能性があります。選択されたバリデータリストによって、[シビル攻撃](consensus-protections.html#シビル攻撃)から保護することができます。
@@ -191,3 +201,9 @@ XRP Ledgerに送信されたトランザクションはすぐには処理され
<a href="#from_footnote_9" id="footnote_9"><sup>9</sup></a> 実際には、効率的に実行できるように、検証の完了前に新しいコンセンサスのラウンドが開始されます。 <a href="#from_footnote_9" id="footnote_9"><sup>9</sup></a> 実際には、効率的に実行できるように、検証の完了前に新しいコンセンサスのラウンドが開始されます。
<a href="#from_footnote_10" id="footnote_10"><sup>10</sup></a> `rippled`サーバーはレジャーの履歴全体がなくてもAPIリクエストに応答することができます。サービスやネットワーク接続が中断すると、そのサーバーのレジャー履歴にレジャーの不足や誤差が生じることがあります。時間の経過とともに、`rippled`によってその誤差は埋まりますそのように設定されている場合。欠落しているトランザクションを検証する場合は、トランザクションが送信されてからLastLedgerSequenceまでの連続した完全なレジャーを持つサーバーに照らして検証することが重要です。特定のサーバーで利用できるcomplete_ledgersを判断するには、RPCサーバーの状態を使用します。 <a href="#from_footnote_10" id="footnote_10"><sup>10</sup></a> `rippled`サーバーはレジャーの履歴全体がなくてもAPIリクエストに応答することができます。サービスやネットワーク接続が中断すると、そのサーバーのレジャー履歴にレジャーの不足や誤差が生じることがあります。時間の経過とともに、`rippled`によってその誤差は埋まりますそのように設定されている場合。欠落しているトランザクションを検証する場合は、トランザクションが送信されてからLastLedgerSequenceまでの連続した完全なレジャーを持つサーバーに照らして検証することが重要です。特定のサーバーで利用できるcomplete_ledgersを判断するには、RPCサーバーの状態を使用します。
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,13 +1,46 @@
# 並列ネットワーク # 並列ネットワーク
大抵の場合、XRP Ledgerは1つの集合体であると説明され、これはほぼ真実です。本番環境のXRP Ledgerピアツーピアネットワークが1つ存在し、XRP Ledgerに記録されるすべての取引はその本番環境のネットワーク内で発生します。 XRP Ledgerにはピアツーピアの本番環境のネットワークが1つ存在し、XRP Ledger上で行われるすべての取引はその本番環境のネットワーク、すなわちMainnet内で発生します。
ただし、場合によってはコアネットワークとの通信なしでテストや実験を行うことが求められます。このため、Rippleは「代替環境の」ネットワークとして[Ripple Test Net](xrp-test-net-faucet.html)を開始しました。Ripple Test Netは、XRP Ledgerユーザーによるビジネス処理に影響を及ぼすことなく、アプリケーションや`rippled`サーバー自体をテストできる環境として機能します。Ripple Test NetAltNetとも呼ばれますにはTestNet専用のXRPが供給されています。Rippleは、Test Netでのアプリケーション開発に関心のある当事者にこのTestNet専用XRPを[無料で提供](xrp-test-net-faucet.html)しています。 また、Rippleでは、XRPLコミュニティーのメンバーがMainnet上にあるものに影響を及ぼすことなくXRPLテクロジーとやり取りできるように、TestnetとDevnetの2つの代替ネットワークAltNetを提供しています。3つすべてのネットワークの詳細を以下に示します。
**注意:** Rippleはテストネットワークの安定性について一切保証しません。テストネットワークは、サーバー構成、ネットワークトポロジー、ネットワークパフォーマンスのさまざまな特性をテストする目的でこれまで使用され、またこれからも同様に使用されます。 | ネットワーク | アップグレード頻度 | 説明 |
|:--------|:----------------|:-------------------------------------------------|
| Mainnet | 安定版リリース | [XRP Ledger](xrp-ledger-overview.html)。ピアツーピアサーバーのネットワーク機能を備えた分散型の暗号台帳であり、[XRP](xrp.html)の土台となるものです。 |
| Testnet | 安定版リリース | XRP Ledger上に構築したソフトウェアのテスト環境として動作する「代替環境」のネットワーク。本番環境のXRP Ledgerユーザーに影響を及ぼすことも、本物の通貨をリスクにさらすこともありません。Testnetの[Amendmentのステータス](known-amendments.html)は、Mainnetを厳密に反映するようになっていますが、分散型システムが持つ予測不可能な性質により、タイミングにわずかな違いが生じることがあります。 |
| Devnet | ベータ版リリース | 次期リリースのプレビュー。XRP Ledgerのコアソフトウェアへの不安定な変更がテストされます。このAltNetを使用すると、開発者はまだMainnetで有効になっていないXRPLの計画段階の新機能やAmendmentを操作したり学習したりすることができます。 |
TestnetとDevnetはそれぞれ独自にテスト用XRPを提供しています。このテスト用XRPは、XRP Ledgerの試用およびアプリケーション開発やインテグレーションに関心のある対象者に、Rippleが[無料で提供](xrp-testnet-faucet.html)するものです。テスト用XRPは、現実世界での価値はなく、ネットワークがリセットされると失われます。
**注意:** RippleはAltNetの安定性について一切保証しません。これらのネットワークは、サーバー構成、ネットワークトポロジー、ネットワークパフォーマンスのさまざまな特性をテストする目的でこれまで使用され、またこれからも同様に使用されます。
今後は、特定の目的向けに小規模な臨時テストネットワークも導入される可能性があります。
## 並列ネットワークとコンセンサス ## 並列ネットワークとコンセンサス
使用するネットワークを定義する`rippled`の設定はありません。その代わり、信頼するバリデータのコンセンサスに基づいてどのレジャーを正しいレジャーとして受け入れるかを把握します。`rippled`インスタンスからなる異なるコンセンサスグループが、同じグループの他のメンバーだけを信頼する場合、各グループは引き続き並列ネットワークとして機能します。悪意のあるコンピューターや不適切に動作するコンピューターが両方のネットワークに接続している場合でも、各ネットワークのメンバーが、定数設定を超えて別のネットワークのメンバーを信頼するように設定されていない限り、コンセンサスプロセスに混乱は生じません。 使用するネットワークを定義する`rippled`の設定はありません。その代わり、信頼するバリデータのコンセンサスに基づいてどのレジャーを正しいレジャーとして受け入れるかを把握します。`rippled`インスタンスからなる異なるコンセンサスグループが、同じグループの他のメンバーだけを信頼する場合、各グループは引き続き並列ネットワークとして機能します。悪意のあるコンピューターや不適切に動作するコンピューターが両方のネットワークに接続している場合でも、各ネットワークのメンバーが、定数設定を超えて別のネットワークのメンバーを信頼するように設定されていない限り、コンセンサスプロセスに混乱は生じません。
Rippleでは、TestnetとDevnetでメインサーバーを運用しています。[独自の`rippled`サーバーをTestnetに接続](connect-your-rippled-to-the-xrp-test-net.html)していただくことも可能です。TestnetとDevnetでは、多様で検閲耐性のあるバリデータのセットが使用されていません。そのため、RippleはTestnetやDevnetを定期的にリセットできます。
## 関連項目
- **ツール:**
- [XRP Testnet Faucet](xrp-test-net-faucet.html)
- **コンセプト:**
- [コンセンサスについて](intro-to-consensus.html)
- [Amendment](amendments.html)
- **チュートリアル:**
- [XRP Testnetへの`rippled`の接続](connect-your-rippled-to-the-xrp-test-net.html)
- [スタンドアロンモードでのrippledの使用](use-stand-alone-mode.html)
- **リファレンス:**
- [Server_infoメソッド][]
- [Consensus_infoメソッド][]
- [Validator_list_sitesメソッド][]
- [Validatorsメソッド][]
- [デーモンモードのオプション](commandline-usage.html#デーモンモードのオプション)
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,13 +1,21 @@
# オートブリッジング # オートブリッジング
XRP以外の2種類の通貨を交換するOfferCreateでは、合成されたオーダーブックでXRPが中間通貨として使用されることがあります。これは、XRPを媒介通貨として使用することであらゆる通貨ペアの流動性を改善するオートブリッジング機能によるものです。XRP Ledgerのネイティブ暗号資産であるというXRPの特性によりこのように機能します。オファーを実行する際は、直接オファーとオートブリッジングオファーを組み合わせることで全体として最良の為替レートを実現できます。 XRP Ledgerの[分散型取引所](decentralized-exchange.html)で、XRP以外の2種類の通貨を交換する[オファー](offers.html)があった場合、合成されたオーダーブックで[XRP](xrp.html)が中間通貨として使用されることがあります。これは _オートブリッジング_ によるものです。この機能は、通貨を直接交換するよりも安く済む場合にXRPを使用し、あらゆる通貨ペアの流動性を向上させる役割を担います。XRP Ledgerのネイティブ暗号資産であるというXRPの特性によりこのように機能します。オファーを実行する際は、直接オファーとオートブリッジングオファーを組み合わせることで全体として最良の為替レートを実現できます。
例: _AnitaはGBPを売却してBRLを購入するオファーを発行しました。このような一般的ではない通貨マーケットでは、オファーがあまりない場合があります。良いレートのオファーが1件ありますが、Anitaの取引を満たすのに十分な量ではありません。ただしGBPとXRPおよびBRLとXRPの間には、それぞれアクティブで競争力のあるマーケットが存在します。オートブリッジングソフトウェアは、Anitaのオファーを履行できる方法を見つけるため、あるトレーダーからXRPをGBPで購入し、別のトレーダーにXRPを支払ってBRLを購入ます。AnitaはGBPとBRLを直接交換するマーケットでの少額オファーを、GBP対XRPのオファーとXRP対BRLのオファーをペアリングしてより良い複合レートと組み合わせて、最適なレートを自動的に得ることができます。_ 例: _AnitaはGBPを売却してBRLを購入するオファーを発行しました。このような一般的ではない通貨マーケットでは、オファーがあまりない場合があります。良いレートのオファーが1件ありますが、Anitaの取引を満たすのに十分な量ではありません。ただしGBPとXRPおよびBRLとXRPの間には、それぞれアクティブで競争力のあるマーケットが存在します。XRP Ledgerのオートブリッジングシステムは、あるトレーダーからXRPをGBPで購入し、そのXRPを別のトレーダーに支払ってBRLを購入することで、Anitaのオファーを履行できる方法を見つけます。AnitaはGBPとBRLを直接交換するマーケットでの少額オファーを、GBP対XRPのオファーとXRP対BRLのオファーをペアリングしてより良い複合レートと組み合わせて、最適なレートを自動的に得ることができます。_
OfferCreateトランザクションではオートブリッジングが常に自動的に行われます。[Paymentトランザクション](payment.html)ではオートブリッジングはデフォルトで _行われません_ が、path-findingにより同様の効果のあるパスを検索できます。 オートブリッジングは、あらゆる[OfferCreateトランザクション][]で自動的に行われます。[Paymentトランザクション](payment.html)ではオートブリッジングはデフォルトで _行われません_ が、path-findingにより同様の効果のある[パス](paths.html)を検索できます。
## 参照項目 ## 関連項目
- [Dev Blog: Introducing Autobridging](https://ripple.com/dev-blog/introducing-offer-autobridging/) - [Dev Blog: Introducing Autobridging](https://xrpl.org/blog/2014/introducing-offer-autobridging.html)
- [オファーの優先度](offers.html#オファーの優先度) - [オファーの優先度](offers.html#オファーの優先度)
- [ペイメントパス](paths.html)
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,61 @@
# ソフトウェアエコシステム
XRP Ledgerは、「価値のインターネット」を推進および実現可能にするソフトウェアプロジェクトの、深く階層化されたエコシステムの土台となるものです。XRP Ledgerとやり取りするプロジェクト、ツール、ビジネスをすべて挙げることはできないため、このページでは、一部のカテゴリーのみを取り上げ、[xrpl.org](https://xrpl.org)で説明されている主要プロジェクトを重点的にご紹介します。
## スタックレベル
[![4層からなるエコシステムの図: 最下層にはXRP Ledgerのピアツーピアネットワーク、その上にプログラミングライブラリー、次にミドルウェア、そして最上層にアプリとサービスがあります。](img/ecosystem.png)](img/ecosystem.png)
- [XRP Ledgerの基盤](#rippled-コアサーバー)は、トランザクションを共有し、[コンセンサスプロセス](consensus.html)に関与し、[トランザクション](transaction-basics.html)を処理する常時接続のサーバーのピアツーピアネットワークです。XRP Ledgerエコシステム内の他のすべてのものが、最終的にこのピアツーピアネットワーク上に直接、または間接的に構築されます。
- [_プログラミングライブラリー_](#プログラミングライブラリー)は、さらに上位のソフトウェアに存在し、プログラムコードに直接インポートされます。また、XRP Ledgerにアクセスするためのルーチンの実装があらかじめ作成され、組み込まれています。
- [_ミドルウェア_](#ミドルウェア)は、XRP Ledgerデータへの間接アクセスを可能にします。多くの場合、この層のアプリケーションには、独自のデータストレージと処理が存在します。
- [_アプリとサービス_](#アプリとサービス)は、XRP Ledgerでのユーザーレベルのやり取りや、さらに上位のアプリやサービスに対する基盤を提供します。
### rippled: コアサーバー
XRP Ledgerの中心であるピアツーピアネットワークは、コンセンサスとトランザクションプロセスのルールを実行するために、信頼性が高く、効率のよいサーバーを必要とします。Rippleでは、このサーバーソフトウェアのリファレンス実装である[**`rippled`**](the-rippled-server.html)(発音は「リップルディー」)を管理および公開しています。このサーバーは、[一般利用が可能なオープンソースライセンス](https://github.com/ripple/rippled/blob/develop/LICENSE)の下で使用できるため、誰でもこのサーバーの自身のインスタンスを検証し、変更することができます。また、いくつかの制限の下でそれを再公開することができます。
`rippled`の各インスタンスは、([Test Netなどの並列ネットワーク](parallel-networks.html)に従うように構成されていない限り)同じネットワークに同期され、ネットワーク全体のあらゆる通信にアクセスできます。ネットワーク上の各`rippled`サーバーは、最近のトランザクションの一部と、それらのトランザクションで行われた変更の記録とともに、XRP Ledger全体の最新の状態データの完全なコピーを保持します。また、各サーバーは各トランザクションを単独で処理すると同時に、そのトランザクションの結果が残りのネットワークに一致するか検証します。サーバーは、より多くの[レジャー履歴](ledger-history.html)を保持したり、[バリデータ](rippled-server-modes.html#バリデータを運用する理由)としてコンセンサスプロセスに参加するように構成することができます。
このサーバーは、データの検索、サーバーの管理、トランザクションの送信を行うための[`rippled` API](rippled-api.html)をユーザーに公開します。
### プログラミングライブラリー
プログラミングライブラリーは、XRP Ledgerデータにアクセスするために必ずしも必要なわけではありません。HTTPまたはWebSocketを使用すれば、[`rippled` API](rippled-api.html)に直接接続できるためです。ライブラリーは、`rippled` APIにアクセスする際の一般的な作業の一部を簡素化し、データをライブラリー内のプログラミング言語で理解しやすく、かつプログラミングしやすい形式に変換します。
[JavaScript用のRippleAPI](get-started-with-rippleapi-for-javascript.html)「ripple-lib」とも呼ばれるは、長年にわたって使用され、かつ十分なサポートがある、XRP Ledgerにアクセスするためのライブラリーです。多くの[ミドルウェアサービス](#ミドルウェア)が、RippleAPIのようなプログラミングライブラリーを内部で使用しています。
### ミドルウェア
ミドルウェアサービスは、一方ではXRP Ledger APIを利用し、もう一方では独自のAPIを提供するプログラムです。抽象化層を提供して、いくつかの一般的な機能をサービスとして提供することで上位のアプリケーションを容易に構築できるようにします。
[プログラムライブラリー](#プログラミングライブラリー)は、インポートしたプログラムによって新規にインスタンス化されたりシャットダウンされたりしますが、ミドルウェアはそれと異なり、多くの場合は無期限に実行され続け、独自のデータベースリレーショナルSQLデータベースなどや構成ファイルを持つことがあります。
XRP Ledger上のミドルウェアサービスの例として、[Data API](data-api.html)が挙げられます。Data APIは、XRP Ledgerデータを収集して変換することで、時間での照会、データタイプでの絞り込み、およびデータ分析を可能にします。
ミドルウェアサービスのもう1つの例は[XRP-API](xrp-api.html)です。XRP-APIは秘密鍵を管理し、あらゆるプログラミング言語のアプリに対してより使いやすいXRP LedgerへのRESTfulインターフェイスを提供します。
### アプリとサービス
最上層は、最もエキサイティングなことが起こる場所です。アプリとサービスは、XRP Ledgerに接続するための手段をユーザーとデバイスに提供します。この層では、[取引所がXRPを上場](list-xrp-in-your-exchange.html)したり、分散型取引所で使用するために[ゲートウェイが他の通貨を発行](become-an-xrp-ledger-gateway.html)したり、あるいはXRPを購入、売却、または単に<s>HODLing</s>保持するためにウォレットがユーザーインターフェイスを提供したりします。さらに高階層にサービスを追加するなど、他にも多くの可能性があります。
XRPだけでなく、通貨価値を表す他のさまざまな方法と互換性のあるアプリケーションを構築するには、XRPでの決済に[Interledger Protocol][]を使用するのが最適です。
XRPと周辺テクロジーを使用してユーザーとやり取りするプロジェクトには、他にも多くの例があります。Rippleエンタープライズのお客様であれば、すでに[オンデマンド流動性サービス](https://www.ripple.com/ripplenet/on-demand-liquidity/)経由でXRPをご利用いただけます。XRP Ledger上にビルドされているビジネスとソフトウェアのその他の例については、[Xpring Partners](https://xpring.io/#partners)か、XRPChatのエクセレント[Links & Resources](https://www.xrpchat.com/links/)のリストを参照してください。
## 関連項目
- [Xpring Partners](https://xpring.io/#partners)
- [技術に関するよくある質問](technical-faq.html)
- [XRPChat Links & Resources](https://www.xrpchat.com/links/) - ゲートウェイと取引所、ウォレットとストレージ、アプリなどの最新のリストが記載されています。
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -7,7 +7,7 @@
バリデータは、トランザクションがプロトコル要件を満たしていて、結果として「有効」であるかどうかを判断します。バリデータが提供する独自の機能は、順序付けされた単位にトランザクションをグループ化し、二重支払いを防ぐことを目的としてその順序に同意することです。 バリデータは、トランザクションがプロトコル要件を満たしていて、結果として「有効」であるかどうかを判断します。バリデータが提供する独自の機能は、順序付けされた単位にトランザクションをグループ化し、二重支払いを防ぐことを目的としてその順序に同意することです。
コンセンサスプロセスの詳細については、[Consensus](consensus.html)と[Ripple Labs Tech Talk: Understanding Consensus](https://ripple.com/insights/ripple-labs-tech-talk-consensus-within-the-ripple-protocol/)を参照してください。 コンセンサスプロセスの詳細は、[コンセンサス](consensus.html)と[Ripple Labs Tech Talk: Understanding Consensus](https://ripple.com/insights/ripple-labs-tech-talk-consensus-within-the-ripple-protocol/)を参照してください。
#### バリデータの実行にはいくらかかりますか? #### バリデータの実行にはいくらかかりますか?
@@ -32,7 +32,9 @@
#### Rippleによって運用されないバリデータにとってインセンティブとなるものは何ですか? #### Rippleによって運用されないバリデータにとってインセンティブとなるものは何ですか?
XRP Ledgerが広まり、銀行間決済に広く使用されると、参加者にとってネットワークの信頼性と安定性を保証するというインセンティブがあります。このような場合、金融機関はネットワークに参加するために`rippled`サーバーを運用します。サーバーの運用開始後、バリデータを運用するための追加のコストと労力は基本的にかかりません。ソフトウェアスイッチをオフからオンに切り替えるだけです。XRP Ledgerの進化を決定するのはバリデータであるため、バリデータを運用することの主なインセンティブは、ネットワークの安定した運用と賢明な進化を維持し保護することです。 バリデータを運用することの主なインセンティブは、ネットワークの安定した運用と合理的な進化を維持し、保護することです。XRP Ledgerの進化はバリデータによって決定されるため、XRP Ledgerを使用するかこれに依存するビジネスには、ネットワークの信頼性と安定性が確保されるというインセンティブが内在することになります。
XRP Ledgerサーバーを運用してネットワークに参加している場合、バリデータを運用するための費用や労力は最小限に抑えられます。つまり、Bitcoinにおけるマイニング報酬といった、追加のインセンティブは不要であるということです。Rippleでは、バリデータの運用報酬としてXRPを支払うことはしないため、そのようなインセンティブによってバリデータの行動が歪められることはありません。
#### 金融機関は、特定の制度上の基準や要件を満たすのに役立つトランザクションバリデータを設定できますか? #### 金融機関は、特定の制度上の基準や要件を満たすのに役立つトランザクションバリデータを設定できますか?
@@ -51,7 +53,9 @@ XRP Ledgerが広まり、銀行間決済に広く使用されると、参加者
#### XRP Ledgerでは正式なバリデータのオンボーディングプロセスを使用していますか? #### XRP Ledgerでは正式なバリデータのオンボーディングプロセスを使用していますか?
いいえ。XRP Ledgerは、中央権限のないシステムであるため、正式なバリデータのオンボーディングプロセスのようなものは存在しません。代わりに、Rippleでは推奨事項とベストプラクティスを提供しています。 いいえ。XRP Ledgerは、中央権限のないシステムであるため、正式なバリデータのオンボーディングプロセスのようなものは存在しません。
推奨事項やベストプラクティスについては、[バリデータとしての`rippled`の実行](run-rippled-as-a-validator.html)を参照してください。
## XRPの役割 ## XRPの役割
@@ -85,13 +89,13 @@ Rippleは、XRP Ledgerネットワーク全体でAML(Anti-Money Laundering)フ
いいえ、RippleはXRP LedgerとXRP Ledgerネットワークを所有も管理もしていません。 いいえ、RippleはXRP LedgerとXRP Ledgerネットワークを所有も管理もしていません。
Rippleは、コアとなるXRP Ledgerサーバー[`rippled`](https://github.com/ripple/rippled)のリファレンス実装を公開し、オープンソースコードベースに貢献しているエンジニアチームを雇用しています。Rippleはまた、利用可能なソフトウェアのプリコンパイル済みバイナリーパッケージも定期的に発行しています。必要に応じて、誰でも自由に[ソースからソフトウェアをダウンロードしてコンパイル](install-rippled.html)できます。 Rippleは、コアとなるXRP Ledgerサーバー[`rippled`](https://github.com/ripple/rippled)のリファレンス実装を公開し、オープンソースコードベースに貢献しているエンジニアチームを雇用しています。Rippleはまた、利用可能なソフトウェアのプリコンパイル済みバイナリーパッケージも定期的に発行しています。必要に応じて、誰でも自由に[ソースからソフトウェアをダウンロードしてコンパイル](install-rippled.html)できます。
XRP Ledgerと通信するためにRippleのXRP Ledgerソフトウェアを使用する必要はありません。 `rippled` はオープンソースソフトウェアであり、[ISCライセンス](https://github.com/ripple/rippled/blob/develop/LICENSE)の条件に従う限り、誰でも使用、拡張、および変更できます。ISCライセンスは、ソフトウェアの拡張方法と適応方法を厳密に制限する他のオープンソースライセンスと比較して非常に柔軟です。 XRP Ledgerと通信するためにRippleのXRP Ledgerソフトウェアを使用する必要はありません。`rippled`はオープンソースソフトウェアであり、[ISCライセンス](https://github.com/ripple/rippled/blob/develop/LICENSE)の条件に従う限り、誰でも使用、拡張、および変更できます。ISCライセンスは、ソフトウェアの拡張方法と適応方法を厳密に制限する他のオープンソースライセンスと比較して非常に柔軟です。
#### Rippleでは、ソフトウェアを安全にダウンロードする方法を提供していますか? #### Rippleでは、ソフトウェアを安全にダウンロードする方法を提供していますか?
`rippled` ソースコードは<https://github.com/ripple/rippled>から入手できます。ここでは、`master``release`、および`develop`の各ブランチのヒントに、`rippled`開発者が署名したバージョン設定コミットが常に含まれています。XRP Ledgerは、CentOS、RedHat Enterprise Linux、Fedora、およびUbuntu用のビルド済みRPMパッケージも提供します。これらのパッケージは不正開封防止が施されており、その真正性を確認できるようにRippleによってデジタル署名されています。最後に、リリースートは安全なWebサイトで公開されており、リポジトリーのコミットIDと公開されているRPMパッケージのmd5sumが含まれています。 `rippled`ソースコードは<https://github.com/ripple/rippled>から入手できます。ここでは、`master``release`、および`develop`の各ブランチのヒントに、`rippled`開発者が署名したバージョン設定コミットが常に含まれています。XRP Ledgerは、CentOS、RedHat Enterprise Linux、Fedora、Ubuntu、およびDebian Linux用のビルド済みバイナリーパッケージも提供します。これらのパッケージは不正開封防止が施されており、その真正性を確認できるようにRippleによってデジタル署名されています。最後に、リリースートは安全なWebサイトで公開されており、リポジトリーのコミットIDと公開されているパッケージの暗号ハッシュ値が含まれています。
#### Rippleは検証用のコードベースとユーザーソフトウェア用のコードベースを区別していますか? #### Rippleは検証用のコードベースとユーザーソフトウェア用のコードベースを区別していますか?
@@ -101,8 +105,8 @@ XRP Ledgerと通信するためにRippleのXRP Ledgerソフトウェアを使用
## 関連項目 ## 関連項目
- [`rippled` コードベース](https://github.com/ripple/rippled) - [`rippled`コードベース](https://github.com/ripple/rippled)
- ユーザーソフトウェアのコードベース - ユーザーソフトウェアのコードベース:
- [ripple-lib](https://github.com/ripple/ripple-lib) - [ripple-lib](https://github.com/ripple/ripple-lib)
- [ripplecharts-frontend](https://github.com/ripple/ripplecharts-frontend) - [ripplecharts-frontend](https://github.com/ripple/ripplecharts-frontend)
- [Ripple GitHub Organization](https://github.com/ripple/) - [Ripple GitHub Organization](https://github.com/ripple/)

View File

@@ -12,7 +12,7 @@ XRPはXRP Ledger固有のデジタル資産です。暗号鍵を持ち、イン
- **[責任あるソフトウェア管理][]:** Rippleでは、世界に通用する技術をもった常勤の開発チームが、XRP Ledgerの基礎となるソフトウェアを保守し、継続的に改良しています。Rippleは、技術の担い手として、さらに技術に対する支援者として、世界中の政府および金融機関と建設的な関係を築いています。 - **[責任あるソフトウェア管理][]:** Rippleでは、世界に通用する技術をもった常勤の開発チームが、XRP Ledgerの基礎となるソフトウェアを保守し、継続的に改良しています。Rippleは、技術の担い手として、さらに技術に対する支援者として、世界中の政府および金融機関と建設的な関係を築いています。
- **[安全で適応性のある暗号技術][]:** XRP Ledgerは、ECDSABitcoinが使用しているものと同じアルゴリズムなどの業界標準のデジタル署名システムを利用しています。またEd25519などの最新の効率的なアルゴリズムもサポートしています。XRP Ledgerのソフトウェアは拡張性に富み、最先端の暗号技術の進歩に合わせてアルゴリズムを追加したり消却にしたりすることが可能です。 - **[安全で適応性のある暗号技術][]:** XRP Ledgerは、ECDSABitcoinが使用しているものと同じアルゴリズムなどの業界標準のデジタル署名システムを利用しています。またEd25519などの最新の効率的なアルゴリズムもサポートしています。XRP Ledgerのソフトウェアは拡張性に富み、最先端の暗号技術の進歩に合わせてアルゴリズムを追加したり消却にしたりすることが可能です。
- **[スマートコントラクト用の最新機能][]:** Escrow、ChecksおよびPayment Channelなどの機能は、[Interledgerプロトコル](https://interledger.org/)を含む最新の金融アプリケーションをサポートしています。この拡張機能のツールボックスには、ネットワークの修正プロセスや、取引の不変性を担保するチェックを分けて行うなどの安全機能が備わっています。 - **[スマートコントラクト用の最新機能][]:** Escrow、ChecksおよびPayment Channelなどの機能は、[Interledgerプロトコル](https://interledger.org/)を含む最新の金融アプリケーションをサポートしています。この拡張機能のツールボックスには、ネットワークの修正プロセスや、取引の不変性を担保するチェックを分けて行うなどの安全機能が備わっています。
- **[台帳上の分散型取引所][]:** XRP自身を便利に使えるあらゆる機能に加えて、XRP Ledgerには、ユーザーが希望する任意の通貨で表示された債務を追跡し取引するための多機能な会計システムや、プロトコルに組み込まれた取引機能などがあります。XRP Ledgerは、通貨間の長い支払いパスや、複数通貨の一元的決済を確実に処理し、XRPを活用することで分散型ネットワークに存在する信頼のギャップを解消しています。 - **[台帳上の分散型取引所][]:** XRP Ledgerには、それ自体でXRPを便利に使うための機能すべてに加え、ユーザー任意の通貨建ての債務を追跡し取引するための多機能な会計システムや、プロトコルに組み込まれた両替機能などがあります。XRP Ledgerは、通貨間の長い支払いパスや、複数通貨の一元的決済を確実に処理し、XRPを活用することで分散型ネットワークに存在する信頼のギャップを解消しています。
## 耐検閲性のある取引処理 ## 耐検閲性のある取引処理
[耐検閲性のある取引処理]: #耐検閲性のある取引処理 [耐検閲性のある取引処理]: #耐検閲性のある取引処理
@@ -28,9 +28,9 @@ XRPは、Bitcoinや他の暗号資産と同様に新しい通貨の一種です
**注記:** XRP Ledgerのユーザーは、XRP Ledgerで発行されたXRP以外の通貨であれば凍結 _できます_ 。詳細は、[凍結についての資料](freezes.html)を参照してください。 **注記:** XRP Ledgerのユーザーは、XRP Ledgerで発行されたXRP以外の通貨であれば凍結 _できます_ 。詳細は、[凍結についての資料](freezes.html)を参照してください。
信頼できるバリデータードから構成されるXRP Ledgerのシステムでは、人手をほとんどかけることなく、他の分散型システムよりも優れた権限の分散が可能です。不特定多数の参加者間でのConsensusを完全に自動化しているシステムは、議決権の集中のリスクに晒されます。例えば、Bitcoinの採掘は、電気代が安い場所に偏って集中しています。Rippleは、様々な地域の異なる組織によって運営される別個のバリデータリストを管理しています。そのためXRP Ledgerは検閲などの外部の圧力に対してプルーフ・オブ・ワークによる採掘よりも高い耐性を持つことができます。推奨されるバリデータを分散させるためのRippleの対応策の詳細は、[分散化戦略についてのアップデート](https://ripple.com/dev-blog/decentralization-strategy-update/)を参照してください。 信頼できるバリデータードから構成されるXRP Ledgerのシステムでは、人手をほとんどかけることなく、他の分散型システムよりも優れた権限の分散が可能です。不特定多数の参加者間でのConsensusを完全に自動化しているシステムは、議決権の集中のリスクに晒されます。例えば、Bitcoinの採掘は、電気代が安い場所に偏って集中しています。Rippleは、様々な地域の異なる組織によって運営される別個のバリデータリストを管理しています。そのためXRP Ledgerは検閲などの外部の圧力に対してプルーフ・オブ・ワークによる採掘よりも高い耐性を持つことができます。推奨されるバリデータを分散させるためのRippleの対応策の詳細は、[分散化戦略についてのアップデート](https://xrpl.org/blog/2017/decent-strategy-update.html)を参照してください。
XRP Ledgerの検閲機能の詳細については、[取引検閲の検知](transaction-censorship-detection.html)を参照してください。 XRP Ledgerの検閲機能の詳細は、[取引検閲の検知](transaction-censorship-detection.html)を参照してください。
## 高速で効率的なConsensusアルゴリズム ## 高速で効率的なConsensusアルゴリズム
@@ -48,11 +48,11 @@ XRP LedgerのConsensusアルゴリズムの動作方法の詳細は、[XRP Ledge
戦争および政変と並んで、超インフレは通貨が消滅する主な原因の1つです。バリデータが分散しているため、XRPは政治的要因に対してはある程度の耐性があります。一方、超インフレに対しては、XRP Ledgerのルールにより簡潔なソリューションで対応しています。つまりXRPのトータル供給量の限定です。発行量を増やすメカニズムがそもそもないため、XRPが超インフレに悩まされる可能性は非常に低くなります。 戦争および政変と並んで、超インフレは通貨が消滅する主な原因の1つです。バリデータが分散しているため、XRPは政治的要因に対してはある程度の耐性があります。一方、超インフレに対しては、XRP Ledgerのルールにより簡潔なソリューションで対応しています。つまりXRPのトータル供給量の限定です。発行量を増やすメカニズムがそもそもないため、XRPが超インフレに悩まされる可能性は非常に低くなります。
市場に出回るXRPの供給量は、次のいくつかの要因によって変化 _します_ 市場に出回るXRPの供給量は、次のいくつかの要因によって変化 _します_
- XRP Ledgerで取引を送信すると、毎回少額のXRPが消却されます。送信者は消却する額を選択できますが、予想される取引の処理作業とネットワークの混雑度に応じて一定の最低額が設定されています。ネットワークが混み合っている場合、より多くのXRPを消却するよう選択している取引は、取引キューの前に割り込むことができます。これはスパム防止策で、XRP Ledgerネットワークに対する[DDoS](https://en.wikipedia.org/wiki/Denial-of-service_attack)攻撃にかかるコストは極めて高額になります。詳細は、[取引コスト](transaction-cost.html)を参照してください。 - XRP Ledgerで取引を送信すると、毎回少額のXRPが消却されます。送信者は消却する額を選択できますが、予想される取引の処理作業とネットワークの混雑度に応じて一定の最低額が設定されています。ネットワークが混み合っている場合、より多くのXRPを消却するよう選択している取引は、取引キューの前に割り込むことができます。これはスパム防止策で、XRP Ledgerネットワークに対する[DDoS](https://en.wikipedia.org/wiki/Denial-of-service_attack)攻撃にかかるコストは極めて高額になります。詳細は、[取引コスト](transaction-cost.html)を参照してください。
- XRP Ledgerの各アカウントは、少額のXRPを準備しておく必要があります。これもスパム防止策で、台帳データが必要以上に増えてしまうことを防ぎます。XRP Ledgerのバリデータは、実世界でのXRPの価値の変動に対応する目的で、準備金として必要なXRPの金額を変更するために投票決議を行うことができます。この投票が前回発生したのは2013年の12月であり、このときは[必要な準備金が50 XRPから20 XRPに減少しました](https://ripple.com/insights/proposed-change-to-ripple-reserve-requirement-2/)。必要な準備金が減少すると、以前は準備金によって使用できなくなっていた部分のXRPが再び使用可能になります。 - XRP Ledgerの各アカウントは、少額のXRPを準備しておく必要があります。これもスパム防止策で、台帳データが必要以上に増えてしまうことを防ぎます。XRP Ledgerのバリデータは、実世界でのXRPの価値の変動に対応する目的で、準備金として必要なXRPの金額を変更するために投票決議を行うことができます。この投票が前回発生したのは2013年の12月であり、このときは[必要な準備金が50 XRPから20 XRPに減少しました](https://ripple.com/insights/proposed-change-to-ripple-reserve-requirement-2/)。必要な準備金が減少すると、以前は準備金によって使用できなくなっていた部分のXRPが再び使用可能になります。
- Ripple会社は、大量のXRPをEscrowに保有しています。毎月の初めに、Rippleで使用するために10億XRPがEscrowから引き出されます。RippleはXRPを使用してXRP Ledgerエコシステムの成長を促し、また一部のXRPを機関投資家に売却しています。Rippleはまた、取引所での取引総量のうちのわずかな比率に限定して、プログラムに従って取引所でXRPを売却しています。Rippleは[XRP市場レポート](https://ripple.com/insights/q1-2018-xrp-markets-report/)で四半期ごとに売上高を公開しています。毎月の終わりに、Rippleが売却や譲渡をせずに残っているXRPがあればEscrowに戻し、54か月保管します。RippleのEscrowポリシーの詳細は、[RippleはXRPの供給の予測可能性向上のために55BnのXRPをエスクローに預託しました](https://ripple.com/insights/ripple-to-place-55-billion-xrp-in-escrow-to-ensure-certainty-into-total-xrp-supply/)を参照してください。Escrow機能の技術的詳細は、[Escrow](escrow.html)を参照してください。 - Ripple会社は、大量のXRPをEscrowに保有しています。毎月の初めに、Rippleで使用するために10億XRPがEscrowから引き出されます。RippleはXRPを使用してXRP Ledgerエコシステムの成長を促し、また一部のXRPを機関投資家に売却しています。Rippleはまた、取引所での取引総量のうちのわずかな比率に限定して、プログラムに従って取引所でXRPを売却しています。Rippleは[XRP市場レポート](https://ripple.com/insights/q1-2018-xrp-markets-report/)で四半期ごとに売上高を公開しています。毎月の終わりに、Rippleが売却や譲渡をせずに残っているXRPがあればEscrowに戻し、54か月保管します。RippleのEscrowポリシーの詳細は、[RippleはXRPの供給量の確実性を確保するために550億XRPをエスクローに預託することを発表しました](https://ripple.com/insights/ripple-to-place-55-billion-xrp-in-escrow-to-ensure-certainty-into-total-xrp-supply/)を参照してください。Escrow機能の技術的詳細は、[Escrow](escrow.html)を参照してください。
## 責任あるソフトウェア管理 ## 責任あるソフトウェア管理
@@ -79,7 +79,7 @@ XRP LedgerのConsensusアルゴリズムの動作方法の詳細は、[XRP Ledge
## スマートコントラクト用の最新機能 ## スマートコントラクト用の最新機能
[スマートコントラクト用の最新機能]: #スマートコントラクト用の最新機能 [スマートコントラクト用の最新機能]: #スマートコントラクト用の最新機能
XRP決済による単純な価値の移動に加え、XRP Ledgerにはいくつかの拡張機能があります。「価値のインターネット」を標榜するアプリケーションの構築にこれらの機能を提供することにより、以前は知られていなかったニーズや実現困難であったニーズを満たすことができます。ネットワーク自体のなかで「スマートコントラクト」としてのアプリケーションを実行するのではなく、XRP Ledgerでは、コントラクトを処理するためのツールを提供しつつ、実行環境またはコンテナが適切であれば、すべての場所でアプリケーションを実行することができます。この「シンプルにする」というアプローチは、柔軟でスケーラブル、かつ強力です。 [XRP決済](direct-xrp-payments.html)による単純な価値の移動に加え、XRP Ledgerには「価値のインターネット」に特化した拡張機能があります。この拡張機能により、XRP上にビルドされたアプリケーションは、以前は実用的でなかったり実現不可能だったりしたサービスや機能を提供できるようになります。ネットワーク自体のなかで「スマートコントラクト」としてのアプリケーションを実行するのではなく、XRP Ledgerでは、コントラクトを処理するためのツールを提供しつつ、実行環境またはコンテナが適切であれば、すべての場所でアプリケーションを実行することができます。この「シンプルにする」というアプローチは、柔軟でスケーラブル、かつ強力です。
XRP Ledgerの拡張機能として次のものがあります。 XRP Ledgerの拡張機能として次のものがあります。
@@ -87,7 +87,7 @@ XRP Ledgerの拡張機能として次のものがあります。
- [Escrow](escrow.html)により、宣言した時間が経過するまで、または暗号条件が満たされるまで、XRPはロックされます。 - [Escrow](escrow.html)により、宣言した時間が経過するまで、または暗号条件が満たされるまで、XRPはロックされます。
- [DepositAuth](depositauth.html)により、ユーザーは自分に対して送金できる相手か、送金できない相手かを決めることができます。 - [DepositAuth](depositauth.html)により、ユーザーは自分に対して送金できる相手か、送金できない相手かを決めることができます。
- [分散型取引所](#台帳上の分散型取引所)により、ユーザーは台帳上で債務およびXRPを取引することができます。 - [分散型取引所](#台帳上の分散型取引所)により、ユーザーは台帳上で債務およびXRPを取引することができます。
- [Invariant Checking](https://ripple.com/dev-blog/protecting-ledger-invariant-checking/)により、独立したレイヤーで取引実行時のバグから取引を保護することができます。 - [Invariant Checking](https://xrpl.org/blog/2017/invariant-checking.html)により、独立したレイヤーで取引実行時のバグから取引を保護することができます。
- [Amendment](amendments.html)により、現行機能にスムーズにアップグレードすることができ、移行に際してエコシステムに被害を及ぼしたり、不確定要素を発生させることなく、継続して技術を発展させることができます。 - [Amendment](amendments.html)により、現行機能にスムーズにアップグレードすることができ、移行に際してエコシステムに被害を及ぼしたり、不確定要素を発生させることなく、継続して技術を発展させることができます。

View File

@@ -14,6 +14,21 @@ XRP Ledgerの発行済み通貨は他の用途にも使えます。たとえば
金融サービスビジネスを始める前に、関連規制を調査されることを強くお勧めします。 金融サービスビジネスを始める前に、関連規制を調査されることを強くお勧めします。
## 発行済み通貨の使用方法
トラストラインは、ゲートウェイの債務を負う意思を明示的に表明するものです。つまり、「あなたはXRP Ledgerの外部で私からこれだけのお金を借りることができます。」ということです。
発行済み通貨の使用方法として想定されるモデルは、信頼できる金融機関である _ゲートウェイ_ で使用することです。ゲートウェイでは、外界の資産を管理し、[複数通貨間の支払い](cross-currency-payments.html)や[分散型取引所](decentralized-exchange.html)での取引のためにXRP Ledgerで使用できるようにします。この流れは以下のようになります。
1. 顧客がゲートウェイに通貨を送金します。通貨は、法定通貨やBitcoinなど、XRP Ledgerのネイティブ資産でないものが考えられます。
2. ゲートウェイは、その通貨を保管して記録します。
3. ゲートウェイは、その顧客に属するアドレスに対して、XRP Ledgerでの残高を同じ通貨建てで発行します。
4. 顧客は、[複数通貨間の支払い](cross-currency-payments.html)の送金や[分散型取引所](decentralized-exchange.html)での取引などによって、発行済み通貨をXRP Ledgerで自由に使用できます。
5. 顧客必ずしも最初に預金した顧客ではないは、発行済み通貨をゲートウェイのXRP Ledgerのアドレスに送金します。
6. ゲートウェイは、XRP Ledgerの資金の残高を送信した顧客のIDを確認し、対応する金額を _XRP Ledgerの外部で_ その顧客に付与します。
XRP Ledgerへの「入金」や「出金」のプロセスに関する詳細は、ゲートウェイ、法的管轄、関連する資産のタイプなどの要因に基づいて異なります。
## 発行済み通貨の特性 ## 発行済み通貨の特性
XRP Ledger内の発行済み通貨はすべてトラストラインに存在し、レジャーのデータでは[RippleStateオブジェクト](ripplestate.html)として表示されます。発行済み通貨を作成するには、発行アドレスは、対象となる通貨に対し非ゼロ制限のあるイシュアーへのトラストラインを持つアドレスに対し、[Paymentトランザクション][]を送信します。発行済み通貨は、このようなトラストラインを通じてRipplingする方法でも作成できます。発行済み通貨を消去するには、通貨をイシュアーに戻します。 XRP Ledger内の発行済み通貨はすべてトラストラインに存在し、レジャーのデータでは[RippleStateオブジェクト](ripplestate.html)として表示されます。発行済み通貨を作成するには、発行アドレスは、対象となる通貨に対し非ゼロ制限のあるイシュアーへのトラストラインを持つアドレスに対し、[Paymentトランザクション][]を送信します。発行済み通貨は、このようなトラストラインを通じてRipplingする方法でも作成できます。発行済み通貨を消去するには、通貨をイシュアーに戻します。
@@ -24,4 +39,25 @@ XRP Ledger内の発行済み通貨はすべてトラストラインに存在し
発行済み通貨は、あらゆる種類の通貨または資産(額面価格が極めて低い、または高いものを含む)に相当するとされています。通貨コードの種類と発行済み通貨の表記の数値制限に関する技術的な詳細は、[通貨フォーマットのリファレンス](currency-formats.html)を参照してください。 発行済み通貨は、あらゆる種類の通貨または資産(額面価格が極めて低い、または高いものを含む)に相当するとされています。通貨コードの種類と発行済み通貨の表記の数値制限に関する技術的な詳細は、[通貨フォーマットのリファレンス](currency-formats.html)を参照してください。
## 関連項目
- **コンセプト:**
- [XRP](xrp.html)
- [複数通貨間の支払い](cross-currency-payments.html)
- [分散型取引所](decentralized-exchange.html)
- **チュートリアル:**
- [XRP Ledgerゲートウェイの開設](become-an-xrp-ledger-gateway.html)
- [トランザクションの結果の確認](look-up-transaction-results.html)
- [専門化した支払いタイプの使用](use-specialized-payment-types.html)
- **リファレンス:**
- [Paymentトランザクション][]
- [TrustSetトランザクション][]
- [RippleStateオブジェクト](ripplestate.html)
- [account_linesメソッド][]
- [account_currenciesメソッド][]
- [gateway_balancesメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %} {% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -5,9 +5,9 @@
## 資金のライフサイクル ## 資金のライフサイクル
XRP LedgerのXRP以外の通貨の残高(イシュアンス)はすべて、2つのXRP Ledgerアドレス間の会計上の関係に関連付けられていす。Rippleが推奨する役割の分割を金融機関が行うと、その金融機関に関連する資金の流れは循環する傾向にあります。 XRP LedgerのXRP以外の残高はすべて、2つのXRP Ledgerアドレス間の会計上の関係に関連付けられてい_発行済み通貨_す。Rippleが推奨する役割の分割を金融機関が行うと、その金融機関に関連する資金の流れは循環する傾向にあります。
[![図: 発行アドレスからスタンバイアドレス、運用アドレス、顧客アドレスおよびパートナーアドレスに移動し、最後に発行アドレスに戻る資金フロー](img/funds_flow_diagram.ja.png)](img/funds_flow_diagram.ja.png) [![図: 発行アドレスからスタンバイアドレス、運用アドレス、顧客アドレスおよびパートナーアドレスに移動し、最後に発行アドレスに戻る資金フロー](img/funds_flow_diagram.png)](img/funds_flow_diagram.png)
発行アドレスはペイメントの送金時に、XRP Ledgerの会計上の関係に残高を作成します。ユーザーはXRP Ledger内のさまざまな会計上の関係と残高を交換できます。このため、XRP以外の残高を表す用語として _イシュアンス_ を使用します。イシュアンスの額は、発行アドレスの側から見ると債務を表すため、マイナスです。同じイシュアンスの額を発行アドレスの相手側から見ると、プラスになります。発行アドレスがペイメントを受領すると、送信されたイシュアンスが消去され、発行アドレスの債務が減少します。 発行アドレスはペイメントの送金時に、XRP Ledgerの会計上の関係に残高を作成します。ユーザーはXRP Ledger内のさまざまな会計上の関係と残高を交換できます。このため、XRP以外の残高を表す用語として _イシュアンス_ を使用します。イシュアンスの額は、発行アドレスの側から見ると債務を表すため、マイナスです。同じイシュアンスの額を発行アドレスの相手側から見ると、プラスになります。発行アドレスがペイメントを受領すると、送信されたイシュアンスが消去され、発行アドレスの債務が減少します。
@@ -27,7 +27,6 @@ XRP LedgerのXRP以外の通貨の残高イシュアンスはすべて、2
金融機関はXRP Ledgerで1つの発行アドレスから複数の通貨を発行できます。ただし、いくつかの設定[送金手数料](transfer-fees.html)のパーセンテージや[Global Freeze](freezes.html)の状況などは、1つのアドレスから発行されるすべての通貨に同様に適用されます。金融機関が通貨ごとに設定を変えて柔軟に管理したい場合、金融機関は通貨ごとに異なる発行アドレスを使用する必要があります。 金融機関はXRP Ledgerで1つの発行アドレスから複数の通貨を発行できます。ただし、いくつかの設定[送金手数料](transfer-fees.html)のパーセンテージや[Global Freeze](freezes.html)の状況などは、1つのアドレスから発行されるすべての通貨に同様に適用されます。金融機関が通貨ごとに設定を変えて柔軟に管理したい場合、金融機関は通貨ごとに異なる発行アドレスを使用する必要があります。
## 運用アドレス ## 運用アドレス
運用アドレスはレジに似ています。イシュアンスを顧客とパートナーに送信して、金融機関に代わってペイメントを行います。トランザクションに自動的に署名するには、運用アドレスのシークレットキーをインターネットに接続されたサーバーに保管する必要があります。(シークレットキーは暗号化して保管できますが、サーバーがトランザクションに署名する際にシークレットキーを暗号化解除する必要があります。)顧客とパートナーは、運用アドレスとの会計上の関係を作成すべきではありません。 運用アドレスはレジに似ています。イシュアンスを顧客とパートナーに送信して、金融機関に代わってペイメントを行います。トランザクションに自動的に署名するには、運用アドレスのシークレットキーをインターネットに接続されたサーバーに保管する必要があります。(シークレットキーは暗号化して保管できますが、サーバーがトランザクションに署名する際にシークレットキーを暗号化解除する必要があります。)顧客とパートナーは、運用アドレスとの会計上の関係を作成すべきではありません。
@@ -38,7 +37,6 @@ XRP LedgerのXRP以外の通貨の残高イシュアンスはすべて、2
不正使用者が運用アドレスのシークレットキーを入手した場合に金融機関が失う可能性のある通貨額は、最大でも運用アドレスが保有している額までです。金融機関は、顧客やパートナーからのアクションなしに、新しい運用アドレスに切り替えることができます。 不正使用者が運用アドレスのシークレットキーを入手した場合に金融機関が失う可能性のある通貨額は、最大でも運用アドレスが保有している額までです。金融機関は、顧客やパートナーからのアクションなしに、新しい運用アドレスに切り替えることができます。
## スタンバイアドレス ## スタンバイアドレス
金融機関がリスクと利便性のバランスを保つためのもう1つの手段として、発行アドレスと運用アドレスの中間ステップとして「スタンバイアドレス」を利用することができます。金融機関はスタンバイアドレスという追加のXRP Ledgerアドレスに資金を供給できます。このアドレスのキーはオンライン上に保管されず、別の信頼できるユーザーに預けられています。 金融機関がリスクと利便性のバランスを保つためのもう1つの手段として、発行アドレスと運用アドレスの中間ステップとして「スタンバイアドレス」を利用することができます。金融機関はスタンバイアドレスという追加のXRP Ledgerアドレスに資金を供給できます。このアドレスのキーはオンライン上に保管されず、別の信頼できるユーザーに預けられています。
@@ -50,3 +48,22 @@ XRP LedgerのXRP以外の通貨の残高イシュアンスはすべて、2
### スタンバイアドレスの漏えい ### スタンバイアドレスの漏えい
スタンバイアドレスの漏えいが発生した場合、運用アドレスが漏えいした場合と同様の影響が及びます。不正使用者がスタンバイアドレスに保有される残高を盗むことが可能となり、金融機関は顧客やパートナーからのアクションなしに新しいスタンバイアドレスに切り替えることができます。 スタンバイアドレスの漏えいが発生した場合、運用アドレスが漏えいした場合と同様の影響が及びます。不正使用者がスタンバイアドレスに保有される残高を盗むことが可能となり、金融機関は顧客やパートナーからのアクションなしに新しいスタンバイアドレスに切り替えることができます。
## 関連項目
- **コンセプト:**
- [アカウント](accounts.html)
- [暗号鍵](cryptographic-keys.html)
- **チュートリアル:**
- [XRP Ledgerゲートウェイの開設](become-an-xrp-ledger-gateway.html)
- [レギュラーキーペアの割り当て](assign-a-regular-key-pair.html)
- [レギュラーキーペアの変更または削除](change-or-remove-a-regular-key-pair.html)
- **リファレンス:**
- [account_infoメソッド][]
- [SetRegularKeyトランザクション][]
- [AccountRootオブジェクト](accountroot.html)
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,10 +1,10 @@
# パス # パス
XRP Ledgerでは、送金元から受取人への支払いが中間ステップをどのように通過するかをパスによって定義します。パスはオーダーブックを通じて送金元と受取人を結び付けることで、複数通貨間の支払いを可能にします。また、負債を相殺するような複雑な決済もパスにより可能になります。 XRP Ledgerでは、[発行済み通貨](issued-currencies-overview.html)の支払いが送金元から受取人に届くまでにたどる中間ステップの道筋をパスによって定義します。パスは、XRP Ledgerの[分散型取引所](decentralized-exchange.html)のオーダーを介して送金元と受取人を結び付けることで、[複数通貨間の支払い](cross-currency-payments.html)を可能にします。また、負債を相殺するような複雑な決済もパスにより可能になります。
XRP Ledgerでは1つのPaymentトランザクションは複数のパスを使用でき、複数のソースの流動性を組み合わせて必要な額を送金することができます。そのため、トランザクションには使用可能なパスをまとめた _パスセット_ が含まれます。パスセットの中のパスでは開始時と終了時には同一通貨が使用される必要があります。 XRP Ledgerでは1つのPaymentトランザクションは複数のパスを使用でき、複数のソースの流動性を組み合わせて必要な額を送金することができます。そのため、トランザクションには使用可能なパスをまとめた _パスセット_ が含まれます。パスセットの中のパスでは開始時と終了時には同一通貨が使用される必要があります。
XRPは任意のアドレスに直接送金できるため、XRP間のトランザクションではパスは使用されません。 XRPは任意のアドレスに直接送金できるため、[XRP間のトランザクション](direct-xrp-payments.html)ではパスは使用されません。
## パスのステップ ## パスのステップ
@@ -19,7 +19,7 @@ XRPは任意のアドレスに直接送金できるため、XRP間のトラン
いずれのタイプのステップでも、中間アドレスでは取得する価値と失う価値はほぼ同等です。トラストラインから同じ通貨の別のトラストラインへ残高がripplingするか、または以前に出されたオーダーに基づいて通貨が交換されます。場合によっては、[送金手数料](transfer-fees.html)、トラストラインクオリティ、または数値の丸め方が原因で、取得する価値と失われる価値が厳密に同等ではないことがあります。 いずれのタイプのステップでも、中間アドレスでは取得する価値と失う価値はほぼ同等です。トラストラインから同じ通貨の別のトラストラインへ残高がripplingするか、または以前に出されたオーダーに基づいて通貨が交換されます。場合によっては、[送金手数料](transfer-fees.html)、トラストラインクオリティ、または数値の丸め方が原因で、取得する価値と失われる価値が厳密に同等ではないことがあります。
[![3つのパスの例を示す図](img/paths-examples.ja.png)](img/paths-examples.ja.png) [![3つのパスの例を示す図](img/paths-examples.png)](img/paths-examples.png)
@@ -31,7 +31,7 @@ XRPは任意のアドレスに直接送金できるため、XRP間のトラン
署名時に`rippled`によりパスが自動的に入力されるようにするには、[signメソッド][]または[`submit`コマンド(署名と送信モード)](submit.html#署名と送信モード)への要求に`build_path`フィールドを指定します。ただし、トラブルを回避するために、署名前にPathfindingを個別に実行し、結果を確認することが推奨されます。 署名時に`rippled`によりパスが自動的に入力されるようにするには、[signメソッド][]または[`submit`コマンド(署名と送信モード)](submit.html#署名と送信モード)への要求に`build_path`フィールドを指定します。ただし、トラブルを回避するために、署名前にPathfindingを個別に実行し、結果を確認することが推奨されます。
**注意:**`rippled`は可能な限り低コストのパスを検出するように設計されていますが、常にこのようなパスを検出できるわけではありません。信頼できない`rippled`インスタンスが改ざんされ、利益目的でこの動作が変更される可能性もあります。パスに沿った支払いの実行にかかる実際のコストは、送信時とトランザクション実行時で異なることがあります。 **注意:** `rippled`は可能な限り低コストのパスを検出するように設計されていますが、常にこのようなパスを検出できるわけではありません。信頼できない`rippled`インスタンスが改ざんされ、利益目的でこの動作が変更される可能性もあります。パスに沿った支払いの実行にかかる実際のコストは、送信時とトランザクション実行時で異なることがあります。
パスの検出は、新しいレジャーが検証されるたびに数秒ごとに変化する非常に難しい課題であるため、`rippled`は完全に最適なパスを検出するようには設計されていません。ただし、いくつかの有効なパスを検出し、特定額の送金コストを推定することができます。 パスの検出は、新しいレジャーが検証されるたびに数秒ごとに変化する非常に難しい課題であるため、`rippled`は完全に最適なパスを検出するようには設計されていません。ただし、いくつかの有効なパスを検出し、特定額の送金コストを推定することができます。
@@ -42,8 +42,8 @@ XRPは任意のアドレスに直接送金できるため、XRP間のトラン
* パスの1番目のステップは、トランザクションの`Account`フィールドに定義されるとおり、トランザクションの送信者であると常に黙示されます。 * パスの1番目のステップは、トランザクションの`Account`フィールドに定義されるとおり、トランザクションの送信者であると常に黙示されます。
* トランザクションに、そのトランザクションの送信者ではない`issuer`が指定されている`SendMax`フィールドが含まれている場合、そのイシュアーはパスの2番目のパスとして黙示されます。 * トランザクションに、そのトランザクションの送信者ではない`issuer`が指定されている`SendMax`フィールドが含まれている場合、そのイシュアーはパスの2番目のパスとして黙示されます。
* `SendMax``issuer`が送信側アドレス _である_ 場合、パスはその送信側アドレスから始まり、そのアドレスの特定の通貨のトラストラインのいずれかを使用できます。詳細は、[SendMaxおよびAmountの特殊な値](payment.html#sendmaxおよびamountで使用する特殊なイシュアーの値)を参照してください。 * `SendMax``issuer`が送信側アドレス _である_ 場合、パスはその送信側アドレスから始まり、そのアドレスの特定の通貨のトラストラインのいずれかを使用できます。詳細は、[SendMaxおよびAmountの特殊な値](payment.html#sendmaxおよびamountで使用する特殊なイシュアーの値)を参照してください。
* トランザクションの`Amount`フィールドに、トランザクションの`Destination`とは異なる`issuer` が指定されている場合、そのイシュアーはパスの最後から2番目のステップであると黙示されます。 * トランザクションの`Amount`フィールドに、トランザクションの`Destination`とは異なる`issuer`が指定されている場合、そのイシュアーはパスの最後から2番目のステップであると黙示されます。
* 最後に、トランザクションの`Destination`フィールドに定義されるとおり、パスの最終ステップはトランザクションの受信者であることが常に黙示されます。 * 最後に、トランザクションの`Destination`フィールドに定義されるとおり、パスの最終ステップはトランザクションの受信者であることが常に黙示されます。
@@ -54,12 +54,12 @@ XRPは任意のアドレスに直接送金できるため、XRP間のトラン
デフォルトパスは次のいずれかになります。 デフォルトパスは次のいずれかになります。
* トランザクションでイシュアーに関係なく1種類の通貨のみが使用される場合、デフォルトパスでは支払いが、関連するアドレスを通じてRipplingされると想定されます。このパスは、これらのアドレスがトラストラインで接続されている場合にのみ機能します。 * トランザクションでイシュアーに関係なく1種類の通貨のみが使用される場合、デフォルトパスでは支払いが、関連するアドレスを通じてRipplingされると想定されます。このパスは、これらのアドレスがトラストラインで接続されている場合にのみ機能します。
* `SendMax`が省略されているか、または`SendMax``issuer`が送金元の場合、デフォルトパスが機能するためには送金元`Account`から宛先`Amount``issuer`へのトラストラインが必要です。 * `SendMax`が省略されているか、または`SendMax``issuer`が送金元の場合、デフォルトパスが機能するためには送金元`Account`から宛先`Amount``issuer`へのトラストラインが必要です。
* `SendMax``Amount`に異なる`issuer`値が指定されており、そのいずれも送金元または受取人ではない場合、これらの2つのイシュアー間のトラストラインでRipplingが必要となるため、デフォルトパスは有用ではない可能性があります。一般にイシュアーが互いに直接信頼し合うことはお勧めしません。 * `SendMax``Amount`に異なる`issuer`値が指定されており、そのいずれも送金元または受取人ではない場合、これらの2つのイシュアー間のトラストラインでRipplingが必要となるため、デフォルトパスは有用ではない可能性があります。一般にイシュアーが互いに直接信頼し合うことはお勧めしません。
* 複数通貨間のトランザクションの場合、デフォルトパスは支払元通貨(`SendMax`フィールドで指定)と宛先通貨(`Amount`フィールドで指定)の間でオーダーブックを使用します。 * 複数通貨間のトランザクションの場合、デフォルトパスは支払元通貨(`SendMax`フィールドで指定)と宛先通貨(`Amount`フィールドで指定)の間でオーダーブックを使用します。
有効なすべてのデフォルトパスを次の図に示します。 有効なすべてのデフォルトパスを次の図に示します。
[![デフォルトパスの図](img/paths-default_paths.ja.png)](img/paths-default_paths.ja.png) [![デフォルトパスの図](img/paths-default_paths.png)](img/paths-default_paths.png)
デフォルトパスを無効にするには[`tfNoDirectRipple`フラグ](payment.html#paymentのフラグ)を使用します。このケースでは、トランザクションに明示的に指定されたパスを使用してトランザクションを実行することだけが可能です。トレーダーはこのオプションを使用して裁定取引を実行できます。 デフォルトパスを無効にするには[`tfNoDirectRipple`フラグ](payment.html#paymentのフラグ)を使用します。このケースでは、トランザクションに明示的に指定されたパスを使用してトランザクションを実行することだけが可能です。トレーダーはこのオプションを使用して裁定取引を実行できます。
@@ -78,10 +78,10 @@ XRPは任意のアドレスに直接送金できるため、XRP間のトラン
要約すると、以下のフィールドの組み合わせが有効であり、またオプションで`type``type_hex`のいずれかまたは両方を指定できます。 要約すると、以下のフィールドの組み合わせが有効であり、またオプションで`type``type_hex`のいずれかまたは両方を指定できます。
- `account` のみ - `account`のみ
- `currency` のみ - `currency`のみ
- `currency` `issuer``currency`がXRP以外の場合 - `currency``issuer``currency`がXRP以外の場合
- `issuer` のみ - `issuer`のみ
パスステップで`account``currency``issuer`の各フィールドを上記以外の方法で指定することは無効です。 パスステップで`account``currency``issuer`の各フィールドを上記以外の方法で指定することは無効です。
@@ -93,7 +93,18 @@ XRPは任意のアドレスに直接送金できるため、XRP間のトラン
| 0x10 | 16 | 通貨の変更:`currency`フィールドが指定されています。 | | 0x10 | 16 | 通貨の変更:`currency`フィールドが指定されています。 |
| 0x20 | 32 | イシュアーの変更:`issuer`フィールドが指定されています。 | | 0x20 | 32 | イシュアーの変更:`issuer`フィールドが指定されています。 |
## 関連項目
- **コンセプト:**
- [複数通貨間の支払い](cross-currency-payments.html)
- [分散型取引所](decentralized-exchange.html)
- [Partial Payments](partial-payments.html)
- **リファレンス:**
- [Paymentトランザクション][]
- [path_findメソッド][]WebSocketのみ
- [ripple_path_findメソッド][]
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %} {% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %} {% include '_snippets/rippled_versions.md' %}

View File

@@ -2,7 +2,7 @@
XRP Ledgerでは、「Rippling」とは同一通貨の[トラストライン](trust-lines-and-issuing.html)を有する複数の接続当事者間での非可分なネット決済のプロセスを指しています。Ripplingは発行済み通貨の基幹的なプロセスです。Ripplingを利用すれば、同一イシュアーを信頼するユーザーは、そのイシュアーを受動的な仲介機関として発行済み残高を相互に送金できるようになります。Ripplingは、受動的かつ双方向の[通貨取引オーダー](offers.html)のようなもので、制限がなく、通貨コードが同一でイシュアーが異なる2つの通貨間の為替レートは1:1です。 XRP Ledgerでは、「Rippling」とは同一通貨の[トラストライン](trust-lines-and-issuing.html)を有する複数の接続当事者間での非可分なネット決済のプロセスを指しています。Ripplingは発行済み通貨の基幹的なプロセスです。Ripplingを利用すれば、同一イシュアーを信頼するユーザーは、そのイシュアーを受動的な仲介機関として発行済み残高を相互に送金できるようになります。Ripplingは、受動的かつ双方向の[通貨取引オーダー](offers.html)のようなもので、制限がなく、通貨コードが同一でイシュアーが異なる2つの通貨間の為替レートは1:1です。
Ripplingは、支払[パス](paths.html)でのみ発生します。 Ripplingは、支払[パス](paths.html)でのみ発生します。[XRP間の直接決済](direct-xrp-payments.html)にはRipplingは使用されません。
発行アカウント以外のアカウントでは、Ripplingが望ましくない場合があります。Ripplingを使えば、他のユーザーが同一通貨のイシュアー間で債権債務を移動できるようになるためです。このため、アカウントの[DefaultRippleフラグ](#defaultrippleフラグ)を有効にして、アカウントがデフォルトでRipplingを有効にしない限り、デフォルトでは[NoRippleフラグ](#norippleフラグ)により着信トラストラインでのRipplingが無効になっています。 発行アカウント以外のアカウントでは、Ripplingが望ましくない場合があります。Ripplingを使えば、他のユーザーが同一通貨のイシュアー間で債権債務を移動できるようになるためです。このため、アカウントの[DefaultRippleフラグ](#defaultrippleフラグ)を有効にして、アカウントがデフォルトでRipplingを有効にしない限り、デフォルトでは[NoRippleフラグ](#norippleフラグ)により着信トラストラインでのRipplingが無効になっています。
@@ -12,11 +12,11 @@ Ripplingは、支払[パス](paths.html)でのみ発生します。
「Rippling」は、支払いを行うために複数のトラストラインが調整されたときに発生します。たとえば、AliceがCharlieにお金を借りており、さらにAliceはBobからもお金を借りている場合、XRP Ledgerではトラストラインは次のようになります: 「Rippling」は、支払いを行うために複数のトラストラインが調整されたときに発生します。たとえば、AliceがCharlieにお金を借りており、さらにAliceはBobからもお金を借りている場合、XRP Ledgerではトラストラインは次のようになります:
![Charlie --$10-- Alice --$20-- Bob](img/noripple-01.ja.png) ![Charlie --$10-- Alice -- $20 -- Bob](img/noripple-01.png)
BobがCharlieに$3を支払いたい場合、BobはAliceに対して「Alice、君に貸しているお金の中から$3をCharlieに支払ってくれ。」と言えます。AliceはBobに借りているお金の一部をCharlieに送金します。最終的にはトラストラインは次のようになります。 BobがCharlieに$3を支払いたい場合、BobはAliceに対して「Alice、君に貸しているお金の中から$3をCharlieに支払ってくれ。」と言えます。AliceはBobに借りているお金の一部をCharlieに送金します。最終的にはトラストラインは次のようになります。
![Charlie --$13-- Alice --$17-- Bob](img/noripple-02.ja.png) ![Charlie --$13-- Alice --$17-- Bob](img/noripple-02.png)
2つのアドレスが、アドレス間のトラストライン上の残高を調整することで相互に支払うこのプロセスを「Rippling」と呼びます。これはXRP Ledgerの有用で重要な機能です。Ripplingは、同一の[通貨コード][]を使用するトラストラインによってアドレスがリンクされている場合に起こります。イシュアーが同一でなくてもかまいません。実際、大規模なチェーンでは常にイシュアーが変更されます。 2つのアドレスが、アドレス間のトラストライン上の残高を調整することで相互に支払うこのプロセスを「Rippling」と呼びます。これはXRP Ledgerの有用で重要な機能です。Ripplingは、同一の[通貨コード][]を使用するトラストラインによってアドレスがリンクされている場合に起こります。イシュアーが同一でなくてもかまいません。実際、大規模なチェーンでは常にイシュアーが変更されます。
@@ -30,17 +30,17 @@ BobがCharlieに$3を支払いたい場合、BobはAliceに対して「Alice、
たとえば、Emilyが2つの異なる金融機関から発行されたお金を保有しているとします。 たとえば、Emilyが2つの異なる金融機関から発行されたお金を保有しているとします。
![Charlie --$10-- 金融機関A --$1-- Emily --$100-- 金融機関B --$2-- Daniel](img/noripple-03.ja.png) ![Charlie --$10-- 金融機関A --$1-- Emily --$100-- 金融機関B --$2-- Daniel](img/noripple-03.png)
CharlieはDanielに支払うため、Emilyのアドレスを通じてRipplingします。たとえば、CharlieがDanielに$10を支払うとします: CharlieはDanielに支払うため、Emilyのアドレスを通じてRipplingします。たとえば、CharlieがDanielに$10を支払うとします:
![Charlie --$0-- 金融機関A --$11-- Emily --$90-- 金融機関B --$12-- Daniel](img/noripple-04.ja.png) ![Charlie --$0-- 金融機関A --$11-- Emily --$90-- 金融機関B --$12-- Daniel](img/noripple-04.png)
この場合、CharlieやDanielと面識のないEmilyは驚く可能性があります。さらに、金融機関Aが金融機関Bよりも高い出金手数料をEmilyに請求した場合、Emilyがコストを負担することになる可能性があります。NoRippleフラグはこの状況を回避するためのフラグです。Emilyが両方のトラストラインでNoRippleフラグを設定していれば、この2つのトラストラインを使用しているEmilyのアドレスを通じて、支払がRipplingされることはありません。 この場合、CharlieやDanielと面識のないEmilyは驚く可能性があります。さらに、金融機関Aが金融機関Bよりも高い出金手数料をEmilyに請求した場合、Emilyがコストを負担することになる可能性があります。NoRippleフラグはこの状況を回避するためのフラグです。Emilyが両方のトラストラインでNoRippleフラグを設定していれば、この2つのトラストラインを使用しているEmilyのアドレスを通じて、支払がRipplingされることはありません。
例: 例:
![Charlie --$10-- 金融機関A --$1、NoRipple-- Emily --$100、NoRipple-- 金融機関B --$2-- Daniel](img/noripple-05.ja.png) ![Charlie --$10-- 金融機関A --$1、NoRipple-- Emily --$100、NoRipple-- 金融機関B --$2-- Daniel](img/noripple-05.png)
このように、CharlieがEmilyのアドレスを通じてRipplingし、Danielに支払うという上記のシナリオは、不可能になります。 このように、CharlieがEmilyのアドレスを通じてRipplingし、Danielに支払うという上記のシナリオは、不可能になります。
@@ -48,7 +48,7 @@ CharlieはDanielに支払うため、Emilyのアドレスを通じてRipplingし
NoRippleフラグにより特定のパスが無効になり、無効になったパスは支払に使用できなくなります。パスが無効であると見なされるのは、パスが、あるアドレスに対してNoRippleが有効となっているトラストラインを通じて、そのアドレスードに入り**かつ**そのノードから出た場合に限られます。 NoRippleフラグにより特定のパスが無効になり、無効になったパスは支払に使用できなくなります。パスが無効であると見なされるのは、パスが、あるアドレスに対してNoRippleが有効となっているトラストラインを通じて、そのアドレスードに入り**かつ**そのノードから出た場合に限られます。
![処理を行うためには同一アドレスによって両方のトラストラインにNoRippleが設定されている必要があることを示す図](img/noripple-06.ja.png) ![処理を行うためには同一アドレスによって両方のトラストラインにNoRippleが設定されている必要があることを示す図](img/noripple-06.png)
## DefaultRippleフラグ ## DefaultRippleフラグ
@@ -80,7 +80,22 @@ DefaultRippleフラグは、デフォルトで着信トラストラインでのR
[RippleAPI](rippleapi-reference.html)でアドレスに関連付けられているトラストラインを確認するには、[getTrustlines](rippleapi-reference.html#gettrustlines)メソッドを使用します。各トラストラインの`ripplingDisabled`フィールドには、現在のアドレスがそのトラストラインに対してNoRippleフラグを有効にしているか否かが表示され、`counterparty.ripplingDisabled`フィールドには、取引相手がNoRippleフラグを有効にしているか否かが表示されます。 [RippleAPI](rippleapi-reference.html)でアドレスに関連付けられているトラストラインを確認するには、[getTrustlines](rippleapi-reference.html#gettrustlines)メソッドを使用します。各トラストラインの`ripplingDisabled`フィールドには、現在のアドレスがそのトラストラインに対してNoRippleフラグを有効にしているか否かが表示され、`counterparty.ripplingDisabled`フィールドには、取引相手がNoRippleフラグを有効にしているか否かが表示されます。
## 関連項目
- **コンセプト:**
- [パス](paths.html)
- **チュートリアル:**
- [XRP Ledgerゲートウェイの開設](become-an-xrp-ledger-gateway.html)
- **リファレンス:**
- [account_linesメソッド][]
- [account_infoメソッド][]
- [AccountSetトランザクション][]
- [TrustSetトランザクション][]
- [AccountRootのフラグ](accountroot.html#accountrootのフラグ)
- [RippleStateトラストラインのフラグ](ripplestate.html#ripplestateのフラグ)
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %} {% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %} {% include '_snippets/rippled_versions.md' %}

View File

@@ -7,19 +7,19 @@
XRPにはイシュアーがいないため、送金手数料が発生することはありません。 XRPにはイシュアーがいないため、送金手数料が発生することはありません。
たとえばACME BankがACMEイシュアンスの送金手数料を0.5%に設定するとします。支払いの受取人が2 EUR.ACMEを受領するには、送金元が2.01 EUR.ACMEを送金する必要があります。このトランザクションの後、XRP LedgerのACMEの債務残高は0.01€減少します。つまり、ACMEはそのXRP Ledgerイシュアンスの担保となるアカウントで当該の額を保有する必要がありません。 たとえばACME BankがACMEイシュアンスの送金手数料を1%に設定するとします。支払いの受取人が2 EUR.ACMEを受領するには、送金元が2.02 EUR.ACMEを送金する必要があります。このトランザクションの後、XRP LedgerのACMEの債務残高は0.02€減少します。つまり、ACMEはそのXRP Ledgerイシュアンスの担保となるアカウントで当該の額を保有する必要がありません。
次の図は、XRP LedgerによるAliceからCharlieへの2 EUR.ACMEの支払い送金手数料1%)を示します。 次の図は、XRP LedgerによるAliceからCharlieへの2 EUR.ACMEの支払い送金手数料1%)を示します。
![Aliceが2,02€を送金し、Charlieが2,00€を受領し、XRP LedgerでのACMEの負債が0,02€減少します](img/e2g-with_transferrate.ja.png) ![Aliceが2,02€を送金し、Charlieが2,00€を受領し、XRP LedgerでのACMEの負債が0,02€減少します](img/e2g-with_transferrate.png)
## ペイメントパスでの送金手数料 ## ペイメントパスでの送金手数料
<!--{# TODO: Update this for OnwerPaysFee amendment when that gets added #}--> <!--{# TODO: Update this for OnwerPaysFee amendment when that gets added #}-->
送金手数料は、各送金においてイシュアンスが発行アカウントを通じて当事者間を移動するたびに適用されます。さらに複雑なトランザクションでは、手数料が複数回適用されます。送金手数料は、送金の終わりの時点から逆方向に適用されるので、最終的には支払いの送金者がすべての手数料をカバーするのに十分な額を送金する必要があります。次に例を示します。 送金手数料は、各送金においてイシュアンスが発行アカウントを通じて当事者間を移動するたびに適用されます。さらに複雑なトランザクションでは、手数料が複数回適用されます。送金手数料は、送金の終わりの時点から逆方向に適用されるので、最終的には支払いの送金者がすべての手数料をカバーするのに十分な額を送金する必要があります。例:
![手数料が適用された複数通貨間の支払いの図](img/transfer_fees_example.ja.png) ![手数料が適用された複数通貨間の支払いの図](img/transfer_fees_example.png)
このシナリオでは、ACMEが発行したEURをSalazar送金元が保有しており、WayGateが発行した100 USDをRosa受取人に送金したいと思っています。FXMakerはオーダーブックで最も良いレート1 USD.WayGate = 0.9 EUR.ACMEのオファーを提供する通貨取引業者です。もし手数料がなければ、Salazarは90 EURを送金すればRosaに100 USDを送金することができます。しかしながら、ACMEで1%の送金手数料が発生し、WayGateで0.2%の送金手数料が発生します。つまり、次のようになります。 このシナリオでは、ACMEが発行したEURをSalazar送金元が保有しており、WayGateが発行した100 USDをRosa受取人に送金したいと思っています。FXMakerはオーダーブックで最も良いレート1 USD.WayGate = 0.9 EUR.ACMEのオファーを提供する通貨取引業者です。もし手数料がなければ、Salazarは90 EURを送金すればRosaに100 USDを送金することができます。しかしながら、ACMEで1%の送金手数料が発生し、WayGateで0.2%の送金手数料が発生します。つまり、次のようになります。
@@ -29,9 +29,9 @@ XRPにはイシュアーがいないため、送金手数料が発生するこ
# 技術詳細 # 技術詳細
送金手数料は[発行アドレス][]の設定により表されます。送金手数料には、0%未満の値と100%を超える値は指定できず、0.0000001%の位までで切り捨てられます。TransferRate設定は同一アカウントにより発行されるすべての通貨に適用されます。通貨によって異なる送金手数料のパーセンテージを適用するには、通貨ごとに異なる[発行アドレス][発行アドレス]を使用します。 送金手数料は[発行アドレス][]の設定により表されます。送金手数料には、0%未満の値と100%を超える値は指定できず、0.0000001%の位までで切り捨てられます。TransferRate設定は同一アカウントにより発行されるすべての通貨に適用されます。通貨によって異なる送金手数料のパーセンテージを適用するには、通貨ごとに異なる[発行アドレス][]を使用します。
**注記:**`rippled`v0.80.0で導入され2017-11-14に有効となった[fix1201 Amendment](amendments.html)により、最大送金手数料は実効限度である約329%32ビット整数の最大サイズに基づくから100%に引き下げられました。送金手数料の設定が100%`TransferRate``2000000000`)を上回るアカウントがレジャーにまだ含まれている可能性があります。すでに設定されている手数料はすべて、規定のレートで引き続き運用されます。 **注記:** `rippled` v0.80.0で導入され2017-11-14に有効となった[fix1201 Amendment](amendments.html)により、最大送金手数料は実効限度である約329%32ビット整数の最大サイズに基づくから100%に引き下げられました。送金手数料の設定が100%`TransferRate``2000000000`)を上回るアカウントがレジャーにまだ含まれている可能性があります。すでに設定されている手数料はすべて、規定のレートで引き続き運用されます。
## RippleAPI ## RippleAPI
@@ -49,7 +49,23 @@ RippleAPIでは、送金手数料は`transferRate`フィールドに10進数で
アカウントの`TransferRate`を確認するには、[account_infoメソッド][]を使用します。`TransferRate`が省略されている場合は、手数料はありません。 アカウントの`TransferRate`を確認するには、[account_infoメソッド][]を使用します。`TransferRate`が省略されている場合は、手数料はありません。
## 関連項目
- **コンセプト:**
- [手数料(曖昧さの回避)](fees.html)
- [トランザクションコスト](transaction-cost.html)
- [パス](paths.html)
- **チュートリアル:**
- [XRP Ledgerゲートウェイの開設](become-an-xrp-ledger-gateway.html)
- **リファレンス:**
- [account_linesメソッド][]
- [account_infoメソッド][]
- [AccountSetトランザクション][]
- [AccountRootのフラグ](accountroot.html#accountrootのフラグ)
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %} {% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %} {% include '_snippets/rippled_versions.md' %}

View File

@@ -2,14 +2,17 @@
XRP Ledgerの「アカウント」は、XRPの所有者と[トランザクション](transaction-formats.html)の送信者を表します。アカウントの主な要素は次のとおりです。 XRP Ledgerの「アカウント」は、XRPの所有者と[トランザクション](transaction-formats.html)の送信者を表します。アカウントの主な要素は次のとおりです。
- 識別用の**アドレス**。例えば、 `rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn` - 識別用の**アドレス**。例えば、`rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn`
**注記:** XRPコミュニティは、取引所およびウォレットで[宛先タグ](https://xrpl.org/source-and-destination-tags.html)の代わりに使用できる新しいフォーマット、**X**アドレスを[提案](https://github.com/xrp-community/standards-drafts/issues/6)(これをサポートする[コーデック](https://github.com/xrp-community/xrpl-tagged-address-codec)も開発)しました。これらの「パック化」したアドレスは、`r`ではなく`X`で開始します。詳細は、[XRPL 𝗫-address format](https://xrpaddress.info/)のサイトを参照してください。
- **XRPの残高**。このXRPの一部は、[準備金](reserves.html)用に確保されています。 - **XRPの残高**。このXRPの一部は、[準備金](reserves.html)用に確保されています。
- **シーケンス番号**は1から始まり、このアカウントからトランザクションが送信されるたびに1つ増加します。トランザクションのシーケンス番号がその送信者の次のシーケンス番号一致しない限り、トランザクションをレジャーに含めることはできません。 - **シーケンス番号**このアカウントから送信されるトランザクションがすべて、正しい順序で、それぞれ1回のみ適用されるようにします。トランザクションを実行するには、トランザクションのシーケンス番号と送金元のシーケンス番号一致する必要があります。その後も、トランザクションが適用されている限り、アカウントのシーケンス番号は1ずつ増加します。関連項目: [基本的なデータタイプ: アカウントシーケンス](basic-data-types.html#アカウントシーケンス)
- このアカウントと残高に影響を及ぼした**取引の履歴**。 - このアカウントと残高に影響を及ぼした**取引の履歴**。
- [取引の承認](transaction-basics.html#トランザクションの承認)方法。以下に例を示します。 - [トランザクションの承認](transaction-basics.html#トランザクションの承認)方法。以下に例を示します。
- アカウント固有のマスターキーのペア。([無効](accountset.html)にできますが、変更はできません。) - アカウント固有のマスターキーのペア。([無効](accountset.html)にできますが、変更はできません。)
- [ローテーションで使用](setregularkey.html)できる「レギュラー」キーペア。 - [ローテーションで使用](setregularkey.html)できる「レギュラー」キーペア。
- [マルチ署名](multi-signing.html)の署名者のリスト。(アカウントのコアデータとは別に保存されます。) - [マルチ署名](multi-signing.html)の署名者のリスト。(アカウントのコアデータとは別に保存されます。)
アカウントのコアデータは、レジャーのデータツリーの[AccountRoot](accountroot.html)レジャーのオブジェクトタイプに保存されます。アカウントは、他の複数のタイプのデータの所有者(または部分的な所有者)になることもできます。 アカウントのコアデータは、レジャーのデータツリーの[AccountRoot](accountroot.html)レジャーのオブジェクトタイプに保存されます。アカウントは、他の複数のタイプのデータの所有者(または部分的な所有者)になることもできます。
@@ -26,10 +29,10 @@ XRP Ledgerでアカウントを取得する一般的な方法は次のとおり
1. ランダム性の強いソースからキーペアを生成し、そのキーペアのアドレスを計算します。(例えば、[wallet_proposeメソッド][]を使用して計算することができます。) 1. ランダム性の強いソースからキーペアを生成し、そのキーペアのアドレスを計算します。(例えば、[wallet_proposeメソッド][]を使用して計算することができます。)
2. XRP Ledgerにアカウントをすでに持っているユーザーに、生成したアドレスにXRPを送信してもらいます。 2. XRP Ledgerにアカウントをすでに持っているユーザーに、生成したアドレスにXRPを送信してもらいます。
- 例えば、一般の取引所でXRPを購入し、その取引所から、指定したアドレスにXRPを引き出すことができます。 - 例えば、一般の取引所でXRPを購入し、その取引所から、指定したアドレスにXRPを引き出すことができます。
**注意:** 自身のXRP Ledgerアドレスで初めてXRPを受け取る場合は[アカウントの準備金](reserves.html)現在は20 XRPを支払う必要があります。この金額のXRPは無期限に使用できなくなります。一方で、一般の取引所では通常、顧客のXRPはすべて、共有されたいくつかのXRP Ledgerアカウントに保有されているため、顧客はその取引所で個々のアカウントの準備金を支払う必要はありません。引き出す前に、XRP Ledgerに直接アカウントを保有することが、金額に見合う価値があるかどうかを検討してください。 **注意:** 自身のXRP Ledgerアドレスで初めてXRPを受け取る場合は[アカウントの準備金](reserves.html)現在は20 XRPを支払う必要があります。この金額のXRPは無期限に使用できなくなります。一方で、一般の取引所では通常、顧客のXRPはすべて、共有されたいくつかのXRP Ledgerアカウントに保有されているため、顧客はその取引所で個々のアカウントの準備金を支払う必要はありません。引き出す前に、XRP Ledgerに直接アカウントを保有することが、金額に見合う価値があるかどうかを検討してください。
## アドレス ## アドレス
@@ -39,29 +42,44 @@ XRP Ledgerでアカウントを取得する一般的な方法は次のとおり
キーペアを始め、有効なアドレスの作成は、厳密な数学的演算です。キーペアの生成と、そのアドレスの計算は完全にオフラインで行うことができます。XRP Ledgerやその他の関係者と通信する必要はありません。公開鍵からアドレスへの変換には一方向のハッシュ関数が含まれるため、公開鍵がアドレスと一致することは確認できますが、アドレスのみから公開鍵を導出することはできません。このことが、署名付きのトランザクションに送信者の公開鍵 _と_ アドレスが含まれる理由の1つとなっています。 キーペアを始め、有効なアドレスの作成は、厳密な数学的演算です。キーペアの生成と、そのアドレスの計算は完全にオフラインで行うことができます。XRP Ledgerやその他の関係者と通信する必要はありません。公開鍵からアドレスへの変換には一方向のハッシュ関数が含まれるため、公開鍵がアドレスと一致することは確認できますが、アドレスのみから公開鍵を導出することはできません。このことが、署名付きのトランザクションに送信者の公開鍵 _と_ アドレスが含まれる理由の1つとなっています。
XRP Ledgerアドレスの計算方法の技術的な詳細については、[アドレスのエンコード](#アドレスのエンコード)を参照してください。 XRP Ledgerアドレスの計算方法の技術的な詳細は、[アドレスのエンコード](#アドレスのエンコード)を参照してください。
### 特別なアドレス ### 特別なアドレス
XRP Ledgerでは、過去の使用という点で、一部のアドレスに特別な意味があります。多くの場合、これらのアドレスは「ブラックホール」アドレスです。つまり、このアドレスは既知のシークレットキーから派生したものではありません。アドレスのみからシークレットキーを推測することは事実上不可能なため、ブラックホールアドレスが保有しているXRPは永久に失われます。 XRP Ledgerでは、過去の使用という点で、一部のアドレスに特別な意味があります。多くの場合、これらのアドレスは「ブラックホール」アドレスです。つまり、このアドレスは既知のシークレットキーから派生したものではありません。アドレスのみからシークレットキーを推測することは事実上不可能なため、ブラックホールアドレスが保有しているXRPは永久に失われます。
| アドレス | 名前 | 意味 | ブラックホール | | アドレス | 名前 | 意味 | ブラックホール? |
|-----------------------------|------|---------|-------------| |-----------------------------|------|---------|-------------|
| rrrrrrrrrrrrrrrrrrrrrhoLvTp | ACCOUNT\_ZERO | 値`0`を[base58][]形式にエンコードしたXRP Ledgerのアドレス。ピアツーピア通信では、このアドレスは、XRPの発行者として`rippled`で使用されます。 | はい | | rrrrrrrrrrrrrrrrrrrrrhoLvTp | ACCOUNT_ZERO | 値`0`を[base58][]形式にエンコードしたXRP Ledgerのアドレス。ピアツーピア通信では、このアドレスは、XRPの発行者として`rippled`で使用されます。 | はい |
| rrrrrrrrrrrrrrrrrrrrBZbvji | ACCOUNT\_ONE | 値`1`を[base58][]形式にエンコードしたXRP Ledgerのアドレス。レジャーの[RippleState項目](ripplestate.html)では、このアドレスは、トラストライン残高の発行者のプレースホルダーとして使用されます。 | はい | | rrrrrrrrrrrrrrrrrrrrBZbvji | ACCOUNT_ONE | 値`1`を[base58][]形式にエンコードしたXRP Ledgerのアドレス。レジャーの[RippleState項目](ripplestate.html)では、このアドレスは、トラストライン残高の発行者のプレースホルダーとして使用されます。 | はい |
| rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh | ジェネシスアカウント | `rippled`で新しいジェネシスレジャーが一から開始される場合例えば、スタンドアロンモード、このアカウントはすべてのXRPを保持します。このアドレスは、シード値「masterpassphrase」から生成されており、この値は[ハードコーディング](https://github.com/ripple/rippled/blob/94ed5b3a53077d815ad0dd65d490c8d37a147361/src/ripple/app/ledger/Ledger.cpp#L184)されています。 | いいえ | | rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh | ジェネシスアカウント | `rippled`で新しいジェネシスレジャーが一から開始される場合例えば、スタンドアロンモード、このアカウントはすべてのXRPを保持します。このアドレスは、シード値「masterpassphrase」から生成されており、この値は[ハードコーディング](https://github.com/ripple/rippled/blob/94ed5b3a53077d815ad0dd65d490c8d37a147361/src/ripple/app/ledger/Ledger.cpp#L184)されています。 | いいえ |
| rrrrrrrrrrrrrrrrrNAMEtxvNvQ | Ripple名予約のブラックホール | 以前は、Rippleでは、このアカウントにXRPを送信してRipple名を予約するようユーザーに求めていました。| はい | | rrrrrrrrrrrrrrrrrNAMEtxvNvQ | Ripple名予約のブラックホール | 以前は、Rippleでは、このアカウントにXRPを送信してRipple名を予約するようユーザーに求めていました。 | はい |
| rrrrrrrrrrrrrrrrrrrn5RM1rHd | NaNアドレス | 以前のバージョンの[ripple-lib](https://github.com/ripple/ripple-lib)では、XRP Ledgerの[base58][]文字列エンコード形式を使用して、値[NaN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN)をエンコードするときにこのアドレスを生成しました。 | はい | | rrrrrrrrrrrrrrrrrrrn5RM1rHd | NaNアドレス | 以前のバージョンの[ripple-lib](https://github.com/ripple/ripple-lib)では、XRP Ledgerの[base58][]文字列エンコード形式を使用して、値[NaN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN)をエンコードするときにこのアドレスを生成しました。 | はい |
## アカウントの永続性 ## アカウントの削除
**注意:** この部分は古くなっています。[英語版](/{{currentpage.html}})をご覧下さい [DeletableAccounts amendment](known-amendments.html#deletableaccounts) :not_enabled: では、アカウントを削除できます。DeletableAccounts Amendmentが有効になっていない場合、資金供給されたアカウントはすべて、XRP Ledgerのデータツリーに永久に残ります
削除するには、アカウントが次の要件を満たしている必要があります。
- アカウントの`Sequence`番号に256を加えた値が、現在の[レジャーインデックス][]未満であること。
- アカウントが次のタイプの[レジャーオブジェクト](ledger-object-types.html)のいずれにも(送金元または受取人として)関連付けられていないこと。
- `Escrow`
- `PayChannel`
- `RippleState`
- `Check` :not_enabled:
- アカウントがレジャー内に所有するオブジェクトが1000個未満であること。
- [AccountDeleteトランザクション][]では、少なくとも1アイテムの[所有者準備金](reserves.html)現在5 XRPに相当する特別な[トランザクションコスト][]を支払う必要があります。
アカウントは、削除した後、通常の[アカウント作成](#アカウントの作成)方法でレジャーに再作成できます。削除後に再作成されたアカウントと、初めて作成されたアカウントに違いはありません。
Bitcoinやその他の多くの暗号資産とは異なり、新バージョンのXRP Ledgerの公開レジャーチェーンにはそれぞれレジャーの全状態が含まれており、新規アカウントが増えるごとにサイズが大きくなります。そのため、XRP Ledgerの新規アカウントは必要な場合以外は作成しないでください。アカウントを削除することで、アカウントの[準備金](reserves.html)である20 XRPの一部を復元できますが、そのためには少なくとも5 XRPを消却する必要があります。
多くのユーザーに代わって価値を送受信する金融機関などは、XRP Ledgerでは1つまたは少数のアカウントのみを使用し、顧客との間の個別の決済を区別するために[**ソースタグ**と**宛先タグ**](become-an-xrp-ledger-gateway.html#ソースタグと宛先タグ)を使用できます。
一度作成されたアカウントはXRP Ledgerのデータツリーに永続的に存在します。これは、古いトランザクションを2回処理できないように、トランザクションの現在のシーケンス番号を永続的に追跡する必要があるためです。
Bitcoinや他の多くの暗号資産とは異なり、XRP Ledgerの公開レジャーチェーンの新しい各バージョンにはレジャーの詳細なステータスが含まれており、このサイズは、新規アカウントが増えるごとに大きくなります。そのため、Rippleでは、本当に必要でない限り、新しいアカウントを作成することは推奨していません。多くのユーザーに代わって価値を送受信する金融機関などは、XRP Ledgerでは1つまたは少数のアカウントのみを使用し、顧客との間の個別の決済を区別するために[**ソースタグ**と**宛先タグ**](become-an-xrp-ledger-gateway.html#source-and-destination-tags)を使用できます。
## トランザクション履歴 ## トランザクション履歴
@@ -73,33 +91,33 @@ XRP Ledgerでは、トランザクション取引履歴をトランザク
アカウントの _概念的な_ トランザクション履歴には、アカウントの所有オブジェクトとXRP以外の残高を変更したトランザクションも含まれます。これらのオブジェクトは別個のレジャーオブジェクトであり、それぞれに影響を及ぼした独自のトランザクションスレッドが含まれます。アカウントのレジャーの履歴全体がある場合は、それをたどって、その履歴によって作成または変更されたレジャーオブジェクトを見つけることができます。「完全」なトランザクション履歴には、トランザクションで所有されているオブジェクトの履歴が含まれます。例を以下に示します。 アカウントの _概念的な_ トランザクション履歴には、アカウントの所有オブジェクトとXRP以外の残高を変更したトランザクションも含まれます。これらのオブジェクトは別個のレジャーオブジェクトであり、それぞれに影響を及ぼした独自のトランザクションスレッドが含まれます。アカウントのレジャーの履歴全体がある場合は、それをたどって、その履歴によって作成または変更されたレジャーオブジェクトを見つけることができます。「完全」なトランザクション履歴には、トランザクションで所有されているオブジェクトの履歴が含まれます。例を以下に示します。
- `RippleState` オブジェクト(トラストライン)。アカウントに関連付けられています。 - `RippleState`オブジェクト(トラストライン)。アカウントに関連付けられています。
- `DirectoryNode` オブジェクト(特にアカウントの所有オブジェクトを追跡する所有者ディレクトリ)。 - `DirectoryNode`オブジェクト(特にアカウントの所有オブジェクトを追跡する所有者ディレクトリ)。
- `Offer` オブジェクト。分散型取引所でのアカウントの未処理の取引注文を表すオブジェクト。 - `Offer`オブジェクト。分散型取引所でのアカウントの未処理の取引注文を表すオブジェクト。
- `PayChannel` アカウントとの間の非同期のPayment Channelを表すオブジェクト。 - `PayChannel` アカウントとの間の非同期のPayment Channelを表すオブジェクト。
- `Escrow` 時間または暗号条件によってロックされ、アカウントとの間の保留中の支払いを表すオブジェクト。 - `Escrow` 時間または暗号条件によってロックされ、アカウントとの間の保留中の支払いを表すオブジェクト。
- `SignerList` [マルチ署名](multi-signing.html)によってアカウントのトランザクションを承認できるアドレスのリストを表すオブジェクト。 - `SignerList` [マルチ署名](multi-signing.html)によってアカウントのトランザクションを承認できるアドレスのリストを表すオブジェクト。
これらの各オブジェクトの詳細については、[レジャーフォーマットのリファレンス](ledger-data-formats.html)を参照してください。 これらの各オブジェクトの詳細は、[レジャーフォーマットのリファレンス](ledger-data-formats.html)を参照してください。
## アドレスのエンコード ## アドレスのエンコード
**ヒント:** これらの技術的な詳細は、XRP Ledgerとの互換性を保つために低レベルのライブラリソフトウェアを構築しているユーザーのみを対象としています。 **ヒント:** これらの技術的な詳細は、XRP Ledgerとの互換性を保つために低レベルのライブラリソフトウェアを構築しているユーザーのみを対象としています。
[[ソース]<br>](https://github.com/ripple/rippled/blob/35fa20a110e3d43ffc1e9e664fc9017b6f2747ae/src/ripple/protocol/impl/AccountID.cpp#L109-L140 "Source") [[ソース]](https://github.com/ripple/rippled/blob/35fa20a110e3d43ffc1e9e664fc9017b6f2747ae/src/ripple/protocol/impl/AccountID.cpp#L109-L140 "Source")
XRP Ledgerのアドレスは、次のRipple _ディクショナリー_[base58](https://en.wikipedia.org/wiki/Base58)を使用してエンコードされています。`rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz`。XRP Ledgerはbase58でいくつかのタイプのキーをエンコードするため、それらを区別するためにエンコードされたデータの前に1バイトの「タイププレフィクス」「バージョンプレフィクス」とも呼ばれますを付けます。タイププレフィクスによりアドレスは通常、base58形式の異なる文字で始まります。 XRP Ledgerのアドレスは、[base58](https://en.wikipedia.org/wiki/Base58)_形式のディクショナリ_`rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz`を使用してエンコードされています。XRP Ledgerはbase58でいくつかのタイプのキーをエンコードするため、それらを区別するためにエンコードされたデータの前に1バイトの「タイププレフィクス」「バージョンプレフィクス」とも呼ばれますを付けます。タイププレフィクスによりアドレスは通常、base58形式の異なる文字で始まります。
次の図は、キーとアドレスの関係を示しています。 次の図は、キーとアドレスの関係を示しています。
![パスフレーズ→シークレットキー→公開鍵+プレフィクスの種類アカウントID +チェックサムアドレス](img/key-address-rels.ja.png) [![マスター公開鍵 + プレフィクスの種類アカウントID + チェックサムアドレス](img/address-encoding.png)](img/address-encoding.png)
XRP Ledgerアドレス計算式は次のとおりです。コード例全体については、[`encode_address.js`](https://github.com/ripple/ripple-dev-portal/blob/master/content/_code-samples/address_encoding/encode_address.js)を参照してください。 公開鍵からXRP Ledgerアドレス計算する式は次のとおりです。コード例全体については、[`encode_address.js`](https://github.com/ripple/ripple-dev-portal/blob/master/content/_code-samples/address_encoding/encode_address.js)を参照してください。パスフレーズまたはシード値から公開鍵を導出するプロセスについては、[鍵の導出](cryptographic-keys.html#鍵導出)を参照してください。
1. 次の必須アルゴリズムをインポートします。SHA-256、RIPEMD160、base58。base58のディクショナリーを設定します。 1. 次の必須アルゴリズムをインポートします。SHA-256、RIPEMD160、base58。base58のディクショナリーを設定します。
'use strict'; 'use strict';
const assert = require('assert'); const assert = require('assert');
const crypto = require('crypto'); const crypto = require('crypto');
const R_B58_DICT = 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'; const R_B58_DICT = 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz';
@@ -108,34 +126,51 @@ XRP Ledgerアドレスの計算式は次のとおりです。コード例全体
assert(crypto.getHashes().includes('sha256')); assert(crypto.getHashes().includes('sha256'));
assert(crypto.getHashes().includes('ripemd160')); assert(crypto.getHashes().includes('ripemd160'));
2. 33バイトのECDSA secp256k1公開鍵、または32バイトのEd25119公開鍵で始めます。Ed25519キーの場合は、キーの前にバイト`0xED`を付けます。 2. 33バイトのECDSA secp256k1公開鍵、または32バイトのEd25519公開鍵で始めます。Ed25519キーの場合は、キーの前にバイト`0xED`を付けます。
const pubkey_hex = const pubkey_hex =
'ED9434799226374926EDA3B54B1B461B4ABF7237962EAE18528FEA67595397FA32'; 'ED9434799226374926EDA3B54B1B461B4ABF7237962EAE18528FEA67595397FA32';
const pubkey = Buffer.from(pubkey_hex, 'hex'); const pubkey = Buffer.from(pubkey_hex, 'hex');
assert(pubkey.length == 33); assert(pubkey.length == 33);
3. 公開鍵のSHA-256ハッシュの[RIPEMD160](https://en.wikipedia.org/wiki/RIPEMD)ハッシュを計算します。この値は「Account ID」です。 3. 公開鍵のSHA-256ハッシュの[RIPEMD160](https://en.wikipedia.org/wiki/RIPEMD)ハッシュを計算します。この値は「Account ID」です。
const pubkey_inner_hash = crypto.createHash('sha256').update(pubkey); const pubkey_inner_hash = crypto.createHash('sha256').update(pubkey);
const pubkey_outer_hash = crypto.createHash('ripemd160'); const pubkey_outer_hash = crypto.createHash('ripemd160');
pubkey_outer_hash.update(pubkey_inner_hash.digest()); pubkey_outer_hash.update(pubkey_inner_hash.digest());
const account_id = pubkey_outer_hash.digest(); const account_id = pubkey_outer_hash.digest();
4. アカウントIDのSHA-256ハッシュのSHA-256ハッシュを計算します。最初の4バイトを使用ます。この値が「チェックサム」です。 4. アカウントIDのSHA-256ハッシュのSHA-256ハッシュを計算します。最初の4バイトを使用ます。この値が「チェックサム」です。
const address_type_prefix = Buffer.from([0x00]); const address_type_prefix = Buffer.from([0x00]);
const payload = Buffer.concat([address_type_prefix, account_id]); const payload = Buffer.concat([address_type_prefix, account_id]);
const chksum_hash1 = crypto.createHash('sha256').update(payload).digest(); const chksum_hash1 = crypto.createHash('sha256').update(payload).digest();
const chksum_hash2 = crypto.createHash('sha256').update(chksum_hash1).digest(); const chksum_hash2 = crypto.createHash('sha256').update(chksum_hash1).digest();
const checksum = chksum_hash2.slice(0,4); const checksum = chksum_hash2.slice(0,4);
5. ペイロードとチェックサムを連結します。連結バッファーのbase58値を計算します。この結果が、該当のアドレスになります。 5. ペイロードとチェックサムを連結します。連結バッファーのbase58値を計算します。この結果が、該当のアドレスになります。
const dataToEncode = Buffer.concat([payload, checksum]); const dataToEncode = Buffer.concat([payload, checksum]);
const address = base58.encode(dataToEncode); const address = base58.encode(dataToEncode);
console.log(address); console.log(address);
// rDTXLQ7ZKZVKz33zJbHjgVShjsBnqMBhmN // rDTXLQ7ZKZVKz33zJbHjgVShjsBnqMBhmN
## 関連項目
- **コンセプト:**
- [準備金](reserves.html)
- [暗号鍵](cryptographic-keys.html)
- [発行アドレスと運用アドレス](issuing-and-operational-addresses.html)
- **リファレンス:**
- [account_infoメソッド][]
- [wallet_proposeメソッド][]
- [AccountSetトランザクション][]
- [Paymentトランザクション][]
- [AccountRootオブジェクト](accountroot.html)
- **チュートリアル:**
- [アカウント設定の管理(カテゴリー)](manage-account-settings.html)
- [WebSocketを使用した着信ペイメントの監視](monitor-incoming-payments-with-websocket.html)
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -1,10 +1,10 @@
# 暗号鍵 # 暗号鍵
XRP Ledgerでは、トランザクションによる一連の具体的なアクションの実行が承認されていることを、デジタル署名によって証明します。署名されたトランザクションのみがネットワークに信され、検証済みレジャーに取り込まれます。 <!-- STYLE_OVERRIDE: is authorized to --> XRP Ledgerでは、[トランザクション](transaction-basics.html)による一連の具体的なアクションの実行が承認されていることを、デジタル署名によって証明します。署名されたトランザクションのみがネットワークに信され、検証済みレジャーにまれます。 <!-- STYLE_OVERRIDE: is authorized to -->
すべてのデジタル署名は、トランザクションの送信側アカウントに関連付けられている暗号鍵ペアに基づいています。キーペアはXRP Ledgerでサポートされている[暗号化署名アルゴリズム](#署名アルゴリズム)を使用して生成できます。キーペアの生成に使用されたアルゴリズムの種類にかかわらず、キーペアは[マスターキーペア](#マスターキーペア)、[レギュラーキーペア](#レギュラーキーペア)、または[署名者リスト](multi-signing.html)のメンバーとして使用できます。 すべてのデジタル署名は、トランザクションの送信側アカウントに関連付けられている暗号鍵ペアに基づいています。キーペアはXRP Ledgerでサポートされている[暗号化署名アルゴリズム](#署名アルゴリズム)を使用して生成できます。キーペアの生成に使用されたアルゴリズムの種類にかかわらず、キーペアは[マスターキーペア](#マスターキーペア)、[レギュラーキーペア](#レギュラーキーペア)、または[署名者リスト](multi-signing.html)のメンバーとして使用できます。
**警告:** 秘密鍵のセキュリティを適切に維持することが重要です。デジタル署名は、あなたがトランザクション送信する権限を有していることをXRP Ledgerに対して検証できる唯一の手段であり、レジャーに提出されたトランザクションの取り消しや無効化を行う権限を有する管理者は存在しません。あなたのXRP Ledgerアカウントの秘密鍵があなた以外の何者かに知られた場合、その人物はあなたと同様にデジタル署名を作成し、トランザクションを承認することができます。 **警告:** 秘密鍵のセキュリティを適切に維持することが重要です。デジタル署名は、あなたがトランザクション送信する権限を有していることをXRP Ledgerに対して検証できる唯一の手段であり、レジャーに提出されたトランザクションの取り消しや無効化を行う権限を有する管理者は存在しません。お使いのXRP Ledgerアカウントの秘密鍵があなた以外の何者かに知られた場合、その人物はあなたと同様にデジタル署名を作成し、トランザクションを承認することができます。
## キーの生成 ## キーの生成
@@ -12,33 +12,39 @@ XRP Ledgerでは、トランザクションによる一連の具体的なアク
``` ```
{ {
"result": { "result": {
"account_id": "rDGnaDqJczDAjrKHKdhGRJh2G7zJfZhj5q", "account_id": "rDGnaDqJczDAjrKHKdhGRJh2G7zJfZhj5q",
"key_type": "secp256k1", "key_type": "secp256k1",
"master_key": "COON WARN AWE LUCK TILE WIRE ELI SNUG TO COVE SHAM NAT", "master_key": "COON WARN AWE LUCK TILE WIRE ELI SNUG TO COVE SHAM NAT",
"master_seed": "sstV9YX8k7yTRzxkRFAHmX7EVqMfX", "master_seed": "sstV9YX8k7yTRzxkRFAHmX7EVqMfX",
"master_seed_hex": "559EDD35041D3C11F9BBCED912F4DE6A", "master_seed_hex": "559EDD35041D3C11F9BBCED912F4DE6A",
"public_key": "aBQXEw1vZD3guCX3rHL8qy8ooDomdFuxZcWrbRZKZjdDkUoUjGVS", "public_key": "aBQXEw1vZD3guCX3rHL8qy8ooDomdFuxZcWrbRZKZjdDkUoUjGVS",
"public_key_hex": "0351BDFB30E7924993C625687AE6127034C4A5EBA78A01E9C58B0C46E04E3A4948" "public_key_hex": "0351BDFB30E7924993C625687AE6127034C4A5EBA78A01E9C58B0C46E04E3A4948"
}, },
"status": "success", "status": "success",
"type": "response" "type": "response"
} }
``` ```
この応答には、キーペア(さまざまなフォーマットの秘密鍵と公開鍵)と`account_id`が含まれています。 この応答には、キーペア(さまざまなフォーマットのシードと公開鍵)と`account_id`が含まれています。
**シード**
_シード_ 値は、アカウントの実際の秘密鍵(および公開鍵)を[導出する](#鍵導出)ために使用されるコンパクトな値です。`master_key``master_seed`、および`master_seed_hex`はすべて、同じシード値を表しますが、フォーマットが異なります。これらのいずれのフォーマットも、[`rippled` API](rippled-api.html)や[その他のXRPLソフトウェア](software-ecosystem.html)で[トランザクションに署名](transaction-basics.html#トランザクションへの署名とトランザクションの送信)するときに使用することができます。キーの先頭に`master_`が付いていますが、このシードが表すキーが必ずしもアカウントのマスターキーであるとは限りません。キーペアは、レギュラーキーだけでなく、マルチ署名のリストのメンバーとしても使用できます。
シード値はアカウントのその他のあらゆる情報の基盤であるため、慎重に保護する必要があります。アドレスのシード値を知っている人なら誰でも、事実上そのアドレスを完全に制御できます。
**秘密鍵** **秘密鍵**
`master_key``master_seed`、および`master_seed_hex`は、トランザクション署名に使用できる異なるフォーマットの秘密鍵です。キーの先頭に`master_`が付いていますが、これらのキーは必ずしもアカウントのマスターキーというわけではありません。ここでは、`master_`というプレフィックスは、そのキーの秘密鍵としての役割を示します。`master_seed`はマスターシードで、そこからこのアカウントに関するその他のあらゆる情報が引き出されます。 `wallet_propose`応答には、秘密鍵( _プライベートキー_ とも呼ばれます)の値が明示的に示されていません。トランザクション署名できるソフトウェアであれば、シード値から[秘密鍵を導出](#鍵導出)可能であると考えられます。
**公開鍵** **公開鍵**
`public_key``public_key_hex`異なるフォーマットの公開鍵で、`public_key_hex`トランザクション署名された秘密鍵に対応する公開鍵です。`public_key``public_key_hex`はいずれも`master_seed`から生成されます `public_key``public_key_hex`いずれも、同一値の公開鍵を表します。公開鍵は、鍵導出の一環として秘密鍵から導出されます。公開鍵を使用すると、トランザクション署名の真正性を検証できますが、それ以上の署名を作成することはできません
**account_id** **account_id**
`account_id`は[公開鍵から生成され](accounts.html#アドレスのエンコード)、アカウントがXRP Ledgerに作成される *可能性* を示します。`account_id`が存在していても、`account_id`が最初の XRPでの支払いを受領するまでは、実際のアカウントはXRP Ledgerに存在しません。さらに`account_id`は、資金を供給するトランザクションを受領して、アカウントが作成されるまでは、トランザクションを送信することができません。 `account_id`は[公開鍵から生成され](accounts.html#アドレスのエンコード)、アカウントがXRP Ledgerに作成される*可能性*を示します。`account_id`が存在していても、`account_id`が最初の XRPでの支払いを受領するまでは、実際のアカウントはXRP Ledgerに存在しません。さらに`account_id`は、資金を供給するトランザクションを受領して、アカウントが作成されるまでは、トランザクションを送信することができません。
ただし、(資金供給されたアカウントのない)`account_id`は、既存の別のアカウントのトランザクションを承認する際に[レギュラーキー](#レギュラーキーペア)または[署名者リストのメンバー](multi-signing.html)として使用できます。 ただし、(資金供給されたアカウントのない)`account_id`は、既存の別のアカウントのトランザクションを承認する際に[レギュラーキー](#レギュラーキーペア)または[署名者リストのメンバー](multi-signing.html)として使用できます。
@@ -55,7 +61,7 @@ XRP Ledgerでは、トランザクションによる一連の具体的なアク
## マスターキーペア ## マスターキーペア
マスターキーペアは秘密鍵と公開鍵からなります。マスターキーペアの秘密鍵は、レギュラーキーペア署名できるすべてのトランザクションに署名できる、以下の操作の実行に使用できる唯一の鍵でもあります。 マスターキーペアは秘密鍵と公開鍵で構成されます。マスターキーペアの秘密鍵は、レギュラーキーペア署名できるすべてのトランザクションに署名できるほか、以下の操作の実行に使用できる唯一の鍵でもあります。
* [マスター公開鍵を無効にする](accountset.html)。 * [マスター公開鍵を無効にする](accountset.html)。
@@ -63,20 +69,20 @@ XRP Ledgerでは、トランザクションによる一連の具体的なアク
* トランザクションコストが0の[Key Resetトランザクション](transaction-cost.html#key-resetトランザクション)を送信する。 * トランザクションコストが0の[Key Resetトランザクション](transaction-cost.html#key-resetトランザクション)を送信する。
アカウントのマスターキーペアは、マスターキーペアによるトランザクションへの署名が承認されているアカウントの`account_id`と同じ[`wallet_propose`](wallet_propose.html)応答にて生成されます。マスターキーペアは同じ応答内で生成されるため、`public_key_hex`から生成される`account_id`アカウントに[固有に関連付け](accounts.html#アドレスのエンコード)られています。 アカウントのマスターキーペアは、マスターキーペアによるトランザクションへの署名が承認されているアカウントの`account_id`と同じ[`wallet_propose`](wallet_propose.html)応答にて生成されます。マスターキーペアは同じ応答内で生成されるため、アドレスに[固有に関連付け](accounts.html#アドレスのエンコード)られています。このアドレスは、公開鍵から導出されます。
これは、同様に`wallet_propose` メソッドを使用して生成されても、レギュラーキーペアとしてアカウントに明示的に割り当てられる必要があるレギュラーキーペアとは対照的です。レギュラーキーペアは明示的に割り当てられるので、トランザクションの署名が承認されているアカウントの`account_id`には固有に関連付けられません。詳細は、[レギュラーキーペア](#レギュラーキーペア) を参照してください。 これは、同様に`wallet_propose`メソッドを使用して生成されても、レギュラーキーペアとしてアカウントに明示的に割り当てられる必要があるレギュラーキーペアとは対照的です。レギュラーキーペアは明示的に割り当てられるため、トランザクションの署名が承認されているアカウントのアドレスには固有に関連付けられません。詳細は、[レギュラーキーペア](#レギュラーキーペア)を参照してください。
**注意:** マスターキーペアは変更できませんが、無効にできます。つまり、マスター秘密鍵が漏えいした場合、マスター秘密鍵を変更するのではなく、[無効にする](accountset.html)必要があります。 **注意:** マスターキーペアは変更できませんが、無効にできます。つまり、マスターシードまたは秘密鍵が漏えいした場合、変更するのではなく、[無効にする](accountset.html)必要があります。
漏えいが発生した場合、マスターキーペア変更は不可で、無効化するしかありませんので、マスターキーペアをオフラインで保管し、代わりにアカウントのトランザクションの署名用にレギュラーキーペアを設定することを強くお勧めします。 マスターキーペア変更できないため、漏えいが発生した場合には無効化せざるを得ません。[マスターキーペアをオフラインで保管](offline-account-setup.html)し、代わりにアカウントのトランザクションの署名用にレギュラーキーペアを設定することを強くお勧めします。
マスターキーペアをオフラインで保管する際には、不正使用者がアクセスできる場所にマスター秘密鍵を保管しないようにします。たとえば、インターネットに一切接続されない物理的に隔離されたマシンに保管したり、紙に記入して安全な場所に保管します。一般的には、インターネットと相互にやり取りをするコンピュータプログラムがアクセスできる範囲内には保管しません。マスターキーペアは、緊急時(漏えいの恐れがある場合や実際に漏えいが発生した場合にレギュラーキーペアを変更するなど)に限り、最も信頼できるデバイスでのみ使用することが理想的です。 マスターキーペアをオフラインで保管する際には、不正使用者がアクセスできる場所にマスター秘密鍵を保管しないようにします。たとえば、インターネットに一切接続されない物理的に隔離されたマシンに保管したり、紙に記入して安全な場所に保管します。一般的には、インターネットと相互にやり取りをするコンピュータプログラムがアクセスできる範囲内には保管しません。マスターキーペアは、緊急時(漏えいの恐れがある場合や実際に漏えいが発生した場合にレギュラーキーペアを変更するなど)に限り、最も信頼できるデバイスでのみ使用することが理想的です。
## レギュラーキーペア ## レギュラーキーペア
XRP Ledgerでは、アカウントのマスターキーペアをオフラインで保管し、その後のトランザクションには _レギュラーキーペア_ と呼ばれるセカンダリキーペアで署名することができます。レギュラーキーペアの秘密鍵が漏えいした場合は、秘密鍵を削除または交換できます。その際に、アカウントの秘密鍵以外の設定を変更したり、他のアカウントとの関係を再設定する必要はありません。レギュラーキーペアを積極的にローテーションすることも可能です。(アカウントのアドレスに固有に関連付けられているアカウントのマスターキーペアでは、このような操作は実行できません。) XRP Ledgerでは、アカウントのマスターキーペアをオフラインで保管し、その後のトランザクションには _レギュラーキーペア_ と呼ばれるセカンダリキーペアで署名することができます。レギュラーキーペアのシードまたは秘密鍵が漏えいした場合は、キーペアを削除または交換できます。その際に、アカウントのキーペア以外の設定を変更する必要はありません。これにより、アカウントの設定や他のアカウントとの関係を再設定する手間が省けます。レギュラーキーペアを積極的にローテーションすることも可能です。(アカウントのアドレスに固有に関連付けられているアカウントのマスターキーペアでは、このような操作は実行できません。)
レギュラーキーペアとして使用するキーペアは、[`wallet_propose`](wallet_propose.html)メソッドを使用して生成します。ただし、サポートするアカウントの`account_id`と同時に生成され、それに固有に関連付けられている[マスターキーペア](#マスターキーペア)とは異なり、レギュラーキーペアと、このキーペアがトランザクションの署名に使用されるアカウントとの関係を明示的に作成する必要があります。レギュラーキーペアをアカウントに割り当てるには、[`SetRegularKey`](setregularkey.html)メソッドを使用します。 レギュラーキーペアとして使用するキーペアは、[`wallet_propose`](wallet_propose.html)メソッドを使用して生成します。ただし、サポートするアカウントの`account_id`と同時に生成され、それに固有に関連付けられている[マスターキーペア](#マスターキーペア)とは異なり、レギュラーキーペアと、このキーペアがトランザクションの署名に使用されるアカウントとの関係を明示的に作成する必要があります。レギュラーキーペアをアカウントに割り当てるには、[`SetRegularKey`](setregularkey.html)メソッドを使用します。
@@ -84,7 +90,7 @@ XRP Ledgerでは、アカウントのマスターキーペアをオフライン
レギュラーキーペアを割り当てたアカウントには、次の2つのキーペアが関連付けられることになります。 レギュラーキーペアを割り当てたアカウントには、次の2つのキーペアが関連付けられることになります。
* アカウントの`account_id`に固有に関連付けられ、オフラインで保管されるマスターキーペア。 * アカウントの`account_id`に固有に関連付けられるマスターキーペア。オフラインで保管します
* アカウントに明示的に割り当てられ、アカウントのトランザクションの署名に使用されるレギュラーキーペア。 * アカウントに明示的に割り当てられ、アカウントのトランザクションの署名に使用されるレギュラーキーペア。
レギュラーキーペアをアカウントに割り当てて、[マスターキーペア](#マスターキーペア)で署名されるトランザクションを除く、すべてのトランザクションの署名にそのレギュラーキーペアを使用できます。 レギュラーキーペアをアカウントに割り当てて、[マスターキーペア](#マスターキーペア)で署名されるトランザクションを除く、すべてのトランザクションの署名にそのレギュラーキーペアを使用できます。
@@ -96,11 +102,11 @@ XRP Ledgerでは、アカウントのマスターキーペアをオフライン
## 署名アルゴリズム ## 署名アルゴリズム
暗号鍵ペアは常に特定の署名アルゴリズムに結び付けられています。署名アルゴリズムは、秘密鍵と公開鍵の間の数学的関係を定義します。暗号化署名アルゴリズムには、現在の暗号技術では、秘密鍵を使用して対応する公開鍵を「簡単に」計算できる、公開鍵から対応する秘密鍵を計算することは実質的に不可能であるという特性があります。 暗号鍵ペアは常に特定の署名アルゴリズムに関連付けられています。署名アルゴリズムは、秘密鍵と公開鍵の間の数学的関係を定義します。暗号化署名アルゴリズムには、現在の暗号技術では、秘密鍵を使用して対応する公開鍵を「簡単に」計算できるものの、公開鍵から対応する秘密鍵を計算することは実質的に不可能であるという特性があります。
XRP Ledgerでは次の暗号化署名アルゴリズムがサポートされています。 XRP Ledgerでは次の暗号化署名アルゴリズムがサポートされています。
| キータイプ | アルゴリズム | 説明 | | キータイプ | アルゴリズム | 説明 |
|-------------|-----------|---| |-------------|-----------|---|
| `secp256k1` | 楕円曲線[secp256k1](https://en.bitcoin.it/wiki/Secp256k1)を使用する[ECDSA](https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm) | これはBitcoinで使用されているスキームです。XRP Ledgerではデフォルトでこのキータイプが使用されます。 | | `secp256k1` | 楕円曲線[secp256k1](https://en.bitcoin.it/wiki/Secp256k1)を使用する[ECDSA](https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm) | これはBitcoinで使用されているスキームです。XRP Ledgerではデフォルトでこのキータイプが使用されます。 |
| `ed25519` | 楕円曲線[Ed25519](https://ed25519.cr.yp.to/)を使用する[EdDSA](https://tools.ietf.org/html/rfc8032) | パフォーマンスに優れ、その他の便利な特性を備えた新しいアルゴリズムです。Ed25519公開鍵はsecp256k1鍵よりも1バイト短いため、`rippled`ではEd25519公開鍵の先頭に`0xED`バイトが追加されます。これにより、両方の公開鍵タイプは33バイトになります。 | | `ed25519` | 楕円曲線[Ed25519](https://ed25519.cr.yp.to/)を使用する[EdDSA](https://tools.ietf.org/html/rfc8032) | パフォーマンスに優れ、その他の便利な特性を備えた新しいアルゴリズムです。Ed25519公開鍵はsecp256k1鍵よりも1バイト短いため、`rippled`ではEd25519公開鍵の先頭に`0xED`バイトが追加されます。これにより、両方の公開鍵タイプは33バイトになります。 |
@@ -113,7 +119,121 @@ XRP Ledgerでは、サポートされているさまざまなタイプのキー
### 将来のアルゴリズム ### 将来のアルゴリズム
今後、暗号技術の発展に伴い、XRP Ledgerに新しい暗号化署名アルゴリズムを追加する予定です。たとえば、[Shorのアルゴリズム](https://en.wikipedia.org/wiki/Shor's_algorithm)(または類似のアルゴリズム)を使用する量子コンピューターの実用化が間近となり、楕円曲線暗号が解読される可能性が生じた場合には、Rippleは容易に解読できない暗号化署名アルゴリズムを追加できます。2018年前半の時点では、「耐量子」署名アルゴリズムはまだ実用化できる段階ではなく、量子コンピューターはさらに実現段階から遠いため、現時点では特定のアルゴリズムを追加する予定はありません。 今後、暗号技術の発展に対応するため、XRP Ledgerに新しい暗号化署名アルゴリズムが必要になるでしょう。例えば、[Shorのアルゴリズム](https://en.wikipedia.org/wiki/Shor's_algorithm)(または類似のアルゴリズム)を使用する量子コンピューターの実用化が間近となり、楕円曲線暗号が解読される可能性が生じた場合、XRP Ledger開発者は容易に解読できない暗号化署名アルゴリズムを追加できます。2019年半ばの時点で、確実な第一選択肢となる「耐量子」署名アルゴリズムはなく、量子コンピューターはまだ脅威となるほど実用的ではないため、現時点では特定のアルゴリズムを追加する予定はありません。<!-- STYLE_OVERRIDE: will -->
## 鍵導出
キーペアを導出するプロセスは、署名アルゴリズムによって異なります。いずれの場合も、キーは長さが16バイト128ビット_シード_ 値から生成されます。シード値は完全にランダムにする(推奨)か、[SHA-512ハッシュ][ハッシュ]を取得して最初の16バイトを保持することで特定のパスフレーズから導出することができます[SHA-512Half][]と同様ですが、出力の256ビットではなく128ビットのみを保持します
### サンプルコード
ここで説明する鍵導出プロセスは、さまざまなプログラミング言語で複数の場所に実装されています。
- C++: `rippled`コードベース:
- [シード定義](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/Seed.h)
- [汎用キー & Ed25519鍵導出](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp)
- [secp256k1鍵導出](https://github.com/ripple/rippled/blob/develop/src/ripple/crypto/impl/GenerateDeterministicKey.cpp)
- Python 3: [このリポジトリのコードサンプルセクション]({{target.github_forkurl}}/blob/{{target.github_branch}}/content/_code-samples/key-derivation/key_derivation.py)。
- JavaScript: [`ripple-keypairs`](https://github.com/ripple/ripple-keypairs/)パッケージ。
### Ed25519鍵導出
[[ソース]](https://github.com/ripple/rippled/blob/fc7ecd672a3b9748bfea52ce65996e324553c05f/src/ripple/protocol/impl/SecretKey.cpp#L203 "Source")
[![パスフレーズ → シード → 秘密鍵 → プレフィクス + 公開鍵](img/key-derivation-ed25519.png)](img/key-derivation-ed25519.png)
1. シード値の[SHA-512Half][]を計算します。32バイトの秘密鍵が導出されます。
**ヒント:** 32バイトの数値はすべて、有効なEd25519秘密鍵です。ただし、秘密鍵として使用する上で安全なのは、十分ランダムに選択された数値のみです。
2. Ed25519公開鍵を計算するには、[Ed25519](https://ed25519.cr.yp.to/software.html)の標準公開鍵を導出して、32バイトの公開鍵を導出します。
**注意:** 暗号化アルゴリズムの場合と同様に、可能な場合は必ず、公的に監査された既知の標準実装を使用します。例えば、[OpenSSL](https://www.openssl.org/)には、コア関数であるEd25519やsecp256k1が実装されています。
3. Ed25519公開鍵を示すには、32バイトの公開鍵の前にシングルバイトのプレフィクス`0xED`を付加し、33バイトにします。
トランザクションに署名するコードを実装している場合は、プレフィクス`0xED`を削除し、実際の署名プロセスに32バイトキーを使用します。
4. アカウントの公開鍵を[base58][]にシリアル化する場合は、アカウントの公開鍵プレフィクス`0x23`を使用します。
バリデータの一時キーにEd25519を使用することはできません。
### secp256k1鍵導出
[[ソース]](https://github.com/ripple/rippled/blob/develop/src/ripple/crypto/impl/GenerateDeterministicKey.cpp "Source")
[![パスフレーズ → シード → ルートキーペア → 仲介銀行(機関)キーペア → マスターキーペア](img/key-derivation-secp256k1.png)](img/key-derivation-secp256k1.png)
XRP Ledgerアカウントキーでのsecp256k1鍵導出に、Ed25519鍵導出よりも多くの手順が含まれる理由は次のとおりです。
- 32バイトの数値がすべて、有効なsecp256k1秘密鍵であるとは限りません。
- XRP Ledgerのリファレンス実装には、単一のシード値からキーペアのファミリーを導出するための、未使用の不完全なフレームワークがあります。
シード値からXRP Ledgerのsecp256k1アカウントキーペアを導出する手順は次のとおりです。
1. 次のように、シード値から「ルートキーペア」を計算します。
1. 以下を順番に連結して、合計20バイトにします。
- シード値16バイト
- 「ルートシーケンス」値4バイト。ビッグエンディアンの符号なし整数。ルートシーケンスの開始値として0を使用します。
2. 連結された(シード+ルートシーケンス)値の[SHA-512Half][]を計算します。
3. 結果が有効なsecp265k1秘密鍵でない場合は、ルートシーケンスを1増やして最初からやり直します。[[ソース]](https://github.com/ripple/rippled/blob/fc7ecd672a3b9748bfea52ce65996e324553c05f/src/ripple/crypto/impl/GenerateDeterministicKey.cpp#L103 "Source")
有効なsecp256k1鍵は0であってはならず、 _secp256k1グループ_ の数値順よりも低くなければなりません。secp256k1グループの順序は、定数`0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141`です。
4. 有効なsecp256k1秘密鍵を使用して、secp256k1曲線で標準ECDSA公開鍵を導出し、ルート公開鍵を導出します。暗号化アルゴリズムの場合と同様に、可能な場合は必ず、公的に監査された既知の標準実装を使用します。例えば、[OpenSSL](https://www.openssl.org/)には、コア関数であるEd25519およびsecp256k1が実装されています。
**ヒント:** バリデータではこのルートキーペアを使用します。バリデータのキーペアを計算する場合は、ここで停止できます。この2つのタイプの公開鍵を区別するには、バリデータの公開鍵の[base58][]シリアル化でプレフィクス`0x1c`を使用します。
2. ルート公開鍵を33バイトの圧縮形式に変換します。
ECDSA公開鍵の非圧縮形式は、32バイト整数のペアX座標とY座標で構成されます。圧縮形式は、X座標と1バイトのプレフィクスのみで構成されます。Y座標が偶数の場合は`0x02`、Y座標が奇数の場合は`0x03`です。
非圧縮形式の公開鍵を圧縮形式に変換するには、`openssl`コマンドラインツールを使用します。例えば、非圧縮の公開鍵がファイル`ec-pub.pem`にある場合は、次のような圧縮形式を出力できます。
$ openssl ec -in ec-pub.pem -pubin -text -noout -conv_form compressed
3. 次のように、圧縮されたルート公開鍵から「仲介銀行(機関)キーペア」を導出します。
1. 以下を順番に連結して、合計40バイトにします。
- 圧縮されたルート公開鍵33バイト
- `0x00000000000000000000000000000000` (4バイトのゼロ)この値は、同じファミリーの異なるメンバーの導出に使用することを目的としていましたが、実際には値0のみが使用されます。
- 「キーシーケンス」値4バイト。ビッグエンディアンの符号なし整数。キーシーケンスの開始値として0を使用します。
2. 連結された値の[SHA-512Half][]を計算します。
3. 結果が有効なsecp265k1秘密鍵でない場合は、キーシーケンスを1増やし、アカウントの仲介銀行機関キーペアの導出をやり直します。
4. 有効なsecp256k1秘密鍵を使用して、secp256k1曲線で標準ECDSA公開鍵を導出し、仲介銀行機関公開鍵を導出します。暗号化アルゴリズムの場合と同様に、可能な場合は必ず、公的に監査された既知の標準実装を使用します。例えば、[OpenSSL](https://www.openssl.org/)には、コア関数であるEd25519およびsecp256k1が実装されています。
4. 仲介銀行(機関)公開鍵をルート公開鍵に追加して、マスター公開鍵ペアを導出します。同様に、仲介銀行(機関)秘密鍵をルート秘密鍵に追加して秘密鍵を導出します。
- ECDSA秘密鍵は非常に大きな整数値であるため、secp256k1グループ順序を法として2つの秘密鍵を合計することで、2つの秘密鍵の合計を計算できます。
- ECDSA公開鍵は楕円曲線上の点であるため、楕円曲線の数値を使用して点の合計値を計算する必要があります。
5. 以前と同様に、マスター公開鍵を33バイトの圧縮形式に変換します。
6. アカウントの公開鍵を[base58][]形式にシリアル化する場合は、アカウントの公開鍵プレフィクス`0x23`を使用します。
アカウントの公開鍵からそのアドレスに変換するための情報とサンプルコードについては、[アドレスのエンコード](accounts.html#アドレスのエンコード)を参照してください。
## 関連項目
- **コンセプト:**
- [発行アドレスと運用アドレス](issuing-and-operational-addresses.html)
- **チュートリアル:**
- [レギュラーキーペアの割り当て](assign-a-regular-key-pair.html)
- [レギュラーキーペアの変更または削除](change-or-remove-a-regular-key-pair.html)
- **リファレンス:**
- [SetRegularKeyトランザクション][]
- [AccountRootレジャーオブジェクト](accountroot.html)
- [wallet_proposeメソッド][]
- [account_infoメソッド][]
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -1,17 +1,55 @@
# 結果のファイナリティー # 結果のファイナリティー
トランザクションがコンセンサスレジャーに適用される順序は、レジャーがクローズされ、そのトランザクションセットがコンセンサスプロセスによって承認されるまで最終的なものではありません。最初に成功したトランザクションはその後で失敗する可能性があり、最初に失敗したトランザクションはその後で成功する可能性があります。さらに、あるラウンドでコンセンサスプロセスによって拒否されたトランザクションは、後のラウンドでコンセンサスに達する可能性があります。 トランザクションがコンセンサスレジャーに適用される順序は、[レジャー](ledgers.html)がクローズされ、そのトランザクションセットが[コンセンサスプロセス](intro-to-consensus.html)によって承認されるまで確定されません。最初に成功したトランザクションはその後で失敗する可能性があり、最初に失敗したトランザクションはその後で成功する可能性があります。さらに、あるラウンドでコンセンサスプロセスによって拒否されたトランザクションは、後のラウンドでコンセンサスに達する可能性があります。
検証済みレジャーには、失敗したトランザクション (`tec`結果コード)だけでなく、成功したトランザクション(`tes`結果コード)も含まれる可能性があります。それ以外の結果のトランザクションはレジャーに含まれません。 検証済みレジャーには、失敗したトランザクション`tec`結果コード)だけでなく、成功したトランザクション(`tes`結果コード)も含まれる可能性があります。それ以外の結果のトランザクションはレジャーに含まれません。
結果コードがそれ以外の場合は、結果が最終的なものかどうかを判断するのは困難です。次の表は、トランザクションの結果がいつ確定するかをまとめたものです。この内容は、トランザクション送信からの結果コードに基づいています。 結果コードがそれ以外の場合は、結果が最終的なものかどうかを判断するのは困難です。次の表は、トランザクションの結果がいつ確定するかをまとめたものです。この内容は、トランザクション送信からの結果コードに基づいています。
| エラーコード | ファイナリティー | | 結果コード | ファイナリティー |
|:----------------|:-----------------------------------------------------------| |:----------------|:-----------------------------------------------------------|
| `tesSUCCESS` | 検証済みレジャーに含まれる場合は確定 | | `tesSUCCESS` | 検証済みレジャーに含まれる場合は確定 |
| すべての`tec`コード | 検証済みレジャーに含まれる場合は確定 | | すべての`tec`コード | 検証済みレジャーに含まれる場合は確定 |
| すべての`tem`コード | 確定(トランザクションが有効になるようにプロトコルが変更される場合を除く) | | すべての`tem`コード | 確定(トランザクションが有効になるようにプロトコルが変更される場合を除く) |
| `tefPAST_SEQ` | 検証済みレジャーに同じシーケンス番号の別のトランザクションが含まれている場合は確定 | | `tefPAST_SEQ` | 検証済みレジャーに同じシーケンス番号の別のトランザクションが含まれている場合は確定 |
| `tefMAX_LEDGER` | 検証済みレジャーにトランザクションの`LastLedgerSequence`フィールドよりも大きいシーケンス番号があり、検証済みレジャーにそのトランザクションが含まれていない場合は確定 | | `tefMAX_LEDGER` | 検証済みレジャーにトランザクションの`LastLedgerSequence`フィールドよりも大きい[レジャーインデックス][レジャーインデックス]があり、検証済みレジャーにそのトランザクションが含まれていない場合は確定 |
他のトランザクション結果は確定でない可能性があります。その場合、トランザクションはその後に成功または失敗する可能性があります特に、条件の変更によってトランザクションの適用を妨げる原因がなくなった場合。例えば、まだ存在していないアカウントにXRP以外の通貨を送信しようとしても失敗しますが、別のトランザクションで送信先アカウントを作成するのに十分なXRPを送信すれば成功します。サーバーは、一時的に失敗した署名付きのトランザクションを保存してから、事前に確認せずに後でそれを正常に適用する場合があります。 他のトランザクション結果は確定でない可能性があります。その場合、トランザクションはその後に成功または失敗する可能性があります特に、条件の変更によってトランザクションの適用を妨げる原因がなくなった場合。例えば、まだ存在していないアカウントにXRP以外の通貨を送信しようとしても失敗しますが、別のトランザクションで送信先アカウントを作成するのに十分なXRPを送信すれば成功します。サーバーは、一時的に失敗した署名付きのトランザクションを保存してから、事前に確認せずに後でそれを正常に適用する場合があります。
## 未確定の結果はどのように変更できますか?
最初にトランザクションを送信すると、`rippled`サーバーはそのトランザクションを現在のオープンレジャーに暫定的に適用し、その結果から暫定的な[トランザクションの結果](transaction-results.html)を返します。ただし、トランザクションの最終結果は、暫定的な結果とは大きく異なる場合があります。考えられる理由を以下に示します。
- トランザクションは、後のレジャーバージョンまで延期されるか、検証済みレジャーに取り込まれない場合があります。ほとんどの場合、XRP Ledgerでは、すべての有効なトランザクションをできるだけ早く処理するという原則に従います。ただし、次のような例外があります。
- 提案されたトランザクションが[コンセンサスラウンド](consensus.html)の開始時点で過半数のバリデータに中継されていない場合は、残りのバリデータがトランザクションを取得して有効であることを確認する時間を確保できるように、次のレジャーバージョンまで延期される場合があります。
- アドレスが同じシーケンス番号を使用して2つの異なるトランザクションを送信する場合、それらのトランザクションのうち最大1つが検証されます。そのようなトランザクションが異なるパスのネットワーク経由で中継される場合、サーバーによっては、他の競合するトランザクションが先に過半数のサーバーに到達したために、暫定的に成功したトランザクションが失敗する可能性があります。
- ネットワークをスパムから保護するには、すべてのトランザクションでXRPの[トランザクションコスト](transaction-cost.html)を消却し、XRP Ledgerピアツーピアネットワーク全体に中継する必要があります。ピアツーピアネットワークの負荷が大きいためにトランザクションコストが増加する場合、暫定的に成功したトランザクションは、コンセンサスを達成するのに十分なサーバーに中継されないか、後で[キューに入れられる](transaction-queue.html)可能性があります。
- 一時的なインターネットの停止または遅延により、`LastLedgerSequence`フィールドで設定されたトランザクションの指定有効期限内であっても、提案されたトランザクションが正常に中継されない場合があります。(トランザクションに有効期限が設定されていない場合、トランザクションは有効状態を維持し、後で成功する可能性がありますが、独自の方法では望ましくない場合があります。詳細は、[信頼できるトランザクションの送信](reliable-transaction-submission.html)を参照してください。)
- 上記の要因が2つ以上同時に発生する場合もあります。
- 通常、[トランザクションが決済済みレジャーに適用される順序](ledgers.html#open-closed-and-validated-ledgers)は、それらのトランザクションが現在のオープンレジャーに一時的に適用された順序とは異なります。そのため、関連するトランザクションに応じて、一時的に成功したトランザクションが失敗したり、一時的に失敗したトランザクションが成功したりする場合があります。以下に例を示します。
- 2つのトランザクションでそれぞれ、同じ[オファー](offers.html)を[分散型取引所](decentralized-exchange.html)で完全に使用する場合、どちらか一方が先に成功すると、もう一方は失敗します。それらのトランザクションが適用される順序は変わる可能性があるため、成功したトランザクションが失敗したり、失敗したトランザクションが成功したりする可能性があります。オファーは部分的に実行できるため、成功する可能性もありますが、程度は異なります。
- [分散型取引所](decentralized-exchange.html)で[オファー](offers.html)を使用することで[複数通貨間の支払い](cross-currency-payments.html)は成功したが、別のトランザクションが同じオーダーブックでオファーを使用または作成した場合、複数通貨間の支払いは仮に実行されたときとは異なる為替レートで成功する場合があります。[Partial Payment](partial-payments.html)では、別の金額を送金することもできます。
- 送金元に十分な資金がないために一時的に失敗した[Paymentトランザクション][]は、必要な資金を送金する別の取引が正規の順序で先に行われることにより、後で成功する可能性があります。逆も同様です。一時的に成功したトランザクションは、必要な資金を送金するトランザクションが標準的な順序に入れられたものの先に来なかったために失敗する可能性があります。
**ヒント:** 上記の理由により、XRP Ledgerに対してテストを実行しており、同じデータに影響する複数のアカウントがある場合、必ずトランザクション間のレジャーが閉じられるまでお待ちください。[スタンドアロンモード](rippled-server-modes.html#サーバーをスタンドアロンモードで実行する理由)のサーバーに対してテストを実行する場合は、[レジャーを手動で閉じる](advance-the-ledger-in-stand-alone-mode.html)必要があります。
## 関連項目
- [トランザクションの結果の確認](look-up-transaction-results.html)
- [トランザクション結果のリファレンス](transaction-results.html)
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,6 +1,8 @@
# トランザクションの基本 # トランザクションの基本
_トランザクション_取引は、XRP Ledgerを変更する唯一の方法です。[コンセンサスプロセス](consensus.html)に従って署名され、送信され、検証済みのレジャーバージョンに承認された場合にのみ、トランザクションは最終的なものになります。レジャーのルールによっては、 _[疑似トランザクション](pseudo-transaction-types.html)_ も生成されます。このトランザクションは署名も送信もされませんが、コンセンサスによって承認されなければならないことは同様です。失敗したトランザクションであっても、スパム対策の[トランザクションコスト][]を支払のためXRPの残高が変わるため、レジャーに記録されます。 _トランザクション取引_ は、XRP Ledgerを変更する唯一の方法です。[コンセンサスプロセス](consensus.html)に従って署名され、送信され、検証済みのレジャーバージョンに承認された場合にのみ、トランザクションは最終的なものになります。レジャーのルールによっては、_[疑似トランザクション](pseudo-transaction-types.html)_ も生成されます。このトランザクションは署名も送信もされませんが、コンセンサスによって承認されなければならないことは同様です。失敗したトランザクションであっても、スパム対策の[トランザクションコスト][]を支払のためXRPの残高が変わるため、レジャーに記録されます。
トランザクションで行えることは、送金だけではありません。XRP Ledgerのトランザクションは、さまざまな[支払いタイプ](payment-types.html)に対応しているだけでなく、[暗号鍵](cryptographic-keys.html)のローテーション、その他の設定の管理、およびXRP Ledgerの[分散型取引所](decentralized-exchange.html)での取引にも使用されます。[トランザクションタイプの詳細なリスト](transaction-types.html)については、[`rippled` APIリファレンス](rippled-api.html)を参照してください。
### トランザクションの識別 ### トランザクションの識別
@@ -9,6 +11,9 @@
だれでも最終的なステータスを確認として[ハッシュによってトランザクションを調べる](look-up-transaction-results.html)ことができるため、トランザクションハッシュは「支払いの証明」として使用することができます。 だれでも最終的なステータスを確認として[ハッシュによってトランザクションを調べる](look-up-transaction-results.html)ことができるため、トランザクションハッシュは「支払いの証明」として使用することができます。
{% include '_snippets/setfee_uniqueness_note.md' %}
<!--_ -->
## 請求コストの正当化 ## 請求コストの正当化
@@ -21,7 +26,7 @@
## トランザクションの承認 ## トランザクションの承認
分散型XRP Ledgerでは、デジタル署名によって、トランザクションが一定のアクションを起こすが承認されていることが証明されます。署名されたトランザクションのみがネットワークに送信され、有効なレジャーに含まれます。署名付きトランザクションは不変です。その内容は変更できず、他のトランザクションでこの署名を使用することはできません。 <!-- STYLE_OVERRIDE: is authorized to --> 分散型XRP Ledgerでは、デジタル署名によって、トランザクションが一定のアクションを起こすが承認されていることが証明されます。署名されたトランザクションのみがネットワークに送信され、検証済みレジャーに含まれます。署名付きトランザクションは不変です。その内容は変更できず、他のトランザクションでこの署名を使用することはできません。 <!-- STYLE_OVERRIDE: is authorized to -->
トランザクションは、次のいずれかの署名によって承認できます。 トランザクションは、次のいずれかの署名によって承認できます。
@@ -77,9 +82,9 @@ JSON形式の未署名の[Paymentトランザクション][]の例を次に示
XRP Ledgerは、トランザクションオブジェクトが送信元アドレス`Account`フィールドによって承認されている場合にのみ、トランザクションを中継して実行します。単一の署名によってのみ承認されたトランザクションの場合、2つの選択肢があります。 XRP Ledgerは、トランザクションオブジェクトが送信元アドレス`Account`フィールドによって承認されている場合にのみ、トランザクションを中継して実行します。単一の署名によってのみ承認されたトランザクションの場合、2つの選択肢があります。
1. バイナリーブロブに変換してオフラインで署名します。これが望ましい方法です。トランザクションの署名に使用されたアカウントの機密情報がネットワーク接続を介して送信されないことを意味するためです。 1. バイナリーブロブに変換してオフラインで署名します。これが望ましい方法です。トランザクションの署名に使用されたアカウントの機密情報がネットワーク接続を介して送信されないことを意味するためです。
* オフライン署名には[RippleAPI](rippleapi-reference.html#sign)を使用できます。 * オフライン署名には[RippleAPI](rippleapi-reference.html#sign)を使用できます。
2. `rippled`サーバーにトランザクションの署名を依頼します。[signコマンド](sign.html)はJSON形式のトランザクションと機密情報を受け取り、送信可能な署名付きバイナリートランザクション形式を返します。アカウントの機密情報を送信するのは危険です。そのため、信頼できる暗号化された接続内か、またはローカル接続経由で、自分が管理しているサーバーのみに送信するようにしてください。 2. `rippled`サーバーにトランザクションの署名を依頼します。[signコマンド](sign.html)はJSON形式のトランザクションと機密情報を受け取り、送信可能な署名付きバイナリートランザクション形式を返します。アカウントの機密情報を送信するのは危険です。そのため、信頼できる暗号化された接続内か、またはローカル接続経由で、自分が管理しているサーバーのみに送信するようにしてください。
* ショートカットとして、`tx_json`オブジェクトを指定した[submitコマンド](submit.html)を使用してトランザクションへの署名とトランザクションの送信を同時に実行できます。これはテストと開発の目的の場合にのみ推奨されます。 * ショートカットとして、`tx_json`オブジェクトを指定した[submitコマンド](submit.html)を使用してトランザクションへの署名とトランザクションの送信を同時に実行できます。これはテストと開発の目的の場合にのみ推奨されます。
## 署名付きトランザクションブロブの例 ## 署名付きトランザクションブロブの例
@@ -97,7 +102,7 @@ XRP Ledgerは、トランザクションオブジェクトが送信元アドレ
トランザクションが送信されたら、APIを使用して例えば、[txコマンド](tx.html)を使用して)トランザクションのステータスを確認できます。これにより、トランザクションの指示、その結果、およびそれを実行する過程で行われたすべての変更の[メタデータ](transaction-metadata.html) が表示されます。 トランザクションが送信されたら、APIを使用して例えば、[txコマンド](tx.html)を使用して)トランザクションのステータスを確認できます。これにより、トランザクションの指示、その結果、およびそれを実行する過程で行われたすべての変更の[メタデータ](transaction-metadata.html) が表示されます。
**注意:** トランザクションが結果コード`tesSUCCESS`で**検証済み**のレジャーに表示されない限り、トランザクションの成功は最終的なものではありません。関連項目:[結果のファイナリティー](finality-of-results.html) **注意:** トランザクションが結果コード`tesSUCCESS`で**検証済み**のレジャーに表示されない限り、トランザクションの成功は確定ではありません。関連項目: [結果のファイナリティー](finality-of-results.html)
`tx`コマンドの応答の例: `tx`コマンドの応答の例:
@@ -189,6 +194,29 @@ XRP Ledgerは、トランザクションオブジェクトが送信元アドレ
} }
``` ```
## 関連項目
- **コンセプト:**
- [支払いタイプ](payment-types.html)
- [コンセンサスネットワーク](consensus-network.html)
- **チュートリアル:**
- [安全な署名の設定](set-up-secure-signing.html)
- [XRPの送金](send-xrp.html)
- [トランザクションの結果の確認](look-up-transaction-results.html)
- [WebSocketを使用した着信ペイメントの監視](monitor-incoming-payments-with-websocket.html)
- [トランザクションの取り消しまたはスキップ](cancel-or-skip-a-transaction.html)
- [信頼できるトランザクションの送信](reliable-transaction-submission.html)
- **リファレンス:**
- [トランザクションの共通フィールド](transaction-common-fields.html)
- [トランザクションのタイプ](transaction-types.html)
- [トランザクションのメタデータ](transaction-metadata.html)
- [account_txメソッド][]
- [txメソッド][]
- [submitメソッド][]
- [submit_multisignedメソッド][]
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %} {% include '_snippets/tx-type-links.md' %}

View File

@@ -1,6 +1,6 @@
# トランザクションコスト # トランザクションコスト
XRP LedgerをスパムやDoS攻撃から守るため、各トランザクションでは少額の[XRP](https://ripple.com/xrp-portal/)が消却されます。この _トランザクションコスト_ はネットワークの負荷とともに増加するように設計されており、故意または不注意にネットワークに過剰な負荷をかけると非常に高くつきます。 XRP LedgerをスパムやDoS攻撃から守るため、各トランザクションでは少額の[XRP](xrp.html)が消却されます。この _トランザクションコスト_ はネットワークの負荷とともに増加するように設計されており、故意または不注意にネットワークに過剰な負荷をかけると非常に高くつきます。
各トランザクションのトランザクションコストを支払う際には、[消却するXRPの額を指定](#トランザクションコストの指定)する必要があります。 各トランザクションのトランザクションコストを支払う際には、[消却するXRPの額を指定](#トランザクションコストの指定)する必要があります。
@@ -15,12 +15,13 @@ XRP LedgerをスパムやDoS攻撃から守るため、各トランザクショ
一部のトランザクションには異なるトランザクションコストがあります。 一部のトランザクションには異なるトランザクションコストがあります。
| トランザクション | 負荷スケーリング前のコスト | | トランザクション | 負荷スケーリング前のコスト |
|-----------------------|--------------------------| |-----------------------|--------------------------|
| [Referenceトランザクション](#referenceトランザクションコスト)(ほとんどのトランザクション) | 10 drop | | [Referenceトランザクション](#referenceトランザクションコスト)(ほとんどのトランザクション) | 10 drop |
| [Key Resetトランザクション](#key-resetトランザクション) | 0 | | [Key Resetトランザクション](#key-resetトランザクション)| 0 |
| [マルチ署名済みトランザクション](multi-signing.html) | 10 drop × 1 + 署名の数) | | [マルチ署名済みトランザクション](multi-signing.html)| 10 drop × 1 + 署名の数) |
| [フルフィルメントを伴うEscrowFinishトランザクション](escrowfinish.html) | 10 drop × 33 + (バイト単位のフルフィルメントサイズ ÷ 16 | | [フルフィルメントを伴うEscrowFinishトランザクション](escrowfinish.html)| 10 drop × 33 + (バイト単位のフルフィルメントサイズ ÷ 16 |
| [AccountDeleteトランザクション](accounts.html#アカウントの削除)| 5,000,000 drop |
## トランザクションコストの受取人 ## トランザクションコストの受取人
@@ -44,7 +45,7 @@ XRP LedgerをスパムやDoS攻撃から守るため、各トランザクショ
## ローカル負荷コスト ## ローカル負荷コスト
`rippled`サーバーには、現在の負荷に基づいてコストしきい値が保持されています。送信するトランザクションの`Fee`値が`rippled`サーバーの現在の負荷ベーストランザクションコストより低い場合、そのサーバーはトランザクションの適用も中継もしません。(**注記:** [管理者接続](get-started-with-the-rippled-api.html)を介してトランザクションを送信する場合、トランザクションがスケーリングされていない最低トランザクションコストを満たすかぎり、サーバーはそのトランザクションを適用し、中継します。)トランザクションの`Fee`値が大半のサーバーの要件を満たさないかぎり、そのトランザクションが[コンセンサスプロセス](https://ripple.com/build/ripple-ledger-consensus-process/)を完了する可能性は極めて低くなります。 `rippled`サーバーには、現在の負荷に基づいてコストしきい値が保持されています。送信するトランザクションの`Fee`値が`rippled`サーバーの現在の負荷ベーストランザクションコストより低い場合、そのサーバーはトランザクションの適用も中継もしません。(**注記:** [管理者接続](get-started-with-the-rippled-api.html)を介してトランザクションを送信する場合、トランザクションがスケーリングされていない最低トランザクションコストを満たすかぎり、サーバーはそのトランザクションを適用し、中継します。)トランザクションの`Fee`値が大半のサーバーの要件を満たさないかぎり、そのトランザクションが[コンセンサスプロセス](consensus.html)を完了する可能性は極めて低くなります。
## オープンレジャーコスト ## オープンレジャーコスト
@@ -70,7 +71,7 @@ XRP LedgerをスパムやDoS攻撃から守るため、各トランザクショ
_手数料レベル_ は、トランザクションの最少コストと実際のコストとの相対的な差を表します。[オープンレジャーコスト](#オープンレジャーコスト)は絶対的なコストではなく手数料レベルで評価されます。比較する場合は以下の表を参照してください。 _手数料レベル_ は、トランザクションの最少コストと実際のコストとの相対的な差を表します。[オープンレジャーコスト](#オープンレジャーコスト)は絶対的なコストではなく手数料レベルで評価されます。比較する場合は以下の表を参照してください。
| トランザクション | drop単位の最少コスト | 手数料レベルでの最少コスト | drop単位で倍のコスト | 手数料レベルで倍のコスト | | トランザクション | drop単位の最少コスト | 手数料レベルでの最少コスト | drop単位で倍のコスト | 手数料レベルで倍のコスト |
|-------------|-----------------------|----------------------------|----------------------|---------------------------| |-------------|-----------------------|----------------------------|----------------------|---------------------------|
| Referenceトランザクションほとんどのトランザクション | 10 | 256 | 20 | 512 | | Referenceトランザクションほとんどのトランザクション | 10 | 256 | 20 | 512 |
| 4つの署名を持つ[マルチ署名済みトランザクション](multi-signing.html) | 50 | 256 | 100 | 512 | | 4つの署名を持つ[マルチ署名済みトランザクション](multi-signing.html) | 50 | 256 | 100 | 512 |
@@ -93,7 +94,7 @@ XRP LedgerをスパムやDoS攻撃から守るため、各トランザクショ
### server_state ### server_state
[server_stateメソッド][]は、`rippled`の内部負荷計算の内容をそのままの表示形式で返します。この場合、有効負荷率は`load_base`に対する`load_factor` の割合です。`validated_ledger.base_fee`パラメーターは、[XRPのdrop](basic-data-types.html#通貨額の指定)単位の最低トランザクションコストをレポートします。この設計により、`rippled`では整数のみでトランザクションコストの計算ができ、サーバー負荷の微調整も十分に行えます。実際のトランザクションコストの計算は以下のようになります。 [server_stateメソッド][]は、`rippled`の内部負荷計算の内容をそのままの表示形式で返します。この場合、有効負荷率は`load_base`に対する`load_factor`の割合です。`validated_ledger.base_fee`パラメーターは、[XRPのdrop](basic-data-types.html#通貨額の指定)単位の最低トランザクションコストをレポートします。この設計により、`rippled`では整数のみでトランザクションコストの計算ができ、サーバー負荷の微調整も十分に行えます。実際のトランザクションコストの計算は以下のようになります。
**drop単位の現在のトランザクションコスト = (`base_fee` × `load_factor`) ÷ `load_base`** **drop単位の現在のトランザクションコスト = (`base_fee` × `load_factor`) ÷ `load_base`**
@@ -113,12 +114,12 @@ XRP LedgerをスパムやDoS攻撃から守るため、各トランザクショ
オンラインでトランザクションに署名する場合は、`Fee`フィールドを省略できます。この場合、`rippled`または[RippleAPI](rippleapi-reference.html)が現在の要件に照らしてピアツーピアネットワークの状態を確認し、トランザクションに署名する前に`Fee`値を追加します。ただし、このようなトランザクションコストへの自動入力にはいくつかの欠点と制限事項があります。 オンラインでトランザクションに署名する場合は、`Fee`フィールドを省略できます。この場合、`rippled`または[RippleAPI](rippleapi-reference.html)が現在の要件に照らしてピアツーピアネットワークの状態を確認し、トランザクションに署名する前に`Fee`値を追加します。ただし、このようなトランザクションコストへの自動入力にはいくつかの欠点と制限事項があります。
* トランザクションに署名し、分散するまでの間にネットワークのトランザクションコストが上昇した場合、そのトランザクションは承認されない場合があります。 * トランザクションに署名し、分散するまでの間にネットワークのトランザクションコストが上昇した場合、そのトランザクションは承認されない場合があります。
* 最悪の場合、トランザクションに`LastLedgerSequence`パラメーターが含まれているか、同じ`Sequence`番号を使用する新しいトランザクションによってそのトランザクションがキャンセルされない限り、トランザクションは明確に承認も拒否もされない状態のままとなってしまいます。ベストプラクティスについては、[信頼できるトランザクションの送信](reliable-transaction-submission.html)を参照してください。 * 最悪の場合、トランザクションに`LastLedgerSequence`パラメーターが含まれているか、同じ`Sequence`番号を使用する新しいトランザクションによってそのトランザクションがキャンセルされない限り、トランザクションは明確に承認も拒否もされない状態のままとなってしまいます。ベストプラクティスについては、[信頼できるトランザクションの送信](reliable-transaction-submission.html)を参照してください。
* 署名するトランザクションの`Fee`フィールドの正確な値は事前にわかりません。 * 署名するトランザクションの`Fee`フィールドの正確な値は事前にわかりません。
* `rippled`を使用している場合は、[signメソッド][]の`fee_mult_max`パラメーターと`fee_div_max`パラメーターを使用して、署名しようとしている負荷スケーリングに制限を設定することもできます。 * `rippled`を使用している場合は、[signメソッド][]の`fee_mult_max`パラメーターと`fee_div_max`パラメーターを使用して、署名しようとしている負荷スケーリングに制限を設定することもできます。
* オフラインのマシンから現在のトランザクションコストを調べることはできません。 * オフラインのマシンから現在のトランザクションコストを調べることはできません。
* [マルチ署名](multi-signing.html)の場合、トランザクションコストの自動指定は行えません。 * [マルチ署名](multi-signing.html)の場合、トランザクションコストの自動指定は行えません。
## トランザクションコストと失敗したトランザクション ## トランザクションコストと失敗したトランザクション
@@ -133,7 +134,7 @@ XRP LedgerをスパムやDoS攻撃から守るため、各トランザクショ
`rippled`サーバーが最初にトランザクションを評価するとき、送信側アカウントにXRPトランザクションコストを支払うのに十分なXRP残高がない場合は、エラーコード`terINSUF_FEE_B`にてトランザクションを拒否します。これは`ter`(再試行)コードであるため、トランザクションの結果が[確定](finality-of-results.html)になるまで、`rippled`サーバーはネットワークへの中継を行わずにトランザクションを再試行します。 `rippled`サーバーが最初にトランザクションを評価するとき、送信側アカウントにXRPトランザクションコストを支払うのに十分なXRP残高がない場合は、エラーコード`terINSUF_FEE_B`にてトランザクションを拒否します。これは`ter`(再試行)コードであるため、トランザクションの結果が[確定](finality-of-results.html)になるまで、`rippled`サーバーはネットワークへの中継を行わずにトランザクションを再試行します。
トランザクションはすでにネットワークに配信されているけれども、アカウントにトランザクションコストを支払うのに十分なXRPがない場合は、結果コード`tecINSUFF_FEE`が発生します。この場合、アカウントからは可能なかぎりすべてのXRPが支払われるため、最終的に0 XRPになります。これは、`rippled` がトランザクションをネットワークに中継するかどうかを進行中のレジャーに基づいて判断するために起こります。しかしコンセンサスレジャーを作成するときにトランザクションは破棄されるか並べ替えられることになります。 トランザクションはすでにネットワークに配信されているけれども、アカウントにトランザクションコストを支払うのに十分なXRPがない場合は、結果コード`tecINSUFF_FEE`が発生します。この場合、アカウントからは可能なかぎりすべてのXRPが支払われるため、最終的に0 XRPになります。これは、`rippled`がトランザクションをネットワークに中継するかどうかを進行中のレジャーに基づいて判断するために起こります。しかしコンセンサスレジャーを作成するときにトランザクションは破棄されるか並べ替えられることになります。
## Key Resetトランザクション ## Key Resetトランザクション
@@ -151,6 +152,21 @@ XRP LedgerをスパムやDoS攻撃から守るため、各トランザクショ
XRP Ledgerは、XRPの価値が長期的に変化することを見越して、最低トランザクションコストを変更するしくみを備えています。変更はすべて、コンセンサスプロセスによる承認が必要です。詳細は、[手数料の投票](fee-voting.html)を参照してください。 XRP Ledgerは、XRPの価値が長期的に変化することを見越して、最低トランザクションコストを変更するしくみを備えています。変更はすべて、コンセンサスプロセスによる承認が必要です。詳細は、[手数料の投票](fee-voting.html)を参照してください。
## 関連項目
- **コンセプト:**
- [準備金](reserves.html)
- [手数料投票](fee-voting.html)
- [トランザクションキュー](transaction-queue.html)
- **チュートリアル:**
- [信頼できるトランザクションの送信](reliable-transaction-submission.html)
- **リファレンス:**
- [feeメソッド][]
- [server_infoメソッド][]
- [FeeSettingsオブジェクト](feesettings.html)
- [SetFee疑似トランザクション][]
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %} {% include '_snippets/tx-type-links.md' %}

View File

@@ -0,0 +1,90 @@
# XRPによる直接支払
金融システムの基本は、 _価値の移動_ です。一言で言えば、決済です。XRP Ledgerでの最も簡単な支払いタイプは、XRP間の直接支払で、XRP Ledgerのあるアカウントから別のアカウントにXRPを直接移動します。
## XRP間の直接支払について
一般的に、XRPは、XRP Ledgerのどのアドレスからでも、他のアドレスに直接送金できます。受信側のアドレスは _宛先アドレス_ 、送信側のアドレスは _支払元アドレス_ と呼ばれます。XRPを直接送金するには、送信者は[Paymentトランザクション][]を使用します。これは、次のように簡潔に表すことができます。
```json
{
"TransactionType": "Payment",
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
"Amount": "13000000"
}
```
上記のトランザクション指示によって、以下のように実行されます。rf1Bi ...からra5nK... にPaymentを送信することで、ちょうど13 XRPが送金されます。トランザクションが正常に処理されると、その内容が正確に実行されます。新しいレジャーバージョンが[検証済み](consensus.html)になるまでに、通常約4秒かかるため、現在処理中のレジャーの後にレジャーバージョンのキューに入れられても、正常なトランザクションを作成、送信、実行後、8秒以内に最終結果を出すことができます。
**注意:** [Paymentトランザクションタイプ][Payment]は、[通貨間の支払い](cross-currency-payments.html)や[Partial Payment](partial-payments.html)を含む、より特殊な支払いにも使用できます。Partial Paymentの場合、トランザクションで非常に少ない金額しか送金しなかった場合でも、多額のXRPが`Amount`に表示される可能性があります。誤った金額を顧客に入金しないようにする方法については、[Partial Paymentの悪用](partial-payments.html#partial-paymentの悪用)を参照してください。
XRP間の直接支払ではPartial Paymentは使用できませんが、Partial Paymentでは複数の送金元通貨から変換後にXRPを送金できます。
## アカウントの資金提供
XRP Ledgerにそのアドレスの記録が事前に存在していなくても、支払いで[口座準備金](reserves.html)の最少額を満たすのに十分なXRPが送金されれば、数学的に有効なアドレスで支払いを受け取ることができます。支払いで十分なXRPを送金できない場合は失敗します。
詳細は、[アカウント](accounts.html#アカウントの作成)を参照してください。
## アドレスの再利用
XRP Ledgerでは、支払いを受け取ることができるアドレスは永続的ですが、XRPの重要な[必要準備金](reserves.html)は消費できません。つまり、他の一部のブロックチェーンシステムとは異なり、トランザクションごとに異なる使い捨てアドレスを使用することはお勧めできません。XRP Ledgerでは、ベストプラクティスとして、複数のトランザクションに同じアドレスを再利用することをお勧めします。アドレスを定期的に使用する場合特にインターネット接続サービスによって管理されている場合は、[レギュラーキー](cryptographic-keys.html)を設定し、キーの漏えいのリスクを低減するためにキーを定期的に事前変更する必要があります。
送金元は、目的の受取人が最後に支払いを送信したときと同じアドレスを使用していると仮定しないことが重要です。必然的に、セキュリティの侵害が発生し、ユーザーまたは企業はアドレスを変更しなければならない場合があります。送金する前に、現在の受取アドレスを受取人に尋ねてください。これにより、漏えいした古いアドレスを制御している不正ユーザーに誤ってお金を送信することはありません。
## XRPによる直接支払の処理方法
大まかに言えば、XRP Ledgerのトランザクション処理エンジンでは、XRPによる直接支払を次のように適用します。
1. [Paymentトランザクション][]のパラメータを検証します。トランザクションがXRPを送信、送金するように構成されている場合、トランザクション処理エンジンはそのトランザクションをXRP間の直接支払として認識します。検証チェックは次のように行います。
- すべてのフィールドが正しいフォーマットであることを確認します。たとえば、XRPによる直接支払の場合、`Amount`フィールドは[XRPのdrop数][]でなければなりません。
- 送信元アドレスがXRP Ledgerの資金供給された[アカウント](accounts.html)であることを確認します。
- 指定された署名がすべて、送信元アドレスに対して有効であることを確認します。
- 宛先アドレスと送金元アドレスが異なることを確認します。([宛先タグ](source-and-destination-tags.html)が異なる同一アドレスに送金するだけでは不十分です。)
- Paymentを送信するのに十分なXRP残高が送金元にあることを確認します。
いずれかのチェックに失敗すると、支払いは失敗します。
2. 受取アドレスが、資金供給されたアカウントかどうかを確認します。
- 受取アドレスに資金が供給されている場合は、[DepositAuth](depositauth.html)や[RequireDest](source-and-destination-tags.html#requiring-tags)など、支払いの受け取りに関する制限が受取アドレスにあるかどうかを確認します。そのような制限を支払いが満たしていない場合、支払いは失敗します。
- 受取アドレスに資金が供給されていない場合は、[必要準備金](reserves.html)の最低額を満たすのに十分なXRPが支払いで送金されるかどうかを確認します。十分でない場合、支払いは失敗します。
3. `Amount`フィールドで指定されたXRPの金額と、[トランザクションコスト](transaction-cost.html)用に消却されるXRPの金額の合計を送金元アカウントから引き落とし、受取アカウントに同じ金額を送金します。
必要に応じて、受取アドレス用に新規アカウント([AccountRootオブジェクト](accountroot.html)) を作成します。新規アカウントの開始残高は、支払いの`Amount`と同額になります。
エンジンは、[トランザクションのメタデータ](transaction-metadata.html)に`delivered_amount`フィールドを追加して、送金金額を示します。正しい金額のXRPを受け取ったことを確認できるように、必ず`delivered_amount`を使用する必要があります。`Amount`フィールドでは**ありません**。通貨間の支払「Partial Payment」では、`Amount`フィールドに記載されているよりも少額のXRPが送金される場合があります。詳細は、[Partial Payments](partial-payments.html)を参照してください。
## 他の支払いタイプとの比較
- **XRPによる直接支払**は、単一のトランザクションでXRPを送受信する唯一の方法です。この方法は、速度、シンプルさ、低コストの面でバランスが取れています。
- [通貨間の支払い](cross-currency-payments.html)でも[Payment][]トランザクションタイプを使用しますが、XRPとXRP以外の[発行済み通貨](issued-currencies.html)を組み合わせて送金できます。ただし、XRP間の支払いは除きます。また、[Partial Payment](partial-payments.html)でも使用できます。通貨間の支払いは、XRPで指定されていない支払いや、[分散型取引所](decentralized-exchange.html)で裁定取引の機会を得るのに適しています。
- [Checks](checks.html) :not_enabled: すぐに送金せずに送金元に債務を設定してもらいます。受取人は有効期間内であればいつでも換金できますが、その金額は保証されません。Checksでは、XRPまたは発行済み通貨のいずれかを送金できます。Checksは、受取人に支払いを請求する自律性を与えるのに適しています。
- [Escrow](escrow.html)では、特定の条件が満たされたときに、意図した受取人が要求できるXRPを確保します。XRPの金額は完全に保証されており、Escrowの有効期限が切れない限り、送金元が使用することはできません。Escrowは、巨額のスマートコントラクトに適しています。
- [Payment Channel](payment-channels.html)では、XRPが確保されます。受取人は、署名による認証を使用して、チャネルから一括でXRPを要求できます。XRP Ledgerの全トランザクションを送信せずに、認証を個々に確認できます。Payment Channelは、極めて大量の小口決済または「ストリーミング」支払いに適しています。
## 関連項目
- **コンセプト:**
- [決済システムの基本](payment-system-basics.html)
- **チュートリアル:**
- [XRPの送金対話型チュートリアル](send-xrp.html)
- [WebSocketを使用した着信ペイメントの監視](monitor-incoming-payments-with-websocket.html)
- **リファレンス:**
- [Paymentトランザクション][]
- [トランザクションの結果](transaction-results.html)
- [account_infoメソッド][] - XRP残高を確認します。
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -11,23 +11,24 @@ XRP Ledgerのサーバーは、XRP LedgerピアプロトコルRTXPを使
ピアツーピア接続を確立するには、サーバーどうしをHTTPSで接続し、一方のサーバーはRTXPへの切り替えのために[HTTPアップグレード](https://tools.ietf.org/html/rfc7230#section-6.7)を要求します。(詳細は、[`rippled`リポジトリ](https://github.com/ripple/rippled)の[Overlay Network](https://github.com/ripple/rippled/blob/906ef761bab95f80b0a7e0cab3b4c594b226cf57/src/ripple/overlay/README.md#handshake)を参照してください。) ピアツーピア接続を確立するには、サーバーどうしをHTTPSで接続し、一方のサーバーはRTXPへの切り替えのために[HTTPアップグレード](https://tools.ietf.org/html/rfc7230#section-6.7)を要求します。(詳細は、[`rippled`リポジトリ](https://github.com/ripple/rippled)の[Overlay Network](https://github.com/ripple/rippled/blob/906ef761bab95f80b0a7e0cab3b4c594b226cf57/src/ripple/overlay/README.md#handshake)を参照してください。)
## ピア発見 ## ピアの検出
**Note:** この部分は日本語ではまだ利用できません。助けたいと思うなら、[提供して下さい!](https://github.com/ripple/xrpl-dev-portal#contributing) XRP Ledgerでは、「ゴシップ」プロトコルを使用して、XRP Ledgerネットワーク内でサーバーが互いを識別できるようにします。サーバーは、起動するたびに、以前に接続したその他のあらゆるピアに再接続します。フォールバックとして、[ハードコーディングされた公開ハブ](https://github.com/ripple/rippled/blob/fa57859477441b60914e6239382c6fba286a0c26/src/ripple/overlay/impl/OverlayImpl.cpp#L518-L525)を使用します。サーバーがピアに正常に接続されると、ピアを探している他のXRP Ledgerサーバーの接続情報通常はIPアドレスとポートをそのピアに要求します。その後、サーバーはそれらのサーバーに接続し、ピア接続するXRP Ledgerサーバーの接続情報をさらに要求できます。このプロセスにより、サーバーは十分なピア接続を確立し、単一のピアへの接続が失われた場合でも、ネットワークの残りの部分にその後も接続されます。
The XRP Ledger uses a "gossip" protocol to help find servers find others to connect to in the XRP Ledger network. Whenever a server starts up, it reconnects to any other peers it previously connected to. As a fallback, it uses the [hardcoded public hubs](https://github.com/ripple/rippled/blob/fa57859477441b60914e6239382c6fba286a0c26/src/ripple/overlay/impl/OverlayImpl.cpp#L518-L525). After a server successfully connects to a peer, it asks that peer for the contact information (generally, IP address and port) of other XRP Ledger servers that may also be seeking peers. The server can then connect to those servers, and ask them for the contact information of yet more XRP Ledger servers to peer with. Through this process, the server establishes enough peer connections that it can remain reliably connected to the rest of the network even if it loses a connection to any single peer. 通常、サーバーが公開ハブに接続する必要があるのは1回のみです。他のピアを見つけるために、短時間のみ接続します。そうすることで、ネットワーク接続の安定性、ハブのビジー状態、およびサーバーが検出する他の高品質ピアの数に応じて、ハブにサーバーを引き続き接続するかどうかが異なります。サーバーでは、これらの他のピアのアドレスを保存するため、ネットワークの停止後または再起動後、それらのピアへの直接再接続を試行できます。
Typically, a server needs to connect to a public hub only once, for a short amount of time, to find other peers. After doing so, the server may or may not remain connected to the hub, depending on how stable its network connection is, how busy the hub is, and how many other high-quality peers the server finds. The server saves the addresses of these other peers so it can try reconnecting directly to those peers later, after a network outage or a restart. [peersメソッド][]は、サーバーが現在接続しているピアのリストを示します。
The [peers method][] shows a list of peers your server is currently connected to. 価値の高いサーバー(重要な[バリデータ](rippled-server-modes.html#rippledサーバーのモード)など)によっては、ピア検出プロセスを通じて、サーバーを信頼性の低いピアに接続しないようにする場合があります。この場合、[プライベートピア](#プライベートピア)のみを使用するようにサーバーを構成できます。
For certain high-value servers (such as important [validators](rippled-server-modes.html)) you may prefer not to have your server connect to untrusted peers through the peer discovery process. In this case, you can configure your server to use [private peers](#プライベートピア) only.
## ピアプロトコルポート ## ピアプロトコルポート
XRP Ledgerに参加するため、`rippled`サーバーはピアプロトコルを使用して任意のピアに接続します。(すべてのピアは、現行サーバーで[クラスター化されている](clustering.html)場合を除き、信頼できないものとして扱われます。) XRP Ledgerに参加するため、`rippled`サーバーはピアプロトコルを使用して任意のピアに接続します。(すべてのピアは、現行サーバーで[クラスター化されている](clustering.html)場合を除き、信頼できないものとして扱われます。)
サーバーがピアポートで接続を送信 _かつ_ 受信できることが理想的です。ピアプロトコルに使用するポートを、ファイアウォール経由で`rippled`サーバーに転送する必要があります。[デフォルトの`rippled`構成ファイル](https://github.com/ripple/rippled/blob/master/cfg/rippled-example.cfg)は、すべてのネットワークインターフェイスでポート51235で着信ピアプロトコル接続を待機します。使用するポートを変更するには、`rippled.cfg`ファイル内の該当するスタンザを編集します。 サーバーがピアポートで接続を送信 _かつ_ 受信できることが理想的です。`rippled`サーバーに、[ファイアウォール経由でピアプロトコルに使用するポートを転送する](forward-ports-for-peering.html)必要があります。
[デフォルトの`rippled`構成ファイル](https://github.com/ripple/rippled/blob/master/cfg/rippled-example.cfg)は、すべてのネットワークインターフェイスにおいて、ポート51235で着信ピアプロトコル接続をリッスンします。使用するポートを変更するには、`rippled.cfg`ファイル内の該当するスタンザを編集します。
例: 例:
@@ -46,45 +47,120 @@ protocol = peer
ノードキーペアはデータベースに保存され、サーバーの再起動時に再利用されます。サーバーのデータベースを削除すると、新しいノードキーペアが作成され、異なるアイデンティティでオンラインになります。データベースが削除されても同じキーペアを再利用するには、`[node_seed]`スタンザを使用してサーバーを設定できます。`[node_seed]`スタンザでの使用に適した値を生成するには、[validation_createメソッド][]を使用します。 ノードキーペアはデータベースに保存され、サーバーの再起動時に再利用されます。サーバーのデータベースを削除すると、新しいノードキーペアが作成され、異なるアイデンティティでオンラインになります。データベースが削除されても同じキーペアを再利用するには、`[node_seed]`スタンザを使用してサーバーを設定できます。`[node_seed]`スタンザでの使用に適した値を生成するには、[validation_createメソッド][]を使用します。
ノードキーペアは、このサーバーと共に[クラスター化](clustering.html)されている他のサーバーも識別します。サーバークラスターを使用している場合、一意の`[node_seed]`設定を使用してクラスター内の各サーバーを構成する必要があります。クラスターの設定についての詳細は、[`rippled`サーバーのクラスター化](cluster-rippled-servers.html)を参照してください。 また、ノードキーペアは、[ピアスロットの](#固定ピアとピアリザベーション)[クラスタリング](clustering.html)または[確保](#固定ピアとピアリザベーション)のために他のサーバーも識別します。サーバークラスターを使用している場合、一意の`[node_seed]`設定を使用してクラスター内の各サーバーを構成する必要があります。クラスターの設定についての詳細は、[`rippled`サーバーのクラスター化](cluster-rippled-servers.html)を参照してください。
## Fixed Peers and Peer Reservations ## 固定ピアとピアリザベーション
<a id="pros-and-cons-of-peering-configurations"></a> <!-- TODO: remove this anchor when the corresponding section is translated -->
**注意:** 現在の所はこの部分は日本語では利用できません。[英語版](/{{currentpage.html}})をご覧下さい 通常、`rippled`サーバーでは多数のピアを維持するよう試みるため、信頼性の低いピアの最大数まで自動接続されます。特定のピアサーバーへの接続を維持するように`rippled`サーバーを構成するには、いくつかの方法があります
- **固定ピア**を使用して、IPアドレスに基づき特定の他のピアへの接続を維持します。これは、ピアのIPアドレスが固定されている場合にのみ機能します。固定ピアを構成するには、構成スタンザ`[ips_fixed]`を使用します。これは、[クラスタリング](clustering.html)または[プライベートピア](#プライベートピア)の重要な部分です。固定ピアは構成ファイルで定義されているため、変更を適用するにはサーバーを再起動する必要があります。サーバーが同じユーザーまたは組織によって実行されている場合、固定ピアは、サーバーの接続状態を維持するのに最も有益です。
- **ピアリザベーション**を使用して、特定のピアに優先順位を付けます。サーバーに特定のピアのピアリザベーションがある場合、既に最大数のピアに接続されていても、サーバーは常にそのピアからの接続要求を受け入れます。(これにより、サーバーでのピアの最大接続数を*超える*可能性があります。)[ノードキーペア](#ノードキーペア)によって確保済みピアを識別するため、可変IPアドレスを持つピアに対してもこれを行うことができます。ピアリザベーションは、管理コマンドを使用して構成され、サーバーデータベースに保存されるため、サーバーがオンラインの場合に調整することができ、再起動後も保存されます。ピアリザベーションは、さまざまなユーザーや組織が運営するサーバーを接続するのに最も有益です。[新規: rippled 1.4.0][]
次の場合、`rippled`サーバーは、信頼性の低いピアには接続されません。
- [プライベートピア](#プライベートピア)として構成されている場合、サーバーは固定ピアに _のみ_ 接続されます。
- [スタンドアロンモード](rippled-server-modes.html#rippledサーバーをスタンドアロンモードで実行する理由)で実行されている場合、サーバーは _どの_ ピアにも接続されません。
## プライベートピア ## プライベートピア
`rippled`サーバーが「プライベート」サーバーとして動作するように設定し、そのIPアドレスを非公開にすることができます。これは、信頼できるバリデータなどの重要な`rippled`サーバーへのサービス拒否攻撃や侵入の試みに対する予防対策として有用です。ピアツーピアネットワークに参加するには、プライベートサーバーは1つ以上の非プライベートサーバーに接続するように設定されている必要があります。この非プライベートサーバーにより、メッセージがネットワークのその他の部分へ中継されます。 `rippled`サーバーが「プライベート」サーバーとして動作するように設定し、そのIPアドレスを非公開にすることができます。これは、信頼できるバリデータなどの重要な`rippled`サーバーへのサービス拒否攻撃や侵入の試みに対する予防対策として有用です。ピアツーピアネットワークに参加するには、プライベートサーバーは1つ以上の非プライベートサーバーに接続するように設定されている必要があります。この非プライベートサーバーにより、メッセージがネットワークのその他の部分へ中継されます。
**注意:** [固定ピア](#固定ピアとピアリザベーション)を使用せずにプライベートサーバーを構成すると、サーバーはネットワークに接続できないため、ネットワークの状態を認識したり、トランザクションをブロードキャストしたり、コンセンサスプロセスに参加したりすることができません。
サーバーをプライベートサーバーとして設定すると次のさまざまな影響が生じます。 サーバーをプライベートサーバーとして設定すると次のさまざまな影響が生じます。
- サーバーがピアツーピアネットワーク内の他のサーバーに接続するように明示的に設定されていない場合、サーバーは他のサーバーに発信接続しません。 - サーバーがピアツーピアネットワーク内の他のサーバーに接続するように明示的に設定されていない場合、サーバーは他のサーバーに発信接続しません。
- サーバーは、他のサーバーからの接続を受け入れるように明示的に設定されていない場合、他のサーバーからの着信接続を受け入れません。 - サーバーは、他のサーバーからの接続を受け入れるように明示的に設定されていない場合、他のサーバーからの着信接続を受け入れません。
- サーバーはそのダイレクトピアに対し、信頼できない通信([ピアクローラーAPI応答](peer-crawler.html)を含むの中ではサーバーのIPアドレスを公開しないように指示します。これは、[peers adminメソッド][peers method]などの信頼できる通信には影響しません。 - サーバーはそのダイレクトピアに対し、信頼できない通信([ピアクローラーAPI応答](peer-crawler.html)を含むの中ではサーバーのIPアドレスを公開しないように指示します。これは、[peers adminメソッド][peersメソッド]などの信頼できる通信には影響しません。
プライベートサーバーの設定に関係なく、バリデータは常にそのピアに対し、バリデータのIPアドレスを非公開にするように指示します。これにより、バリデータがサービス拒否攻撃を受け過剰な負荷がかかることから保護されます。[新規: rippled 1.2.1][]
**注意:** サーバーのソースコードを改ざんして、サーバーがこの要求を無視し、直近のピアのIPアドレスを共有する可能性があります。プライベートサーバーを、このように改ざんされていないことが確認されているサーバーにのみ接続するように設定してください。
プライベートサーバーの設定に関係なく、バリデータは常にそのピアに対し、バリデータのIPアドレスを非公開にするように指示します。これにより、バリデータがサービス拒否攻撃を受け過剰な負荷がかかることから保護されます。[新規: rippled 1.2.1][] ### ピア接続設定のメリットとデメリット
**注意:** サーバーのソースコードを改ざんして、サーバーがこの要求を無視し、直近のピアのIPアドレスを共有する可能性があります。プライベートサーバーを、このように改ざんされていないことが確認されているサーバーにのみ接続するように設定してください XRP Ledgerで使用できるように、`rippled`サーバーをピアツーピアのオープンネットワークの残りの部分に接続する必要があります。大まかに言えば、`rippled`サーバーがネットワークに接続する方法には、次の3種類の構成があります
- **検出されたピア**を使用します。サーバーは、検出された信頼の低いサーバーに接続し、それらのサーバーが適切に動作する限り接続を維持します。(たとえば、要求するデータはそれほど多くなく、ネットワーク接続は安定しているため、同じ[ネットワーク](parallel-networks.html)をフォローしているように見えます。)デフォルトでは、この構成に設定されています。
- 同じユーザーまたは組織が実行する**プロキシを使用したプライベートサーバー**として使用します。プロキシは、プライベートサーバーとの固定ピア接続を維持するストック用の`rippled`サーバーです(検出されたピアにも接続されます)。
- **公開ハブを使用するプライベートサーバー**として使用します。プロキシを使用する構成と似ていますが、サードパーティーによって異なります。
各構成のメリットとデメリットは次のとおりです。
<table>
<thead><tr>
<th>設定</th> <th>メリット</th> <th>デメリット</th>
</tr></thead>
<tbody>
<tr><th>検出されたピア</th>
<td><ul>
<li><p>最もシンプルな構成。メンテナンスの負担が抑えられます。</p></li>
<li><p>ダイレクトピア接続の機会が多数得られます。ダイレクトピア接続には、いくつかのメリットがあります。サーバーは、複数のピアから並行して<a href="ledger-history.html#履歴の取得">履歴を取得</a>できます。同期時と履歴の埋め戻し時のいずれも可能です。履歴は、すべてのピアで完全に保持されているわけではないため、アクセスするピアを増やすことで、幅広い履歴データにアクセスすることもできます。</p></li>
<li><p>切断されたピアを新しいピアに置き換えることができるため、サーバーがネットワークから切断される可能性を抑えることができます。</p></li>
</ul></td>
<td><ul>
<li><p>サーバーのピアを選択することはできません。つまり、ピアによって悪意のある動作が行われるかどうかは不明です。「rippled」サーバーは悪意のあるピアから保護するように設計されていますが、悪意のあるピアがソフトウェアの欠陥を悪用してサーバーに影響を及ぼすリスクは常にあります。</p></li>
<li><p>サーバーのピアは頻繁に切断または変更される場合があります。</p></li>
</ul></td>
</tr>
<tr><th>プロキシを使用したプライベートサーバー</th>
<td><ul>
<li><p>最も安全で信頼できる構成(効率的に実装された場合)。</p></li>
<li><p>信頼性と冗長性を実現します。</p></li>
<li><p><a href="clustering.html">クラスタリング</a>によって、プライベートサーバーのパフォーマンスを最適化できます。</p></li>
<li><p>必要な数のダイレクトピア接続を作成できます。プライベートサーバーでは、複数のピアから並行して<a href="ledger-history.html#履歴の取得">履歴を取得</a>できます。複数のピアを実行するため、各ピアで保持するレジャー履歴の量も制御します。</p></li>
</ul></td>
<td><ul>
<li><p>複数のサーバーを実行することで、メンテナンスの負担とコストは高くなります。</p></li>
<li><p>ピア接続が停止する可能性が完全に排除されるわけではありません。実行するプロキシの数に関係なく、それらがすべて同じサーバーラックに存在する場合は、1つのネットワーク停止または停電によって、すべてのプロキシに影響が及ぶ可能性があります。</p></li>
</ul></td>
</tr>
<tr><th>公開ハブを使用するプライベートサーバー</th>
<td><ul>
<li><p>構成がシンプルでメンテナンスの負担を低減できます。</p></li>
<li><p>安全なネットワーク接続に簡単にアクセスできます。</p></li>
<li><p>プロキシを使用して接続する場合と比較して、同時ピア停止によりプライベートサーバーがネットワークから切断される可能性を低減できます。</p></li>
</ul></td>
<td><ul>
<li><p>信頼性を維持できるように、評判の高いサードパーティー製品を使用します。</p></li>
<li>
<p>使用する公開ハブが混雑している場合、サーバーはネットワークから切断される可能性があります。公開ハブの性質上、ユーザー数が多いため、すべてのユーザーに安定した接続を確保することが困難な場合があります。</p>
<p>この問題を回避するには、使用するハブを増やします。多いほど効果的です。また、デフォルト以外のハブを使用することをお勧めします。ビジー状態になる可能性が低くなります。</p>
</li>
</ul></td>
</tr>
</tbody>
</table>
### プライベートサーバーの設定 ### プライベートサーバーの設定
サーバープライベートピアとして動作するように設定するには、`rippled`構成ファイルの`[peer_private]`スタンザを使用します。`[ips_fixed]`を使用して、サーバーの接続先サーバーをリストします。(`[ips_fixed]`にアドレスを指定せずに`[peer_private]`を有効にすると、サーバーはネットワークに接続しません。)追加の予防対策として、ファイアウォールを使用して他のサーバーからの着信接続をブロックします サーバープライベートサーバーとして設定するには、設定ファイルの`[peer_private]``1`に設定します。詳細な手順については、[プライベートサーバーの設定](configure-a-private-server.html)を参照してください
設定例:
``` ## 関連項目
# Configuration on a private server that only connects through
# a second rippled server at IP address 10.1.10.55
[ips_fixed]
10.1.10.55
[peer_private] - **コンセプト:**
1 - [コンセンサス](consensus.html)
``` - [並列ネットワーク](parallel-networks.html)
- **チュートリアル:**
- [rippledサーバーのクラスター化](cluster-rippled-servers.html)
- [プライベートサーバーの設定](configure-a-private-server.html)
- [ピアクローラーの設定](configure-the-peer-crawler.html)
- [ピアリングのポート転送](forward-ports-for-peering.html)
- [特定のピアへの手動接続](manually-connect-to-a-specific-peer.html)
- [ピアの最大数の設定](set-max-number-of-peers.html)
- [ピアリザベーション](use-a-peer-reservation.html)
- **リファレンス:**
- [peersメソッド][]
- [peer_reservations_addメソッド][]
- [peer_reservations_delメソッド][]
- [peer_reservations_listメソッド][]
- [connectメソッド][]
- [fetch_infoメソッド][]
- [ピアクローラー](peer-crawler.html)
<!--{# common link defs #}--> <!--{# common link defs #}-->

View File

@@ -3,8 +3,8 @@
`rippled`サーバーソフトウェアは、その設定に応じて以下のようなさまざまなモードで実行できます。 `rippled`サーバーソフトウェアは、その設定に応じて以下のようなさまざまなモードで実行できます。
* ストックサーバー - レジャーのローカルコピーを保持し、ネットワークをフォローします。 * ストックサーバー - レジャーのローカルコピーを保持し、ネットワークをフォローします。
* 検証サーバー_バリデータ_- コンセンサスの参加者(ストックサーバーの処理もすべて行います)。 * 検証サーバー( _バリデータ_ - コンセンサスの参加者(ストックサーバーの処理もすべて行います)。
* `rippled` スタンドアロンモードのサーバー - テスト用。他の`rippled`サーバーと通信しません。 * `rippled`スタンドアロンモードのサーバー - テスト用。他の`rippled`サーバーと通信しません。
また、[`rippled` API](rippled-api.html)にローカルでアクセスするためのクライアントアプリケーションとして、`rippled`実行可能ファイルを実行できます。この場合同じバイナリの2つのインスタンスを並列して実行できます。1つのインスタンスをサーバーとして実行し、もう1つのインスタンスをクライアントとして一時的に実行して終了します。 また、[`rippled` API](rippled-api.html)にローカルでアクセスするためのクライアントアプリケーションとして、`rippled`実行可能ファイルを実行できます。この場合同じバイナリの2つのインスタンスを並列して実行できます。1つのインスタンスをサーバーとして実行し、もう1つのインスタンスをクライアントとして一時的に実行して終了します。
@@ -15,7 +15,7 @@
独自の`rippled`サーバーを運用する理由は多数ありますが、その最たる理由として、独自サーバーが信頼できるものであり、自身でその負荷を管理でき、サーバーにアクセスするタイミングとアクセス方法を他のユーザーに依存せずに決めることができる点があげられます。もちろん、独自サーバーを不正使用者から保護するために適切なネットワークセキュリティ対策を講じなければなりません。 独自の`rippled`サーバーを運用する理由は多数ありますが、その最たる理由として、独自サーバーが信頼できるものであり、自身でその負荷を管理でき、サーバーにアクセスするタイミングとアクセス方法を他のユーザーに依存せずに決めることができる点があげられます。もちろん、独自サーバーを不正使用者から保護するために適切なネットワークセキュリティ対策を講じなければなりません。
使用する`rippled`を信頼する必要があります。悪意のあるサーバーに接続してしまうと、そのサーバーはさまざまな方法であなたを利用して資金を失わせることができます。次に例を示します。 使用する`rippled`を信頼する必要があります。悪意のあるサーバーに接続してしまうと、そのサーバーはさまざまな方法であなたを利用して資金を失わせることができます。例:
* 悪意のあるサーバーは、実際には行われていないあなたへの支払いが行われたと報告することがあります。 * 悪意のあるサーバーは、実際には行われていないあなたへの支払いが行われたと報告することがあります。
* ペイメントパスと通貨取引オファーを選択的に表示または非表示にし、最適なディールをあなたに提示せずに不正使用者の利益になるようにします。 * ペイメントパスと通貨取引オファーを選択的に表示または非表示にし、最適なディールをあなたに提示せずに不正使用者の利益になるようにします。
@@ -27,15 +27,15 @@
### 公開ハブ ### 公開ハブ
**Note:** この部分は日本語ではまだ利用できません。助けたいと思うなら、[提供して下さい!](https://github.com/ripple/xrpl-dev-portal#contributing) 公開ハブは、他のサーバーへの[ピアプロトコル接続](peer-protocol.html)が多数あるストックサーバーを指します。ストックサーバーを公開ハブとして実行することで、XRP Ledgerネットワークの効率的な接続を維持できます。適切に運用されている公開ハブには、以下の特徴があります。
A public hub is a stock server with lots of [peer protocol connections](peer-protocol.html) to other servers. You can help the XRP Ledger network maintain efficient connectivity by running a stock server as a public hub. Successful public hubs embody the following traits: - 十分な帯域幅。
- Good bandwidth. - 多数の信頼できるピアとの接続。
- メッセージを確実に中継する能力。
- Connections with a lot of reliable peers.
- Ability to relay messages reliably.
## バリデータを運用する理由 ## バリデータを運用する理由
@@ -60,8 +60,23 @@ XRP Ledgerの堅牢性は、バリデータが相互に接続されたネット
**注意:** スタンドアロンモードでは[レジャーを手動で進める](advance-the-ledger-in-stand-alone-mode.html)必要があります。 **注意:** スタンドアロンモードでは[レジャーを手動で進める](advance-the-ledger-in-stand-alone-mode.html)必要があります。
## 関連項目 ## 関連項目
- [コマンドライン使用リファレンス](commandline-usage.html) - すべての`rippled`サーバーモードのコマンドラインオプションに関する詳細情報。 - **リファレンス:**
- [コマンドライン使用リファレンス](commandline-usage.html) - すべての`rippled`サーバーモードのコマンドラインオプションに関する詳細情報。
- [ledger_acceptメソッド][] - スタンドアロンモードでレジャーを手動で進めます。
- [featureメソッド][] - 現在有効になっている既知の[Amendment](amendments.html)を確認します。
- **チュートリアル:**
- [`rippled`の構成](configure-rippled.html)
- [バリデータとしての`rippled`の実行](run-rippled-as-a-validator.html)
- [スタンドアロンモードでのrippledの使用](use-stand-alone-mode.html):
- [スタンドアロンモードでの新しいジェネシスレジャーの開始](start-a-new-genesis-ledger-in-stand-alone-mode.html)
- [スタンドアロンモードでの保存済みレジャーの読み込み](load-a-saved-ledger-in-stand-alone-mode.html)
- [スタンドアロンモードでレジャーを進める](advance-the-ledger-in-stand-alone-mode.html)
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %} {% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,72 @@
# 取引検閲の検知
[新規: rippled 1.2.0][]
XRP Ledgerは、高い[検閲耐性](xrp-ledger-overview.html#耐検閲性のある取引処理)を実現できるように設計されています。この設計をサポートするために、XRP Ledgerでは、取引検閲の自動検知機能がすべての`rippled`サーバーで有効になっており、検閲によるネットワークへの影響の有無を、すべての参加者が確認できます。
`rippled`サーバーがネットワークと同期している間、検知機能は、`rippled`サーバーの観点から、[コンセンサス](intro-to-consensus.html)の最終ラウンドで受け入れられ、最後に検証されたレジャーに取り込まれるトランザクションをすべて追跡します。検知機能では、数回のコンセンサスラウンド後、検証済みのレジャーに取り込まれていないトランザクションの重大度が高くなるというログメッセージを発行します。
## 仕組み
取引検閲検知機能の仕組みの概要を以下に示します。
1. 検知機能は、`rippled`サーバーの最初のコンセンサス提案のすべてのトランザクションをトラッカーに追加します。
2. コンセンサスラウンドの終了時に、検知機能によって、検証済みのレジャーに取り込まれているトランザクションはすべて、トラッカーから削除されます。
3. 検知機能は、15個のレジャーのトラッカーに残っているトランザクションについて、ログで[警告メッセージ](#警告メッセージの例)を発行し、潜在的に検閲されたトランザクションとして表面化します。この時点でトラッカーにトランザクションが存在する場合は、15ラウンドのコンセンサスの後、検証済みのレジャーに取り込まれていないことを意味します。トランザクションが別の15個のレジャーのトラッカーに残っている場合は、検知機能によって、ログに別の警告メッセージが発行されます。
トランザクションがトラッカーに残っている限り、最大5つの警告メッセージに対して、検知機能は15個のレジャーごとにログに警告メッセージを発行し続けます。警告メッセージが5回発行されると、検知機能は、ログに最終的な[エラーメッセージ](#エラーメッセージの例)を発行し、警告およびエラーメッセージの発行を停止します。
`rippled`サーバーログにこれらのメッセージが表示される場合、他のサーバーでトランザクションを取り込むことができない理由を調査する必要があります。まず、原因が悪意のある検閲よりも[誤検知](#誤検知の可能性)(無害なバグ)である可能性が高いと仮定します。
## 警告メッセージの例
トランザクションE08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7がレジャー1885153018851545までの15個のレジャーのトラッカーに残っている場合に、取引検閲検知機能によって発行される警告メッセージの例を次に示します。
```text
LedgerConsensus:WRN Potential Censorship: Eligible tx E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7, which we are tracking since ledger 18851530 has not been included as of ledger 18851545.
```
## エラーメッセージの例
トランザクションE08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7がレジャー1885153018851605までの75個のレジャー15個のレジャーの5セットのトラッカーに残っている場合に、取引検閲検知機能によって発行されるエラーメッセージの例を以下に示します。
```text
LedgerConsensus:ERR Potential Censorship: Eligible tx E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7, which we are tracking since ledger 18851530 has not been included as of ledger 18851605.Additional warnings suppressed.
```
## 誤検知の可能性
シナリオによっては、取引検閲検知機能で誤検知が発生する場合があります。この場合、誤検知とは、15個以上のレジャーについてトラッカーに残っているトランザクションにフラグが立てられたことを意味しますが、これによる問題はありません。
検知機能で誤検知メッセージが発行される可能性のあるシナリオを次に示します。
- `rippled`サーバーでは、ネットワークの他の部分とは異なるコードでビルドを実行しています。そのため、トランザクションは`rippled`サーバー上で別の方法で適用され、結果として誤検知の原因になります。このような誤検知が発生することはほとんどありませんが、一般的に、正しいバージョンの`rippled`を実行することが重要です。
- `rippled`サーバーはネットワークと同期されていないため、現時点で認識されていません。
- ネットワーク内の`rippled`サーバー(自身のサーバーも含まれる可能性が高い)は、`rippled`サーバーがトランザクションをネットワーク内の他の`rippled`サーバーに一貫性なく中継するバグのクラスの影響を受けています。
現在、この予期しない動作の原因となる既知のバグはありません。ただし、バグの疑いがある影響を確認した場合は、[RippleのBug Bounty](https://ripple.com/bug-bounty/)プログラムへのご報告をお願いいたします。
## 関連項目
- **コンセプト:**
- [コンセンサスの原理とルール](consensus-principles-and-rules.html)
- [トランザクションキュー](transaction-queue.html)
- **チュートリアル:**
- [信頼できるトランザクションの送信](reliable-transaction-submission.html)
- [ログメッセージについて](understanding-log-messages.html)
- **リファレンス:**
- [トランザクションの結果](transaction-results.html)
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,28 +1,34 @@
# 開発者用ツール # 開発者用ツール
<!--{# TODO: Ensure that the list below follows the order of the left nav. #}-->
Rippleには、XRP LedgerのAPIリクエストと動作をテスト、探索、検証するための一連の開発者用ツールがそろっています。 Rippleには、XRP LedgerのAPIリクエストと動作をテスト、探索、検証するための一連の開発者用ツールがそろっています。
* **[XRP Ledger Lookup Tool](xrp-ledger-rpc-tool.html)** * **[XRP Ledger RPC Tool](xrp-ledger-rpc-tool.html)**
このツールを使用して、XRP Ledgerのアカウント、取引、台帳についての生データを出力します。
このJSON-RPCベースのデバッグツールを使用して、XRP Ledgerのアカウント、取引、台帳についての生データを表示します。 * **[WebSocket API Tool](websocket-api-tool.html)**
* **[XRP Ledger Test Net Faucet](xrp-test-net-faucet.html)** このツールを使用して、`rippled` APIにサンプル要求を送信し、応答を取得します。設定は何も必要ありません。
WebSocketおよびJSON-RPC Test Netエンドポイントを使用して、XRP Ledger上で構築したソフトウェアを実際の資金を使用せずにテストします。テストの目的でTest Netのクレデンシャルと資金を生成します。Test Netの台帳と残高は定期的にリセットされます。
<!--{# TODO: For information about how to connect your `rippled` test server to the Test Net, see [XXXXX](x). #}-->
* **[rippled API WebSocket Tool](websocket-api-tool.html)**
動作中のrippled APIを今すぐ見る必要がありますか? このツールを使用して、あらかじめ用意されたサンプル要求を送信し、応答を取得します。設定は何も必要ありません。
<!--{# TODO: which methods are surfaced here -- is this all of them? #}-->
* **[Data API v2 Tool](data-api-v2-tool.html)** * **[Data API v2 Tool](data-api-v2-tool.html)**
サンプル要求でData APIを試して、実際の応答を取得します。設定は何も必要ありません。
動作中のData API v2を今すぐ見る必要がありますか? このツールを使用して、あらかじめ用意されたサンプル要求を送信し、応答を取得します。設定は何も必要ありません。 * **[xrp-ledger.toml Checker](xrp-ledger-toml-checker.html)**
このツールを使用して、[xrp-ledger.tomlファイル](xrp-ledger-toml.html)が適切にセットアップされていることを確認します。
* **[rippled.txt Validator](ripple-txt-validator.html)** * **[XRP Faucet](xrp-testnet-faucet.html)**
XRP Ledger TestnetまたはDevnetのクレデンシャルとテスト用XRPを取得し、これらの並列ネットワークのサーバーに接続して、実際の資金を使用せずにXRP Ledgerでソフトウェアの構築をテストします。
* **[Transaction Sender](tx-sender.html)**
選択したアドレスにXRP LedgerトランザクションをTestnet経由で送信し、コードによってさまざまなXRP Ledgerトランザクションが処理される方法をテストします。
* **[XRP Ledger Explorer](https://livenet.xrpl.org/)**
レジャーの新バージョンの検証をリアルタイムで表示し、XRP Ledgerネットワーク内のサーバーの地理的位置をグラフ化し、レジャーの状態を調べます。[Testnet Explorer](https://testnet.xrpl.org/)も使用できます。
このツールを使用して、「ripple.txt」が構文的に正しいことと、正しくデプロイされたことを確認します。
ここにないツールについて何かアイデアをお持ちですか? [お問い合わせ>](mailto:docs@ripple.com) ここにないツールについて何かアイデアをお持ちですか? [お問い合わせ>](mailto:docs@ripple.com)

View File

@@ -1,11 +1,11 @@
# wallet_propose # wallet_propose
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/WalletPropose.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/WalletPropose.cpp "Source")
`wallet_propose`メソッドを使用して、キーペアとXRP Ledgerアドレスを生成します。このコマンドは単にキーとアドレス値を生成し、XRP Ledger自体には何ら影響しません。レジャー上で資金供給済みのアドレスになるには、そのアドレスで、[必要準備金](reserves.html)を満たすのに十分なXRPの[Paymentトランザクションを受け取る](accounts.html#アカウントの作成)必要があります。 `wallet_propose`メソッドを使用して、キーペアとXRP Ledgerアドレスを生成します。このコマンドは単にキーとアドレス値を生成し、XRP Ledger自体には何ら影響しません。レジャー上で資金供給済みのアドレスになるには、そのアドレスで、[必要準備金](reserves.html)を満たすのに十分なXRPの[Paymentトランザクションを受け取る](accounts.html#アカウントの作成)必要があります。
*`wallet_propose`要求は、権限のないユーザーは実行できない[adminメソッド](admin-rippled-methods.html)です。*(このコマンドは、アカウントの機密情報を求めてネットワーク上の伝送情報をスニッフィングする人々から守るためにadminコマンドとされています。adminコマンドは通常、外部ネットワーク上で伝送されることはありません。 *`wallet_propose`メソッドは、権限のないユーザーは実行できない[管理メソッド](admin-rippled-methods.html)です。*(このコマンドは、アカウントの機密情報を求めてネットワーク上の伝送情報をスニッフィングする人々から守るためにadminコマンドとされています。adminコマンドは通常、外部ネットワーク上で伝送されることはありません。
[更新: rippled 0.31.0][新規: rippled 0.31.0] [更新: rippled 0.31.0][]
### 要求フォーマット ### 要求フォーマット
@@ -70,16 +70,16 @@ rippled wallet_propose masterpassphrase
要求には以下のパラメーターを含めることができます。 要求には以下のパラメーターを含めることができます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-------------|:-------|:-----------------------------------------------------| |:-------------|:-------|:-----------------------------------------------------|
| `key_type` | 文字列 | このキーペアに使用する楕円曲線アルゴリズム。有効な値は`ed25519``secp256k1`(すべて小文字)です。デフォルトは`secp256k1`です。 | | `key_type` | 文字列 | このキーペアの導出に使用する[署名アルゴリズム](cryptographic-keys.html#署名アルゴリズム)。有効な値は`ed25519``secp256k1`(すべて小文字)です。デフォルトは`secp256k1`です。 |
| `passphrase` | 文字列 | _省略可_ このシード値からキーペアとアドレスを生成します。この値は、[16進数][]、XRP Ledgerの[base58][]フォーマット、[RFC-1751][]、または任意の文字列でフォーマットできます。`seed`または`seed_hex`とともに使用することはできません。 | | `passphrase` | 文字列 | _省略可_ このシード値からキーペアとアドレスを生成します。この値は、[16進数][]、XRP Ledgerの[base58][]フォーマット、[RFC-1751][]、または任意の文字列でフォーマットできます。`seed`または`seed_hex`とともに使用することはできません。 |
| `seed` | 文字列 | _省略可能_ このシード値からXRP Ledgerの[base58][]エンコードフォーマットでキーペアとアドレスを生成します。`passphrase`または`seed_hex`とともに使用することはできません。 | | `seed` | 文字列 | _省略可能_ このシード値からXRP Ledgerの[base58][]エンコードフォーマットでキーペアとアドレスを生成します。`passphrase`または`seed_hex`とともに使用することはできません。 |
| `seed_hex` | 文字列 | _省略可能_ このシード値から[16進数][]形式でキーペアとアドレスを生成します。`passphrase`または`seed`とともに使用することはできません。 | | `seed_hex` | 文字列 | _省略可能_ このシード値から[16進数][]形式でキーペアとアドレスを生成します。`passphrase`または`seed`とともに使用することはできません。 |
以下のフィールドのうち**1つ**を指定する必要があります。`passphrase``seed`、または`seed_hex`。3つすべてを省略すると、`rippled`によってランダムシードが使用されます。 以下のフィールドのうち**1つ**を指定する必要があります。`passphrase``seed`、または`seed_hex`。3つすべてを省略すると、`rippled`によってランダムシードが使用されます。
**注記:** [Ed25519](https://ed25519.cr.yp.to/)のサポートは実験的な機能です。このコマンドのコマンドラインバージョンではEd25519キーを生成できません。 **注記:** このコマンドのコマンドラインバージョンでは[Ed25519](https://ed25519.cr.yp.to/)キーを生成できません。
#### シードの指定 #### シードの指定
@@ -97,8 +97,8 @@ rippled wallet_propose masterpassphrase
* 128ビットの[16進数][]文字列。例: `DEDCE9CE67B451D852FD4E846FCDE31C` * 128ビットの[16進数][]文字列。例: `DEDCE9CE67B451D852FD4E846FCDE31C`
* シード値として使用する任意の文字列。例: `masterpassphrase` * シード値として使用する任意の文字列。例: `masterpassphrase`
[RFC-1751]: https://tools.ietf.org/html/rfc1751 [RFC-1751]: https://tools.ietf.org/html/rfc1751 ""
[16進数]: https://en.wikipedia.org/wiki/Hexadecimal [16進数]: https://en.wikipedia.org/wiki/Hexadecimal ""
### 応答フォーマット ### 応答フォーマット
@@ -165,15 +165,16 @@ Connecting to 127.0.0.1:5005
応答は[標準フォーマット][]に従い、正常に終了した場合、新しい(可能性がある)アカウントについての重要な各種情報を含みます。以下のフィールドを含みます。 応答は[標準フォーマット][]に従い、正常に終了した場合、新しい(可能性がある)アカウントについての重要な各種情報を含みます。以下のフィールドを含みます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:------------------|:-------|:------------------------------------------------| |:------------------|:-------|:------------------------------------------------|
| `master_seed` | 文字列 | これはキーペアの秘密鍵です。このアカウントに関するその他のあらゆる情報が、マスターシードからXRP Ledgerの[base58][]エンコード文字列フォーマットで引き出されます。通常、このフォーマットのキーを使用してトランザクションに署名します。 | | `key_type` | 文字列 | こキーペアの導出に使用された[署名アルゴリズム](cryptographic-keys.html#署名アルゴリズム)。有効な値は`ed25519``secp256k1`(すべて小文字)です。 |
| `master_seed` | 文字列 | これはキーペアの秘密鍵です。このアカウントに関するその他のあらゆる情報が、マスターシードからXRP Ledgerの[base58][]エンコード文字列フォーマットで引き出されます。通常、このフォーマットのキーを使用してトランザクションに署名します。 |
| `master_seed_hex` | 文字列 | 16進数形式のマスターシード。単純で広く支持されている秘密鍵表示法。トランザクションの署名に使用できます。 | | `master_seed_hex` | 文字列 | 16進数形式のマスターシード。単純で広く支持されている秘密鍵表示法。トランザクションの署名に使用できます。 |
| `master_key` | 文字列 | [RFC 1751](http://tools.ietf.org/html/rfc1751)フォーマットのマスターシード。覚えやすく書き留めやすい秘密鍵。トランザクションの署名に使用できます。 | | `master_key` | 文字列 | **廃止予定** [RFC-1751][]形式のマスターシード。覚えやすく書き留めやすい秘密鍵。トランザクションの署名に使用できます。**注記:** `rippled`の実装では、RFC-1751からデコードした後、RFC-1751にエンコードする前に、キーのバイト順序が逆になります。別のRFC-1751実装を使用して、XRP Ledgerで使用するキーの読み書きを行う場合は、同様にして、`rippled`のRFC-1751エンコーディングとの互換性を保つ必要があります。 |
| `account_id` | 文字列 | XRP Ledgerの[base58][]フォーマットで作成されたアカウントの[アドレス][]。これは公開鍵ではありませんが、公開鍵を2回ハッシュ化したものです。チェックサムも持っているため、タイプミスした場合はほぼ間違いなく無効なアドレスとみなされ、有効だが異なるアドレスとはみなされません。これはXRP LedgerのアカウントのプライマリIDです。支払いを受けるときにこれを人に伝えたり、トランザクションにおいて、自身や、支払先、委託先識別するのに使用します。[マルチ署名のリスト](multi-signing.html)でもこれを使用して、他の署名者を識別します。 | | `account_id` | 文字列 | XRP Ledgerの[base58][]フォーマットで作成されたアカウントの[アドレス][]。これは公開鍵ではありませんが、公開鍵を2回ハッシュ化したものです。チェックサムも持っているため、タイプミスした場合はほぼ間違いなく無効なアドレスとみなされ、有効だが異なるアドレスとはみなされません。これはXRP LedgerのアカウントのプライマリIDです。支払いを受けるときにこれを人に伝えたり、トランザクションにおいて、自身や、支払先、委託先識別するのに使用します。[マルチ署名のリスト](multi-signing.html)でもこれを使用して、他の署名者を識別します。 |
| `public_key` | 文字列 | XRP Ledgerの[base58][]エンコード文字列フォーマットで作成された、キーペアの公開鍵。`master_seed`から生成されます。 | | `public_key` | 文字列 | XRP Ledgerの[base58][]エンコード文字列フォーマットで作成された、キーペアの公開鍵。`master_seed`から生成されます。 |
| `public_key_hex` | 文字列 | これは16進数で作成されたキーペアの公開鍵です。`master_seed`から生成されます。トランザクションの署名を検証する場合、`rippled`にはこの公開鍵が必要です。そのため、署名されたトランザクションのフォーマットの`SigningPubKey`フィールドには公開鍵が入力されています。 | | `public_key_hex` | 文字列 | これは16進数で作成されたキーペアの公開鍵です。`master_seed`から生成されます。トランザクションの署名を検証する場合、`rippled`にはこの公開鍵が必要です。そのため、署名されたトランザクションのフォーマットの`SigningPubKey`フィールドには公開鍵が入力されています。 |
| `warning` | 文字列 | (削除される可能性あり)要求にシード値を指定した場合、このフィールドに安全でない可能性があるという警告が表示されます。[新規: rippled 0.32.0][] | | `warning` | 文字列 | (削除される可能性あり)要求にシード値を指定した場合、このフィールドに安全でない可能性があるという警告が表示されます。[新規: rippled 0.32.0][] |
このメソッドを使用してキーペアを生成し、アカウントのレギュラーキーペアとして使用することもできます。アカウントにレギュラーキーペアを割り当てて、それを使用してほとんどのトランザクションに署名し、マスターキーペアをできるだけオフラインにしておくことも可能です。 このメソッドを使用してキーペアを生成し、アカウントのレギュラーキーペアとして使用することもできます。アカウントにレギュラーキーペアを割り当てて、それを使用してほとんどのトランザクションに署名し、マスターキーペアをできるだけオフラインにしておくことも可能です。
@@ -186,7 +187,7 @@ Connecting to 127.0.0.1:5005
### 考えられるエラー ### 考えられるエラー
* いずれかの[汎用エラータイプ][]。 * いずれかの[一般的なエラータイプ][]。
* `invalidParams` - 1つ以上のフィールドが不正に指定されています。 * `invalidParams` - 1つ以上のフィールドが不正に指定されています。
* `badSeed` - 要求には、空の文字列やXRP Ledgerアドレスに似た文字列などの許可されないシード値が`passphrase``seed`、または`seed_hex`フィールド内に)指定されています。 * `badSeed` - 要求には、空の文字列やXRP Ledgerアドレスに似た文字列などの許可されないシード値が`passphrase``seed`、または`seed_hex`フィールド内に)指定されています。

View File

@@ -0,0 +1,138 @@
# crawl_shards
[[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/CrawlShards.cpp "Source")
使用可能な[履歴レジャーデータのシャード](history-sharding.html)に関するピアサーバーからの情報を要求します。[新規: rippled 1.2.0][]
_`crawl_shards`メソッドは、権限のないユーザーは実行できない[管理メソッド](admin-rippled-methods.html)です。_
### 要求フォーマット
要求フォーマットの例:
<!-- MULTICODE_BLOCK_START -->
*WebSocket*
```json
{
"command": "crawl_shards",
"pubkey": true,
"limit": 0
}
```
*JSON-RPC*
```json
{
"method": "crawl_shards",
"params": [
{
"pubkey": true,
"limit": 0
}
]
}
```
<!-- MULTICODE_BLOCK_END -->
**注記:** このメソッドのコマンドライン構文はありません。コマンドラインからアクセスするには[jsonメソッド][]を使用してください。
要求には以下のフィールドが含まれます。
| `Field` | 型 | 説明 |
|:---------|:--------|:--------------------------------------------------------|
| `pubkey` | ブール値 | _省略可_ `true`の場合、応答には、クロールされたサーバーのノード公開鍵(ピアツーピア通信用)が含まれます。デフォルトは`false`です。 |
| `limit` | 数値 | _省略可_ 検索の深さを示すホップ数。デフォルトは0で、ダイレクトピアのみを検索します。`1`を制限値にすると、ピアのピアも検索します。最大値は`3`です。 |
**注意:** `limit`が増加すると、検索される可能性のあるピアの数は、指数関数的に増加します。2または3を制限値にすると、サーバーがAPI要求に応答するのに数秒かかる場合があります。
### 応答フォーマット
処理が成功した応答の例:
<!-- MULTICODE_BLOCK_START -->
*WebSocket*
```json
{
"result": {
"complete_shards": "1-2,5,8-9,584,1973,2358",
"peers": [
{
"complete_shards": "1-2,8,47,371,464,554,653,857,1076,1402,1555,1708,1813,1867",
"public_key": "n9LxFZiySnfDSvfh23N94UxsFkCjWyrchTeKHcYE6tJJQL5iejb2"
},
{
"complete_shards": "8-9,584",
"ip": "192.168.1.132",
"public_key": "n9MN5xwYqbrj64rtfZAXQy7Y3sNxXZJeLt7Lj61a9DYEZ4SE2tQQ"
}
]
},
"status": "success",
"type": "response"
}
```
*JSON-RPC*
```json
200 OK
{
"result": {
"complete_shards": "1-2,5,8-9,584,1973,2358",
"peers": [
{
"complete_shards": "1-2,8,47,371,464,554,653,857,1076,1402,1555,1708,1813,1867",
"public_key": "n9LxFZiySnfDSvfh23N94UxsFkCjWyrchTeKHcYE6tJJQL5iejb2"
},
{
"complete_shards": "8-9,584",
"ip": "192.168.1.132",
"public_key": "n9MN5xwYqbrj64rtfZAXQy7Y3sNxXZJeLt7Lj61a9DYEZ4SE2tQQ"
}
],
"status": "success"
}
}
```
<!-- MULTICODE_BLOCK_END -->
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 |
|:------------------|:-------|:------------------------------------------------|
| `complete_shards` | 文字列 | _省略可_ ローカルサーバーで利用可能な[履歴シャード](history-sharding.html)の範囲。これは、空の文字列か、または連続していない範囲である場合があります。たとえば、`1-2,5,7-9`は、シャード1、2、5、7、8、9が利用可能であることを示します。このサーバーで履歴シャーディングが有効になっていない場合は省略されます。 |
| `peers` | 配列 | 各ピアが使用可能な履歴シャードを表す**ピアシャードオブジェクト**のリスト(以下を参照)。 |
#### ピアシャードオブジェクト
応答の`peers`配列のメンバーはそれぞれ、ピアツーピアネットワーク内の1つのサーバーを表すオブジェクトです。リストには、少なくとも1つの完全な[履歴シャード](history-sharding.html)が使用可能なピアのみが含まれます。配列の各オブジェクトには以下のフィールドが含まれます。
| `Field` | 型 | 説明 |
|:----------|:-------|:--------------------------------------------------------|
| `complete_shards` | 文字列 | このピアが使用可能な履歴シャードの範囲。連続していない場合があります。たとえば、`1-2,5,7-9`は、シャード1、2、5、7、8、9が利用可能であることを示します。 |
| `ip` | 文字列 | _省略される場合があります_ このオブジェクトが表すピアのIPアドレス。IPv4アドレスまたはIPv6アドレスを指定できます。[プライベートピア](peer-protocol.html#プライベートピア)の場合は省略されます。 |
| `public_key` | 文字列 | _(リクエストで`"pubkey": true`が指定されている場合を除き省略)_ XRP Ledgerの[base58フォーマット](base58-encodings.html)で、このピアでピアツーピア通信に使用される公開鍵。 |
### 考えられるエラー
- いずれかの[一般的なエラータイプ][]。
- `invalidParams` - 要求で1つ以上の必須フィールドが省略されていたか、または指定されたフィールドのデータタイプが誤っています。
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,11 +1,11 @@
# download_shard # download_shard
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/DownloadShard.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/DownloadShard.cpp "Source")
サーバーに対し、外部ソースから特定の[履歴レジャーデータのシャード](history-sharding.html)をダウンロードするように指示します。`rippled`サーバーで[履歴シャードが保管されるように設定する](configure-history-sharding.html)必要があります。[新規: rippled 1.1.0][] サーバーに対し、外部ソースから特定の[履歴レジャーデータのシャード](history-sharding.html)をダウンロードするように指示します。`rippled`サーバーで[履歴シャードが保管されるように設定する](configure-history-sharding.html)必要があります。[新規: rippled 1.1.0][]
_`download_shard`メソッドは、権限のないユーザーは実行できない[管理メソッド](admin-rippled-methods.html)です。_ _`download_shard`メソッドは、権限のないユーザーは実行できない[管理メソッド](admin-rippled-methods.html)です。_
外部ソースからHTTPSを使用してシャードが[lz4圧縮](https://lz4.github.io/lz4/) [tarアーカイブ](https://en.wikipedia.org/wiki/Tar_(computing)) として提供される必要があります。このアーカイブの内容が、シャードストアーに使用されるデータベースタイプNuDBまたはRocksDBと一致する必要があります。 外部ソースからHTTPSを使用してシャードが[lz4圧縮](https://lz4.github.io/lz4/) [tarアーカイブ](https://en.wikipedia.org/wiki/Tar_(computing))として提供される必要があります。アーカイブには、NuDB形式のシャードディレクトリとデータファイルが含まれている必要があります。
通常、このメソッドを使用してシャードをダウンロードしてインポートすれば、ピアツーピアネットワークからシャードを個別に取得するよりも短い時間で取得できます。また、サーバーから提供される特定範囲のシャードまたはシャードのセットを選択する場合にもこのメソッドを使用できます。 通常、このメソッドを使用してシャードをダウンロードしてインポートすれば、ピアツーピアネットワークからシャードを個別に取得するよりも短い時間で取得できます。また、サーバーから提供される特定範囲のシャードまたはシャードのセットを選択する場合にもこのメソッドを使用できます。
@@ -19,12 +19,12 @@ _`download_shard`メソッドは、権限のないユーザーは実行できな
```json ```json
{ {
"command": "download_shard", "command": "download_shard",
"shards": [ "shards": [
{"index": 1, "url": "https://example.com/1.tar.lz4"}, {"index": 1, "url": "https://example.com/1.tar.lz4"},
{"index": 2, "url": "https://example.com/2.tar.lz4"}, {"index": 2, "url": "https://example.com/2.tar.lz4"},
{"index": 5, "url": "https://example.com/5.tar.lz4"} {"index": 5, "url": "https://example.com/5.tar.lz4"}
] ]
} }
``` ```
@@ -32,16 +32,16 @@ _`download_shard`メソッドは、権限のないユーザーは実行できな
```json ```json
{ {
"method": "download_shard", "method": "download_shard",
"params": [ "params": [
{ {
"shards": [ "shards": [
{"index": 1, "url": "https://example.com/1.tar.lz4"}, {"index": 1, "url": "https://example.com/1.tar.lz4"},
{"index": 2, "url": "https://example.com/2.tar.lz4"}, {"index": 2, "url": "https://example.com/2.tar.lz4"},
{"index": 5, "url": "https://example.com/5.tar.lz4"} {"index": 5, "url": "https://example.com/5.tar.lz4"}
] ]
} }
] ]
} }
``` ```
@@ -50,17 +50,17 @@ _`download_shard`メソッドは、権限のないユーザーは実行できな
要求には以下のフィールドが含まれます。 要求には以下のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-----------|:--------|:------------------------------------------------------| |:-----------|:--------|:------------------------------------------------------|
| `shards` | 配列 | ダウンロードするシャードとダウンロード元を記述したShard Descriptorオブジェクト以下の説明を参照のリスト。 | | `shards` | 配列 | ダウンロードするシャードとダウンロード元を記述したShard Descriptorオブジェクト以下の説明を参照のリスト。 |
| `validate` | ブール値 | _省略可_`false`の場合はダウンロードしたデータの検証をスキップします。デフォルトは`true`です。この場合、アーカイブのシャードにシャードのデータオブジェクトがすべて含まれており、シャードが現行の検証済みレジャーのレジャー履歴の一部であるか否かが確認されます。 | | `validate` | ブール値 | _省略可_ `false`の場合はダウンロードしたデータの検証をスキップします。デフォルトは`true`です。この場合、アーカイブのシャードにシャードのデータオブジェクトがすべて含まれており、シャードが現行の検証済みレジャーのレジャー履歴の一部であるか否かが確認されます。 |
`shards`配列の各**Shard Descriptorオブジェクト**には以下のフィールドが含まれています。 `shards`配列の各**Shard Descriptorオブジェクト**には以下のフィールドが含まれています。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:--------|:-------|:----------------------------------------------------------| |:--------|:-------|:----------------------------------------------------------|
| `index` | 数値 | 取得するシャードのインデックス。本番環境のXRP Ledgerでは、最も古いシャードのインデックスは1であり、このシャードにはレジャー3275032768が含まれています。次のシャードのインデックスは2であり、このシャードにはレジャー3276949152が含まれています。 | | `index` | 数値 | 取得するシャードのインデックス。本番環境のXRP Ledgerでは、最も古いシャードのインデックスは1であり、このシャードにはレジャー3275032768が含まれています。次のシャードのインデックスは2であり、このシャードにはレジャー3276949152が含まれています。 |
| `url` | 文字列 | このシャードをダウンロードできるURL。このURLは`https://`で始まり`.tar.lz4`大文字小文字の区別なしで終わる必要があります。このダウンロードを提供するWebサーバーは、信頼できる認証局CAによって署名された有効なTLS証明書を使用する必要があります。`rippled`はオペレーティングシステムのCAストアーを使用します。 | | `url` | 文字列 | このシャードをダウンロードできるURL。このURLは`https://`で始まり`.tar.lz4`大文字小文字の区別なしで終わる必要があります。このダウンロードを提供するWebサーバーは、信頼できる認証局CAによって署名された有効なTLS証明書を使用する必要があります。`rippled`はオペレーティングシステムのCAストアーを使用します。 |
### 応答フォーマット ### 応答フォーマット
@@ -72,11 +72,11 @@ _`download_shard`メソッドは、権限のないユーザーは実行できな
```json ```json
{ {
"result": { "result": {
"message": "downloading shards 1-2,5" "message": "downloading shards 1-2,5"
}, },
"status": "success", "status": "success",
"type": "response" "type": "response"
} }
``` ```
@@ -87,35 +87,31 @@ _`download_shard`メソッドは、権限のないユーザーは実行できな
200 OK 200 OK
{ {
"result": { "result": {
"message": "downloading shards 1-2,5", "message": "downloading shards 1-2,5",
"status": "success" "status": "success"
} }
} }
``` ```
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれています。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:----------|:-------|:--------------------------------------------------------| |:----------|:-------|:--------------------------------------------------------|
| `message` | 文字列 | この要求に対応して実行されたアクションを説明するメッセージ。 | | `message` | 文字列 | この要求に対応して実行されたアクションを説明するメッセージ。 |
**ヒント:** サーバーで使用可能なシャードを確認するには、シャードストアーとして設定されたロケーションのサブフォルダー(`rippled.cfg``[shard_db]``path`パラメーターを調べます。フォルダーには、シャードの番号に対応する名前が付いています。これらのフォルダーの1つに、シャードが未完了であることを示す`control.txt`ファイルが含まれていることがあります。 <!-- TODO: Update to recommend the `crawl_shards` command if/when that command becomes available. --> **ヒント:** サーバーで使用可能なシャードを確認するには、[crawl_shardsメソッド[]を使用します。または、シャードストアーとして設定されたロケーションのサブフォルダー(`rippled.cfg``[shard_db]``path`パラメーターを調べます。フォルダーには、シャードの番号に対応する名前が付いています。これらのフォルダーの1つに、シャードが未完了であることを示す`control.txt`ファイルが含まれていることがあります。
### 考えられるエラー ### 考えられるエラー
- [汎用エラータイプ][]のすべて - いずれかの[一般的なエラータイプ][]。
- `notEnabled` - サーバーでシャードストアーを使用するように設定されていません。 - `notEnabled` - サーバーでシャードストアーを使用するように設定されていません。
- `tooBusy` - サーバーはすでに、ピアツーピアネットワークから、または以前の`download_shard`要求の結果として、シャードをダウンロード中です。 - `tooBusy` - サーバーはすでに、ピアツーピアネットワークから、または以前の`download_shard`要求の結果として、シャードをダウンロード中です。
- `invalidParams` - 要求で1つ以上の必須フィールドが省略されていたか、または指定されたフィールドのデータタイプが誤っています。 - `invalidParams` - 要求で1つ以上の必須フィールドが省略されていたか、または指定されたフィールドのデータタイプが誤っています。
<!--{# @mduo13's note: Was unable to reproduce the following feature:
**Tip:** If you make the request with the WebSocket API, the server can notify you over the same WebSocket connection if the download fails or an error occurs while extracting the archive. TODO: Get an example of what this message looks like. #}-->
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %} {% include '_snippets/tx-type-links.md' %}

View File

@@ -1,5 +1,5 @@
# ledger_cleaner # ledger_cleaner
[[ソース]<br>](https://github.com/ripple/rippled/blob/df54b47cd0957a31837493cd69e4d9aade0b5055/src/ripple/rpc/handlers/LedgerCleaner.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/df54b47cd0957a31837493cd69e4d9aade0b5055/src/ripple/rpc/handlers/LedgerCleaner.cpp "Source")
`ledger_cleaner`コマンドは[レジャークリーナー](https://github.com/ripple/rippled/blob/f313caaa73b0ac89e793195dcc2a5001786f916f/src/ripple/app/ledger/README.md#the-ledger-cleaner)を制御します。レジャークリーナーは、`rippled`のレジャーデータベースの破損を検出して修復できる非同期メンテナンスプロセスです。 `ledger_cleaner`コマンドは[レジャークリーナー](https://github.com/ripple/rippled/blob/f313caaa73b0ac89e793195dcc2a5001786f916f/src/ripple/app/ledger/README.md#the-ledger-cleaner)を制御します。レジャークリーナーは、`rippled`のレジャーデータベースの破損を検出して修復できる非同期メンテナンスプロセスです。
@@ -14,10 +14,10 @@ _`ledger_cleaner`メソッドは、権限のないユーザーは実行できな
``` ```
{ {
"command": "ledger_cleaner", "command": "ledger_cleaner",
"max_ledger": 13818756, "max_ledger": 13818756,
"min_ledger": 13818000, "min_ledger": 13818000,
"stop": false "stop": false
} }
``` ```
@@ -25,15 +25,15 @@ _`ledger_cleaner`メソッドは、権限のないユーザーは実行できな
要求には以下のパラメーターが含まれます。 要求には以下のパラメーターが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:--------------|:--------------------------------|:---------------------------| |:--------------|:--------------------------|:---------------------------------|
| `ledger` | 数値(レジャーシーケンス番号) | _省略可_ 指定されている場合は、このレジャーのみをチェックして訂正します。 | | `ledger` | 数値 - [レジャーインデックス][] | _省略可_ 指定されている場合は、指定されたレジャーのみをチェックして訂正します。 |
| `max_ledger` | 数値(レジャーシーケンス番号) | _省略可_ シーケンス番号がこの番号以下のレジャーをチェックするようにレジャークリーナーを設定します。 | | `max_ledger` | 数値 - [レジャーインデックス][] | _省略可_ レジャーインデックスがこの番号以下のレジャーをチェックするようにレジャークリーナーを設定します。 |
| `min_ledger` | 数値(レジャーシーケンス番号) | _省略可_ シーケンス番号がこの番号以上のレジャーをチェックするようにレジャークリーナーを設定します。 | | `min_ledger` | 数値 - [レジャーインデックス][] | _省略可_ レジャーインデックスがこの番号以上のレジャーをチェックするようにレジャークリーナーを設定します。 |
| `full` | ブール値 | _省略可_ trueの場合は、指定されたレジャーのレジャー状態オブジェクトとトランザクションを修正します。デフォルトではfalseです。`ledger`が指定されている場合は、自動的に`true`に設定されます。 | | `full` | ブール値 | _省略可_ trueの場合は、指定されたレジャーのレジャー状態オブジェクトとトランザクションを修正します。デフォルトではfalseです。`ledger`が指定されている場合は、自動的に`true`に設定されます。 |
| `fix_txns` | ブール値 | _省略可_ trueの場合は、指定されたレジャーのトランザクションを修正します。指定されている場合は`full`をオーバーライドします。 | | `fix_txns` | ブール値 | _省略可_ trueの場合は、指定されたレジャーのトランザクションを修正します。指定されている場合は`full`をオーバーライドします。 |
| `check_nodes` | ブール値 | _省略可_ trueの場合は、指定されているレジャーのレジャー状態オブジェクトを修正します。指定されている場合は`full`をオーバーライドします。 | | `check_nodes` | ブール値 | _省略可_ trueの場合は、指定されているレジャーのレジャー状態オブジェクトを修正します。指定されている場合は`full`をオーバーライドします。 |
| `stop` | ブール値 | _省略可_ trueの場合は、レジャークリーナーを無効にします。 | | `stop` | ブール値 | _省略可_ trueの場合は、レジャークリーナーを無効にします。 |
### 応答フォーマット ### 応答フォーマット
@@ -46,26 +46,26 @@ _`ledger_cleaner`メソッドは、権限のないユーザーは実行できな
``` ```
200 OK 200 OK
{ {
"result" : { "result" : {
"message" : "Cleaner configured", "message" : "Cleaner configured",
"status" : "success" "status" : "success"
} }
} }
``` ```
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれています。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:----------|:-------|:---------------------------------| |:----------|:-------|:---------------------------------|
| `message` | 文字列 | `Cleaner configured` : 正常終了の場合。 | | `message` | 文字列 | `Cleaner configured`: 正常終了の場合。 |
### 考えられるエラー ### 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
* `internal` : いずれかのパラメーターが正しく指定されていない場合。(これはバグです。本来のエラーコードは`invalidParams`です。) * `internal`: いずれかのパラメーターが正しく指定されていない場合。(これはバグです。本来のエラーコードは`invalidParams`です。)
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -1,8 +1,36 @@
# logrotate # logrotate
[[ソース]<br>](https://github.com/ripple/rippled/blob/743bd6c9175c472814448ea889413be79dfd1c07/src/ripple/rpc/handlers/LogRotate.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/743bd6c9175c472814448ea889413be79dfd1c07/src/ripple/rpc/handlers/LogRotate.cpp "Source")
`logrotate`コマンドは、ログファイルを閉じて再度開きます。これは、Linuxファイルシステムでのログローテーションを促進することを目的としています。 `logrotate`コマンドは、ログファイルを閉じて再度開きます。これは、Linuxファイルシステムでのログローテーションを促進することを目的としています。
通常、Linuxシステムには、[`logrotate`](https://linux.die.net/man/8/logrotate)プログラムがプリインストールされていますが、このコマンドとは異なります。アプリケーション固有のログローテーションスクリプトは、`/etc/logrotate.d`に配置されています。
次のスクリプトは、`/etc/logrotate.d/rippled`として作成できるサンプルです。
```
/var/log/rippled/*.log {
daily
minsize 200M
rotate 7
nocreate
missingok
notifempty
compress
compresscmd /usr/bin/nice
compressoptions -n19 ionice -c3 gzip
compressext .gz
postrotate
/opt/ripple/bin/rippled --conf /opt/ripple/etc/rippled.cfg logrotate
endscript
}
```
保持するログの量に応じて、`minsize``rotate`などのパラメーターを構成できます。`rippled.cfg`ファイルの`log_level`設定を使用して、サーバーのログの詳細度を設定します。このサンプルスクリプトは標準の`log_level`に基づいており、約2週間分のログを圧縮形式で保存します。
`rippled` 1.3以降、スクリプト`/etc/logrotate.d/rippled`は、DEBおよびRPMパッケージによって自動的にインストールされます。この設定は、必要に応じて変更できます。パッケージのアップグレード時に変更内容が上書きされることはありません。
**注記:** システムのlogrotateスクリプトは、アプリケーションごとに1つしか持てません。同じディレクトリを処理するログローテーションが他にないことを確認してください。
_`logrotate`メソッドは、権限のないユーザーは実行できない[管理メソッド](admin-rippled-methods.html)です。_ _`logrotate`メソッドは、権限のないユーザーは実行できない[管理メソッド](admin-rippled-methods.html)です。_
### 要求フォーマット ### 要求フォーマット
@@ -14,8 +42,8 @@ _`logrotate`メソッドは、権限のないユーザーは実行できない[
``` ```
{ {
"id": "lr1", "id": "lr1",
"command": "logrotate" "command": "logrotate"
} }
``` ```
@@ -40,10 +68,10 @@ rippled logrotate
``` ```
200 OK 200 OK
{ {
"result" : { "result" : {
"message" : "The log file was closed and reopened.", "message" : "The log file was closed and reopened.",
"status" : "success" "status" : "success"
} }
} }
``` ```
@@ -54,27 +82,27 @@ rippled logrotate
Loading: "/etc/rippled.cfg" Loading: "/etc/rippled.cfg"
Connecting to 127.0.0.1:5005 Connecting to 127.0.0.1:5005
{ {
"result" : { "result" : {
"message" : "The log file was closed and reopened.", "message" : "The log file was closed and reopened.",
"status" : "success" "status" : "success"
} }
} }
``` ```
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれています。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:----------|:-------|:--------------------------------------------------------| |:----------|:-------|:--------------------------------------------------------|
| `message` | 文字列 | 正常に完了した場合、次のメッセージが含まれています。 `The log file was closed and reopened.` | | `message` | 文字列 | 正常に完了した場合、次のメッセージが含まれています。`The log file was closed and reopened.` |
### 考えられるエラー ### 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %} {% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %} {% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,136 @@
# peer_reservations_add
[[ソース]](https://github.com/ripple/rippled/blob/4a1148eb2849513dd1e7ae080288fd47ab57a376/src/ripple/rpc/handlers/Reservations.cpp#L36 "Source")
この`{{currentpage.name}}`メソッドは、XRP Ledger[ピアツーピアネットワーク](peer-protocol.html)内の特定のピアサーバーの予約済みスロットを追加または更新します。[新規: rippled 1.4.0][]
_`{{currentpage.name}}`メソッドは、権限のないユーザーは実行できない[管理メソッド](admin-rippled-methods.html)です。_
### 要求フォーマット
要求フォーマットの例:
<!-- MULTICODE_BLOCK_START -->
*WebSocket*
```json
{
"id": "peer_reservations_add_example_1",
"command": "{{currentpage.name}}",
"public_key": "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99",
"description": "Ripple s1 server 'WOOL'"
}
```
*JSON-RPC*
```json
{
"method": "{{currentpage.name}}",
"params": [{
"public_key": "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99",
"description": "Ripple s1 server 'WOOL'"
}]
}
```
*コマンドライン*
```sh
#Syntax: {{currentpage.name}} <public_key> [<description>]
rippled {{currentpage.name}} n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99 "Ripple s1 server 'WOOL'"
```
<!-- MULTICODE_BLOCK_END -->
要求には以下のパラメーターが含まれます。
| `Field` | 型 | 説明 |
|:--------------|:-------|:----------------------------------------------------|
| `public_key` | 文字列 | [base58][]での予約を追加するピアリザベーションの[ノード公開鍵][] 。 |
| `description` | 文字列 | _(省略可)_ ピアリザベーションに関するカスタムの説明。64文字を超える部分は、再起動時にサーバーによって切り捨てられます。 |
### 応答フォーマット
処理が成功した応答の例:
<!-- MULTICODE_BLOCK_START -->
*WebSocket*
```json
{
"id": "peer_reservations_add_example_1",
"result": {
"previous": {
"description": "Maecenas atavis edite regibus, O et praesidium et dulce decus meum, Sunt quos curriculo pulverem Olympicum Collegisse iuvat metaque fervidis Evitata rotis palmaque nobilis Terrarum dominos evehit ad deos; Hunc, si mobilium turba Quiritium Certat tergeminis tollere honoribus; Illum, si proprio condidit horreo, Quidquid de Libycis verritur areis.",
"node": "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99"
}
},
"status": "success",
"type": "response"
}
```
*JSON-RPC*
```json
{
"result": {
"previous": {
"description": "Maecenas atavis edite regibus, O et praesidium et dulce decus meum, Sunt quos curriculo pulverem Olympicum Collegisse iuvat metaque fervidis Evitata rotis palmaque nobilis Terrarum dominos evehit ad deos; Hunc, si mobilium turba Quiritium Certat tergeminis tollere honoribus; Illum, si proprio condidit horreo, Quidquid de Libycis verritur areis.",
"node": "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99"
},
"status": "success"
}
}
```
*コマンドライン*
```json
Loading: "/etc/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result": {
"previous": {
"description": "Maecenas atavis edite regibus, O et praesidium et dulce decus meum, Sunt quos curriculo pulverem Olympicum Collegisse iuvat metaque fervidis Evitata rotis palmaque nobilis Terrarum dominos evehit ad deos; Hunc, si mobilium turba Quiritium Certat tergeminis tollere honoribus; Illum, si proprio condidit horreo, Quidquid de Libycis verritur areis.",
"node": "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99"
},
"status": "success"
}
}
```
<!-- MULTICODE_BLOCK_END -->
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 |
|:-----------|:-------|:-------------------------------------------------------|
| `previous` | オブジェクト | _省略される場合があります_ 同じ[ノード公開鍵][]の以前のエントリ(同じノード公開鍵を使用した予約がすでに存在する場合)。以下で説明するように、このオブジェクトは、**ピアリザベーションオブジェクト**というフォーマットになります。 |
同じ[ノード公開鍵][]に以前のエントリがなかった場合、`result`オブジェクトは空です。
#### ピアリザベーションオブジェクト
`previous`フィールドが指定されている場合は、このピアリザベーションの以前のステータスが次のフィールドとともに表示されます。
{% include '_snippets/peer_reservation_object.md' %}
<!--_ -->
### 考えられるエラー
- いずれかの[一般的なエラータイプ][]。
- `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。
- `publicMalformed` - 要求の`public_key`フィールドが無効です。[base58][]フォーマットの有効なノード公開鍵である必要があります。
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,133 @@
# peer_reservations_del
[[ソース]](https://github.com/ripple/rippled/blob/4a1148eb2849513dd1e7ae080288fd47ab57a376/src/ripple/rpc/handlers/Reservations.cpp#L89 "Source")
`{{currentpage.name}}`メソッドは、特定の[ピアリザベーション][]を削除します(存在する場合)。[新規: rippled 1.4.0][]
_`{{currentpage.name}}`メソッドは、権限のないユーザーは実行できない[管理メソッド](admin-rippled-methods.html)です。_
**注記:** ピアリザベーションを削除しても、対応するピアが接続されている場合、そのピアは自動的に切断されません。
### 要求フォーマット
要求フォーマットの例:
<!-- MULTICODE_BLOCK_START -->
*WebSocket*
```json
{
"id": "peer_reservations_del_example_1",
"command": "{{currentpage.name}}",
"public_key": "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99"
}
```
*JSON-RPC*
```json
{
"method": "{{currentpage.name}}",
"params": [{
"public_key": "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99"
}]
}
```
*コマンドライン*
```sh
#Syntax: {{currentpage.name}} <public_key>
rippled {{currentpage.name}} n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99
```
<!-- MULTICODE_BLOCK_END -->
要求には以下のパラメーターが含まれます。
| `Field` | 型 | 説明 |
|:------------|:--------------------------|:-----------------------------------|
| `public_key` | 文字列 | 削除する[ピアリザベーション][]の[ノード公開鍵][][base58][]フォーマット) |
### 応答フォーマット
処理が成功した応答の例:
<!-- MULTICODE_BLOCK_START -->
*WebSocket*
```json
{
"id": "peer_reservations_del_example_1",
"result": {
"previous": {
"description": "Ripple s1 server 'WOOL'",
"node": "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99"
}
},
"status": "success",
"type": "response"
}
```
*JSON-RPC*
```json
{
"result" : {
"previous" : {
"description" : "Ripple s1 server 'WOOL'",
"node" : "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99"
},
"status" : "success"
}
}
```
*コマンドライン*
```json
Loading: "/etc/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result" : {
"previous" : {
"description" : "Ripple s1 server 'WOOL'",
"node" : "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99"
},
"status" : "success"
}
}
```
<!-- MULTICODE_BLOCK_END -->
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 |
|:--------|:-------|:----------------------------------------------------------|
| `previous` | オブジェクト | _省略される場合があります_ 削除する前のピアリザベーションの最後のステータスを伴った、**ピアリザベーションオブジェクト**。このフィールドは、ピアリザベーションが正常に削除された場合、必ず表示されます。 |
**注記:** 指定された予約が存在しなかった場合は、このコマンドによって、成功を示す空の結果オブジェクトが返されます。この場合、`previous`フィールドは省略されます。
#### ピアリザベーションオブジェクト
`previous`フィールドが指定されている場合は、このピアリザベーションの以前のステータスが次のフィールドとともに表示されます。
{% include '_snippets/peer_reservation_object.md' %}
<!--_ -->
### 考えられるエラー
- いずれかの[一般的なエラータイプ][]。
- `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。
- `publicMalformed` - 要求の`public_key`フィールドが無効です。[base58][]フォーマットの有効なノード公開鍵である必要があります。
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,134 @@
# peer_reservations_list
[[ソース]](https://github.com/ripple/rippled/blob/4a1148eb2849513dd1e7ae080288fd47ab57a376/src/ripple/rpc/handlers/Reservations.cpp#L116 "Source")
`{{currentpage.name}}`メソッドは、[ピアリザベーション][]を一覧表示します。[新規: rippled 1.4.0][]
_`{{currentpage.name}}`メソッドは、権限のないユーザーは実行できない[管理メソッド](admin-rippled-methods.html)です。_
### 要求フォーマット
要求フォーマットの例:
<!-- MULTICODE_BLOCK_START -->
*WebSocket*
```json
{
"id": "peer_reservations_list_example_1",
"command": "{{currentpage.name}}"
}
```
*JSON-RPC*
```json
{
"method": "{{currentpage.name}}"
}
```
*コマンドライン*
```sh
#Syntax: {{currentpage.name}}
rippled {{currentpage.name}}
```
<!-- MULTICODE_BLOCK_END -->
この要求にはパラメーターは含まれません。
### 応答フォーマット
処理が成功した応答の例:
<!-- MULTICODE_BLOCK_START -->
*WebSocket*
```json
{
"id": "peer_reservations_list_example_1",
"result": {
"reservations": [
{
"description": "Ripple s1 server 'WOOL'",
"node": "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99"
},
{
"node": "n9MZRo92mzYjjsa5XcqnPC7GFYAnENo9VfJzKmpcS9EFZvw5fgwz"
}
]
},
"status": "success",
"type": "response"
}
```
*JSON-RPC*
```json
{
"result" : {
"reservations" : [
{
"description" : "Ripple s1 server 'WOOL'",
"node" : "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99"
},
{
"node" : "n9MZRo92mzYjjsa5XcqnPC7GFYAnENo9VfJzKmpcS9EFZvw5fgwz"
}
],
"status" : "success"
}
}
```
*コマンドライン*
```json
Loading: "/etc/rippled.cfg"
2019-Dec-27 21:56:07.253260422 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"reservations" : [
{
"description" : "Ripple s1 server 'WOOL'",
"node" : "n9Jt8awsPzWLjBCNKVEEDQnw4bQEPjezfcQ4gttD1UzbLT1FoG99"
},
{
"node" : "n9MZRo92mzYjjsa5XcqnPC7GFYAnENo9VfJzKmpcS9EFZvw5fgwz"
}
],
"status" : "success"
}
}
```
<!-- MULTICODE_BLOCK_END -->
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 |
|:---------------|:------|:----------------------------------------------------|
| `reservations` | 配列 | 既存の[ピアリザベーション][]のリスト。各メンバーはピアリザベーションオブジェクトです。詳細は以下のとおりです。 |
#### ピアリザベーションオブジェクト
`reservations`配列の各メンバーは、1つの[ピアリザベーション][]を表すJSONオブジェクトです。このオブジェクトのフィールドを次に示します。
{% include '_snippets/peer_reservation_object.md' %}
<!--_ -->
### 考えられるエラー
- いずれかの[一般的なエラータイプ][]。
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -6,12 +6,12 @@ XRP Ledgerにより、さまざまなタイプの値をエンコードする前
以下の表に、XRP Ledgerで使用されるすべてのエンコードを示します。 以下の表に、XRP Ledgerで使用されるすべてのエンコードを示します。
| データタイプ | 開始文字 | タイププレフィクス | コンテンツのサイズ¹ | 最大文字数 | | データタイプ | 開始文字 | タイププレフィクス | コンテンツのサイズ¹ | 最大文字数 |
|:-----------------------------|:------------|:---------------|:--------------|:--| |:-----------------------------------------|:------------|:------------|:--------------|:--|
| [アカウント][]アドレス | r | `0x00` | 20バイト | 35 | | [アカウント][]アドレス | r | `0x00` | 20バイト | 35 |
| アカウントの公開鍵 | a | `0x23` | 33バイト | 53 | | アカウントの公開鍵 | a | `0x23` | 33バイト | 53 |
| シード値(シークレットキー) | s | `0x21` | 16バイト | 29 | | シード値(シークレットキー) | s | `0x21` | 16バイト | 29 |
| 検証公開鍵 | n | `0x1C` | 33バイト | 53 | | 検証公開鍵またはノード公開鍵 | n | `0x1C` | 33バイト | 53 |
¹ コンテンツのサイズでは1バイトのタイププレフィクスは除外されます。 ¹ コンテンツのサイズでは1バイトのタイププレフィクスは除外されます。
@@ -21,8 +21,8 @@ XRP Ledgerにより、さまざまなタイプの値をエンコードする前
- [アドレスのエンコード](accounts.html#アドレスのエンコード) - アドレスのエンコードについての詳細な情報 - [アドレスのエンコード](accounts.html#アドレスのエンコード) - アドレスのエンコードについての詳細な情報
- [暗号鍵](cryptographic-keys.html) - XRP Ledgerの暗号鍵のタイプとその使用法 - [暗号鍵](cryptographic-keys.html) - XRP Ledgerの暗号鍵のタイプとその使用法
- [wallet_proposeリファレンス][wallet_propose method] - アカウントキーを生成するためのAPIメソッド - [wallet_proposeリファレンス][wallet_proposeメソッド] - アカウントキーを生成するためのAPIメソッド
- [validation_createリファレンス][validation_create method] - バリデータキーを生成するためのAPIメソッド - [validation_createリファレンス][validation_createメソッド] - バリデータキーを生成するためのAPIメソッド
<!--{# common link defs #}--> <!--{# common link defs #}-->

View File

@@ -13,17 +13,17 @@
``` ```
{ {
"id": 3, "id": 3,
"status": "error", "status": "error",
"type": "response", "type": "response",
"error": "ledgerIndexMalformed", "error": "ledgerIndexMalformed",
"request": { "request": {
"account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"command": "account_info", "command": "account_info",
"id": 3, "id": 3,
"ledger_index": "-", "ledger_index": "-",
"strict": true "strict": true
} }
} }
``` ```
@@ -32,16 +32,16 @@
``` ```
HTTP Status: 200 OK HTTP Status: 200 OK
{ {
"result": { "result": {
"error": "ledgerIndexMalformed", "error": "ledgerIndexMalformed",
"request": { "request": {
"account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"command": "account_info", "command": "account_info",
"ledger_index": "-", "ledger_index": "-",
"strict": true "strict": true
}, },
"status": "error" "status": "error"
} }
} }
``` ```
@@ -49,16 +49,16 @@ HTTP Status: 200 OK
``` ```
{ {
"result": { "result": {
"error": "ledgerIndexMalformed", "error": "ledgerIndexMalformed",
"request": { "request": {
"account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"command": "account_info", "command": "account_info",
"ledger_index": "-", "ledger_index": "-",
"strict": true "strict": true
}, },
"status": "error" "status": "error"
} }
} }
``` ```
@@ -67,13 +67,13 @@ HTTP Status: 200 OK
## WebSocketフォーマット ## WebSocketフォーマット
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:----------|:---------|:------------------------------------------------------| |:----------|:---------|:------------------------------------------------------|
| `id` | (場合により異なる) | この応答の要求元となったWeb Socket要求に指定されていたID | | `id` | (場合により異なる) | この応答の要求元となったWeb Socket要求に指定されていたID |
| `status` | 文字列 | `"error"` : 要求が原因でエラーが発生した場合 | | `status` | 文字列 | `"error"`: 要求が原因でエラーが発生した場合 |
| `type` | 文字列 | 通常は`"response"`。これは、コマンドに対し正常に応答したことを示します。 | | `type` | 文字列 | 通常は`"response"`。これは、コマンドに対し正常に応答したことを示します。 |
| `error` | 文字列 | 発生したエラータイプの一意のコード。 | | `error` | 文字列 | 発生したエラータイプの一意のコード。 |
| `request` | オブジェクト | このエラーが発生した要求のコピーJSONフォーマット。**注意:** 要求にアカウントの機密情報が含まれている場合、ここにコピーされます。 | | `request` | オブジェクト | このエラーが発生した要求のコピーJSONフォーマット。**注意:** 要求にアカウントの機密情報が含まれている場合、ここにコピーされます。 |
## JSON-RPCフォーマット ## JSON-RPCフォーマット
@@ -87,11 +87,11 @@ Null method
HTTPステータスコード200 OKが返されるその他のエラーの場合、応答はJSONフォーマットで、以下のフィールドが使用されます。 HTTPステータスコード200 OKが返されるその他のエラーの場合、応答はJSONフォーマットで、以下のフィールドが使用されます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-----------------|:-------|:-------------------------------------------------| |:-----------------|:-------|:-------------------------------------------------|
| `result` | オブジェクト | クエリーに対する応答が含まれているオブジェクト | | `result` | オブジェクト | クエリーに対する応答が含まれているオブジェクト |
| `result.error` | 文字列 | 発生したエラータイプの一意のコード。 | | `result.error` | 文字列 | 発生したエラータイプの一意のコード。 |
| `result.status` | 文字列 | `"error"` : 要求が原因でエラーが発生した場合 | | `result.status` | 文字列 | `"error"`: 要求が原因でエラーが発生した場合 |
| `result.request` | オブジェクト | このエラーが発生した要求のコピーJSONフォーマット。**注意:** 要求にアカウントの機密情報が含まれている場合、ここにコピーされます。**注記:** 発行される要求にかかわらず、要求はWebSocketフォーマットに再設定されます。 | | `result.request` | オブジェクト | このエラーが発生した要求のコピーJSONフォーマット。**注意:** 要求にアカウントの機密情報が含まれている場合、ここにコピーされます。**注記:** 発行される要求にかかわらず、要求はWebSocketフォーマットに再設定されます。 |
@@ -101,11 +101,12 @@ HTTPステータスコード200 OKが返されるその他のエラーの場合
* `unknownCmd` - 要求に、`rippled`サーバーが認識する[コマンド](rippled-api.html)が含まれていません。 * `unknownCmd` - 要求に、`rippled`サーバーが認識する[コマンド](rippled-api.html)が含まれていません。
* `jsonInvalid` -WebSocketのみ要求は適切なJSONオブジェクトではありません。 * `jsonInvalid` -WebSocketのみ要求は適切なJSONオブジェクトではありません。
* この場合JSON-RPCは、代わりに400 Bad Request HTTPエラーを返します。 * この場合JSON-RPCは、代わりに400 Bad Request HTTPエラーを返します。
* `missingCommand` -WebSocketのみ要求に`command`フィールドが指定されていませんでした。 * `missingCommand` -WebSocketのみ要求に`command`フィールドが指定されていませんでした。
* この場合JSON-RPCは、代わりに400 Bad Request HTTPエラーを返します。 * この場合JSON-RPCは、代わりに400 Bad Request HTTPエラーを返します。
* `tooBusy` -サーバーの負荷が高すぎるため、現在このコマンドを実行できません。管理者として接続している場合は、通常このエラーが返されることはありません。 * `tooBusy` - サーバーの負荷が高すぎるため、現在このコマンドを実行できません。管理者として接続している場合は、通常このエラーが返されることはありません。
* `noNetwork` - サーバーとXRP Ledgerピアツーピアネットワークのその他の部分との接続で問題が発生していますサーバーがスタンドアロンモードで実行されていません * `noNetwork` - サーバーとXRP Ledgerピアツーピアネットワークのその他の部分との接続で問題が発生していますサーバーがスタンドアロンモードで実行されていません
* `noCurrent` - 高い負荷、ネットワークの問題、バリデータ障害、誤った構成、またはその他の問題が原因で、サーバーが現行のレジャーを認識できません。 * `noCurrent` - 高い負荷、ネットワークの問題、バリデータ障害、誤った構成、またはその他の問題が原因で、サーバーが現行のレジャーを認識できません。
* `noClosed` - サーバーに閉鎖済みレジャーがありません。通常、このエラーは起動が完了していないことが原因で発生します。 * `noClosed` - サーバーに決済済みレジャーがありません。通常、このエラーは起動が完了していないことが原因で発生します。
* `wsTextRequired` -WebSocketのみ要求の[opcode](https://tools.ietf.org/html/rfc6455#section-5.2)がテキストではありません。 * `wsTextRequired` -WebSocketのみ要求の[opcode](https://tools.ietf.org/html/rfc6455#section-5.2)がテキストではありません。
* `amendmentBlocked` - サーバーの状態が[Amendment blocked](amendments.html#amendment-blocked)であるため、XRP Ledgerネットワークとの同期を維持するために最新バージョンに更新する必要があります。

View File

@@ -1,15 +1,15 @@
# シリアル化フォーマット # シリアル化フォーマット
[[ソース]<br>](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/impl/STObject.cpp#L696-L718 "Source") [[ソース]](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/impl/STObject.cpp#L696-L718 "Source")
このページでは、XRP Ledgerのトランザクションとその他のデータの正規バイナリフォーマットについて説明します。このバイナリフォーマットは、トランザクションの内容のデジタル署名を作成および検証するために必要であり、また他の用途にも使用されます。通常、[rippled API](rippled-api.html)はJSONを使用してクライアントアプリケーションと通信します。ただしJSONは、同じデータをさまざまな同等の方法で表現できるため、デジタル署名を付与するトランザクションをシリアル化するのに適したフォーマットではありません。 このページでは、XRP Ledgerのトランザクションとその他のデータの正規バイナリフォーマットについて説明します。このバイナリフォーマットは、トランザクションの内容のデジタル署名を作成および検証するために必要であり、[サーバー間のピアツーピア通信](peer-protocol.html)を含む他の用途にも使用されます。通常、[`rippled` API](rippled-api.html)はJSONを使用してクライアントアプリケーションと通信します。ただしJSONは、同じデータをさまざまな同等の方法で表現できるため、デジタル署名を付与するトランザクションをシリアル化するのに適したフォーマットではありません。
トランザクションをJSONまたはその他の表現から正規バイナリフォーマットへシリアル化するプロセスのステップを、以下にまとめます。 トランザクションをJSONまたはその他の表現から正規バイナリフォーマットへシリアル化するプロセスのステップを、以下にまとめます。
1. すべての必須フィールドが指定されていること(必須の[「自動入力可能」フィールド](transaction-common-fields.html#自動入力可能なフィールド)を含む)を確認します。 1. すべての必須フィールドが指定されていること(必須の[「自動入力可能」フィールド](transaction-common-fields.html#自動入力可能なフィールド)を含む)を確認します。
[トランザクションフォーマットリファレンス](transaction-formats.html)に、XRP Ledgerトランザクションの必須フィールドと省略可能なフィールドが定義されています。 [トランザクションフォーマットリファレンス](transaction-formats.html)に、XRP Ledgerトランザクションの必須フィールドと省略可能なフィールドが定義されています。
**注記:**`SigningPubKey`もこのステップで指定する必要があります。署名の際に、署名用に指定されたシークレットキーからこのキーを生成できます。 **注記:** `SigningPubKey`もこのステップで指定する必要があります。署名の際に、署名用に指定された秘密鍵から[このキーを導出](cryptographic-keys.html#鍵導出)できます。
2. 各フィールドのデータを[「内部」バイナリフォーマット](#内部フォーマット)に変換します。 2. 各フィールドのデータを[「内部」バイナリフォーマット](#内部フォーマット)に変換します。
@@ -43,8 +43,8 @@
ここで説明するシリアル化プロセスは複数の場所にさまざまなプログラミング言語で実装されています。 ここで説明するシリアル化プロセスは複数の場所にさまざまなプログラミング言語で実装されています。
- C++: [`rippled` コードベース](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/impl/STObject.cpp) - C++: [`rippled`コードベース](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/impl/STObject.cpp)
- JavaScript: [`ripple-binary-codec`](https://github.com/ripple/ripple-binary-codec/) パッケージ - JavaScript: [`ripple-binary-codec`](https://github.com/ripple/ripple-binary-codec/)パッケージ
- Python 3: [このリポジトリのコードサンプルセクション]({{target.github_forkurl}}/blob/{{target.github_branch}}/content/_code-samples/tx-serialization/serialize.py) - Python 3: [このリポジトリのコードサンプルセクション]({{target.github_forkurl}}/blob/{{target.github_branch}}/content/_code-samples/tx-serialization/serialize.py)
これらのすべての実装には、一般利用が可能なオープンソースライセンスが提供されているので、学習のためにドキュメントと合わせて使用するだけでなく、必要に応じてコードをインポート、使用、または変更することができます。 これらのすべての実装には、一般利用が可能なオープンソースライセンスが提供されているので、学習のためにドキュメントと合わせて使用するだけでなく、必要に応じてコードをインポート、使用、または変更することができます。
@@ -55,7 +55,7 @@
各フィールドには「内部」バイナリフォーマットがあります。このフォーマットは、`rippled`ソースコードで署名時に(およびその他のほとんどの場合に)そのフィールドを表示するのに使用されます。すべてのフィールドの内部フォーマットは、[`SField.cpp`](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/SField.cpp)のソースコードに定義されています。(このフィールドには、トランザクションフィールド以外のフィールドも含まれています。)[トランザクションフォーマットリファレンス](transaction-formats.html)にも、すべてのトランザクションフィールドの内部フォーマットが記載されています。 各フィールドには「内部」バイナリフォーマットがあります。このフォーマットは、`rippled`ソースコードで署名時に(およびその他のほとんどの場合に)そのフィールドを表示するのに使用されます。すべてのフィールドの内部フォーマットは、[`SField.cpp`](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/SField.cpp)のソースコードに定義されています。(このフィールドには、トランザクションフィールド以外のフィールドも含まれています。)[トランザクションフォーマットリファレンス](transaction-formats.html)にも、すべてのトランザクションフィールドの内部フォーマットが記載されています。
たとえば`Flags` [共通トランザクションフィールド](transaction-common-fields.html)はUInt3232ビット符号なし整数になります。 たとえば`Flags`[共通トランザクションフィールド](transaction-common-fields.html)はUInt3232ビット符号なし整数になります。
### 定義ファイル ### 定義ファイル
@@ -65,43 +65,43 @@
この定義ファイルの最上位フィールドの定義を以下の表に示します。 この定義ファイルの最上位フィールドの定義を以下の表に示します。
| フィールド | 内容 | | フィールド | 内容 |
|:----------------------|:-----------------------------------------------------| |:----------------------|:-----------------------------------------------------|
| `TYPES` | フィールドIDの作成と正規順序でのフィールドのソートのためのデータタイプからその[「タイプコード」](#タイプコード)へのマップ。1未満のコードは実際のデータには含まれません。10000を超えるコードは、他のオブジェクト内部ではシリアル化できない「トランザクション」などの特殊な「上位」オブジェクトタイプを表します。各タイプのシリアル化方法についての詳細は、[タイプリスト](#タイプリスト)を参照してください。 | | `TYPES` | フィールドIDの作成と正規順序でのフィールドのソートのためのデータタイプからその[「タイプコード」](#タイプコード)へのマップ。1未満のコードは実際のデータには含まれません。10000を超えるコードは、他のオブジェクト内部ではシリアル化できない「トランザクション」などの特殊な「上位」オブジェクトタイプを表します。各タイプのシリアル化方法についての詳細は、[タイプリスト](#タイプリスト)を参照してください。 |
| `LEDGER_ENTRY_TYPES` | [レジャーオブジェクト](ledger-object-types.html)から対応するデータタイプへのマップ。これはレジャー状態データと、処理されたトランザクションの[メタデータ](transaction-metadata.html)の「affected nodes」セクションに含まれます。 | | `LEDGER_ENTRY_TYPES` | [レジャーオブジェクト](ledger-object-types.html)から対応するデータタイプへのマップ。これはレジャー状態データと、処理されたトランザクションの[メタデータ](transaction-metadata.html)の「affected nodes」セクションに含まれます。 |
| `FIELDS` | トランザクション、レジャーオブジェクト、あるいはその他のデータに含まれる可能性があるすべてのフィールドを表すタプルからなるソート済み配列。各タプルの1番目のメンバーはフィールドの文字列名であり、2番目のメンバーはそのフィールドのプロパティーが含まれているオブジェクトです。これらのフィールドの定義については、以下の「フィールドプロパティー」の表を参照してください。 | | `FIELDS` | トランザクション、レジャーオブジェクト、あるいはその他のデータに含まれる可能性があるすべてのフィールドを表すタプルからなるソート済み配列。各タプルの1番目のメンバーはフィールドの文字列名であり、2番目のメンバーはそのフィールドのプロパティーが含まれているオブジェクトです。これらのフィールドの定義については、以下の「フィールドプロパティー」の表を参照してください。 |
| `TRANSACTION_RESULTS` | [トランザクション結果コード](transaction-results.html)から対応する数値へのマップ。レジャーに含まれない結果タイプにはマイナスの値が含まれています。`tesSUCCESS`に数値0が含まれています。[`tec`クラスコード](tec-codes.html)は、レジャーに含まれている失敗を示しています。 | | `TRANSACTION_RESULTS` | [トランザクション結果コード](transaction-results.html)から対応する数値へのマップ。レジャーに含まれない結果タイプにはマイナスの値が含まれています。`tesSUCCESS`に数値0が含まれています。[`tec`クラスコード](tec-codes.html)は、レジャーに含まれている失敗を示しています。 |
| `TRANSACTION_TYPES` | [トランザクションのタイプ](transaction-types.html)から対応する数値へのマップ。 | | `TRANSACTION_TYPES` | [トランザクションのタイプ](transaction-types.html)から対応する数値へのマップ。 |
署名と送信のためにトランザクションをシリアル化するという目的から、`FIELDS``TYPES`、および`TRANSACTION_TYPES`フィールドが必要です。 署名と送信のためにトランザクションをシリアル化するという目的から、`FIELDS``TYPES`、および`TRANSACTION_TYPES`フィールドが必要です。
`FIELDS`配列のフィールド定義オブジェクトには以下のフィールドが含まれています。 `FIELDS`配列のフィールド定義オブジェクトには以下のフィールドが含まれています。
| フィールド | 型 | 内容 | | フィールド | 型 | 内容 |
|:-----------------|:--------|:------------------------------------------------| |:-----------------|:--------|:------------------------------------------------|
| `nth` | 数値 | このフィールドの[フィールドコード](#フィールドコード)。このコードは、[フィールドID](#フィールドid)の作成時と、同一データタイプの他のフィールドとのソート時に使用されます。 | | `nth` | 数値 | このフィールドの[フィールドコード](#フィールドコード)。このコードは、[フィールドID](#フィールドid)の作成時と、同一データタイプの他のフィールドとのソート時に使用されます。 |
| `isVLEncoded` | ブール値 | `true`の場合、このフィールドには[長さプレフィクスが付加されています](#長さプレフィクスを付加する)。 | | `isVLEncoded` | ブール値 | `true`の場合、このフィールドには[長さプレフィクスが付加されています](#長さプレフィクスを付加する)。 |
| `isSerialized` | ブール値 | `true`の場合、このフィールドはシリアル化バイナリデータにエンコードされる必要があります。このフィールドが`false`の場合、一般にフィールドは保管されず、オンデマンドで再作成されます。 | | `isSerialized` | ブール値 | `true`の場合、このフィールドはシリアル化バイナリデータにエンコードされる必要があります。このフィールドが`false`の場合、一般にフィールドは保管されず、オンデマンドで再作成されます。 |
| `isSigningField` | ブール値 | `true`の場合、署名のためにトランザクションを準備する際にこのフィールドをシリアル化する必要があります。`false`の場合、このフィールドは署名対象データから省略する必要があります。(これはトランザクションに含まれていない可能性があります。) | | `isSigningField` | ブール値 | `true`の場合、署名のためにトランザクションを準備する際にこのフィールドをシリアル化する必要があります。`false`の場合、このフィールドは署名対象データから省略する必要があります。(これはトランザクションに含まれていない可能性があります。) |
| `type` | 文字列 | このフィールドの内部データタイプ。これは、このフィールドの[タイプコード](#タイプコード)を示す`TYPES`マップのキーにマップします。 | | `type` | 文字列 | このフィールドの内部データタイプ。これは、このフィールドの[タイプコード](#タイプコード)を示す`TYPES`マップのキーにマップします。 |
### フィールドID ### フィールドID
[[ソース - エンコード]](https://github.com/seelabs/rippled/blob/cecc0ad75849a1d50cc573188ad301ca65519a5b/src/ripple/protocol/impl/Serializer.cpp#L117-L148 "Source") [[ソース - エンコード]](https://github.com/seelabs/rippled/blob/cecc0ad75849a1d50cc573188ad301ca65519a5b/src/ripple/protocol/impl/Serializer.cpp#L117-L148 "Source")
[[ソース - デコード]](https://github.com/seelabs/rippled/blob/cecc0ad75849a1d50cc573188ad301ca65519a5b/src/ripple/protocol/impl/Serializer.cpp#L484-L509 "Source") [[ソース - デコード]](https://github.com/seelabs/rippled/blob/cecc0ad75849a1d50cc573188ad301ca65519a5b/src/ripple/protocol/impl/Serializer.cpp#L484-L509 "Source")
フィールドのタイプコードとフィールドコードを結合すると、フィールドの一意のIDになります。このIDは、最終的なシリアル化ブロブでこのフィールドの前に付加されます。フィールドIDのサイズは、タイプコードとその結合対象のフィールドコードに応じて13バイトとなります。以下の表を参照してください。 フィールドのタイプコードとフィールドコードを結合すると、フィールドの一意のIDになります。このIDは、最終的なシリアル化ブロブでこのフィールドの前に付加されます。フィールドIDのサイズは、タイプコードとその結合対象のフィールドコードに応じて13バイトとなります。以下の表を参照してください。
| | タイプコード < 16 | タイプコード >= 16 | | | タイプコード < 16 | タイプコード >= 16 |
|:-----------------|:------------------------------------------------------------------------------|:--| |:-----------------|:------------------------------------------------------------------------------|:--|
| **フィールドコード < 16** | ![1バイト: 上位4ビットがタイプを定義し、下位4ビットがフィールドを定義します。](img/field-id-common-type-common-field.ja.png) | ![2バイト: 1番目のバイトの下位4ビットがフィールドを定義し、次のバイトがタイプを定義します。](img/field-id-uncommon-type-common-field.ja.png) | | **フィールドコード < 16** | ![1バイト: 上位4ビットがタイプを定義し、下位4ビットがフィールドを定義します。](img/field-id-common-type-common-field.png) | ![2バイト: 1番目のバイトの下位4ビットがフィールドを定義し、次のバイトがタイプを定義します。](img/field-id-uncommon-type-common-field.png) |
| **フィールドコード >= 16** | ![2バイト: 1番目のバイトの上位4ビットがタイプを定義し、1番目のバイトの下位4ビットは0になります。次のバイトがフィールドを定義します。](img/field-id-common-type-uncommon-field.ja.png) | ![3バイト: 1番目のバイトは0x00、2番目のバイトはタイプを定義します。3番目のバイトはフィールドを定義します。](img/field-id-uncommon-type-uncommon-field.ja.png) | | **フィールドコード >= 16** | ![2バイト: 1番目のバイトの上位4ビットがタイプを定義し、1番目のバイトの下位4ビットは0になります。次のバイトがフィールドを定義します。](img/field-id-common-type-uncommon-field.png )| ![3バイト: 1番目のバイトは0x00、2番目のバイトはタイプを定義します。3番目のバイトはフィールドを定義します。](img/field-id-uncommon-type-uncommon-field.png) |
デコードの際には、**1番目のバイト**のどのビットがゼロであるかによって、フィールドIDのバイト数を把握できます。これは、上記の表の例に対応しています。 デコードの際には、**1番目のバイト**のどのビットがゼロであるかによって、フィールドIDのバイト数を把握できます。これは、上記の表の例に対応しています。
| | 上位4ビットがゼロ以外である | 上位4ビットがゼロである | | | 上位4ビットがゼロ以外である | 上位4ビットがゼロである |
|:-----------------|:------------------------------------------------------------------------------|:--| |:-----------------|:------------------------------------------------------------------------------|:--|
| **下位4ビットがゼロ以外である** | 1バイト: 上位4ビットがタイプを定義し、下位4ビットがフィールドを定義します。 | 2バイト: 1番目のバイトの下位4ビットがフィールドを定義し、次のバイトがタイプを定義します。 | | **下位4ビットがゼロ以外である** | 1バイト: 上位4ビットがタイプを定義し、下位4ビットがフィールドを定義します。 | 2バイト: 1番目のバイトの下位4ビットがフィールドを定義し、次のバイトがタイプを定義します。 |
| **下位4ビットがゼロである** | 2バイト: 1番目のバイトの上位4ビットがタイプを定義し、1番目のバイトの下位4ビットは0になります。次のバイトがフィールドを定義します。 | 3バイト: 1番目のバイトは0x00、2番目のバイトはタイプを定義します。3番目のバイトはフィールドを定義します。 | | **下位4ビットがゼロである** | 2バイト: 1番目のバイトの上位4ビットがタイプを定義し、1番目のバイトの下位4ビットは0になります。次のバイトがフィールドを定義します。 | 3バイト: 1番目のバイトは0x00、2番目のバイトはタイプを定義します。3番目のバイトはフィールドを定義します。 |
**注意:** フィールドIDは、フィールドのソートに使用される2つの要素で構成されますが、シリアル化されたフィールドID自体に基づいてソートを実行しないでください。これは、フィールドIDのバイト構造によってソート順序が変わるためです。 **注意:** フィールドIDは、フィールドのソートに使用される2つの要素で構成されますが、シリアル化されたフィールドID自体に基づいてソートを実行しないでください。これは、フィールドIDのバイト構造によってソート順序が変わるためです。
@@ -117,11 +117,11 @@
- フィールドに0192バイトのデータが含まれている場合、1番目のバイトは内容の長さを示し、長さバイトの直後にそのバイト数のデータが続きます。 - フィールドに0192バイトのデータが含まれている場合、1番目のバイトは内容の長さを示し、長さバイトの直後にそのバイト数のデータが続きます。
- フィールドに19312480バイトのデータが含まれている場合、最初の2バイトは以下の式で算出されるフィールドの長さを示します。 - フィールドに19312480バイトのデータが含まれている場合、最初の2バイトは以下の式で算出されるフィールドの長さを示します。
193 + ((byte1 - 193) * 256) + byte2 193 + ((byte1 - 193) * 256) + byte2
- フィールドに12481918744バイトのデータが含まれている場合、最初の3バイトは以下の式で算出されるフィールドの長さを示します。 - フィールドに12481918744バイトのデータが含まれている場合、最初の3バイトは以下の式で算出されるフィールドの長さを示します。
12481 + ((byte1 - 241) * 65536) + (byte2 * 256) + byte3 12481 + ((byte1 - 241) * 65536) + (byte2 * 256) + byte3
- 長さプレフィクスが付加されているフィールドに格納できる最大データは918744バイトです。 - 長さプレフィクスが付加されているフィールドに格納できる最大データは918744バイトです。
@@ -159,33 +159,33 @@
トランザクションの指示には、以下のタイプのフィールドを指定できます。 トランザクションの指示には、以下のタイプのフィールドを指定できます。
| タイプ名 | タイプコード | ビット長 | [長さプレフィクス付加されるか]? | 説明 | | タイプ名 | タイプコード | ビット長 | [長さプレフィクス付加する]? | 説明 |
|:--------------|:----------|:-----------|:-------------------|----------------| |:--------------|:----------|:-----------|:-------------------|----------------|
| [AccountID][] | 8 | 160 | はい | [アカウント](accounts.html)の一意のID。 | | [AccountID][] | 8 | 160 | はい | [アカウント](accounts.html)の一意のID。 |
| [Amount][] | 6 | 64または384 | いいえ | XRPまたは発行済み通貨の額。フィールドの長さは、XRPの場合は64ビット、発行済み通貨の場合は384ビット64+160+160です。 | | [Amount][] | 6 | 64または384 | いいえ | XRPまたは発行済み通貨の額。フィールドの長さは、XRPの場合は64ビット、発行済み通貨の場合は384ビット64+160+160です。 |
| [Blob][] | 7 | 可変 | はい | 任意のバイナリデータ。このようなフィールドの中で重要なフィールドとして、`TxnSignature`(トランザクションを承認する署名)があります。 | | [Blob][] | 7 | 可変 | はい | 任意のバイナリデータ。このようなフィールドの中で重要なフィールドとして、`TxnSignature`(トランザクションを承認する署名)があります。 |
| [Hash128][] | 4 | 128 | いいえ | 128ビットの任意のバイナリ値。該当する唯一のフィールドは`EmailHash`です。これは、[Gravatar](https://www.gravatar.com/)を取得する目的でアカウント所有者のメールのMD-5ハッシュを保管するフィールドです。 | | [Hash128][] | 4 | 128 | いいえ | 128ビットの任意のバイナリ値。該当する唯一のフィールドは`EmailHash`です。これは、[Gravatar](https://www.gravatar.com/)を取得する目的でアカウント所有者のメールのMD-5ハッシュを保管するフィールドです。 |
| [Hash160][] | 17 | 160 | いいえ | 160ビットの任意のバイナリ値。これにより通貨コードまたはイシュアーが定義されます。 | | [Hash160][] | 17 | 160 | いいえ | 160ビットの任意のバイナリ値。これにより通貨コードまたはイシュアーが定義されます。 |
| [Hash256][] | 5 | 256 | いいえ | 256ビットの任意のバイナリ値。これは通常、トランザクション、レジャーバージョン、またはレジャーデータオブジェクトの「SHA-512Half」ハッシュを表します。 | | [Hash256][] | 5 | 256 | いいえ | 256ビットの任意のバイナリ値。これは通常、トランザクション、レジャーバージョン、またはレジャーデータオブジェクトの「SHA-512Half」ハッシュを表します。 |
| [PathSet][] | 18 | 可変 | いいえ | [複数通貨間ペイメント](cross-currency-payments.html)の有効な[ペイメントパス](paths.html)のセット。 | | [PathSet][] | 18 | 可変 | いいえ | [複数通貨間ペイメント](cross-currency-payments.html)の有効な[ペイメントパス](paths.html)のセット。 |
| [STArray][] | 15 | 可変 | いいえ | 可変数のメンバーからなる配列。フィールドによってタイプが異なる場合があります。この例として、[memos](transaction-common-fields.html#memosフィールド)や[マルチ署名](multi-signing.html)で使用される署名者のリストがあります。 | | [STArray][] | 15 | 可変 | いいえ | 可変数のメンバーからなる配列。フィールドによってタイプが異なる場合があります。この例として、[memos](transaction-common-fields.html#memosフィールド)や[マルチ署名](multi-signing.html)で使用される署名者のリストがあります。 |
| [STObject][] | 14 | 可変 | いいえ | 1つ以上のネストされたフィールドを含むオブジェクト。 | | [STObject][] | 14 | 可変 | いいえ | 1つ以上のネストされたフィールドを含むオブジェクト。 |
| [UInt8][] | 16 | 8 | いいえ | 8ビットの符号なし整数。 | | [UInt8][] | 16 | 8 | いいえ | 8ビットの符号なし整数。 |
| [UInt16][] | 1 | 16 | いいえ | 16ビットの符号なし整数。`TransactionType`は、このタイプの特殊なフィールドで、特定の文字列から整数値へのマッピングを含みます。 | | [UInt16][] | 1 | 16 | いいえ | 16ビットの符号なし整数。`TransactionType`は、このタイプの特殊なフィールドで、特定の文字列から整数値へのマッピングを含みます。 |
| [UInt32][] | 2 | 32 | いいえ | 32ビットの符号なし整数。このタイプの例として、すべてのトランザクションの`Flags`フィールドと`Sequence`フィールドがあります。 | | [UInt32][] | 2 | 32 | いいえ | 32ビットの符号なし整数。このタイプの例として、すべてのトランザクションの`Flags`フィールドと`Sequence`フィールドがあります。 |
[長さプレフィクスを付加する]: #長さプレフィクスを付加する [長さプレフィクスを付加する]: #長さプレフィクスを付加する
上記のフィールドタイプの他に、[レジャーオブジェクト](ledger-object-types.html)や[トランザクションメタデータ](transaction-metadata.html)などのコンテキストでは以下のタイプが含まれることがあります。 上記のフィールドタイプの他に、[レジャーオブジェクト](ledger-object-types.html)や[トランザクションメタデータ](transaction-metadata.html)などのコンテキストでは以下のタイプが含まれることがあります。
| タイプ名 | タイプコード | [長さプレフィクスを付加する]? | 説明 | | タイプ名 | タイプコード | [長さプレフィクスを付加する]? | 説明 |
|:------------|:----------|:-------------------|:------------------------------| |:------------|:----------|:-------------------|:------------------------------|
| Transaction | 10001 | いいえ | [トランザクション](transaction-formats.html)全体を含む「上位」タイプ。 | | Transaction | 10001 | いいえ | [トランザクション](transac tion-formats.html)全体を含む「上位」タイプ。 |
| LedgerEntry | 10002 | いいえ | [レジャーオブジェクト](ledger-object-types.html)全体を含む「上位」タイプ。 | | LedgerEntry | 10002 | いいえ | [レジャーオブジェクト](ledger-object-types.html)全体を含む「上位」タイプ。 |
| Validation | 10003 | いいえ | ピアツーピア通信で[コンセンサスプロセス](consensus.html)の検証投票を表すために使用される「上位」タイプ。 | | Validation | 10003 | いいえ | ピアツーピア通信で[コンセンサスプロセス](consensus.html)の検証投票を表すために使用される「上位」タイプ。 |
| Metadata | 10004 | いいえ | [1つのトランザクションのメタデータ](transaction-metadata.html)を含む「上位」タイプ。 | | Metadata | 10004 | いいえ | [1つのトランザクションのメタデータ](transaction-metadata.html)を含む「上位」タイプ。 |
| [UInt64][] | 3 | いいえ | 64ビットの符号なし整数。このタイプはトランザクションの指示には含まれませんが、さまざまなレジャーオブジェクトでこのタイプのフィールドが使用されます。 | | [UInt64][] | 3 | いいえ | 64ビットの符号なし整数。このタイプはトランザクションの指示には含まれませんが、さまざまなレジャーオブジェクトでこのタイプのフィールドが使用されます。 |
| Vector256 | 19 | はい | このタイプはトランザクションの指示には含まれませんが、[Amendmentsレジャーオブジェクト](amendments-object.html)の`Amendments`フィールドでは、現在有効な[Amendment](amendments.html)を示すためにこのタイプが使用されます。 | | Vector256 | 19 | はい | このタイプはトランザクションの指示には含まれませんが、[Amendmentレジャーオブジェクト](amendments-object.html)の`Amendments`フィールドでは、現在有効な[Amendment](amendments.html)を示すためにこのタイプが使用されます。 |
### AccountIDフィールド ### AccountIDフィールド
@@ -202,22 +202,22 @@
「Amount」タイプは、通貨XRPまたは発行済み通貨の額を表す特殊なフィールドタイプです。このタイプは2つのサブタイプで構成されます。 「Amount」タイプは、通貨XRPまたは発行済み通貨の額を表す特殊なフィールドタイプです。このタイプは2つのサブタイプで構成されます。
- **XRP** - **XRP**
XRPは64ビット符号なし整数ビッグエンディアンオーダーとしてシリアル化されます。ただし、XRPであることを示すため最上位ビットが常に0であり、プラスの値であることを示す最上位から2番目のビットは1となります。XRPの最大額10<sup>17</sup> dropには57ビットが必要であるため、XRPのシリアル化フォーマットを計算するには、標準の64ビット符号なし整数をとり、`0x4000000000000000`のビットOR演算を行います。 XRPは64ビット符号なし整数ビッグエンディアンオーダーとしてシリアル化されます。ただし、XRPであることを示すため最上位ビットが常に0であり、プラスの値であることを示す最上位から2番目のビットは`1`となります。XRPの最大額10<sup>17</sup> dropには57ビットが必要であるため、XRPのシリアル化フォーマットを計算するには、標準の64ビット符号なし整数をとり、`0x4000000000000000`のビットOR演算を行います。
- **発行済み通貨** - **発行済み通貨**
発行済み通貨は以下の3つのセグメントで構成され、セグメントの順序は以下のとおりです。 発行済み通貨は以下の3つのセグメントで構成され、セグメントの順序は以下のとおりです。
1. [内部通貨フォーマット](currency-formats.html#発行済み通貨の計算)の額を示す64ビット。1番目のビットは、これがXRPではないことを示す`1`です。 1. [内部通貨フォーマット](currency-formats.html#発行済み通貨の計算)の額を示す64ビット。1番目のビットは、これがXRPではないことを示す`1`です。
2. [通貨コード][]を示す160ビット。標準APIでは、[標準通貨コードフォーマット](currency-formats.html#標準通貨コード)を使用して「USD」などの3文字のコードが160ビットのコードに変換されますが、160ビットのカスタムコードも使用できます。 2. [通貨コード](currency-formats.html#通貨コード)を示す160ビット。標準APIでは、[標準通貨コードフォーマット](currency-formats.html#標準通貨コードフォーマット)を使用して「USD」などの3文字のコードが160ビットのコードに変換されますが、160ビットのカスタムコードも使用できます。
3. イシュアーのアカウントIDを示す160ビット。関連項目: [アカウントアドレスエンコード](accounts.html#アドレスのエンコード)) 3. イシュアーのアカウントIDを示す160ビット。関連項目: [アカウントアドレスエンコード](accounts.html#アドレスのエンコード))
1番目のビットに基づいて2つのサブタイプのいずれに該当するかを確認できます。`0`の場合はXRP、`1`の場合は発行済み通貨です。 1番目のビットに基づいて2つのサブタイプのいずれに該当するかを確認できます。`0`の場合はXRP、`1`の場合は発行済み通貨です。
以下の図に、XRPの額と発行済み通貨の額のシリアル化フォーマットを示します。 以下の図に、XRPの額と発行済み通貨の額のシリアル化フォーマットを示します。
![「非XRP」ビット、符号ビット、および62ビットの精度で構成されるXRPの額。「非XRP」ビット、符号ビット、指数8ビット、仮数54ビット、通貨コード160ビット、イシュアー160ビットで構成される発行済み通貨の額。](img/serialization-amount.ja.png) ![「非XRP」ビット、符号ビット、および62ビットの精度で構成されるXRPの額。「非XRP」ビット、符号ビット、指数8ビット、仮数54ビット、通貨コード160ビット、イシュアー160ビットで構成される発行済み通貨の額。](img/serialization-amount.png)
### 配列フィールド ### 配列フィールド
@@ -231,7 +231,7 @@
以下の例は、配列のシリアル化フォーマットを示します(`SignerEntries`フィールド)。 以下の例は、配列のシリアル化フォーマットを示します(`SignerEntries`フィールド)。
![配列フィールドID、各配列要素のフィールドIDと内容、および「配列の終わり」を示すフィールドID](img/serialization-array.ja.png) ![配列フィールドID、各配列要素のフィールドIDと内容、および「配列の終わり」を示すフィールドID](img/serialization-array.png)
### ブロブフィールド ### ブロブフィールド
@@ -261,7 +261,7 @@ XRP LedgerのハッシュタイプにはHash128、Hash160、Hash256がありま
以下の例は、オブジェクトのシリアル化フォーマットを示します(`Memos`配列内の1つの`Memo`オブジェクト)。 以下の例は、オブジェクトのシリアル化フォーマットを示します(`Memos`配列内の1つの`Memo`オブジェクト)。
![オブジェクトフィールドID、各オブジェクトメンバーのオブジェクトIDと内容正規順序、および「オブジェクトの終わり」を示すフィールドID](img/serialization-object.ja.png) ![オブジェクトフィールドID、各オブジェクトメンバーのオブジェクトIDと内容正規順序、および「オブジェクトの終わり」を示すフィールドID](img/serialization-object.png)
### PathSetフィールド ### PathSetフィールド
@@ -271,18 +271,18 @@ XRP LedgerのハッシュタイプにはHash128、Hash160、Hash256がありま
PathSetは、**16**の個別パスとして順序どおりにシリアル化されます[[ソース]](https://github.com/ripple/rippled/blob/4cff94f7a4a05302bdf1a248515379da99c5bcd4/src/ripple/app/tx/impl/Payment.h#L35-L36 "Source")。それぞれの完全なパスの後には、パスの後に続く内容を示すバイトが配置されます。 PathSetは、**16**の個別パスとして順序どおりにシリアル化されます[[ソース]](https://github.com/ripple/rippled/blob/4cff94f7a4a05302bdf1a248515379da99c5bcd4/src/ripple/app/tx/impl/Payment.h#L35-L36 "Source")。それぞれの完全なパスの後には、パスの後に続く内容を示すバイトが配置されます。
- `0xff` は別のパスが続くことを示します。 - `0xff`は別のパスが続くことを示します。
- `0x00` はPathSetの終わりを示します。 - `0x00`はPathSetの終わりを示します。
各パスには**18**のパスステップがこの順序で含まれています[[ソース]](https://github.com/ripple/rippled/blob/4cff94f7a4a05302bdf1a248515379da99c5bcd4/src/ripple/app/tx/impl/Payment.h#L38-L39 "Source")。各ステップは**タイプ**を示すバイトで始まり、その後にパスステップを記述する1つ以上のフィールドが続きます。タイプは、ビット単位のフラグを使用してそのパスステップに含まれるフィールドを示します。たとえば値が`0x30`の場合、通貨とイシュアーの両方が変更されます。)複数のフィールドが含まれている場合、フィールドは常に特定の順序で配置されます。 各パスには**18**のパスステップがこの順序で含まれています[[ソース]](https://github.com/ripple/rippled/blob/4cff94f7a4a05302bdf1a248515379da99c5bcd4/src/ripple/app/tx/impl/Payment.h#L38-L39 "Source")。各ステップは**タイプ**を示すバイトで始まり、その後にパスステップを記述する1つ以上のフィールドが続きます。タイプは、ビット単位のフラグを使用してそのパスステップに含まれるフィールドを示します。たとえば値が`0x30`の場合、通貨とイシュアーの両方が変更されます。)複数のフィールドが含まれている場合、フィールドは常に特定の順序で配置されます。
以下の表に、有効なフィールドと、タイプバイトでフィールドを示すために設定されるビット単位のフラグを示します。 以下の表に、有効なフィールドと、タイプバイトでフィールドを示すために設定されるビット単位のフラグを示します。
| タイプフラグ | 含まれるフィールド | フィールドタイプ | ビットサイズ | 順序 | | タイプフラグ | 含まれるフィールド | フィールドタイプ | ビットサイズ | 順序 |
|:----------|:--------------|:------------------|:---------|:------| |:----------|:--------------|:------------------|:---------|:------|
| `0x01` | `account` | [AccountID][] | 160ビット | 1番目 | | `0x01` | `account` | [AccountID][] | 160ビット | 1番目 |
| `0x10` | `currency` | [通貨コード][] | 160ビット | 2番目 | | `0x10` | `currency` | [通貨コード][] | 160ビット | 2番目 |
| `0x20` | `issuer` | [AccountID][] | 160ビット | 3番目 | | `0x20` | `issuer` | [AccountID][] | 160ビット | 3番目 |
[通貨コード]: currency-formats.html#標準通貨コード [通貨コード]: currency-formats.html#標準通貨コード
@@ -294,7 +294,7 @@ PathSetは、**16**の個別パスとして順序どおりにシリアル化
以下の例は、PathSetのシリアル化フォーマットを示します。 以下の例は、PathSetのシリアル化フォーマットを示します。
![PathSetは複数のパスからなり、各パスの後に継続または終了を示すバイトが続きます。各パスは複数のパスステップからなり、各パスステップはタイプバイトと、タイプバイトに基づく1つ以上の160ビットフィールドで構成されます。](img/serialization-pathset.ja.png) ![PathSetは複数のパスからなり、各パスの後に継続または終了を示すバイトが続きます。各パスは複数のパスステップからなり、各パスステップはタイプバイトと、タイプバイトに基づく1つ以上の160ビットフィールドで構成されます。](img/serialization-pathset.png)
### UIntフィールド ### UIntフィールド

View File

@@ -1,20 +1,20 @@
# レジャーヘッダー # レジャーヘッダー
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/ledger/ReadView.h#L71 "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/ledger/ReadView.h#L71 "Source")
すべてのレジャーバージョンには、その内容を記述する一意のヘッダーが含まれています。[ledgerメソッド][]を使用してレジャーのヘッダー情報を検索できます。レジャーヘッダーの内容を以下に示します。 すべてのレジャーバージョンには、その内容を記述する一意のヘッダーが含まれています。[ledgerメソッド][]を使用してレジャーのヘッダー情報を検索できます。レジャーヘッダーの内容を以下に示します。
| フィールド | JSONの型 | [内部の型][] | 説明 | | フィールド | JSONの型 | [内部の型][] | 説明 |
|:-------------------------------|:----------|:------------------|:------------| |:-----------------------------|:----------|:------------------|:--------------|
| [`ledger_index`][レジャーインデックス] | 文字列 | UInt32 | このレジャーのシーケンス番号。APIメソッドの中には、この番号を引用符で囲んだ整数として表示するメソッドと、ネイティブJSON数値として表示するメソッドがあります。 | | `ledger_index` | 文字列 | UInt32 | レジャーの[レジャーインデックス][レジャーインデックス]。APIメソッドの中には、この番号を引用符で囲んだ整数として表示するメソッドと、ネイティブJSON数値として表示するメソッドがあります。 |
| `ledger_hash` | 文字列 | Hash256 | このレジャーバージョンの[SHA-512ハーフ][]。これは、このレジャーとそのすべての内容の一意のIDとして機能します。 | | `ledger_hash` | 文字列 | Hash256 | このレジャーバージョンの[SHA-512Half][]。これは、このレジャーとそのすべての内容の一意のIDとして機能します。 |
| `account_hash` | 文字列 | Hash256 | このレジャーの状態ツリー情報の[SHA-512ハーフ][]。 | | `account_hash` | 文字列 | Hash256 | このレジャーの状態ツリー情報の[SHA-512Half][]。 |
| `close_time` | 数値 | UInt32 | このレジャーが閉鎖されたおおよその時刻。Rippleエポック2000-01-01 00:00:00以降の経過秒数として示されます。この値は`close_time_resolution`に基づいて丸められるので、これ以降のレジャーに同じ値が含まれることがあります。 | | `close_time` | 数値 | UInt32 | このレジャーバージョンが閉鎖されたおおよその時刻。Rippleエポック2000-01-01 00:00:00以降の経過秒数として示されます。この値は`close_time_resolution`に基づいて丸められます。 |
| `closed` | ブール値 | bool | trueの場合、このレジャーバージョンはこれ以上新しいトランザクションを受け入れません。ただし、このレジャーバージョンが未検証の場合は、一連の異なるトランザクションが記録されている別のレジャーバージョンに置き換えられることがあります。 | | `closed` | ブール値 | ブール値 | `true`の場合、このレジャーバージョンはこれ以上新しいトランザクションを受け入れません。(ただし、このレジャーバージョンが未検証の場合は、一連の異なるトランザクションが記録されている別のレジャーバージョンに置き換えられることがあります。) |
| `parent_hash` | 文字列 | Hash256 | このレジャーを作成するために使用された直前のレジャーの`ledger_hash`値。直前のレジャーインデックスの異なるバージョンが存在している場合、これはレジャーの生成元を示します。 | | `parent_hash` | 文字列 | Hash256 | このバージョンの直前のレジャーバージョン`ledger_hash`値。直前のレジャーインデックスの異なるバージョンが存在している場合、これはレジャーの生成元を示します。 |
| `total_coins` | 文字列 | UInt64 | レジャーのアカウントが保有する[XRPのdrop数][XRPdrop単位]の合計。トランザクション手数料により消却されたXRPは除外されます。一部のアカウントは、そのキーを知っている人がいない「ブラックホール」アカウントであるため、流通している実際のXRPの量はこれよりも少なくなります。 | | `total_coins` | 文字列 | UInt64 | レジャーのアカウントが保有するXRPの[XRPdrop数][]の合計。トランザクション手数料により消却されたXRPは除外されます。一部のアカウントは、そのキーを知っている人がいない「ブラックホール」アカウントであるため、流通している実際のXRPの量はこれよりも少なくなります。 |
| `transaction_hash` | 文字列 | Hash256 | このレジャーに記録されているトランザクションの[SHA-512ハーフ][]。 | | `transaction_hash` | 文字列 | Hash256 | このレジャーに記録されているトランザクションの[SHA-512Half][]。 |
| `close_time_resolution` | 数値 | Uint8 | `close_time`を丸めるときの最大秒数を示す範囲 \[2,120\] 内の整数。 | | `close_time_resolution` | 数値 | Uint8 | `close_time`を丸めるときの最大秒数を示す範囲[2,120]内の整数。 |
| [`closeFlags`](#closeフラグ) | (省略) | UInt8 | このレジャーの閉鎖に関連するフラグのビットマップ。 | | [`closeFlags`](#closeフラグ) | (省略) | UInt8 | このレジャーの閉鎖に関連するフラグのビットマップ。 |
## レジャーインデックス ## レジャーインデックス

View File

@@ -1,5 +1,5 @@
# account_lines # account_lines
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountLines.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountLines.cpp "Source")
`account_lines`メソッドは、アカウントのトラストラインに関する情報XRP以外のあらゆる通貨の残高と資産などを返します。取得された情報はすべて、特定バージョンのレジャーに関連付けられています。 `account_lines`メソッドは、アカウントのトラストラインに関する情報XRP以外のあらゆる通貨の残高と資産などを返します。取得された情報はすべて、特定バージョンのレジャーに関連付けられています。
@@ -13,9 +13,9 @@
``` ```
{ {
"id": 1, "id": 1,
"command": "account_lines", "command": "account_lines",
"account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59" "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59"
} }
``` ```
@@ -23,29 +23,29 @@
``` ```
{ {
"method": "account_lines", "method": "account_lines",
"params": [ "params": [
{ {
"account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59" "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59"
} }
] ]
} }
``` ```
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
[試してみる>](websocket-api-tool.html#account_lines) [試してみる >](websocket-api-tool.html#account_lines)
要求には以下のパラメーターを指定できます。 要求には以下のパラメーターを指定できます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:---------------|:-------------------------------------------|:---------------| |:---------------|:-------------------------------------------|:---------------|
| `account` | 文字列 | アカウントの一意のIDであり、通常はアカウントの[アドレス][]です。 | | `account` | 文字列 | アカウントの一意のIDであり、通常はアカウントの[アドレス][]です。 |
| `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。[レジャーの指定][]を参照してください) | | `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。[レジャーの指定][]を参照してください) |
| `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーのシーケンス番号、またはレジャーを自動的に選択するためのショートカット文字列。([レジャーの指定][]を参照してください) | | `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーの[レジャーインデックス][]、またはレジャーを自動的に選択するためのショートカット文字列。([レジャーの指定][]を参照してください) |
| `peer` | 文字列 | _省略可_ 2番目のアカウントの[アドレス][]。指定されている場合は、2つのアカウントを結ぶトラストラインだけが出力されます。 | | `peer` | 文字列 | _省略可_ 2番目のアカウントの[アドレス][]。指定されている場合は、2つのアカウントを結ぶトラストラインだけが出力されます。 |
| `limit` | 整数 | (省略可、デフォルト値は可変)取得するトランザクションの数を制限します。サーバーはこの値に従う必要はありません。10以上400以下の範囲で値を指定する必要があります。[新規: rippled 0.26.4][] | | `limit` | 整数 | (省略可、デフォルト値は可変)取得するトラストラインの数を制限します。サーバーはこの値を受け入れる必要はありません。10以上400以下の範囲で値を指定する必要があります。[新規: rippled 0.26.4][] |
| `marker` | [マーカー][] | _省略可_ 以前にページネーションされた応答の値。その応答を停止した箇所からデータの取得を再開します。[新規: rippled 0.26.4][] | | `marker` | [マーカー][] | _省略可_ 以前にページネーションされた応答の値。その応答を停止した箇所からデータの取得を再開します。[新規: rippled 0.26.4][] |
以下のパラメーターは廃止予定であり、今後予告なしに削除される可能性があります。`ledger`および`peer_index` 以下のパラメーターは廃止予定であり、今後予告なしに削除される可能性があります。`ledger`および`peer_index`
@@ -59,44 +59,44 @@
``` ```
{ {
"id": 1, "id": 1,
"status": "success", "status": "success",
"type": "response", "type": "response",
"result": { "result": {
"account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"lines": [ "lines": [
{ {
"account": "r3vi7mWxru9rJCxETCyA1CHvzL96eZWx5z", "account": "r3vi7mWxru9rJCxETCyA1CHvzL96eZWx5z",
"balance": "0", "balance": "0",
"currency": "ASP", "currency": "ASP",
"limit": "0", "limit": "0",
"limit_peer": "10", "limit_peer": "10",
"quality_in": 0, "quality_in": 0,
"quality_out": 0 "quality_out": 0
}, },
{ {
"account": "r3vi7mWxru9rJCxETCyA1CHvzL96eZWx5z", "account": "r3vi7mWxru9rJCxETCyA1CHvzL96eZWx5z",
"balance": "0", "balance": "0",
"currency": "XAU", "currency": "XAU",
"limit": "0", "limit": "0",
"limit_peer": "0", "limit_peer": "0",
"no_ripple": true, "no_ripple": true,
"no_ripple_peer": true, "no_ripple_peer": true,
"quality_in": 0, "quality_in": 0,
"quality_out": 0 "quality_out": 0
}, },
{ {
"account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q", "account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"balance": "3.497605752725159", "balance": "3.497605752725159",
"currency": "USD", "currency": "USD",
"limit": "5", "limit": "5",
"limit_peer": "0", "limit_peer": "0",
"no_ripple": true, "no_ripple": true,
"quality_in": 0, "quality_in": 0,
"quality_out": 0 "quality_out": 0
} }
] ]
} }
} }
``` ```
@@ -105,79 +105,79 @@
``` ```
200 OK 200 OK
{ {
"result": { "result": {
"account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"lines": [ "lines": [
{ {
"account": "r3vi7mWxru9rJCxETCyA1CHvzL96eZWx5z", "account": "r3vi7mWxru9rJCxETCyA1CHvzL96eZWx5z",
"balance": "0", "balance": "0",
"currency": "ASP", "currency": "ASP",
"limit": "0", "limit": "0",
"limit_peer": "10", "limit_peer": "10",
"quality_in": 0, "quality_in": 0,
"quality_out": 0 "quality_out": 0
}, },
{ {
"account": "r3vi7mWxru9rJCxETCyA1CHvzL96eZWx5z", "account": "r3vi7mWxru9rJCxETCyA1CHvzL96eZWx5z",
"balance": "0", "balance": "0",
"currency": "XAU", "currency": "XAU",
"limit": "0", "limit": "0",
"limit_peer": "0", "limit_peer": "0",
"no_ripple": true, "no_ripple": true,
"no_ripple_peer": true, "no_ripple_peer": true,
"quality_in": 0, "quality_in": 0,
"quality_out": 0 "quality_out": 0
}, },
{ {
"account": "rs9M85karFkCRjvc6KMWn8Coigm9cbcgcx", "account": "rs9M85karFkCRjvc6KMWn8Coigm9cbcgcx",
"balance": "0", "balance": "0",
"currency": "015841551A748AD2C1F76FF6ECB0CCCD00000000", "currency": "015841551A748AD2C1F76FF6ECB0CCCD00000000",
"limit": "10.01037626125837", "limit": "10.01037626125837",
"limit_peer": "0", "limit_peer": "0",
"no_ripple": true, "no_ripple": true,
"quality_in": 0, "quality_in": 0,
"quality_out": 0 "quality_out": 0
} }
], ],
"status": "success" "status": "success"
} }
} }
``` ```
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
この応答は[標準フォーマット][]に従っており、正常に完了した場合には、アカウントのアドレスとトラストラインオブジェクトの配列が含まれています。具体的には、結果オブジェクトには以下のフィールドが含まれます。 この応答は[標準フォーマット][]に従っており、正常に完了した場合には、アカウントのアドレスとトラストラインオブジェクトの配列が含まれています。具体的には、結果オブジェクトには以下のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-----------------------|:-------------------------------------------|:-------| |:-----------------------|:---------------------------|:-----------------------|
| `account` | 文字列 | この要求に対応するアカウントの一意の[アドレス][]。トラストラインのための「パースペクティブアカウント」です。 | | `account` | 文字列 | この要求に対応するアカウントの一意の[アドレス][]。トラストラインのための「パースペクティブアカウント」です。 |
| `lines` | 配列 | トラストラインオブジェクトからなる配列。以下で説明します。トラストラインの数が多い場合は、一度に`limit`の数までのトラストラインが返されます。 | | `lines` | 配列 | トラストラインオブジェクトからなる配列。以下で説明します。トラストラインの数が多い場合は、一度に`limit`の数までのトラストラインが返されます。 |
| `ledger_current_index` | 整数 | `ledger_hash`または`ledger_index`が指定されている場合は省略)このデータの取得時に使用したレジャーバージョンのシーケンス番号。[新規: rippled 0.26.4-sp1][] | | `ledger_current_index` | 整数 - [レジャーインデックス][] | _`ledger_hash`または`ledger_index`が指定されている場合は省略)_ この情報の取得時に使用した、現行のオープンレジャーのレジャーインデックス。[新規: rippled 0.26.4-sp1][] |
| `ledger_index` | 整数 | `ledger_current_index`が代わりに指定されている場合は省略)要求に指定され、このデータの取得時に使用されたレジャーバージョンのシーケンス番号。[新規: rippled 0.26.4-sp1][] | | `ledger_index` | 整数 - [レジャーインデックス][] | _`ledger_current_index`が代わりに指定されている場合は省略)_ このデータの取得時に使用されたレジャーバージョンのレジャーインデックス。[新規: rippled 0.26.4-sp1][] |
| `ledger_hash` | 文字列 | (省略される場合があります)要求に指定され、このデータの取得時に使用されたレジャーバージョンの16進数ハッシュ。[新規: rippled 0.26.4-sp1][] | | `ledger_hash` | 文字列 - [Hash][] | _(省略される場合があります)_ このデータの取得時に使用されたレジャーバージョンの識別用ハッシュ。[新規: rippled 0.26.4-sp1][] |
| `marker` | [マーカー][] | 応答がページネーションされていることを示す、サーバーが定義した値。この値を次のコールに渡して、このコールで終わった箇所から再開します。この後に追加のページがない場合は省略されます。[新規: rippled 0.26.4][] | | `marker` | [マーカー][ | 応答がページネーションされていることを示す、サーバーが定義した値。この値を次のコールに渡して、このコールで終わった箇所から再開します。この後に追加のページがない場合は省略されます。[新規: rippled 0.26.4][] |
各トラストラインオブジェクトには以下のフィールドの組み合わせが含まれています。 各トラストラインオブジェクトには以下のフィールドの組み合わせが含まれています。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-----------------|:-----------------|:---------------------------------------| |:-----------------|:-----------------|:---------------------------------------|
| `account` | 文字列 | このトラストラインの相手側の一意の[アドレス][]。 | | `account` | 文字列 | このトラストラインの相手側の一意の[アドレス][]。 |
| `balance` | 文字列 | 現在このラインに対して保留されている残高(数値)の表示。残高がプラスの場合はパースペクティブアカウントがその額を保有しており、マイナスの場合はパースペクティブアカウントがその額を借用しています。 | | `balance` | 文字列 | 現在このラインに対して保留されている残高(数値)の表示。残高がプラスの場合はパースペクティブアカウントがその額を保有しており、マイナスの場合はパースペクティブアカウントがその額を借用しています。 |
| `currency` | 文字列 | このトラストラインが保有できる通貨を示す[通貨コード][]。 | | `currency` | 文字列 | このトラストラインが保有できる通貨を示す[通貨コード][]。 |
| `limit` | 文字列 | このアカウントがピアアカウントからの借用を希望する特定の通貨の上限額。 | | `limit` | 文字列 | このアカウントがピアアカウントからの借用を希望する特定の通貨の上限額。 |
| `limit_peer` | 文字列 | 相手側アカウントがパースペクティブアカウントからの借用を希望する特定の通貨の上限額。 | | `limit_peer` | 文字列 | 相手側アカウントがパースペクティブアカウントからの借用を希望する特定の通貨の上限額。 |
| `quality_in` | 符号なし整数 | このアカウントが、このトラストラインの入金時残高を評価する際のレートこの数値対10億単位の比率たとえば5億の場合は0.5:1の比率を表します。特殊なケースとして、0は1:1の比率として扱われます。 | | `quality_in` | 符号なし整数 | このアカウントが、このトラストラインの入金時残高を評価する際のレートこの数値対10億単位の比率たとえば5億の場合は0.5:1の比率を表します。特殊なケースとして、0は1:1の比率として扱われます。 |
| `quality_out` | 符号なし整数 | このアカウントが、このトラストラインの出金時残高を評価する際のレートこの数値対10億単位の比率たとえば5億の場合は0.5:1の比率を表します。特殊なケースとして、0は1:1の比率として扱われます。 | | `quality_out` | 符号なし整数 | このアカウントが、このトラストラインの出金時残高を評価する際のレートこの数値対10億単位の比率たとえば5億の場合は0.5:1の比率を表します。特殊なケースとして、0は1:1の比率として扱われます。 |
| `no_ripple` | ブール値 | (省略される場合があります)このアカウントでこのラインに対し[NoRippleフラグ](rippling.html)が有効な場合は、`true`。省略されている場合は、`false`と同じです。 | | `no_ripple` | ブール値 | (省略される場合があります)このアカウントでこのラインに対し[NoRippleフラグ](rippling.html)が有効な場合は、`true`。省略されている場合は、`false`と同じです。 |
| `no_ripple_peer` | ブール値 | (省略される場合があります)ピアアカウントでこのラインに対し[NoRippleフラグ](rippling.html)が有効な場合は`true`。省略されている場合は、`false`と同じです。 | | `no_ripple_peer` | ブール値 | (省略される場合があります)ピアアカウントでこのラインに対し[NoRippleフラグ](rippling.html)が有効な場合は`true`。省略されている場合は、`false`と同じです。 |
| `authorized` | ブール値 | (省略される場合があります)このアカウントが[このトラストラインを承認した](authorized-trust-lines.html)場合は、`true`。省略されている場合は、`false`と同じです。 | | `authorized` | ブール値 | (省略される場合があります)このアカウントが[このトラストラインを承認した](authorized-trust-lines.html)場合は、`true`。省略されている場合は、`false`と同じです。 |
| `peer_authorized`| ブール値 | (省略される場合があります)ピアアカウントが[このトラストラインを承認した](authorized-trust-lines.html)場合は`true`。省略されている場合は、`false`と同じです。 | | `peer_authorized` | ブール値 | (省略される場合があります)ピアアカウントが[このトラストラインを承認した](authorized-trust-lines.html)場合は`true`。省略されている場合は、`false`と同じです。 |
| `freeze` | ブール値 | (省略される場合があります)このアカウントがこのトラストラインを[凍結](freezes.html)した場合は`true`。省略されている場合は、`false`と同じです。 | | `freeze` | ブール値 | (省略される場合があります)このアカウントがこのトラストラインを[凍結](freezes.html)した場合は`true`。省略されている場合は、`false`と同じです。 |
| `freeze_peer` | ブール値 | (省略される場合があります)ピアアカウントがこのトラストラインを[凍結](freezes.html)した場合は、`true`。省略されている場合は、`false`と同じです。 | | `freeze_peer` | ブール値 | (省略される場合があります)ピアアカウントがこのトラストラインを[凍結](freezes.html)した場合は、`true`。省略されている場合は、`false`と同じです。 |
## 考えられるエラー ## 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
* `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。 * `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。
* `actNotFound` - 要求の`account`フィールドに指定されている[アドレス][]が、レジャーのアカウントに対応していません。 * `actNotFound` - 要求の`account`フィールドに指定されている[アドレス][]が、レジャーのアカウントに対応していません。
* `lgrNotFound` - `ledger_hash`または`ledger_index`で指定したレジャーが存在しないか、存在してはいるもののサーバーが保有していません。 * `lgrNotFound` - `ledger_hash`または`ledger_index`で指定したレジャーが存在しないか、存在してはいるもののサーバーが保有していません。

View File

@@ -1,7 +1,7 @@
# account_offers # account_offers
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountOffers.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountOffers.cpp "Source")
`account_offers`メソッドは、特定のアカウントから出されたオファーのうち、特定のレジャーバージョンで未処理であったオファーのリストを取得します。 `account_offers`メソッドは、特定の[アカウント](accounts.html)から出された[オファー](offers.html)のうち、特定の[レジャーバージョン](ledgers.html)で未処理であったオファーのリストを取得します。
## 要求フォーマット ## 要求フォーマット
@@ -13,9 +13,9 @@
``` ```
{ {
"id": 2, "id": 2,
"command": "account_offers", "command": "account_offers",
"account": "rpP2JgiMyTF5jR5hLG3xHCPi1knBb1v9cM" "account": "rpP2JgiMyTF5jR5hLG3xHCPi1knBb1v9cM"
} }
``` ```
@@ -23,12 +23,12 @@
``` ```
{ {
"method": "account_offers", "method": "account_offers",
"params": [ "params": [
{ {
"account": "rpP2JgiMyTF5jR5hLG3xHCPi1knBb1v9cM" "account": "rpP2JgiMyTF5jR5hLG3xHCPi1knBb1v9cM"
} }
] ]
} }
``` ```
@@ -41,18 +41,18 @@ rippled account_offers r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 current
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
[試してみる>](websocket-api-tool.html#account_offers) [試してみる >](websocket-api-tool.html#account_offers)
要求には以下のパラメーターを指定できます。 要求には以下のパラメーターを指定できます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:---------------|:-------------------------------------------|:---------------| |:---------------|:----------------------------|:------------------------------|
| `account` | 文字列 | アカウントの一意のIDであり、通常はアカウントの[アドレス][]です。 | | `account` | 文字列 | アカウントの一意のIDであり、通常はアカウントの[アドレス][]です。 |
| `ledger` | 符号なし整数または文字列 | 廃止予定、省略可使用するレジャーバージョンの一意のIDレジャーのシーケンス番号、ハッシュ、「validated」などのショートカットなど。 | | `ledger` | 符号なし整数または文字列 | _**廃止予定**、省略可)_ 使用するレジャーバージョンの一意のIDレジャーインデックス、ハッシュ、「validated」などのショートカットなど。 |
| `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンを識別する20バイトの16進文字列。 | | `ledger_hash` | 文字列 - [Hash][] | _省略可_ 使用するレジャーバージョンを識別する20バイトの16進文字列。 |
| `ledger_index` | [レジャーインデックス][] | (省略可、デフォルトでは`current`)使用するレジャーのシーケンス番号、またはレジャーを動的に選択するための「current」、「closed」、「validated」のいずれか。[レジャーの指定][]を参照してください) | | `ledger_index` | 数値 - [レジャーインデックス][] | (省略可、デフォルトでは`current`)使用するレジャーの[レジャーインデックス][]、またはレジャーを動的に選択するための「current」、「closed」、「validated」のいずれか。[レジャーの指定][]を参照してください) |
| `limit` | 整数 | (省略可、デフォルト値は可変)取得するトランザクションの数を制限します。サーバーはこの値に従う必要はありません。10以上400以下の範囲で値を指定する必要があります。[新規: rippled 0.26.4][] | | `limit` | 整数 | (省略可、デフォルト値は可変)取得するトランザクションの数を制限します。サーバーはこの値を受け入れる必要はありません。10以上400以下の範囲で値を指定する必要があります。[新規: rippled 0.26.4][] |
| `marker` | [マーカー][] | _省略可_ 以前にページネーションされた応答の値。その応答を停止した箇所からデータの取得を再開します。[新規: rippled 0.26.4][] | | `marker` | [マーカー][] | _省略可_ 以前にページネーションされた応答の値。その応答を停止した箇所からデータの取得を再開します。[新規: rippled 0.26.4][] |
以下のパラメーターは廃止予定であり、今後予告なしに削除される可能性があります。`ledger` 以下のパラメーターは廃止予定であり、今後予告なしに削除される可能性があります。`ledger`
@@ -66,39 +66,39 @@ rippled account_offers r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 current
``` ```
{ {
"id": 9, "id": 9,
"status": "success", "status": "success",
"type": "response", "type": "response",
"result": { "result": {
"account": "rpP2JgiMyTF5jR5hLG3xHCPi1knBb1v9cM", "account": "rpP2JgiMyTF5jR5hLG3xHCPi1knBb1v9cM",
"ledger_current_index": 18539550, "ledger_current_index": 18539550,
"offers": [ "offers": [
{ {
"flags": 0, "flags": 0,
"quality": "0.00000000574666765650638", "quality": "0.00000000574666765650638",
"seq": 6577664, "seq": 6577664,
"taker_gets": "33687728098", "taker_gets": "33687728098",
"taker_pays": { "taker_pays": {
"currency": "EUR", "currency": "EUR",
"issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq", "issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",
"value": "193.5921774819578" "value": "193.5921774819578"
} }
}, },
{ {
"flags": 0, "flags": 0,
"quality": "7989247009094510e-27", "quality": "7989247009094510e-27",
"seq": 6572128, "seq": 6572128,
"taker_gets": "2361918758", "taker_gets": "2361918758",
"taker_pays": { "taker_pays": {
"currency": "XAU", "currency": "XAU",
"issuer": "rrh7rf1gV2pXAoqA8oYbpHd8TKv5ZQeo67", "issuer": "rrh7rf1gV2pXAoqA8oYbpHd8TKv5ZQeo67",
"value": "0.01886995237307572" "value": "0.01886995237307572"
} }
}, },
... trimmed for length ... ... trimmed for length ...
], ],
"validated": false "validated": false
} }
} }
``` ```
@@ -107,78 +107,78 @@ rippled account_offers r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 current
``` ```
200 OK 200 OK
{ {
"result": { "result": {
"account": "rpP2JgiMyTF5jR5hLG3xHCPi1knBb1v9cM", "account": "rpP2JgiMyTF5jR5hLG3xHCPi1knBb1v9cM",
"ledger_current_index": 18539596, "ledger_current_index": 18539596,
"offers": [{ "offers": [{
"flags": 0, "flags": 0,
"quality": "0.000000007599140009999998", "quality": "0.000000007599140009999998",
"seq": 6578020, "seq": 6578020,
"taker_gets": "29740867287", "taker_gets": "29740867287",
"taker_pays": { "taker_pays": {
"currency": "USD", "currency": "USD",
"issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q", "issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"value": "226.0050145327418" "value": "226.0050145327418"
} }
}, { }, {
"flags": 0, "flags": 0,
"quality": "7989247009094510e-27", "quality": "7989247009094510e-27",
"seq": 6572128, "seq": 6572128,
"taker_gets": "2361918758", "taker_gets": "2361918758",
"taker_pays": { "taker_pays": {
"currency": "XAU", "currency": "XAU",
"issuer": "rrh7rf1gV2pXAoqA8oYbpHd8TKv5ZQeo67", "issuer": "rrh7rf1gV2pXAoqA8oYbpHd8TKv5ZQeo67",
"value": "0.01886995237307572" "value": "0.01886995237307572"
} }
}, { }, {
"flags": 0, "flags": 0,
"quality": "0.00000004059594001318974", "quality": "0.00000004059594001318974",
"seq": 6576905, "seq": 6576905,
"taker_gets": "3892952574", "taker_gets": "3892952574",
"taker_pays": { "taker_pays": {
"currency": "CNY", "currency": "CNY",
"issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y", "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y",
"value": "158.0380691682966" "value": "158.0380691682966"
} }
}, },
... ...
], ],
"status": "success", "status": "success",
"validated": false "validated": false
} }
} }
``` ```
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれています。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-----------------------|:-------------------------------------------|:-------| |:-----------------------|:--------------------------|:------------------------|
| `account` | 文字列 | オファーを出したアカウントを識別する一意の[アドレス][] | | `account` | 文字列 | オファーを出したアカウントを識別する一意の[アドレス][] |
| `offers` | 配列 | オブジェクトの配列。各オブジェクトは、このアカウントが出したオファーの中で、レジャーバージョンが要求された時点で未処理のオファーを表します。オファーの数が多い場合は、一度に`limit`の数までのオファーが返されます。 | | `offers` | 配列 | オブジェクトの配列。各オブジェクトは、このアカウントが出したオファーの中で、レジャーバージョンが要求された時点で未処理のオファーを表します。オファーの数が多い場合は、一度に`limit`の数までのオファーが返されます。 |
| `ledger_current_index` | 整数 | `ledger_hash`または`ledger_index`が指定されている場合は省略このデータの取得時に使用したレジャーバージョンのシーケンス番号。[新規: rippled 0.26.4-sp1][] | | `ledger_current_index` | 数値 - [レジャーインデックス][] | _`ledger_hash`または`ledger_index`が指定されている場合は省略_ このデータの取得時に使用した、現在処理中のレジャーバージョンのレジャーインデックス。[新規: rippled 0.26.4-sp1][] |
| `ledger_index` | 整数 | `ledger_current_index`が代わりに指定されている場合は省略)要求に指定され、このデータの取得時に使用されたレジャーバージョンのシーケンス番号。[新規: rippled 0.26.4-sp1][] | | `ledger_index` | 数値 - [レジャーインデックス][] | _`ledger_current_index`が代わりに指定されている場合は省略_ 要求に従って、このデータの取得時に使用されたレジャーバージョンのレジャーインデックス。[新規: rippled 0.26.4-sp1][] |
| `ledger_hash` | 文字列 | _省略される場合があります_ 要求に指定され、このデータの取得時に使用されたレジャーバージョンの16進数ハッシュ。[新規: rippled 0.26.4-sp1][] | | `ledger_hash` | 文字列 - [Hash][] | _省略される場合があります_ このデータの取得時に使用されたレジャーバージョンの識別用ハッシュ。[新規: rippled 0.26.4-sp1][] |
| `marker` | [マーカー][] | _省略される場合があります_ 応答がページネーションされていることを示す、サーバーが定義した値。この値を次のコールに渡して、このコールで終わった箇所から再開します。この後に情報ページがない場合は省略されます。[新規: rippled 0.26.4][] | | `marker` | [マーカー][] | _省略される場合があります_ 応答がページネーションされていることを示す、サーバーが定義した値。この値を次のコールに渡して、このコールで終わった箇所から再開します。この後に情報ページがない場合は省略されます。[新規: rippled 0.26.4][] |
各Offerオブジェクトのフィールドを次に示します。 各Offerオブジェクトのフィールドを次に示します。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-------------|:-----------------|:-------------------------------------------| |:-------------|:-----------------|:-------------------------------------------|
| `flags` | 符号なし整数 | このオファーエントリに対してビットフラグとして設定されているオプション。 | | `flags` | 符号なし整数 | このオファーエントリに対してビットフラグとして設定されているオプション。 |
| `seq` | 符号なし整数 | このエントリを作成したトランザクションのシーケンス番号。(トランザクションの[シーケンス番号](basic-data-types.html#アカウントシーケンス)はアカウントに関連付けられています。) | | `seq` | 符号なし整数 | このエントリを作成したトランザクションのシーケンス番号。(トランザクションの[シーケンス番号](basic-data-types.html#アカウントシーケンス)はアカウントに関連付けられています。) |
| `taker_gets` | 文字列またはオブジェクト | オファーを受け入れるアカウントが受領する額。XRPまたは通貨指定オブジェクトの額を表す文字列として示されます。[通貨額の指定][通貨額]を参照してください。) | | `taker_gets` | 文字列またはオブジェクト | オファーを受け入れるアカウントが受領する額。XRPまたは通貨指定オブジェクトの額を表す文字列として示されます。[通貨額の指定][通貨額]を参照してください。) |
| `taker_pays` | 文字列またはオブジェクト | オファーを受け入れるアカウントが提供する額。XRPまたは通貨指定オブジェクトの額を表す文字列として示されます。[通貨額の指定][通貨額]を参照してください。) | | `taker_pays` | 文字列またはオブジェクト | オファーを受け入れるアカウントが提供する額。XRPまたは通貨指定オブジェクトの額を表す文字列として示されます。[通貨額の指定][通貨額]を参照してください。) |
| `quality` | 文字列 | オファーの為替レート。元の`taker_pays`を元の`taker_gets`で割った比率です。オファーの実行時には、最も好ましい(最も低い)クオリティのオファーが最初に消費されます。同じクオリティのオファーは古いものから新しいものの順で実行されます。[新規: rippled 0.29.0][] | | `quality` | 文字列 | オファーの為替レート。元の`taker_pays`を元の`taker_gets`で割った比率です。オファーの実行時には、最も好ましい(最も低い)クオリティのオファーが最初に消費されます。同じクオリティのオファーは古いものから新しいものの順で実行されます。[新規: rippled 0.29.0][] |
| `expiration` | 符号なし整数 | (省略される場合があります)この時刻の経過後は、資金化されなかったオファーとみなされます([Rippleエポック以降の経過秒数][])。関連項目: [オファーの有効期限](offers.html#オファーの有効期限)。[新規: rippled 0.30.1][] | | `expiration` | 符号なし整数 | (省略される場合があります)この時刻の経過後は、資金化されなかったオファーとみなされます([Rippleエポック以降の経過秒数][])。関連項目: [オファーの有効期限](offers.html#オファーの有効期限)。[新規: rippled 0.30.1][] |
## 考えられるエラー ## 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
* `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。 * `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。
* `actNotFound` - 要求の`account`フィールドに指定されている[アドレス][]が、レジャーのアカウントに対応していません。 * `actNotFound` - 要求の`account`フィールドに指定されている[アドレス][]が、レジャーのアカウントに対応していません。
* `lgrNotFound` - `ledger_hash`または`ledger_index`で指定したレジャーが存在しないか、存在してはいるもののサーバーが保有していません。 * `lgrNotFound` - `ledger_hash`または`ledger_index`で指定したレジャーが存在しないか、存在してはいるもののサーバーが保有していません。

View File

@@ -1,5 +1,5 @@
# account_tx # account_tx
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountTx.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountTx.cpp "Source")
`account_tx`メソッドは、指定したアカウントに関連するトランザクションのリストを取得します。 `account_tx`メソッドは、指定したアカウントに関連するトランザクションのリストを取得します。
@@ -51,27 +51,27 @@ rippled -- account_tx r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 -1 -1 2 5 1 0 1
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
[試してみる>](websocket-api-tool.html#account_tx) [試してみる >](websocket-api-tool.html#account_tx)
要求には以下のパラメーターが含まれます。 要求には以下のパラメーターが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-------------------|:-------------------------------------------|:-----------| |:-------------------|:-------------------------------------------|:-----------|
| `account` | 文字列 | アカウントの一意のIDであり、最もよく使用されるのはアカウントのアドレスす。 | | `account` | 文字列 | アカウントの一意のIDであり、最も一般的にはアカウントのアドレスが使用されます。 |
| `ledger_index_min` | 整数 | _省略可能_ 含めるトランザクションのレジャーのうち最古のものを指定するのに使用します。`-1`の値は、使用可能な検証済みレジャーのうち最古のバージョンを使用するよう、サーバーに指示します。 | | `ledger_index_min` | 整数 | _省略可能_ 含めるトランザクションのレジャーのうち最古のものを指定するのに使用します。`-1`の値は、使用可能な検証済みレジャーのうち最古のバージョンを使用するよう、サーバーに指示します。 |
| `ledger_index_max` | 整数 | _省略可能_ 含めるトランザクションのレジャーのうち最新のものを指定するのに使用します。`-1`の値は、使用可能な検証済みレジャーのうち最新のバージョンを使用するよう、サーバーに指示します。 | | `ledger_index_max` | 整数 | _省略可能_ 含めるトランザクションのレジャーのうち最新のものを指定するのに使用します。`-1`の値は、使用可能な検証済みレジャーのうち最新のバージョンを使用するよう、サーバーに指示します。 |
| `ledger_hash` | 文字列 | _省略可能_ 単一のレジャーからのみトランザクションを検索するのに使用します。([レジャーの指定][]を参照してください。) | | `ledger_hash` | 文字列 | _省略可能_ 単一のレジャーからのみトランザクションを検索するのに使用します。([レジャーの指定][]を参照してください |
| `ledger_index` | 文字列または符号なし整数 | _省略可能_ 単一のレジャーからのみトランザクションを検索するのに使用します。([レジャーの指定][]を参照してください。) | | `ledger_index` | 文字列または符号なし整数 | _省略可能_ 単一のレジャーからのみトランザクションを検索するのに使用します。([レジャーの指定][]を参照してください |
| `binary` | ブール値 | _省略可能_ デフォルトは`false`です。`true`に設定すると、JSONの代わりに16進文字列でトランザクションが返されます。 | | `binary` | ブール値 | _省略可能_ デフォルトは`false`です。`true`に設定すると、JSONの代わりに16進文字列でトランザクションが返されます。 |
| `forward` | ブール値 | _省略可能_ デフォルトは`false`です。`true`に設定すると、最も古いレジャーを先頭としてインデックスが付けられた値が返されます。そうしない場合、最新のレジャーを先頭として結果にインデックスが付けられます。(結果を示した各ページの中身は順序よく整理されていない場合がありますが、ページ全体としては順序付けされています。) | | `forward` | ブール値 | _省略可能_ デフォルトは`false`です。`true`に設定すると、最も古いレジャーを先頭としてインデックスが付けられた値が返されます。そうしない場合、最新のレジャーを先頭として結果にインデックスが付けられます。(結果を示した各ページの中身は順序よく整理されていない場合がありますが、ページ全体としては順序付けされています。) |
| `limit` | 整数 | _省略可能_ デフォルトは変化します。取得するトランザクションの数を制限します。サーバーこの値をる必要はありません。 | | `limit` | 整数 | _省略可能_ デフォルトは変化します。取得するトランザクションの数を制限します。サーバーこの値を受け入れる必要はありません。 |
| `marker` | [マーカー][] | 以前にページネーションされた応答の値。その応答を停止した箇所からデータの取得を再開します。サーバーが使用できるレジャーの範囲に変更があっても、この値は変わりません。 | | `marker` | [マーカー][] | 以前にページネーションされた応答の値。その応答を停止した箇所からデータの取得を再開します。サーバーが使用できるレジャーの範囲に変更があっても、この値は変わりません。 |
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountTxSwitch.cpp "Source")<br> [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountTxSwitch.cpp "Source")<br>
次の各フィールドは省略可能とされていますが、要求内で**1つ以上は使用する必要があります**: `ledger_index``ledger_hash``ledger_index_min`、または`ledger_index_max` 次の各フィールドは省略可能とされていますが、要求内で**1つ以上は使用する必要があります**: `ledger_index``ledger_hash``ledger_index_min`、または`ledger_index_max`
**注記:** WebSocketとJSON-RPCについては、廃止予定の`account_tx`メソッドの従来版もあります。このため、*次のすべてのフィールドの使用を控える*ことをお勧めします: `offset``count``descending``ledger_max``ledger_min`。これらの廃止予定のフィールドを使用した場合、メソッドでページネーションはサポートされません。 **注記:** WebSocketとJSON-RPCについては、廃止予定の`account_tx`メソッドの従来版もあります。このため、*次のすべてのフィールドの使用を控える*ことをお勧めします: `offset``count``descending``ledger_max``ledger_min`。これらの廃止予定のフィールドを使用した場合、メソッドでページネーションはサポートされません。
### 照会されたデータの繰り返し ### 照会されたデータの繰り返し
@@ -558,37 +558,38 @@ rippled -- account_tx r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 -1 -1 2 5 1 0 1
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
この応答は[標準フォーマット][]に従っており、結果が正しい場合、以下のフィールドが含まれます。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-------------------|:-------------------------------------------|:-----------| |:-------------------|:---------------------------|:---------------------------|
| `account` | 文字列 | 関連するアカウントを識別する一意の[アドレス][]。 | | `account` | 文字列 | 関連するアカウントを識別する一意の[アドレス][]。 |
| `ledger_index_min` | 整数 | トランザクションで実際に検索された最古のレジャーのシーケンス番号。 | | `ledger_index_min` | 整数 - [レジャーインデックス][] | トランザクションで実際に検索された最古のレジャーのレジャーインデックス。 |
| `ledger_index_max` | 整数 | トランザクションで実際に検索された最新のレジャーのシーケンス番号。 | | `ledger_index_max` | 整数 - [レジャーインデックス][] | トランザクションで実際に検索された最新のレジャーのレジャーインデックス。 |
| `limit` | 整数 | 要求で使用される`limit`値。(サーバーによって強制される実際の制限値とは異なる場合があります。) | | `limit` | 整数 | 要求で使用される`limit`値。(サーバーによって強制される実際の制限値とは異なる場合があります。) |
| `marker` | [マーカー][] | 応答がページネーションされていることを示す、サーバーが定義した値。この値を次のコールに渡して、このコールで終わったところから再開されます。 | | `marker` | [マーカー][] | 応答がページネーションされていることを示す、サーバーが定義した値。この値を次のコールに渡して、このコールで終わった箇所から再開ます。 |
| `transactions` | 配列 | 以降で説明する、要求の基準を満たすトランザクションの配列。 | | `transactions` | 配列 | 以降で説明する、要求の基準を満たすトランザクションの配列。 |
| `validated` | ブール値 | このフィールドが含まれていて`true`に設定されている場合、この応答内の情報は検証済みのレジャーバージョンから取得されています。そうでない場合、情報は変更されることがあります。 | | `validated` | ブール値 | このフィールドが含まれていて`true`に設定されている場合、この応答内の情報は検証済みのレジャーバージョンから取得されています。そうでない場合、情報は変更されることがあります。 |
**注記:** サーバーから返される`ledger_index_min`および`ledger_index_max`の値が要求で指定したものとは異なる場合があります。例えば、サーバーに手元の指定したバージョンがない場合など。 **注記:** サーバーから返される`ledger_index_min`および`ledger_index_max`の値が要求で指定したものとは異なる場合があります。例えば、サーバーに手元の指定したバージョンがない場合など。
各トランザクションのオブジェクトには以下のフィールドが含まれます。含まれるフィールドは、JSONまたは16進文字列`"binary":true`)フォーマットのどちらで要求されたかによって異なります。 各トランザクションのオブジェクトには以下のフィールドが含まれます。含まれるフィールドは、JSONまたは16進文字列`"binary":true`)フォーマットのどちらで要求されたかによって異なります。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:---------------|:---------------------------------|:-------------------------| |:---------------|:---------------------------------|:-------------------------|
| `ledger_index` | 整数 | このトランザクションを含むレジャーバージョンのシーケンス番号。 | | `ledger_index` | 整数 | このトランザクションを含むレジャーバージョンの[レジャーインデックス][]。 |
| `meta` | オブジェクトJSONまたは文字列バイナリ | `binary`がTrueの場合、これは16進文字列のトランザクションメタデータです。そうでない場合、トランザクションメタデータはJSONフォーマットになります。 | | `meta` | オブジェクトJSONまたは文字列バイナリ | `binary`がTrueの場合、これは16進文字列のトランザクションメタデータです。そうでない場合、トランザクションメタデータはJSONフォーマットになります。 |
| `tx` | オブジェクト | JSONモードのみトランザクションを定義するJSONオブジェクト。 | | `tx` | オブジェクト | JSONモードのみトランザクションを定義するJSONオブジェクト。 |
| `tx_blob` | 文字列 | (バイナリモードのみ)トランザクションを表す一意のハッシュ化された文字列。 | | `tx_blob` | 文字列 | (バイナリモードのみ)トランザクションを表す一意のハッシュ化された文字列。 |
| `validated` | ブール値 | トランザクションが検証済みのレジャーに含まれるかどうか。検証済みのレジャーに含まれていないトランザクションはすべて、変更される場合があります。 | | `validated` | ブール値 | トランザクションが検証済みのレジャーに含まれるかどうか。検証済みのレジャーに含まれていないトランザクションはすべて、変更される場合があります。 |
## 考えられるエラー ## 考えられるエラー
* いずれかの[汎用エラータイプ][]。 * いずれかの[一般的なエラータイプ][]。
* `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。 * `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。
* `actMalformed` - 要求の`account`フィールドに指定した[アドレス][]が、正しいフォーマットではありません。 * `actMalformed` - 要求の`account`フィールドに指定した[アドレス][]が、正しいフォーマットではありません。
* `actBitcoin` - `account`フィールドに指定された[アドレス][]が、XRP LedgerアドレスではなくBitcoinアドレスのようなフォーマットになっています。 * `actBitcoin` - `account`フィールドに指定された[アドレス][]が、XRP LedgerアドレスではなくBitcoinアドレスのようなフォーマットになっています。
* `lgrIdxsInvalid` - `ledger_index_min`または`ledger_index_max`で指定したレジャーが存在しないか、存在してはいるもののサーバーが保有していません。 * `lgrIdxMalformed` - `ledger_index_min`または`ledger_index_max`で指定したレジャーが存在しないか、存在してはいるもののサーバーが保有していません。
* `lgrIdxsInvalid` - 要求で`ledger_index_min`の前にある`ledger_index_max`を指定したか、[ネットワークと同期](troubleshoot-the-rippled-server.html)されていないためにサーバーに検証済みレジャーの範囲が存在しません。<!-- TODO: link more specific docs when https://github.com/ripple/xrpl-dev-portal/issues/714 is done. -->
{% include '_snippets/rippled_versions.md' %} {% include '_snippets/rippled_versions.md' %}

View File

@@ -1,5 +1,5 @@
# gateway_balances # gateway_balances
[[ソース]<br>](https://github.com/ripple/rippled/blob/9111ad1a9dc37d49d085aa317712625e635197c0/src/ripple/rpc/handlers/GatewayBalances.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/9111ad1a9dc37d49d085aa317712625e635197c0/src/ripple/rpc/handlers/GatewayBalances.cpp "Source")
`gateway_balances`コマンドは、特定のアカウントから発行された残高の合計を計算します。オプションで、[運用アドレス](issuing-and-operational-addresses.html)が保有する額を除外できます。[新規: rippled 0.28.2][] `gateway_balances`コマンドは、特定のアカウントから発行された残高の合計を計算します。オプションで、[運用アドレス](issuing-and-operational-addresses.html)が保有する額を除外できます。[新規: rippled 0.28.2][]
@@ -12,12 +12,12 @@
``` ```
{ {
"id": "example_gateway_balances_1", "id": "example_gateway_balances_1",
"command": "gateway_balances", "command": "gateway_balances",
"account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q", "account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"strict": true, "strict": true,
"hotwallet": ["rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ","ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt"], "hotwallet": ["rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ","ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt"],
"ledger_index": "validated" "ledger_index": "validated"
} }
``` ```
@@ -25,18 +25,18 @@
``` ```
{ {
"method": "gateway_balances", "method": "gateway_balances",
"params": [ "params": [
{ {
"account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q", "account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"hotwallet": [ "hotwallet": [
"rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ", "rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ",
"ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt" "ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt"
], ],
"ledger_index": "validated", "ledger_index": "validated",
"strict": true "strict": true
} }
] ]
} }
``` ```
@@ -44,13 +44,13 @@
要求には以下のパラメーターが含まれます。 要求には以下のパラメーターが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:---------------|:---------------------------|:-------------------------------| |:---------------|:---------------------------|:-------------------------------|
| `account` | 文字列 | チェックする[アドレス][]。[発行アドレス](issuing-and-operational-addresses.html)である必要があります。 | | `account` | 文字列 | チェックする[アドレス][]。[発行アドレス](issuing-and-operational-addresses.html)である必要があります。 |
| `strict` | ブール値 | _省略可_ trueの場合は、アカウントパラメーターにアドレスまたは公開鍵だけを受け入れます。デフォルトではfalseです。 | | `strict` | ブール値 | _省略可_ trueの場合は、アカウントパラメーターにアドレスまたは公開鍵だけを受け入れます。デフォルトではfalseです。 |
| `hotwallet` | 文字列または配列 | _省略可_ 発行済み残高から除外する[運用アドレス](issuing-and-operational-addresses.html)、またはそのようなアドレスの配列。 | | `hotwallet` | 文字列または配列 | _省略可_ 発行済み残高から除外する[運用アドレス](issuing-and-operational-addresses.html)、またはそのようなアドレスの配列。 |
| `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。[レジャーの指定][]を参照してください) | | `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。[レジャーの指定][]を参照してください) |
| `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーバージョンのシーケンス番号、またはレジャーを自動的に選択するショートカット文字列。([レジャーの指定][]を参照してください) | | `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーバージョンの[レジャーインデックス][]、またはレジャーを自動的に選択するためのショートカット文字列。([レジャーの指定][]を参照してください) |
## 応答フォーマット ## 応答フォーマット
@@ -62,67 +62,67 @@
``` ```
{ {
"id": 3, "id": 3,
"status": "success", "status": "success",
"type": "response", "type": "response",
"result": { "result": {
"account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q", "account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"assets": { "assets": {
"r9F6wk8HkXrgYWoJ7fsv4VrUBVoqDVtzkH": [ "r9F6wk8HkXrgYWoJ7fsv4VrUBVoqDVtzkH": [
{ {
"currency": "BTC", "currency": "BTC",
"value": "5444166510000000e-26" "value": "5444166510000000e-26"
} }
], ],
"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8": [ "rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8": [
{ {
"currency": "EUR", "currency": "EUR",
"value": "4000000000000000e-27" "value": "4000000000000000e-27"
} }
], ],
"rPU6VbckqCLW4kb51CWqZdxvYyQrQVsnSj": [ "rPU6VbckqCLW4kb51CWqZdxvYyQrQVsnSj": [
{ {
"currency": "BTC", "currency": "BTC",
"value": "1029900000000000e-26" "value": "1029900000000000e-26"
} }
], ],
"rpR95n1iFkTqpoy1e878f4Z1pVHVtWKMNQ": [ "rpR95n1iFkTqpoy1e878f4Z1pVHVtWKMNQ": [
{ {
"currency": "BTC", "currency": "BTC",
"value": "4000000000000000e-30" "value": "4000000000000000e-30"
} }
], ],
"rwmUaXsWtXU4Z843xSYwgt1is97bgY8yj6": [ "rwmUaXsWtXU4Z843xSYwgt1is97bgY8yj6": [
{ {
"currency": "BTC", "currency": "BTC",
"value": "8700000000000000e-30" "value": "8700000000000000e-30"
} }
] ]
}, },
"balances": { "balances": {
"rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ": [ "rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ": [
{ {
"currency": "EUR", "currency": "EUR",
"value": "29826.1965999999" "value": "29826.1965999999"
} }
], ],
"ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt": [ "ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt": [
{ {
"currency": "USD", "currency": "USD",
"value": "13857.70416" "value": "13857.70416"
} }
] ]
}, },
"ledger_hash": "61DDBF304AF6E8101576BF161D447CA8E4F0170DDFBEAFFD993DC9383D443388", "ledger_hash": "61DDBF304AF6E8101576BF161D447CA8E4F0170DDFBEAFFD993DC9383D443388",
"ledger_index": 14483195, "ledger_index": 14483195,
"obligations": { "obligations": {
"BTC": "5908.324927635318", "BTC": "5908.324927635318",
"EUR": "992471.7419793958", "EUR": "992471.7419793958",
"GBP": "4991.38706013193", "GBP": "4991.38706013193",
"USD": "1997134.20229482" "USD": "1997134.20229482"
}, },
"validated": true "validated": true
} }
} }
``` ```
@@ -131,65 +131,65 @@
``` ```
200 OK 200 OK
{ {
"result": { "result": {
"account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q", "account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
"assets": { "assets": {
"r9F6wk8HkXrgYWoJ7fsv4VrUBVoqDVtzkH": [ "r9F6wk8HkXrgYWoJ7fsv4VrUBVoqDVtzkH": [
{ {
"currency": "BTC", "currency": "BTC",
"value": "5444166510000000e-26" "value": "5444166510000000e-26"
} }
], ],
"rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8": [ "rPFLkxQk6xUGdGYEykqe7PR25Gr7mLHDc8": [
{ {
"currency": "EUR", "currency": "EUR",
"value": "4000000000000000e-27" "value": "4000000000000000e-27"
} }
], ],
"rPU6VbckqCLW4kb51CWqZdxvYyQrQVsnSj": [ "rPU6VbckqCLW4kb51CWqZdxvYyQrQVsnSj": [
{ {
"currency": "BTC", "currency": "BTC",
"value": "1029900000000000e-26" "value": "1029900000000000e-26"
} }
], ],
"rpR95n1iFkTqpoy1e878f4Z1pVHVtWKMNQ": [ "rpR95n1iFkTqpoy1e878f4Z1pVHVtWKMNQ": [
{ {
"currency": "BTC", "currency": "BTC",
"value": "4000000000000000e-30" "value": "4000000000000000e-30"
} }
], ],
"rwmUaXsWtXU4Z843xSYwgt1is97bgY8yj6": [ "rwmUaXsWtXU4Z843xSYwgt1is97bgY8yj6": [
{ {
"currency": "BTC", "currency": "BTC",
"value": "8700000000000000e-30" "value": "8700000000000000e-30"
} }
] ]
}, },
"balances": { "balances": {
"rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ": [ "rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ": [
{ {
"currency": "EUR", "currency": "EUR",
"value": "29826.1965999999" "value": "29826.1965999999"
} }
], ],
"ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt": [ "ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt": [
{ {
"currency": "USD", "currency": "USD",
"value": "13857.70416" "value": "13857.70416"
} }
] ]
}, },
"ledger_hash": "980FECF48CA4BFDEC896692C31A50D484BDFE865EC101B00259C413AA3DBD672", "ledger_hash": "980FECF48CA4BFDEC896692C31A50D484BDFE865EC101B00259C413AA3DBD672",
"ledger_index": 14483212, "ledger_index": 14483212,
"obligations": { "obligations": {
"BTC": "5908.324927635318", "BTC": "5908.324927635318",
"EUR": "992471.7419793958", "EUR": "992471.7419793958",
"GBP": "4991.38706013193", "GBP": "4991.38706013193",
"USD": "1997134.20229482" "USD": "1997134.20229482"
}, },
"status": "success", "status": "success",
"validated": true "validated": true
} }
} }
``` ```
@@ -197,21 +197,21 @@
**注記:** このメソッドのコマンドライン構文はありません。コマンドラインからアクセスするには[jsonメソッド][]を使用してください。 **注記:** このメソッドのコマンドライン構文はありません。コマンドラインからアクセスするには[jsonメソッド][]を使用してください。
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれています。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-----------------------|:-------|:-------------------------------------------| |:-----------------------|:--------------------------|:------------------------|
| `account` | 文字列 | 残高を発行したアカウントを識別する一意の[アドレス][]。 | | `account` | 文字列 - [アドレス][] | 残高を発行したアカウントアドレス。 |
| `obligations` | オブジェクト | (空の場合は省略)除外されていないアドレスに発行された額の合計。発行された価値の合計に対する通貨のマップとして示されます。 | | `obligations` | オブジェクト | (空の場合は省略)除外されていないアドレスに発行された額の合計。発行された価値の合計に対する通貨のマップとして示されます。 |
| `balances` | オブジェク | (空の場合は省略)要求から`hotwallet`アドレスに発行された額。キーはアドレスであり、値はアドレスが保有する通貨額の配列です。 | | `balances` | オブジェク | _(空の場合は省略)_ 要求から`hotwallet`アドレスに発行された額。キーはアドレスであり、値はアドレスが保有する通貨額の配列です。 |
| `assets` | オブジェクト | (空の場合は省略)他から発行された保有額の合計。推奨される構成では、[発行アドレス](issuing-and-operational-addresses.html)の保有額はありません。 | | `assets` | オブジェクト | _(空の場合は省略)_ 他から発行された保有額の合計。推奨される構成では、[発行アドレス](issuing-and-operational-addresses.html)の保有額はありません。 |
| `ledger_hash` | 文字列 | (省略される場合があります)この応答の生成に使用されたレジャーの識別用ハッシュ。 | | `ledger_hash` | 文字列 - [Hash][] | _(省略される場合があります)_ この応答の生成に使用されたレジャーバージョンの識別用ハッシュ。 |
| `ledger_index` | 数値 | (省略される場合があります)この応答の生成に使用されたレジャーバージョンのシーケンス番号。 | | `ledger_index` | 数値 - [レジャーインデックス][] | _(省略される場合があります)_ この応答の生成に使用されたレジャーバージョンのレジャーインデックス。 | |
| `ledger_current_index` | 数値 | (省略される場合があります)この応答の生成に使用された現在処理中のレジャーバージョンのシーケンス番号。 | | `ledger_current_index` | 数値 - [レジャーインデックス][] | _`ledger_current_index`が指定されている場合は省略_ この情報の取得時に使用した、現在処理中のレジャーバージョンの[レジャーインデックス][]。 |
## 考えられるエラー ## 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
* `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。 * `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。
* `invalidHotWallet` - `hotwallet`フィールドに指定されている1つ以上のアドレスが、要求に指定されているアカウントが発行した通貨を保有しているアカウントの[アドレス][]ではありません。 * `invalidHotWallet` - `hotwallet`フィールドに指定されている1つ以上のアドレスが、要求に指定されているアカウントが発行した通貨を保有しているアカウントの[アドレス][]ではありません。
* `actNotFound` - 要求の`account`フィールドに指定されている[アドレス][]が、レジャーのアカウントに対応していません。 * `actNotFound` - 要求の`account`フィールドに指定されている[アドレス][]が、レジャーのアカウントに対応していません。

View File

@@ -1,7 +1,7 @@
# ledger_closed # ledger_closed
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/LedgerClosed.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/LedgerClosed.cpp "Source")
`ledger_closed`メソッドは、最新の閉鎖済みレジャーの一意のIDを返します。このレジャーは必ずしも検証済みで変更不可能ではありません。 `ledger_closed`メソッドは、最新の決済済みレジャーの一意のIDを返します。このレジャーは必ずしも検証済みで変更不可能ではありません。
## 要求フォーマット ## 要求フォーマット
要求フォーマットの例: 要求フォーマットの例:
@@ -12,8 +12,8 @@
``` ```
{ {
"id":2, "id": 2,
"command":"ledger_closed" "command": "ledger_closed"
} }
``` ```
@@ -21,10 +21,10 @@
``` ```
{ {
"method":"ledger_closed", "method": "ledger_closed",
"params":[ "params": [
{} {}
] ]
} }
``` ```
@@ -50,13 +50,13 @@ rippled ledger_closed
``` ```
{ {
"id":1, "id": 1,
"status":"success", "status": "success",
"type":"response", "type": "response",
"result":{ "result": {
"ledger_hash":"17ACB57A0F73B5160713E81FE72B2AC9F6064541004E272BD09F257D57C30C02", "ledger_hash": "17ACB57A0F73B5160713E81FE72B2AC9F6064541004E272BD09F257D57C30C02",
"ledger_index":6643099 "ledger_index": 6643099
} }
} }
``` ```
@@ -65,11 +65,11 @@ rippled ledger_closed
``` ```
200 OK 200 OK
{ {
"result":{ "result": {
"ledger_hash":"8B5A0C5F6B198254A6E411AF55C29EE40AA86251D2E78DD0BB17647047FA9C24", "ledger_hash": "8B5A0C5F6B198254A6E411AF55C29EE40AA86251D2E78DD0BB17647047FA9C24",
"ledger_index":8696231, "ledger_index": 8696231,
"status":"success" "status": "success"
} }
} }
``` ```
@@ -77,15 +77,15 @@ rippled ledger_closed
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:---------------|:-----------------|:-----------------------------------------| |:---------------|:-----------------|:-----------------------------------------|
| `ledger_hash` | 文字列 | レジャーの一意のハッシュを示す20バイトの16進文字列。 | | `ledger_hash` | 文字列 | このレジャーバージョンの一意の[ハッシュ][]16進数。 |
| `ledger_index` | 符号なし整数 | このレジャーのシーケンス番号 | | `ledger_index` | 符号なし整数 | このレジャーバージョンの[レジャーインデックス][]。 |
## 考えられるエラー ## 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
{% include '_snippets/rippled_versions.md' %} {% include '_snippets/rippled_versions.md' %}
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -1,5 +1,5 @@
# ledger_entry # ledger_entry
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/LedgerEntry.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/LedgerEntry.cpp "Source")
`ledger_entry`メソッドは、XRP Ledgerの1つのレジャーオブジェクトを生フォーマットで返します。取得可能な各種オブジェクトについては、[レジャーフォーマット][]を参照してください。 `ledger_entry`メソッドは、XRP Ledgerの1つのレジャーオブジェクトを生フォーマットで返します。取得可能な各種オブジェクトについては、[レジャーフォーマット][]を参照してください。
@@ -15,11 +15,11 @@
``` ```
{ {
"id":3, "id": 3,
"command":"ledger_entry", "command": "ledger_entry",
"type":"account_root", "type": "account_root",
"account_root":"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "account_root": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"ledger_index":"validated" "ledger_index": "validated"
} }
``` ```
@@ -27,14 +27,14 @@
``` ```
{ {
"method":"ledger_entry", "method": "ledger_entry",
"params":[ "params": [
{ {
"account_root":"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "account_root": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"ledger_index":"validated", "ledger_index": "validated",
"type":"account_root" "type": "account_root"
} }
] ]
} }
``` ```
@@ -58,31 +58,31 @@
このメソッドで認識されるすべてのパラメーターのリストを次に示します。 このメソッドで認識されるすべてのパラメーターのリストを次に示します。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:------------------------|:---------------------------|:----------------------| |:------------------------|:---------------------------|:----------------------|
| `index` | 文字列 | _省略可_ レジャーから取得する1つのオブジェクトの[オブジェクトID](ledger-object-ids.html)を指定します。 | | `index` | 文字列 | _省略可_ レジャーから取得する1つのオブジェクトの[オブジェクトID](ledger-object-ids.html)を指定します。 |
| `account_root` | 文字列 - [アドレス][] | _省略可_ 取得する[AccountRootオブジェクト](accountroot.html)を指定します。 | | `account_root` | 文字列 - [アドレス][] | _省略可_ 取得する[AccountRootオブジェクト](accountroot.html)を指定します。 |
| `check` | 文字列 | _省略可_ レジャーから取得する[Checkオブジェクト](check.html)の[オブジェクトID](ledger-object-ids.html)を指定します。 | | `check` | 文字列 | _省略可_ レジャーから取得する[Checkオブジェクト](check.html)の[オブジェクトID](ledger-object-ids.html)を指定します。 |
| `deposit_preauth` | オブジェクトまたは文字列 | _省略可_ 取得する[DepositPreAuthオブジェクト](depositpreauth-object.html)を指定します。文字列の場合はDepositPreAuthオブジェクトの[オブジェクトID](ledger-object-ids.html)16進数である必要があります。オブジェクトの場合は`owner`および`authorized`サブフィールドが必要です。 | | `deposit_preauth` | オブジェクトまたは文字列 | _省略可_ 取得する[DepositPreauthオブジェクト](depositpreauth-object.html)を指定します。文字列の場合はDepositPreauthオブジェクトの[オブジェクトID](ledger-object-ids.html)16進数である必要があります。オブジェクトの場合は`owner`および`authorized`サブフィールドが必要です。 |
| `deposit_preauth.owner` | 文字列 - [アドレス][] | _`deposit_preauth`がオブジェクトとして指定されている場合に必須_ 事前承認を提供したアカウント。 | | `deposit_preauth.owner` | 文字列 - [アドレス][] | _`deposit_preauth`がオブジェクトとして指定されている場合に必須_ 事前承認を提供したアカウント。 |
| `deposit_preauth.authorized` | 文字列 - [アドレス][] | _`deposit_preauth`がオブジェクトとして指定されている場合に必須_ 事前承認を受けたアカウント。 | | `deposit_preauth.authorized` | 文字列 - [アドレス][] | _`deposit_preauth`がオブジェクトとして指定されている場合に必須_ 事前承認を受けたアカウント。 |
| `directory` | オブジェクトまたは文字列 | _省略可_ 取得する[DirectoryNode](directorynode.html)を指定します。文字列の場合はディレクトリーの[オブジェクトID](ledger-object-ids.html)16進数である必要があります。オブジェクトの場合はサブフィールドとして`dir_root`または`owner`のいずれかが必要です。また必要に応じて`sub_index`サブフィールドを指定できます。 | | `directory` | オブジェクトまたは文字列 | _省略可_ 取得する[DirectoryNode](directorynode.html)を指定します。文字列の場合はディレクトリーの[オブジェクトID](ledger-object-ids.html)16進数である必要があります。オブジェクトの場合はサブフィールドとして`dir_root`または`owner`のいずれかが必要です。また必要に応じて`sub_index`サブフィールドを指定できます。 |
| `directory.sub_index` | 符号なし整数 | _省略可_ 指定されている場合は、[DirectoryNode](directorynode.html)の後のページにジャンプします。 | | `directory.sub_index` | 符号なし整数 | _省略可_ 指定されている場合は、[DirectoryNode](directorynode.html)の後のページにジャンプします。 |
| `directory.dir_root` | 文字列 | _`directory`がオブジェクトとして指定されており、`directory.owner`が指定されていない場合に必須_ 取得するディレクトリーを識別する一意のインデックス16進数。 | | `directory.dir_root` | 文字列 | _`directory`がオブジェクトとして指定されており、`directory.owner`が指定されていない場合に必須_ 取得するディレクトリーを識別する一意のインデックス16進数。 |
| `directory.owner` | 文字列 | _`directory`がオブジェクトとして指定されており、`directory.dir_root`が指定されていない場合に必須_ このディレクトリーに関連付けられているアカウントの一意のアドレス。 | | `directory.owner` | 文字列 | _`directory`がオブジェクトとして指定されており、`directory.dir_root`が指定されていない場合に必須_ このディレクトリーに関連付けられているアカウントの一意のアドレス。 |
| `escrow` | オブジェクトまたは文字列 | _省略可_ 取得する[Escrowオブジェクト](escrow-object.html)を指定します。文字列の場合はEscrowの[オブジェクトID](ledger-object-ids.html)16進数である必要があります。オブジェクトの場合は`owner`および`seq`サブフィールドが必要です。 | | `escrow` | オブジェクトまたは文字列 | _省略可_ 取得する[Escrowオブジェクト](escrow-object.html)を指定します。文字列の場合はEscrowの[オブジェクトID](ledger-object-ids.html)16進数である必要があります。オブジェクトの場合は`owner`および`seq`サブフィールドが必要です。 |
| `escrow.owner` | 文字列 - [アドレス][] | _`escrow`がオブジェクトとして指定されている場合に必須_ Escrowオブジェクトの所有者送金元。 | | `escrow.owner` | 文字列 - [アドレス][] | _`escrow`がオブジェクトとして指定されている場合に必須_ Escrowオブジェクトの所有者送金元。 |
| `escrow.seq` | 符号なし整数 | _`escrow`がオブジェクトとして指定されている場合に必須_ Escrowオブジェクトを作成したトランザクションのシーケンス番号。 | | `escrow.seq` | 符号なし整数 | _`escrow`がオブジェクトとして指定されている場合に必須_ Escrowオブジェクトを作成したトランザクションのシーケンス番号。 |
| `offer` | オブジェクトまたは文字列 | _省略可_ 取得する[Offer オブジェクト](offer.html)を指定します。文字列の場合はOfferの[一意のインデックス](ledgers.html#ツリーの形式)として解釈されます。オブジェクトの場合は、オファーを一意に識別するためサブフィールド`account``seq`が必要です。 | | `offer` | オブジェクトまたは文字列 | _省略可_ 取得する[Offer オブジェクト](offer.html)を指定します。文字列の場合はOfferの[一意のインデックス](ledgers.html#ツリーの形式)として解釈されます。オブジェクトの場合は、オファーを一意に識別するためサブフィールド`account``seq`が必要です。 |
| `offer.account` | 文字列 - [アドレス][] | _`offer`が指定されている場合に必須_ オファーを出したアカウント。 | | `offer.account` | 文字列 - [アドレス][] | _`offer`が指定されている場合に必須_ オファーを出したアカウント。 |
| `offer.seq` | 符号なし整数 | _`offer`が指定されている場合に必須_ Offerオブジェクトを作成したトランザクションのシーケンス番号。 | | `offer.seq` | 符号なし整数 | _`offer`が指定されている場合に必須_ Offerオブジェクトを作成したトランザクションのシーケンス番号。 |
| `payment_channel` | 文字列 | _省略可_ 取得する[PayChannel オブジェクト](paychannel.html)の[オブジェクトID](ledger-object-ids.html)を指定します。 | | `payment_channel` | 文字列 | _省略可_ 取得する[PayChannel オブジェクト](paychannel.html)の[オブジェクトID](ledger-object-ids.html)を指定します。 |
| `ripple_state` | オブジェクト | _省略可_ 取得するRippleStateトラストラインオブジェクトを指定するオブジェクト。取得するRippleStateエントリを一意に指定するため、`accounts`および`currency`サブフィールドが必要です。 | | `ripple_state` | オブジェクト | _省略可_ 取得するRippleStateトラストラインオブジェクトを指定するオブジェクト。取得するRippleStateエントリを一意に指定するため、`accounts`および`currency`サブフィールドが必要です。 |
| `ripple_state.accounts` | 配列 | _`ripple_state`が指定されている場合に必須_ アカウントの[アドレス][]からなる長さ2の配列。この[RippleStateオブジェクト](ripplestate.html)によりリンクされる2つのアカウントを定義します。 | | `ripple_state.accounts` | 配列 | _`ripple_state`が指定されている場合に必須_ アカウントの[アドレス][]からなる長さ2の配列。この[RippleStateオブジェクト](ripplestate.html)によりリンクされる2つのアカウントを定義します。 |
| `ripple_state.currency` | 文字列 | _`ripple_state`が指定されている場合に必須_ 取得する[RippleStateオブジェクト](ripplestate.html)の[通貨コード][]。 | | `ripple_state.currency` | 文字列 | _`ripple_state`が指定されている場合に必須_ 取得する[RippleStateオブジェクト](ripplestate.html)の[通貨コード][]。 | |
| `binary` | ブール値 | _省略可_ trueの場合、要求したレジャーオブジェクトの内容が16進文字列として返されます。それ以外の場合はデータがJSONフォーマットで返されます。デフォルトは`false`です。[更新: rippled 1.2.0][新規: rippled 1.2.0] | | `binary` | ブール値 | _省略可_ trueの場合、要求したレジャーオブジェクトの内容が16進文字列として返されます。それ以外の場合はデータがJSONフォーマットで返されます。デフォルトは`false`です。[更新: rippled 1.2.0][] |
| `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。[レジャーの指定][]を参照してください) | | `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。[レジャーの指定][]を参照してください) |
| `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーのシーケンス番号、またはレジャーを自動的に選択するためのショートカット文字列。([レジャーの指定][]を参照してください) | | `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーの[レジャーインデックス][]、またはレジャーを自動的に選択するためのショートカット文字列。([レジャーの指定][]を参照してください) |
`generator`パラメーターと`ledger`パラメーターは廃止予定であり、今後予告なしに削除される可能性があります。 `generator`パラメーターと`ledger`パラメーターは廃止予定であり、今後予告なしに削除される可能性があります。
@@ -95,24 +95,24 @@
*WebSocket* *WebSocket*
```{ ```{
"id":3, "id": 3,
"result":{ "result": {
"index":"4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05", "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05",
"ledger_index":6889347, "ledger_index": 6889347,
"node":{ "node": {
"Account":"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "Account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"Balance":"27389517749", "Balance": "27389517749",
"Flags":0, "Flags": 0,
"LedgerEntryType":"AccountRoot", "LedgerEntryType": "AccountRoot",
"OwnerCount":18, "OwnerCount": 18,
"PreviousTxnID":"B6B410172C0B65575D89E464AF5B99937CC568822929ABF87DA75CBD11911932", "PreviousTxnID": "B6B410172C0B65575D89E464AF5B99937CC568822929ABF87DA75CBD11911932",
"PreviousTxnLgrSeq":6592159, "PreviousTxnLgrSeq": 6592159,
"Sequence":1400, "Sequence": 1400,
"index":"4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05" "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05"
} }
}, },
"status":"success", "status": "success",
"type":"response" "type": "response"
} }
``` ```
@@ -121,23 +121,23 @@
``` ```
200 OK 200 OK
{ {
"result":{ "result": {
"index":"4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05", "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05",
"ledger_index":8696234, "ledger_index": 8696234,
"node":{ "node": {
"Account":"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "Account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"Balance":"13176802787", "Balance": "13176802787",
"Flags":0, "Flags": 0,
"LedgerEntryType":"AccountRoot", "LedgerEntryType": "AccountRoot",
"OwnerCount":17, "OwnerCount": 17,
"PreviousTxnID":"E5D0235A236F7CD162C1AB87A0325056AE61CFC63D92D1494AB5D826AAD0CDCA", "PreviousTxnID": "E5D0235A236F7CD162C1AB87A0325056AE61CFC63D92D1494AB5D826AAD0CDCA",
"PreviousTxnLgrSeq":8554742, "PreviousTxnLgrSeq": 8554742,
"Sequence":1406, "Sequence": 1406,
"index":"4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05" "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05"
}, },
"status":"success", "status": "success",
"validated": true "validated": true
} }
} }
``` ```
@@ -145,17 +145,18 @@
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:---------------|:-----------------|:-----------------------------------------| |:---------------|:-----------------|:-----------------------------------------|
| `index` | 文字列 | このledger_entryの一意の識別用キー | | `index` | 文字列 | この[レジャーオブジェクト](ledger-object-types.html)の一意のID。 |
| `ledger_index` | 符号なし整数 | このデータの取得元レジャーの一意のシーケンス番号 | | `ledger_index` | 符号なし整数 | このデータの取得時に使用されたレジャーの[レジャーインデックス][]。 |
| `node` | オブジェクト | `"binary": true`が指定されている場合は省略)[レジャーフォーマット][]に基づく、このレジャーオブジェクトのデータが含まれているオブジェクト。 | | `node` | オブジェクト | _`"binary": true`が指定されている場合は省略)_[レジャーフォーマット][]に基づく、このレジャーオブジェクトのデータが含まれているオブジェクト。 |
| `node_binary` | 文字列 | `"binary":true`が指定されていない場合は省略レジャーオブジェクトのバイナリデータ16進数。 | | `node_binary` | 文字列 | _`"binary":true`が指定されていない場合は省略_ レジャーオブジェクトの[バイナリー表現](serialization.html)16進数。 |
## 考えられるエラー ## 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
* `deprecatedFeature` - 削除されたフィールド(`generator`など)が要求に指定されていました。 * `deprecatedFeature` - 削除されたフィールド(`generator`など)が要求に指定されていました。
* `entryNotFound` - 要求されたレジャーオブジェクトはレジャーに存在しません。
* `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。 * `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。
* `lgrNotFound` - `ledger_hash`または`ledger_index`で指定したレジャーが存在しないか、存在してはいるもののサーバーが保有していません。 * `lgrNotFound` - `ledger_hash`または`ledger_index`で指定したレジャーが存在しないか、存在してはいるもののサーバーが保有していません。
* `malformedAddress` - 要求の[アドレス][]フィールドが誤って指定されています。 * `malformedAddress` - 要求の[アドレス][]フィールドが誤って指定されています。
@@ -165,7 +166,8 @@
* `unknownOption` - 要求に指定されたフィールドが、予期される要求フォーマットのいずれにも一致していません。 * `unknownOption` - 要求に指定されたフィールドが、予期される要求フォーマットのいずれにも一致していません。
<!-- TODO: we should add this ledger format link to rippled-api-links.md. account_objects.md is also including this as a one-off.-->
[レジャーフォーマット]: ledger-data-formats.html <!--{# common link defs #}-->
{% include '_snippets/rippled_versions.md' %}
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,5 +1,5 @@
# book_offers # book_offers
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/BookOffers.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/BookOffers.cpp "Source")
`book_offers`メソッドは、[オーダーブック](http://www.investopedia.com/terms/o/order-book.asp)と呼ばれる、2つの通貨間のオファーのリストを取得します。結果が非常に大きい場合、結果の一部がマーカー付きで返されます。これにより、その後の要求は前回の要求で終わった箇所から再開できます。 `book_offers`メソッドは、[オーダーブック](http://www.investopedia.com/terms/o/order-book.asp)と呼ばれる、2つの通貨間のオファーのリストを取得します。結果が非常に大きい場合、結果の一部がマーカー付きで返されます。これにより、その後の要求は前回の要求で終わった箇所から再開できます。
@@ -12,17 +12,17 @@
``` ```
{ {
"id": 4, "id": 4,
"command": "book_offers", "command": "book_offers",
"taker": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "taker": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"taker_gets": { "taker_gets": {
"currency": "XRP" "currency": "XRP"
}, },
"taker_pays": { "taker_pays": {
"currency": "USD", "currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B" "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"
}, },
"limit": 10 "limit": 10
} }
``` ```
@@ -30,20 +30,20 @@
``` ```
{ {
"method": "book_offers", "method": "book_offers",
"params": [ "params": [
{ {
"taker": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "taker": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"taker_gets": { "taker_gets": {
"currency": "XRP" "currency": "XRP"
}, },
"taker_pays": { "taker_pays": {
"currency": "USD", "currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
}, },
"limit": 10 "limit": 10
} }
] ]
} }
``` ```
@@ -56,19 +56,19 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
[試してみる>](websocket-api-tool.html#book_offers) [試してみる >](websocket-api-tool.html#book_offers)
要求には以下のパラメーターが含まれます。 要求には以下のパラメーターが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:---------------|:-------------------------------------------|:-------------------------------| |:---------------|:-------------------------------------------|:-------------------------------|
| `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。([レジャーの指定][]を参照してください。) | | `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。[レジャーの指定][]を参照してください |
| `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーのシーケンス番号、またはレジャーを自動的に選択するためのショートカット文字列。([レジャーの指定][]を参照してください。) | | `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーの[レジャーインデックス][]、またはレジャーを自動的に選択するためのショートカット文字列。([レジャーの指定][]を参照してください |
| `limit` | 符号なし整数 | _省略可_ 指定されている場合、サーバーはこの制限を超える数のオファーを結果に含めません。資金供給のないオファーはサーバーにより省略されるため、返される結果の総数はこの制限よりも少ないことがあります。 | | `limit` | 符号なし整数 | _省略可_ 指定されている場合、サーバーはこの制限を超える数のオファーを結果に含めません。資金供給のないオファーはサーバーにより省略されるため、返される結果の総数はこの制限よりも少ないことがあります。 |
| `marker` | [マーカー][] | _省略可_ 以前にページネーションされた応答の値。その応答で終わった箇所からデータの取得を再開します。 | | `marker` | [マーカー][] | _省略可_ 以前にページネーションされた応答の値。その応答を停止した箇所からデータの取得を再開します。 |
| `taker` | 文字列 | _省略可_ パースペクティブとして使用するアカウントの[アドレス][]。このアカウントが発行した[資金供給のないオファー](offers.html#オファーのライフサイクル)は常に応答に含まれます。(これを使用して、キャンセルしたい各自のオーダーを検索できます。) | | `taker` | 文字列 | _省略可_ パースペクティブとして使用するアカウントの[アドレス][]。このアカウントが発行した[資金供給のないオファー](offers.html#オファーのライフサイクル)は常に応答に含まれます。(これを使用して、キャンセルしたい各自のオーダーを検索できます。) |
| `taker_gets` | オブジェクト | オファーを受諾するアカウントが受け取る通貨を、[通貨額][]と同様に、`currency`フィールドと`issuer`フィールドを持つオブジェクトとして指定しますXRPの場合はissuerを省略。 | | `taker_gets` | オブジェクト | オファーを受諾するアカウントが受け取る通貨を、[通貨額][通貨額]と同様に、`currency`フィールドと`issuer`フィールドを持つオブジェクトとして指定しますXRPの場合はissuerを省略。 |
| `taker_pays` | オブジェクト | オファーを受諾するアカウントが支払う通貨を、[通貨額][]と同様に、`currency`フィールドと`issuer`フィールドを持つオブジェクトとして指定しますXRPの場合はissuerを省略。 | | `taker_pays` | オブジェクト | オファーを受諾するアカウントが支払う通貨を、[通貨額][通貨額]と同様に、`currency`フィールドと`issuer`フィールドを持つオブジェクトとして指定しますXRPの場合はissuerを省略。 |
## 応答フォーマット ## 応答フォーマット
@@ -80,60 +80,60 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
``` ```
{ {
"id": 11, "id": 11,
"status": "success", "status": "success",
"type": "response", "type": "response",
"result": { "result": {
"ledger_current_index": 7035305, "ledger_current_index": 7035305,
"offers": [ "offers": [
{ {
"Account": "rM3X3QSr8icjTGpaF52dozhbT2BZSXJQYM", "Account": "rM3X3QSr8icjTGpaF52dozhbT2BZSXJQYM",
"BookDirectory": "7E5F614417C2D0A7CEFEB73C4AA773ED5B078DE2B5771F6D55055E4C405218EB", "BookDirectory": "7E5F614417C2D0A7CEFEB73C4AA773ED5B078DE2B5771F6D55055E4C405218EB",
"BookNode": "0000000000000000", "BookNode": "0000000000000000",
"Flags": 0, "Flags": 0,
"LedgerEntryType": "Offer", "LedgerEntryType": "Offer",
"OwnerNode": "0000000000000AE0", "OwnerNode": "0000000000000AE0",
"PreviousTxnID": "6956221794397C25A53647182E5C78A439766D600724074C99D78982E37599F1", "PreviousTxnID": "6956221794397C25A53647182E5C78A439766D600724074C99D78982E37599F1",
"PreviousTxnLgrSeq": 7022646, "PreviousTxnLgrSeq": 7022646,
"Sequence": 264542, "Sequence": 264542,
"TakerGets": { "TakerGets": {
"currency": "EUR", "currency": "EUR",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "17.90363633316433" "value": "17.90363633316433"
}, },
"TakerPays": { "TakerPays": {
"currency": "USD", "currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "27.05340557506234" "value": "27.05340557506234"
}, },
"index": "96A9104BF3137131FF8310B9174F3B37170E2144C813CA2A1695DF2C5677E811", "index": "96A9104BF3137131FF8310B9174F3B37170E2144C813CA2A1695DF2C5677E811",
"quality": "1.511056473200875" "quality": "1.511056473200875"
}, },
{ {
"Account": "rhsxKNyN99q6vyYCTHNTC1TqWCeHr7PNgp", "Account": "rhsxKNyN99q6vyYCTHNTC1TqWCeHr7PNgp",
"BookDirectory": "7E5F614417C2D0A7CEFEB73C4AA773ED5B078DE2B5771F6D5505DCAA8FE12000", "BookDirectory": "7E5F614417C2D0A7CEFEB73C4AA773ED5B078DE2B5771F6D5505DCAA8FE12000",
"BookNode": "0000000000000000", "BookNode": "0000000000000000",
"Flags": 131072, "Flags": 131072,
"LedgerEntryType": "Offer", "LedgerEntryType": "Offer",
"OwnerNode": "0000000000000001", "OwnerNode": "0000000000000001",
"PreviousTxnID": "8AD748CD489F7FF34FCD4FB73F77F1901E27A6EFA52CCBB0CCDAAB934E5E754D", "PreviousTxnID": "8AD748CD489F7FF34FCD4FB73F77F1901E27A6EFA52CCBB0CCDAAB934E5E754D",
"PreviousTxnLgrSeq": 7007546, "PreviousTxnLgrSeq": 7007546,
"Sequence": 265, "Sequence": 265,
"TakerGets": { "TakerGets": {
"currency": "EUR", "currency": "EUR",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "2.542743233917848" "value": "2.542743233917848"
}, },
"TakerPays": { "TakerPays": {
"currency": "USD", "currency": "USD",
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
"value": "4.19552633596446" "value": "4.19552633596446"
}, },
"index": "7001797678E886E22D6DE11AF90DF1E08F4ADC21D763FAFB36AF66894D695235", "index": "7001797678E886E22D6DE11AF90DF1E08F4ADC21D763FAFB36AF66894D695235",
"quality": "1.65" "quality": "1.65"
} }
] ]
} }
} }
``` ```
@@ -142,41 +142,41 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
``` ```
200 OK 200 OK
{ {
"result": { "result": {
"ledger_current_index": 8696243, "ledger_current_index": 8696243,
"offers": [], "offers": [],
"status": "success", "status": "success",
"validated": false "validated": false
} }
} }
``` ```
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれています。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-----------------------|:-------------------------------------------|:------------------------------------------| |:-----------------------|:--------------------------|:------------------------|
| `ledger_current_index` | 整数 | (レジャーバージョンが指定されている場合は省略)このデータの取得時に使用したレジャーバージョンのシーケンス番号。 | | `ledger_current_index` | 数値 - [レジャーインデックス][] | _`ledger_current_index`が指定されている場合は省略)_ この情報の取得時に使用した、現在処理中のレジャーバージョンの[レジャーインデックス][]。 |
| `ledger_index` | 整数 | ledger\_current\_indexが代わりに指定されている場合は省略)要求で指定される、このデータの取得時に使用されたレジャーバージョンのシーケンス番号。 | | `ledger_index` | 数値 - [レジャーインデックス][] | _`ledger_current_index`が指定されている場合は省略_ 要求に従って、このデータの取得時に使用されたレジャーバージョンのレジャーインデックス。 |
| `ledger_hash` | 文字列 | (省略される場合があります)要求で指定される、このデータの取得時に使用されたレジャーバージョンの16進数ハッシュ。 | | `ledger_hash` | 文字列 - [Hash][] | _(省略される場合があります)_ 要求に従って、このデータの取得時に使用されたレジャーバージョンの識別用ハッシュ。 |
| `marker` | [マーカー][] | (省略される場合があります)応答がページネーションされていることを示す、サーバーが定義した値。この値を次のコールに渡して、このコールで終わった箇所から再開します。この後に情報ページがない場合は省略されます。 | | `marker` | [マーカー][] | _(省略される場合があります)_ 応答がページネーションされていることを示す、サーバーが定義した値。この値を次のコールに渡して、このコールで終わった箇所から再開します。この後に情報ページがない場合は省略されます。 |
| `offers` | 配列 | Offerオブジェクトの配列。各オブジェクトには[Offer オブジェクト](offer.html)のフィールドが含まれています。 | | `offers` | 配列 | Offerオブジェクトの配列。各オブジェクトには[Offer オブジェクト](offer.html)のフィールドが含まれています。 |
`offers`配列の要素には、Offerの標準フィールドの他に以下のフィールドが含まれます。 `offers`配列の要素には、Offerの標準フィールドの他に以下のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:--------------------|:---------------------------------|:--------------------| |:--------------------|:---------------------------------|:--------------------|
| `owner_funds` | 文字列 | オファーの発行元が保有する取引可能なTakerGets通貨の金額。XRPはdrop単位で表されます。その他のすべての通貨は10進数値として表されます。1人のトレーダーの複数のオファーが同一のブックに含まれている場合、このフィールドは最高順位のオファーにのみ含まれます。 | | `owner_funds` | 文字列 | オファーの発行元が保有する取引可能なTakerGets通貨の金額。XRPはdrop単位で表されます。その他のすべての通貨は10進数値として表されます。1人のトレーダーの複数のオファーが同一のブックに含まれている場合、このフィールドは最高順位のオファーにのみ含まれます。 |
| `taker_gets_funded` | 文字列XRPまたはオブジェクトXRP以外 | (部分的に資金供給されているオファーのみに含まれます)オファーの資金供給ステータスが指定されている場合に、受取人が受領できる最大通貨額。 | | `taker_gets_funded` | 文字列XRPまたはオブジェクトXRP以外 | (部分的に資金供給されているオファーのみに含まれます)オファーの資金供給ステータスが指定されている場合に、受取人が受領できる最大通貨額。 |
| `taker_pays_funded` | 文字列XRPまたはオブジェクトXRP以外 | (部分的に資金供給されているオファーのみに含まれます)オファーの資金供給ステータスが指定されている場合に、受取人が支払う最大通貨額。 | | `taker_pays_funded` | 文字列XRPまたはオブジェクトXRP以外 | (部分的に資金供給されているオファーのみに含まれます)オファーの資金供給ステータスが指定されている場合に、受取人が支払う最大通貨額。 |
| `quality` | 文字列 | 為替レート(`taker_pays``taker_gets`で割った比率)。公正を期すため、同じクオリティのオファーは先入れ先出しで自動的に受諾されます。(つまり、複数の人々が通貨を同じレートで取引するオファーを出した場合、最も古いオファーが最初に受諾されます。) | | `quality` | 文字列 | 為替レート(`taker_pays``taker_gets`で割った比率)。公正を期すため、同じクオリティのオファーは先入れ先出しで自動的に受諾されます。(つまり、複数の人々が通貨を同じレートで取引するオファーを出した場合、最も古いオファーが最初に受諾されます。) |
## 考えられるエラー ## 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
* `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。 * `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。
* `lgrNotFound` - `ledger_hash`または`ledger_index`指定されているレジャーが存在しないか、存在しているサーバーにはありません。 * `lgrNotFound` - `ledger_hash`または`ledger_index`指定したレジャーが存在しないか、存在しているもののサーバーが保有していません。
* `srcCurMalformed` - 要求の`taker_pays`フィールドのフォーマットが適切ではありません。 * `srcCurMalformed` - 要求の`taker_pays`フィールドのフォーマットが適切ではありません。
* `dstAmtMalformed` - 要求の`taker_gets`フィールドのフォーマットが適切ではありません。 * `dstAmtMalformed` - 要求の`taker_gets`フィールドのフォーマットが適切ではありません。
* `srcIsrMalformed` - 要求の`taker_pays`フィールドの`issuer`フィールドが無効です。 * `srcIsrMalformed` - 要求の`taker_pays`フィールドの`issuer`フィールドが無効です。

View File

@@ -1,5 +1,5 @@
# deposit_authorized # deposit_authorized
[[ソース]<br>](https://github.com/ripple/rippled/blob/817d2339b8632cb2f97d3edd6f7af33aa7631744/src/ripple/rpc/handlers/DepositAuthorized.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/817d2339b8632cb2f97d3edd6f7af33aa7631744/src/ripple/rpc/handlers/DepositAuthorized.cpp "Source")
`deposit_authorized`コマンドは、あるアカウントに別のアカウントへ支払を直接送金する権限があるかどうかを示します。アカウントへの送金に承認を義務付ける方法については、[Deposit Authorization](depositauth.html)を参照してください。 `deposit_authorized`コマンドは、あるアカウントに別のアカウントへ支払を直接送金する権限があるかどうかを示します。アカウントへの送金に承認を義務付ける方法については、[Deposit Authorization](depositauth.html)を参照してください。
@@ -12,11 +12,11 @@
```json ```json
{ {
"id": 1, "id": 1,
"command": "deposit_authorized", "command": "deposit_authorized",
"source_account": "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de", "source_account": "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de",
"destination_account": "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8", "destination_account": "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8",
"ledger_index": "validated" "ledger_index": "validated"
} }
``` ```
@@ -24,14 +24,14 @@
```json ```json
{ {
"method": "deposit_authorized", "method": "deposit_authorized",
"params": [ "params": [
{ {
"source_account": "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de", "source_account": "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de",
"destination_account": "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8", "destination_account": "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8",
"ledger_index": "validated" "ledger_index": "validated"
} }
] ]
} }
``` ```
@@ -46,12 +46,12 @@ rippled deposit_authorized rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de rsUiUMpnrgxQp24dJY
要求には以下のパラメーターが含まれます。 要求には以下のパラメーターが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:----------------------|:---------------------------|:------------------------| |:----------------------|:---------------------------|:------------------------|
| `source_account` | 文字列 - [アドレス][] | 発生し得る支払の送金元。 | | `source_account` | 文字列 - [アドレス][] | 発生し得る支払の送金元。 |
| `destination_account` | 文字列 - [アドレス][] | 発生し得る支払の送金先。 | | `destination_account` | 文字列 - [アドレス][] | 発生し得る支払の送金先。 |
| `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。([レジャーの指定][]を参照してください。) | | `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。[レジャーの指定][]を参照してください |
| `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーのシーケンス番号、またはレジャーを自動的に選択するためのショートカット文字列。([レジャーの指定][]を参照してください。) | | `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーの[レジャーインデックス][]、またはレジャーを自動的に選択するためのショートカット文字列。([レジャーの指定][]を参照してください |
## 応答フォーマット ## 応答フォーマット
@@ -64,17 +64,17 @@ rippled deposit_authorized rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de rsUiUMpnrgxQp24dJY
```json ```json
{ {
"id": 1, "id": 1,
"result": { "result": {
"deposit_authorized": true, "deposit_authorized": true,
"destination_account": "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8", "destination_account": "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8",
"ledger_hash": "BD03A10653ED9D77DCA859B7A735BF0580088A8F287FA2C5403E0A19C58EF322", "ledger_hash": "BD03A10653ED9D77DCA859B7A735BF0580088A8F287FA2C5403E0A19C58EF322",
"ledger_index": 8, "ledger_index": 8,
"source_account": "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de", "source_account": "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de",
"validated": true "validated": true
}, },
"status": "success", "status": "success",
"type": "response" "type": "response"
} }
``` ```
@@ -82,15 +82,15 @@ rippled deposit_authorized rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de rsUiUMpnrgxQp24dJY
```json ```json
{ {
"result": { "result": {
"deposit_authorized": true, "deposit_authorized": true,
"destination_account": "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8", "destination_account": "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8",
"ledger_hash": "BD03A10653ED9D77DCA859B7A735BF0580088A8F287FA2C5403E0A19C58EF322", "ledger_hash": "BD03A10653ED9D77DCA859B7A735BF0580088A8F287FA2C5403E0A19C58EF322",
"ledger_index": 8, "ledger_index": 8,
"source_account": "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de", "source_account": "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de",
"status": "success", "status": "success",
"validated": true "validated": true
} }
} }
``` ```
@@ -101,41 +101,41 @@ Loading: "/etc/rippled.cfg"
2018-Jul-30 20:07:38.771658157 HTTPClient:NFO Connecting to 127.0.0.1:5005 2018-Jul-30 20:07:38.771658157 HTTPClient:NFO Connecting to 127.0.0.1:5005
{ {
"result" : { "result" : {
"deposit_authorized" : true, "deposit_authorized" : true,
"destination_account" : "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8", "destination_account" : "rsUiUMpnrgxQp24dJYZDhmV4bE3aBtQyt8",
"ledger_hash" : "BD03A10653ED9D77DCA859B7A735BF0580088A8F287FA2C5403E0A19C58EF322", "ledger_hash" : "BD03A10653ED9D77DCA859B7A735BF0580088A8F287FA2C5403E0A19C58EF322",
"ledger_index" : 8, "ledger_index" : 8,
"source_account" : "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de", "source_account" : "rEhxGqkqPPSxQ3P25J66ft5TwpzV14k2de",
"status" : "success", "status" : "success",
"validated" : true "validated" : true
} }
} }
``` ```
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれています。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-----------------------|:---------------------|:-----------------------------| |:-----------------------|:--------------------------|:------------------------|
| `deposit_authorized` | ブール値 | 指定の支払元アカウントから支払先アカウントへの直接送金が承認されているかどうか。`true`の場合、支払先アカウントで[Deposit Authorization](depositauth.html)を必要としていないか、または支払元アカウントが事前承認されています。 | | `deposit_authorized` | ブール値 | 指定の支払元アカウントから支払先アカウントへの直接送金が承認されているかどうか。`true`の場合、支払先アカウントで[Deposit Authorization](depositauth.html)を必要としていないか、または支払元アカウントが事前承認されています。 |
| `destination_account` | 文字列 - [アドレス][] | 要求に指定されている宛先アカウント。 | | `destination_account` | 文字列 - [アドレス][] | 要求に指定されている宛先アカウント。 |
| `ledger_hash` | 文字列 | _省略される場合があります_ この応答の生成に使用されたレジャーの識別用ハッシュ。 | | `ledger_hash` | 文字列 | _省略される場合があります_ この応答の生成に使用されたレジャーの識別用ハッシュ。 |
| `ledger_index` | 数値 | _省略される場合があります_ この応答の生成に使用されたレジャーバージョンのシーケンス番号。 | | `ledger_index` | 数値 - [レジャーインデックス][] | _省略される場合があります_ この応答の生成に使用されたレジャーバージョンのレジャーインデックス。 |
| `ledger_current_index` | 数値 | _省略される場合があります_ この応答の生成に使用された現在処理中のレジャーバージョンのシーケンス番号。 | | `ledger_current_index` | 数値 - [レジャーインデックス][] | _省略される場合があります_ この応答の生成に使用された現在処理中のレジャーバージョンのレジャーインデックス。 |
| `source_account` | 文字列 - [アドレス][] | 要求に指定されている支払元アカウント。 | | `source_account` | 文字列 - [アドレス][] | 要求に指定されている支払元アカウント。 |
| `validated` | ブール値 | _省略される場合があります_ `true`の場合、検証済みレジャーバージョンからの情報が取り込まれます。 | | `validated` | ブール値 | _省略される場合があります_`true`の場合、検証済みレジャーバージョンからの情報が取り込まれます。 |
**注記:** `deposit_authorized`ステータスが`true`でも、指定の支払元から指定の支払先への送金が可能であるとは保証されません。たとえば、支払先アカウントに指定通貨の[トラストライン](trust-lines-and-issuing.html)がない場合や、送金に十分な流動性がない場合があります。 **注記:** `deposit_authorized`ステータスが`true`でも、指定の支払元から指定の支払先への送金が可能であるとは保証されません。たとえば、支払先アカウントに指定通貨の[トラストライン](trust-lines-and-issuing.html)がない場合や、送金に十分な流動性がない場合があります。
## 考えられるエラー ## 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
* `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。 * `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。
* `actMalformed` - 要求の`source_account`フィールドまたは`destination_account`フィールドに指定されている[アドレス][]のフォーマットが適切ではありません。(入力ミスが含まれていたり、長さが正しくない場合は、チェックサムは失敗します。) * `actMalformed` - 要求の`source_account`フィールドまたは`destination_account`フィールドに指定されている[アドレス][]のフォーマットが適切ではありません。(入力ミスが含まれていたり、長さが正しくない場合は、チェックサムは失敗します。)
* `dstActNotFound` - 要求の`destination_account`フィールドがレジャーのアカウントに対応していません。 * `dstActNotFound` - 要求の`destination_account`フィールドがレジャーのアカウントに対応していません。
* `lgrNotFound` - `ledger_hash`または`ledger_index`指定されているレジャーが存在しないか、存在しているサーバーにはありません。 * `lgrNotFound` - `ledger_hash`または`ledger_index`指定したレジャーが存在しないか、存在しているもののサーバーが保有していません。
* `srcActNotFound` - 要求の`source_account`フィールドがレジャーのアカウントに対応していません。 * `srcActNotFound` - 要求の`source_account`フィールドがレジャーのアカウントに対応していません。

View File

@@ -1,5 +1,5 @@
# channel_authorize # channel_authorize
[[ソース]<br>](https://github.com/ripple/rippled/blob/d4a56f223a3b80f64ff70b4e90ab6792806929ca/src/ripple/rpc/handlers/PayChanClaim.cpp#L41 "Source") [[ソース]](https://github.com/ripple/rippled/blob/d4a56f223a3b80f64ff70b4e90ab6792806929ca/src/ripple/rpc/handlers/PayChanClaim.cpp#L41 "Source")
_[PayChan Amendment][]が有効になっている必要があります。[新規: rippled 0.33.0][]_ _[PayChan Amendment][]が有効になっている必要があります。[新規: rippled 0.33.0][]_
@@ -14,11 +14,12 @@ _[PayChan Amendment][]が有効になっている必要があります。[新
``` ```
{ {
"id":"channel_authorize_example_id1", "id": "channel_authorize_example_id1",
"command":"channel_authorize", "command": "channel_authorize",
"channel_id":"5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3", "channel_id": "5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3",
"secret":"s████████████████████████████", "seed": "s████████████████████████████",
"amount":"1000000" "key_type": "secp256k1",
"amount": "1000000",
} }
``` ```
@@ -29,33 +30,40 @@ POST http://localhost:5005/
Content-Type: application/json Content-Type: application/json
{ {
"method":"channel_authorize", "method": "channel_authorize",
"params":[{ "params": [{
"channel_id":"5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3", "channel_id": "5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3",
"secret":"s████████████████████████████", "seed": "s████████████████████████████",
"amount":"1000000" "key_type": "secp256k1",
}] "amount": "1000000"
}]
} }
``` ```
*コマンドライン* *コマンドライン*
``` ```
#Syntax: channel_authorize <private_key> <channel_id> <drops> #Syntax: channel_authorize <private_key> [<key_type>] <channel_id> <drops>
rippled channel_authorize s████████████████████████████ 5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3 1000000 rippled channel_authorize s████████████████████████████ secp256k1 5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3 1000000
``` ```
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
要求には以下のパラメーターが含まれます。 要求には以下のパラメーターが含まれます。
| フィールド | 型 | 説明 | | フィールド | 型 | 説明 |
|-------|------|-------------| |-------|------|-------------|
| `channel_id` | 文字列 | Payment Channelが使用する一意のID。 | `channel_id` | 文字列 | Payment Channelが使用する一意のID。
| `secret` | 文字列 | クレームへの署名に使用するシークレットキー。これは、Channelに指定されている公開鍵と同じキーペアである必要があります。 | | `secret` | 文字列 | _省略可_ クレームへの署名に使用する秘密鍵。これは、Channelに指定されている公開鍵と同じキーペアである必要があります。`seed``seed_hex``passphrase`と同時に使用することはできません。[更新: rippled 1.4.0][] |
| `seed ` | 文字列 | _省略可_ クレームへの署名に使用する秘密シード。これは、Channelに指定されている公開鍵と同じキーペアである必要があります。XRP Ledgerの[base58][]フォーマットにする必要があります。指定する場合は、`key_type`も指定する必要があります。`secret``seed_hex``passphrase`と同時に使用することはできません。[新規: rippled 1.4.0][] |
| `seed_hex` | 文字列 | _省略可_ クレームへの署名に使用する秘密シード。これは、Channelに指定されている公開鍵と同じキーペアである必要があります。16進フォーマットにする必要があります。指定する場合は、`key_type`も指定する必要があります。`secret``seed``passphrase`と同時に使用することはできません。[新規: rippled 1.4.0][] |
| `passphrase` | 文字列 | _省略可_ クレームへの署名に使用する文字列パスフレーズ。これは、Channelに指定されている公開鍵と同じキーペアである必要があります。[このパスフレーズから導出した鍵](cryptographic-keys.html#鍵導出)は、チャネルで指定された公開鍵と一致する必要があります。指定する場合は、`key_type`も指定する必要があります。`secret``seed``seed_hex`と同時に使用することはできません。[新規: rippled 1.4.0][] |
| `key_type` | 文字列 | _省略可_ 指定された暗号化キーペアの[署名アルゴリズム](cryptographic-keys.html#署名アルゴリズム)。有効な種類は、`secp256k1`または`ed25519`です。デフォルトは`secp256k1`です。[新規: rippled 1.4.0][] |
| `amount` | 文字列 | 承認するXRPの累積額drop数送金先がこのChannelからすでに受領しているXRPの額がこのフィールドの額よりも少ない場合、このメソッドで作成される署名を使用して差額を清算できます。 | | `amount` | 文字列 | 承認するXRPの累積額drop数送金先がこのChannelからすでに受領しているXRPの額がこのフィールドの額よりも少ない場合、このメソッドで作成される署名を使用して差額を清算できます。 |
**注記:** このメソッドでクレームに署名するときにはEd25519キーは使用できません。これは既知のバグですRIPD-1474 要求では、`secret``seed``seed_hex``passphrase`のうち1つだけを指定する**必要があります**
**警告:** 信頼できないサーバーに対して、またはセキュリティが確保されていないネットワーク接続を通じて秘密鍵を送信しないでください。(これには、この要求の`secret``seed``seed_hex`、または`passphrase`フィールドも含まれますこのメソッドは、自身が実行するサーバー、または資金を預けている十分に信頼できるサーバーへの、安全で暗号化されたネットワーク接続でのみ使用してください。そうでない場合、盗聴者があなたの秘密鍵を使用してクレームに署名し、同じキーペアを使用してこのPayment Channelなどから資金をすべて持ち出す可能性があります。手順については、[安全な署名の設定](set-up-secure-signing.html)を参照してください。
## 応答フォーマット ## 応答フォーマット
@@ -67,11 +75,11 @@ rippled channel_authorize s█████████████████
``` ```
{ {
"id":"channel_authorize_example_id1", "id": "channel_authorize_example_id1",
"status":"success" "status": "success"
"result":{ "result": {
"signature":"304402204EF0AFB78AC23ED1C472E74F4299C0C21F1B21D07EFC0A3838A420F76D783A400220154FB11B6F54320666E4C36CA7F686C16A3A0456800BBC43746F34AF50290064", "signature": "304402204EF0AFB78AC23ED1C472E74F4299C0C21F1B21D07EFC0A3838A420F76D783A400220154FB11B6F54320666E4C36CA7F686C16A3A0456800BBC43746F34AF50290064",
} }
} }
``` ```
@@ -81,10 +89,10 @@ rippled channel_authorize s█████████████████
200 OK 200 OK
{ {
"result":{ "result": {
"signature":"304402204EF0AFB78AC23ED1C472E74F4299C0C21F1B21D07EFC0A3838A420F76D783A400220154FB11B6F54320666E4C36CA7F686C16A3A0456800BBC43746F34AF50290064", "signature": "304402204EF0AFB78AC23ED1C472E74F4299C0C21F1B21D07EFC0A3838A420F76D783A400220154FB11B6F54320666E4C36CA7F686C16A3A0456800BBC43746F34AF50290064",
"status":"success" "status": "success"
} }
} }
``` ```
@@ -92,10 +100,10 @@ rippled channel_authorize s█████████████████
``` ```
{ {
"result":{ "result": {
"signature":"304402204EF0AFB78AC23ED1C472E74F4299C0C21F1B21D07EFC0A3838A420F76D783A400220154FB11B6F54320666E4C36CA7F686C16A3A0456800BBC43746F34AF50290064", "signature": "304402204EF0AFB78AC23ED1C472E74F4299C0C21F1B21D07EFC0A3838A420F76D783A400220154FB11B6F54320666E4C36CA7F686C16A3A0456800BBC43746F34AF50290064",
"status":"success" "status": "success"
} }
} }
``` ```
@@ -103,13 +111,14 @@ rippled channel_authorize s█████████████████
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| フィールド | 型 | 説明 | | フィールド | 型 | 説明 |
|-------|------|-------------| |-------|------|-------------|
| `signature` | 文字列 | このクレームの署名16進値。このクレームを処理するには、Payment Channelの送金先アカウントがこの署名、正確なChannel ID、XRPの額、およびChannelの公開鍵が指定された[PaymentChannelClaimトランザクション][]を送信する必要があります。 | | `signature` | 文字列 | このクレームの署名16進値。このクレームを処理するには、Payment Channelの送金先アカウントがこの署名、正確なChannel ID、XRPの額、およびChannelの公開鍵が指定された[PaymentChannelClaimトランザクション][]を送信する必要があります。 |
## 考えられるエラー ## 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
* `badKeyType` - 要求の`key_type`パラメーターは、有効なキータイプではありません。(有効なタイプは、`secp256k1`または`ed25519`です。)[新規: rippled 1.4.0][]
* `badSeed` - 要求の`secret`が有効なシークレットキーではありません。 * `badSeed` - 要求の`secret`が有効なシークレットキーではありません。
* `channelAmtMalformed` - 要求の`amount`が有効な[XRPの額][XRP、drop単位]ではありません。 * `channelAmtMalformed` - 要求の`amount`が有効な[XRPの額][XRP、drop単位]ではありません。
* `channelMalformed` - 要求の`channel_id`が有効なChannel IDではありません。Channel IDは256ビット64文字の16進文字列です。 * `channelMalformed` - 要求の`channel_id`が有効なChannel IDではありません。Channel IDは256ビット64文字の16進文字列です。

View File

@@ -1,5 +1,5 @@
# subscribe # subscribe
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/Subscribe.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/Subscribe.cpp "Source")
`subscribe`メソッドは、特定のイベントが発生した場合に、定期的に通知するようサーバーに要求します。 `subscribe`メソッドは、特定のイベントが発生した場合に、定期的に通知するようサーバーに要求します。
@@ -12,9 +12,9 @@
``` ```
{ {
"id": "Example watch Bitstamp's hot wallet", "id": "Example watch Bitstamp's hot wallet",
"command": "subscribe", "command": "subscribe",
"accounts": ["rrpNnNLKrartuEqfJGpqyDwPj1AFPg9vn1"] "accounts": ["rrpNnNLKrartuEqfJGpqyDwPj1AFPg9vn1"]
} }
``` ```
@@ -22,20 +22,20 @@
``` ```
{ {
"id": "Example subscribe to XRP/GateHub USD order book", "id": "Example subscribe to XRP/GateHub USD order book",
"command": "subscribe", "command": "subscribe",
"books": [ "books": [
{ {
"taker_pays": { "taker_pays": {
"currency": "XRP" "currency": "XRP"
}, },
"taker_gets": { "taker_gets": {
"currency": "USD", "currency": "USD",
"issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq" "issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq"
}, },
"snapshot": true "snapshot": true
} }
] ]
} }
``` ```
@@ -43,49 +43,49 @@
``` ```
{ {
"id": "Example watch for new validated ledgers", "id": "Example watch for new validated ledgers",
"command": "subscribe", "command": "subscribe",
"streams": ["ledger"] "streams": ["ledger"]
} }
``` ```
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
[試してみる>](websocket-api-tool.html#subscribe) [試してみる >](websocket-api-tool.html#subscribe)
要求には以下のパラメーターが含まれます。 要求には以下のパラメーターが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:--------------------|:-------|:----------------------------------------------| |:--------------------|:-------|:----------------------------------------------|
| `streams` | 配列 | _省略可_ 以下に説明する、サブスクライブする汎用ストリームの文字列名の配列。 | | `streams` | 配列 | _省略可_ 以下に説明する、サブスクライブする汎用ストリームの文字列名の配列。 |
| `accounts` | 配列 | _省略可_ 検証済みトランザクションを監視するアカウントの一意のアドレスを持つ配列。これらのアドレスはXRP Ledgerの[base58][]フォーマットで記述されている必要があります。サーバーは、1つ以上のアカウントに影響するすべてのトランザクションについて通知を送信します。 | | `accounts` | 配列 | _省略可_ 検証済みトランザクションを監視するアカウントの一意のアドレスを持つ配列。これらのアドレスはXRP Ledgerの[base58][]フォーマットで記述されている必要があります。サーバーは、1つ以上のアカウントに影響するすべてのトランザクションについて通知を送信します。 |
| `accounts_proposed` | 配列 | _省略可_`accounts`と同様ですが、まだファイナライズされていないトランザクションを含みます。 | | `accounts_proposed` | 配列 | _省略可_ `accounts`と同様ですが、まだファイナライズされていないトランザクションを含みます。 |
| `books` | 配列 | _省略可_ 以下に説明するとおり、更新の監視のために[オーダーブック](http://www.investopedia.com/terms/o/order-book.asp)を定義するオブジェクトの配列。 | | `books` | 配列 | _省略可_ 以下に説明するとおり、更新の監視のために[オーダーブック](http://www.investopedia.com/terms/o/order-book.asp)を定義するオブジェクトの配列。 |
| `url` | 文字列 | Websocketでは省略可、それ以外では必須サーバーが各イベントのJSON-RPCコールバックを送信するURL。*管理者専用。* | | `url` | 文字列 | Websocketでは省略可、それ以外では必須サーバーが各イベントのJSON-RPCコールバックを送信するURL。*管理者専用。* |
| `url_username` | 文字列 | _省略可_ コールバックURLで基本認証を行うためのユーザー名。 | | `url_username` | 文字列 | _省略可_ コールバックURLで基本認証を行うためのユーザー名。 |
| `url_password` | 文字列 | _省略可_ コールバックURLで基本認証を行うためのパスワード。 | | `url_password` | 文字列 | _省略可_ コールバックURLで基本認証を行うためのパスワード。 |
以下のパラメーターは廃止予定で、今後予告なしに削除される可能性があります。`user`, `password`, `rt_accounts` 以下のパラメーターは廃止予定で、今後予告なしに削除される可能性があります。`user``password``rt_accounts`
`streams`パラメーターは、以下のデフォルトの情報ストリームへのアクセスを可能にします。 `streams`パラメーターは、以下のデフォルトの情報ストリームへのアクセスを可能にします。
* `server` - `rippled` サーバーのステータス(ネットワーク接続など)が変更されるたびにメッセージを送信します。 * `server` - `rippled`サーバーのステータス(ネットワーク接続など)が変更されるたびにメッセージを送信します。
* `ledger` - コンセンサスプロセスで新しい検証済みレジャーが宣言されるたびにメッセージを送信します。 * `ledger` - コンセンサスプロセスで新しい検証済みレジャーが宣言されるたびにメッセージを送信します。
* `transactions` - 閉鎖済みレジャーにトランザクションが追加されるたびにメッセージを送信します。 * `transactions` - 決済済みレジャーにトランザクションが追加されるたびにメッセージを送信します。
* `transactions_proposed` - 閉鎖済みレジャーにトランザクションが追加される場合や、検証済みレジャーにまだ追加されておらず、今後も追加される見込みのない一部のトランザクションが閉鎖済みレジャーに追加される場合に、メッセージを送信します。提案されたすべてのトランザクションが検証前に表示されるわけではありません。 * `transactions_proposed` - 決済済みレジャーにトランザクションが追加される場合や、検証済みレジャーにまだ追加されておらず、今後も追加される見込みのない一部のトランザクションが決済済みレジャーに追加される場合に、メッセージを送信します。提案されたすべてのトランザクションが検証前に表示されるわけではありません。**注記:** 検証済みレジャーには[失敗したトランザクションも記録されます](transaction-results.html)。これは、このようなトランザクションにはスパム対策のトランザクション手数料が課されるためです。
**注記:** 検証済みレジャーには[失敗したトランザクションも記録されます](transaction-results.html)。これは、このようなトランザクションにはスパム対策のトランザクション手数料が課されるためです。
* `validations` - サーバーがバリデータを信頼しているか否かにかかわらず、サーバーが検証メッセージを受信するたびに、メッセージを送信します。(個々の`rippled`は、サーバーが少なくとも定数の信頼できるバリデータから検証メッセージを受信した時点で、レジャーが検証済みであると宣言します。) * `validations` - サーバーがバリデータを信頼しているか否かにかかわらず、サーバーが検証メッセージを受信するたびに、メッセージを送信します。(個々の`rippled`は、サーバーが少なくとも定数の信頼できるバリデータから検証メッセージを受信した時点で、レジャーが検証済みであると宣言します。)
* `consensus` - サーバーがコンセンサスサイクルのフェーズopen、establish、acceptedなどを変更するたびにメッセージを送信します。
* `peer_status` - **(管理者専用)** 接続しているピア`rippled`サーバーに関する情報(特にコンセンサスプロセスに関する情報)。 * `peer_status` - **(管理者専用)** 接続しているピア`rippled`サーバーに関する情報(特にコンセンサスプロセスに関する情報)。
`books` 配列が指定されている場合、この配列の各要素は、以下のフィールドを持つオブジェクトです。 `books`配列が指定されている場合、この配列の各要素は、以下のフィールドを持つオブジェクトです。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:-------------|:--------|:----------------------------------------------------| |:-------------|:--------|:----------------------------------------------------|
| `taker_gets` | オブジェクト | オファーを受諾するアカウントが受け取る通貨を[金額なしの通貨オブジェクト](basic-data-types.html#金額なしでの通貨の指定)として指定します。 | | `taker_gets` | オブジェクト | オファーを受諾するアカウントが受け取る通貨を[金額なしの通貨オブジェクト](basic-data-types.html#金額なしでの通貨の指定)として指定します。 |
| `taker_pays` | オブジェクト | オファーを受諾するアカウントが支払う通貨を[金額なしの通貨オブジェクト](basic-data-types.html#金額なしでの通貨の指定)として指定します。 | | `taker_pays` | オブジェクト | オファーを受諾するアカウントが支払う通貨を[金額なしの通貨オブジェクト](basic-data-types.html#金額なしでの通貨の指定)として指定します。 |
| `taker` | 文字列 | オファーを表示するパースペクティブとして使用する一意のアカウントアドレスXRP Ledgerの[base58][]フォーマット)。(これはオファーの資金提供ステータスと手数料に影響します。) | | `taker` | 文字列 | オファーを表示するパースペクティブとして使用する一意のアカウントアドレスXRP Ledgerの[base58][]フォーマット)。(これはオファーの資金提供ステータスと手数料に影響します。) |
| `snapshot` | ブール値 | 省略可、デフォルトではfalsetrueの場合は、更新の送信前にサブスクライブした時点でオーダーブックの現在の状態を一度返します。 | | `snapshot` | ブール値 | 省略可、デフォルトではfalsetrueの場合は、更新の送信前にサブスクライブした時点でオーダーブックの現在の状態を一度返します。 |
| `both` | ブール値 | 省略可、デフォルトではfalsetrueの場合は、オーダーブックの両サイドを返します。 | | `both` | ブール値 | 省略可、デフォルトではfalsetrueの場合は、オーダーブックの両サイドを返します。 |
## 応答フォーマット ## 応答フォーマット
@@ -97,10 +97,10 @@
``` ```
{ {
"id": "Example watch Bitstamp's hot wallet", "id": "Example watch Bitstamp's hot wallet",
"status": "success", "status": "success",
"type": "response", "type": "response",
"result": {} "result": {}
} }
``` ```
@@ -108,15 +108,15 @@
応答は[標準フォーマット][]に従っています。応答に含まれるフィールドは、要求に指定されたサブスクリプションに応じて異なります。 応答は[標準フォーマット][]に従っています。応答に含まれるフィールドは、要求に指定されたサブスクリプションに応じて異なります。
* `accounts` および`accounts_proposed` - フィールドが返されません。 * `accounts`および`accounts_proposed` - フィールドが返されません。
* *Stream: server* - `load_base`(サーバーの現在の読み込みレベル)、`random`(ランダムに生成された値)などのサーバーのステータスに関する情報。これらの情報は変更される可能性があります。 * *Stream: server* - `load_base`(サーバーの現在の読み込みレベル)、`random`(ランダムに生成された値)などのサーバーのステータスに関する情報。これらの情報は変更される可能性があります。
* *Stream: transactions*、*Stream: transactions_proposed*、および*Stream: validations* - フィールドは返されません。 * *Stream: transactions*、*Stream: transactions_proposed*、*Stream: validations*、および*Stream: consensus* - フィールドは返されません。
* *Stream: ledger* - 手元にあるレジャーと現在の手数料体系に関する情報。`fee_base`XRP単位のトランザクションの現行基本手数料`fee_ref`(手数料単位のトランザクションの現行基本手数料)、`ledger_hash`(最新の検証済みレジャーのハッシュ)、`reserve_base`(アカウントの最低必要準備金)などがあります。 * *Stream: ledger* - 手元にあるレジャーと現在の手数料体系に関する情報。`fee_base`XRP単位のトランザクションの現行基本手数料`fee_ref`(手数料単位のトランザクションの現行基本手数料)、`ledger_hash`(最新の検証済みレジャーのハッシュ)、`reserve_base`(アカウントの最低必要準備金)などがあります。
* `books` - フィールドはデフォルトで返されません。要求が`"snapshot": true`に設定されている場合、`offers`(オーダーブックを定義するオファー定義オブジェクトの配列)を返します。 * `books` - フィールドはデフォルトで返されません。要求が`"snapshot": true`に設定されている場合、`offers`(オーダーブックを定義するオファー定義オブジェクトの配列)を返します。
## 考えられるエラー ## 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
* `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。 * `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。
* `noPermission` - 要求に`url`フィールドが指定されていますが、管理者として接続していません。 * `noPermission` - 要求に`url`フィールドが指定されていますが、管理者として接続していません。
* `unknownStream` - 要求の`streams`フィールドの1つ以上の要素が有効なストリーム名ではありません。 * `unknownStream` - 要求の`streams`フィールドの1つ以上の要素が有効なストリーム名ではありません。
@@ -126,92 +126,94 @@
* `dstAmtMalformed` - 要求の`books`フィールドの1つ以上の`taker_gets`サブフィールドのフォーマットが適切ではありません。 * `dstAmtMalformed` - 要求の`books`フィールドの1つ以上の`taker_gets`サブフィールドのフォーマットが適切ではありません。
* `srcIsrMalformed` - 要求の`books`フィールドの1つ以上の`taker_pays`サブフィールドの`issuer`フィールドが無効です。 * `srcIsrMalformed` - 要求の`books`フィールドの1つ以上の`taker_pays`サブフィールドの`issuer`フィールドが無効です。
* `dstIsrMalformed` - 要求の`books`フィールドの1つ以上の`taker_gets`サブフィールドの`issuer`フィールドが無効です。 * `dstIsrMalformed` - 要求の`books`フィールドの1つ以上の`taker_gets`サブフィールドの`issuer`フィールドが無効です。
* `badMarket` - `books` フィールドに指定されている1つ以上のオーダーブックが存在していませんある通貨とその通貨自体の交換オファーなど * `badMarket` - `books`フィールドに指定されている1つ以上のオーダーブックが存在していませんある通貨とその通貨自体の交換オファーなど
特定のストリームをサブスクライブすると、サブスクライブを解除するか、WebSocket接続を閉じるまで、そのストリームに関する応答を定期的に受信します。これらの応答の内容は、サブスクライブしている内容に応じて異なります。以下に、いくつかの例を紹介します。 特定のストリームをサブスクライブすると、サブスクライブを解除するか、WebSocket接続を閉じるまで、そのストリームに関する応答を定期的に受信します。これらの応答の内容は、サブスクライブしている内容に応じて異なります。以下に、いくつかの例を紹介します。
## レジャーストリーム ## レジャーストリーム
`ledger`ストリームは、[コンセンサスプロセス](https://ripple.com/build/ripple-ledger-consensus-process/)で新しい検証済みレジャーが宣言されたときにのみ`ledgerClosed`メッセージを送信します。このメッセージはレジャーを識別し、そのレジャーの内容について何らかの情報を伝えます。 `ledger`ストリームは、[コンセンサスプロセス](consensus.html)で新しい検証済みレジャーが宣言されたときにのみ`ledgerClosed`メッセージを送信します。このメッセージはレジャーを識別し、そのレジャーの内容について何らかの情報を伝えます。
``` ```
{ {
"type": "ledgerClosed", "type": "ledgerClosed",
"fee_base": 10, "fee_base": 10,
"fee_ref": 10, "fee_ref": 10,
"ledger_hash": "687F604EF6B2F67319E8DCC8C66EF49D84D18A1E18F948421FC24D2C7C3DB464", "ledger_hash": "687F604EF6B2F67319E8DCC8C66EF49D84D18A1E18F948421FC24D2C7C3DB464",
"ledger_index": 7125358, "ledger_index": 7125358,
"ledger_time": 455751310, "ledger_time": 455751310,
"reserve_base": 20000000, "reserve_base": 20000000,
"reserve_inc": 5000000, "reserve_inc": 5000000,
"txn_count": 7, "txn_count": 7,
"validated_ledgers": "32570-7125358" "validated_ledgers": "32570-7125358"
} }
``` ```
レジャーストリームメッセージのフィールドは次のとおりです。 レジャーストリームメッセージのフィールドは次のとおりです。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:--------------------|:-----------------|:------------------------------------| |:--------------------|:--------------------------|:---------------------------|
| `type` | 文字列 | `ledgerClosed` は、このメッセージがレジャーストリームからのものであることを示します。 | | `type` | 文字列 | `ledgerClosed`は、このメッセージがレジャーストリームからのものであることを示します。 |
| `fee_base` | 符号なし整数 | 「リファレンストランザクション」のコストXRPのdrop数[トランザクションコスト](transaction-cost.html)を参照してください。レジャーに[SetFee疑似トランザクション](setfee.html)が記録されている場合、このレジャー以降のすべてのトランザクションに新しいトランザクションコストが適用されます。 | | `fee_base` | 数値 | このレジャーバージョン時点の[Referenceトランザクションコスト](transaction-cost.html#referenceトランザクションコスト)[XRPのdrop数][])。このレジャーバージョンに[SetFee疑似トランザクション](setfee.html)が含まれている場合は、次のレジャーバージョンから新しいトランザクションコストが適用されます。 |
| `fee_ref` | 符号なし整数 | 「リファレンストランザクション」のコスト(手数料単位) | | `fee_ref` | 数値 | 「手数料単位」の[Referenceトランザクションコスト](transaction-cost.html#referenceトランザクションコスト)。 |
| `ledger_hash` | 文字列 | 閉鎖されたレジャーの一意のハッシュ16進数 | | `ledger_hash` | 文字列 - [Hash][] | 決済されたレジャーバージョンの識別用ハッシュ。 |
| `ledger_index` | 符号なし整数 | 閉鎖されたレジャーのシーケンス番号 | | `ledger_index` | 数値 - [レジャーインデックス][] | 決済されたレジャーのレジャーインデックス。 |
| `ledger_time` | 符号なし整数 | レジャーが閉鎖された時刻([Rippleエポック以降の経過秒数][] | | `ledger_time` | 数値 | レジャーが閉鎖された時刻([Rippleエポック以降の経過秒数][] |
| `reserve_base` | 符号なし整数 | アカウント最低必要とされる準備金XRPのdrop数。レジャーに[SetFee疑似トランザクション](setfee.html)が記録されている場合、このレジャー以降は新しい基本準備金が適用されます。 | | `reserve_base` | 数値 | アカウント最低必要[準備金](reserves.html)[XRPのdrop数][])。このレジャーバージョンに[SetFee疑似トランザクション](setfee.html)が含まれる場合は、次のレジャーバージョンから新しい基本準備金が適用されます。 |
| `reserve_inc` | 符号なし整数 | アカウントが所有する各アイテムに、オファーやトラストラインなどが追加されたことによるアカウント準備金の増加。レジャーに[SetFee疑似トランザクション](setfee.html)が記録されている場合、このレジャー以降は新しい所有者準備金が適用されます。 | | `reserve_inc` | 数値 | アカウントがレジャーに所有しているオブジェクトごとの[所有者準備金](reserves.html#所有者準備金)[XRPのdrop数][]。レジャーに[SetFee疑似トランザクション](setfee.html)が記録されている場合、このレジャー以降は新しい所有者準備金が適用されます。 |
| `txn_count` | 符号なし整数 | このレジャーに記録される新規トランザクションの数 | | `txn_count` | 数値 | このレジャーバージョンに含まれる新規トランザクションの数 |
| `validated_ledgers` | 文字列 | (省略される場合があります)サーバーで使用可能なレジャーの範囲。これは連続的ではない可能性があります。サーバーがネットワークに接続されていない場合や、サーバーが接続されていてもネットワークからレジャーをまだ取得していない場合は、このフィールドは返されません。 | | `validated_ledgers` | 文字列 | _(省略される場合があります)_ サーバーで使用可能なレジャーの範囲。これは連続的ではない可能性があります。サーバーがネットワークに接続されていない場合や、サーバーが接続されていてもネットワークからレジャーをまだ取得していない場合は、このフィールドは返されません。 |
## 検証ストリーム ## 検証ストリーム
[新規: rippled 0.29.0][] [新規: rippled 0.29.0][]
検証ストリームは、検証メッセージ(検証投票)を信頼するバリデータから受信するたびに、次のようなメッセージを送信します。 検証ストリームは、検証メッセージ(検証投票とも呼ばれる)を受信するたびにメッセージを送信します。検証メッセージが信頼できるバリデータからのものであるかどうかは関係ありません。次のようなメッセージを送信します。
``` ```
{ {
"type": "validationReceived", "type": "validationReceived",
"amendments":[ "amendments":[
"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE", "42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE",
"4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373", "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373",
"6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC", "6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC",
"C1B8D934087225F509BEB5A8EC24447854713EE447D277F69545ABFA0E0FD490", "C1B8D934087225F509BEB5A8EC24447854713EE447D277F69545ABFA0E0FD490",
"DA1BD556B42D85EA9C84066D028D355B52416734D3283F85E216EA5DA6DB7E13" "DA1BD556B42D85EA9C84066D028D355B52416734D3283F85E216EA5DA6DB7E13"
], ],
"base_fee":10, "base_fee":10,
"flags":2147483649, "flags":2147483649,
"full":true, "full":true,
"ledger_hash":"EC02890710AAA2B71221B0D560CFB22D64317C07B7406B02959AD84BAD33E602", "ledger_hash":"EC02890710AAA2B71221B0D560CFB22D64317C07B7406B02959AD84BAD33E602",
"ledger_index":"6", "ledger_index":"6",
"load_fee":256000, "load_fee":256000,
"reserve_base":20000000, "master_key": "nHUon2tpyJEHHYGmxqeGu37cvPYHzrMtUNQFVdCgGNvEkjmCpTqK",
"reserve_inc":5000000, "reserve_base":20000000,
"signature":"3045022100E199B55643F66BC6B37DBC5E185321CF952FD35D13D9E8001EB2564FFB94A07602201746C9A4F7A93647131A2DEB03B76F05E426EC67A5A27D77F4FF2603B9A528E6", "reserve_inc":5000000,
"signing_time":515115322, "signature":"3045022100E199B55643F66BC6B37DBC5E185321CF952FD35D13D9E8001EB2564FFB94A07602201746C9A4F7A93647131A2DEB03B76F05E426EC67A5A27D77F4FF2603B9A528E6",
"validation_public_key":"n94Gnc6svmaPPRHUAyyib1gQUov8sYbjLoEwUBYPH39qHZXuo8ZT" "signing_time":515115322,
"validation_public_key":"n94Gnc6svmaPPRHUAyyib1gQUov8sYbjLoEwUBYPH39qHZXuo8ZT"
} }
``` ```
検証ストリームメッセージのフィールドは次のとおりです。 検証ストリームメッセージのフィールドは次のとおりです。
| `Field` | 型 | 説明 | | `Field`         | 型        | 説明     |
|:------------------------|:-----------------|:--------------------------------| |:------------------------|:-----------------|:--------------------------------|
| `type` | 文字列 | 値`validationReceived`は、このメッセージが検証ストリームからであることを示します。 | | `type` | 文字列 | 値`validationReceived`は、このメッセージが検証ストリームからであることを示します。 |
| `amendments` | 文字列の配列 | (省略される場合があります)このサーバーがプロトコルへの追加を求める[Amendment](amendments.html)。[新規: rippled 0.32.0][] | | `amendments` | 文字列の配列 | (省略される場合があります)このサーバーがプロトコルへの追加を求める[Amendment](amendments.html)。[新規: rippled 0.32.0][] |
| `base_fee` | 整数 | (省略される場合があります)サーバーが[手数料投票](fee-voting.html)による設定を希望するスケーリングされていないトランザクションコスト(`reference_fee` 値)。[新規: rippled 0.32.0][] | | `base_fee` | 整数 | (省略される場合があります)サーバーが[手数料投票](fee-voting.html)による設定を希望するスケーリングされていないトランザクションコスト(`reference_fee`値)。[新規: rippled 0.32.0][] |
| `flags` | 数値 | この検証メッセージに追加されるフラグのビットマスク。フラグ0x80000000は、検証の署名が完全に正規であることを示します。フラグ0x00000001は、完全な検証であることを示します。それ以外の場合は部分検証です。部分検証とは、特定のレジャーに対する投票ではありません。部分検証は、バリデータがオンラインであるがコンセンサスにまだ同意していないことを示します。[新規: rippled 0.32.0][] | | `flags` | 数値 | この検証メッセージに追加されるフラグのビットマスク。フラグ0x80000000は、検証の署名が完全に正規であることを示します。フラグ0x00000001は、完全な検証であることを示します。それ以外の場合は部分検証です。部分検証とは、特定のレジャーに対する投票ではありません。部分検証は、バリデータがオンラインであるがコンセンサスにまだ同意していないことを示します。[新規: rippled 0.32.0][] |
| `full` | ブール値 | `true`の場合は、完全な検証です。それ以外の場合は部分検証です。部分検証とは、特定のレジャーに対する投票ではありません。部分検証は、バリデータがオンラインであるがコンセンサスにまだ同意していないことを示します。[新規: rippled 0.32.0][] | | `full` | ブール値 | `true`の場合は、完全な検証です。それ以外の場合は部分検証です。部分検証とは、特定のレジャーに対する投票ではありません。部分検証は、バリデータがオンラインであるがコンセンサスにまだ同意していないことを示します。[新規: rippled 0.32.0][] |
| `ledger_hash` | 文字列 | 提案されたレジャーの識別ハッシュを検証中です。 | | `ledger_hash` | 文字列 | 提案されたレジャーの識別ハッシュを検証中です。 |
| `ledger_index` | 文字列 - 整数 | 提案されたレジャーの[レジャーインデックス][]。[新規: rippled 0.31.0][] | | `ledger_index` | 文字列 - 整数 | 提案されたレジャーの[レジャーインデックス][]。[新規: rippled 0.31.0][] |
| `load_fee` | 整数 | (省略される場合があります)このバリデータにより現在施行されているローカルの負荷スケーリングされたトランザクションコスト(手数料単位)。[新規: rippled 0.32.0][] | | `load_fee` | 整数 | (省略される場合があります)このバリデータにより現在施行されているローカルの負荷スケーリングされたトランザクションコスト(手数料単位)。[新規: rippled 0.32.0][] |
| `reserve_base` | 整数 | (省略される場合があります)このバリデータが[手数料投票](fee-voting.html)による設定を希望する最低必要準備金(`account_reserve` 値)。[新規: rippled 0.32.0][] | | `master_key` | 文字列 | _(省略される場合があります)_ バリデータのマスター公開鍵バリデータがXRP Ledgerの[base58][]フォーマットのバリデータトークンを使用している場合)。(関連項目: [`rippled`サーバーで検証を有効化](run-rippled-as-a-validator.html#3-rippledサーバーで検証を有効化)。)[新規: rippled 1.4.0][] |
| `reserve_inc` | 整数 | (省略される場合があります)このバリデータが[手数料投票](fee-voting.html)による設定を希望する必要準備金(`owner_reserve` 値)の増分。[新規: rippled 0.32.0][] | | `reserve_base` | 整数 | (省略される場合があります)このバリデータが[手数料投票](fee-voting.html)による設定を希望する最低必要準備金(`account_reserve`値)。[新規: rippled 0.32.0][] |
| `signature` | 文字列 | バリデータがこのレジャーへの投票に署名するときに使用する署名。 | | `reserve_inc` | 整数 | (省略される場合があります)このバリデータが[手数料投票](fee-voting.html)による設定を希望する必要準備金(`owner_reserve`値)の増分。[新規: rippled 0.32.0][] |
| `signing_time` | 数値 | この検証投票署名された時刻([Rippleエポック以降の経過秒数][])。[新規: rippled 0.32.0][] | | `signature` | 文字列 | バリデータがこのレジャーへの投票署名するときに使用する署名。 |
| `validation_public_key` | 文字列 | バリデータがメッセージの署名に使用したキーペアの公開鍵XRP Ledgerの[base58][]形式)。このフィールドは、メッセージを送信するバリデータを特定します。また`signature`の検証にも使用できます。 | | `signing_time` | 数値 | この検証投票が署名された時刻([Rippleエポック以降の経過秒数][])。[新規: rippled 0.32.0][] |
| `validation_public_key` | 文字列 | バリデータがメッセージの署名に使用したキーペアの公開鍵XRP Ledgerの[base58][]形式)。このフィールドは、メッセージを送信するバリデータを特定します。また`signature`の検証にも使用できます。バリデータがトークンを使用している場合は一時的な公開鍵です。 |
## トランザクションストリーム ## トランザクションストリーム
@@ -220,9 +222,9 @@
* `transactions`ストリーム * `transactions`ストリーム
* `transactions_proposed`ストリーム * `transactions_proposed`ストリーム
* `accounts` サブスクリプション * `accounts`サブスクリプション
* `accounts_proposed` サブスクリプション * `accounts_proposed`サブスクリプション
* `book` (オーダーブック)サブスクリプション * `book`(オーダーブック)サブスクリプション
`transactions_proposed`ストリームは、厳密には`transactions`ストリームのスーパーセットです。このストリームにはすべての検証済みトランザクションと、検証済みレジャーにまだ記録されておらず、今後も記録される見込みのない提案されたトランザクションがいくつか記録されます。このような「処理中」のトランザクションはそのフィールドから判断できます。 `transactions_proposed`ストリームは、厳密には`transactions`ストリームのスーパーセットです。このストリームにはすべての検証済みトランザクションと、検証済みレジャーにまだ記録されておらず、今後も記録される見込みのない提案されたトランザクションがいくつか記録されます。このような「処理中」のトランザクションはそのフィールドから判断できます。
@@ -238,118 +240,118 @@
``` ```
{ {
"status": "closed", "status": "closed",
"type": "transaction", "type": "transaction",
"engine_result": "tesSUCCESS", "engine_result": "tesSUCCESS",
"engine_result_code": 0, "engine_result_code": 0,
"engine_result_message": "The transaction was applied.", "engine_result_message": "The transaction was applied.",
"ledger_hash": "989AFBFD65D820C6BD85301B740F5D592F060668A90EEF5EC1815EBA27D58FE8", "ledger_hash": "989AFBFD65D820C6BD85301B740F5D592F060668A90EEF5EC1815EBA27D58FE8",
"ledger_index": 7125442, "ledger_index": 7125442,
"meta": { "meta": {
"AffectedNodes": [ "AffectedNodes": [
{ {
"ModifiedNode": { "ModifiedNode": {
"FinalFields": { "FinalFields": {
"Flags": 0, "Flags": 0,
"IndexPrevious": "0000000000000000", "IndexPrevious": "0000000000000000",
"Owner": "rRh634Y6QtoqkwTTrGzX66UYoCAvgE6jL", "Owner": "rRh634Y6QtoqkwTTrGzX66UYoCAvgE6jL",
"RootIndex": "ABD8CE2D1205D0C062876E9E1F3CBDC902ED8EF4E8D3D071B962C7ED0E113E68" "RootIndex": "ABD8CE2D1205D0C062876E9E1F3CBDC902ED8EF4E8D3D071B962C7ED0E113E68"
}, },
"LedgerEntryType": "DirectoryNode", "LedgerEntryType": "DirectoryNode",
"LedgerIndex": "0BBDEE7D0BE120F7BF27640B5245EBFE0C5FD5281988BA823C44477A70262A4D" "LedgerIndex": "0BBDEE7D0BE120F7BF27640B5245EBFE0C5FD5281988BA823C44477A70262A4D"
} }
}, },
{ {
"DeletedNode": { "DeletedNode": {
"FinalFields": { "FinalFields": {
"Account": "rRh634Y6QtoqkwTTrGzX66UYoCAvgE6jL", "Account": "rRh634Y6QtoqkwTTrGzX66UYoCAvgE6jL",
"BookDirectory": "892E892DC63D8F70DCF5C9ECF29394FF7DD3DC6F47DB8EB34A03920BFC5E99BE", "BookDirectory": "892E892DC63D8F70DCF5C9ECF29394FF7DD3DC6F47DB8EB34A03920BFC5E99BE",
"BookNode": "0000000000000000", "BookNode": "0000000000000000",
"Flags": 0, "Flags": 0,
"OwnerNode": "000000000000006E", "OwnerNode": "000000000000006E",
"PreviousTxnID": "58A17D95770F8D07E08B81A85896F4032A328B6C2BDCDEC0A00F3EF3914DCF0A", "PreviousTxnID": "58A17D95770F8D07E08B81A85896F4032A328B6C2BDCDEC0A00F3EF3914DCF0A",
"PreviousTxnLgrSeq": 7125330, "PreviousTxnLgrSeq": 7125330,
"Sequence": 540691, "Sequence": 540691,
"TakerGets": "4401967683", "TakerGets": "4401967683",
"TakerPays": { "TakerPays": {
"currency": "BTC", "currency": "BTC",
"issuer": "rNPRNzBB92BVpAhhZr4iXDTveCgV5Pofm9", "issuer": "rNPRNzBB92BVpAhhZr4iXDTveCgV5Pofm9",
"value": "0.04424" "value": "0.04424"
} }
}, },
"LedgerEntryType": "Offer", "LedgerEntryType": "Offer",
"LedgerIndex": "386B7803A9210747941B0D079BB408F31ACB1CB98832184D0287A1CBF4FE6D00" "LedgerIndex": "386B7803A9210747941B0D079BB408F31ACB1CB98832184D0287A1CBF4FE6D00"
} }
}, },
{ {
"DeletedNode": { "DeletedNode": {
"FinalFields": { "FinalFields": {
"ExchangeRate": "4A03920BFC5E99BE", "ExchangeRate": "4A03920BFC5E99BE",
"Flags": 0, "Flags": 0,
"RootIndex": "892E892DC63D8F70DCF5C9ECF29394FF7DD3DC6F47DB8EB34A03920BFC5E99BE", "RootIndex": "892E892DC63D8F70DCF5C9ECF29394FF7DD3DC6F47DB8EB34A03920BFC5E99BE",
"TakerGetsCurrency": "0000000000000000000000000000000000000000", "TakerGetsCurrency": "0000000000000000000000000000000000000000",
"TakerGetsIssuer": "0000000000000000000000000000000000000000", "TakerGetsIssuer": "0000000000000000000000000000000000000000",
"TakerPaysCurrency": "0000000000000000000000004254430000000000", "TakerPaysCurrency": "0000000000000000000000004254430000000000",
"TakerPaysIssuer": "92D705968936C419CE614BF264B5EEB1CEA47FF4" "TakerPaysIssuer": "92D705968936C419CE614BF264B5EEB1CEA47FF4"
}, },
"LedgerEntryType": "DirectoryNode", "LedgerEntryType": "DirectoryNode",
"LedgerIndex": "892E892DC63D8F70DCF5C9ECF29394FF7DD3DC6F47DB8EB34A03920BFC5E99BE" "LedgerIndex": "892E892DC63D8F70DCF5C9ECF29394FF7DD3DC6F47DB8EB34A03920BFC5E99BE"
} }
}, },
{ {
"ModifiedNode": { "ModifiedNode": {
"FinalFields": { "FinalFields": {
"Account": "rRh634Y6QtoqkwTTrGzX66UYoCAvgE6jL", "Account": "rRh634Y6QtoqkwTTrGzX66UYoCAvgE6jL",
"Balance": "11133297300", "Balance": "11133297300",
"Flags": 0, "Flags": 0,
"OwnerCount": 9, "OwnerCount": 9,
"Sequence": 540706 "Sequence": 540706
}, },
"LedgerEntryType": "AccountRoot", "LedgerEntryType": "AccountRoot",
"LedgerIndex": "A6C2532E1008A513B3F822A92B8E5214BD0D413DC20AD3631C1A39AD6B36CD07", "LedgerIndex": "A6C2532E1008A513B3F822A92B8E5214BD0D413DC20AD3631C1A39AD6B36CD07",
"PreviousFields": { "PreviousFields": {
"Balance": "11133297310", "Balance": "11133297310",
"OwnerCount": 10, "OwnerCount": 10,
"Sequence": 540705 "Sequence": 540705
}, },
"PreviousTxnID": "484D57DFC4E446DA83B4540305F0CE836D4E007361542EC12CC0FFB5F0A1BE3A", "PreviousTxnID": "484D57DFC4E446DA83B4540305F0CE836D4E007361542EC12CC0FFB5F0A1BE3A",
"PreviousTxnLgrSeq": 7125358 "PreviousTxnLgrSeq": 7125358
} }
} }
], ],
"TransactionIndex": 1, "TransactionIndex": 1,
"TransactionResult": "tesSUCCESS" "TransactionResult": "tesSUCCESS"
}, },
"transaction": { "transaction": {
"Account": "rRh634Y6QtoqkwTTrGzX66UYoCAvgE6jL", "Account": "rRh634Y6QtoqkwTTrGzX66UYoCAvgE6jL",
"Fee": "10", "Fee": "10",
"Flags": 2147483648, "Flags": 2147483648,
"OfferSequence": 540691, "OfferSequence": 540691,
"Sequence": 540705, "Sequence": 540705,
"SigningPubKey": "030BB49C591C9CD65C945D4B78332F27633D7771E6CF4D4B942D26BA40748BB8B4", "SigningPubKey": "030BB49C591C9CD65C945D4B78332F27633D7771E6CF4D4B942D26BA40748BB8B4",
"TransactionType": "OfferCancel", "TransactionType": "OfferCancel",
"TxnSignature": "30450221008223604A383F3AED25D53CE7C874700619893A6EEE4336508312217850A9722302205E0614366E174F2DFF78B879F310DB0B3F6DA1967E52A32F65E25DCEC622CD68", "TxnSignature": "30450221008223604A383F3AED25D53CE7C874700619893A6EEE4336508312217850A9722302205E0614366E174F2DFF78B879F310DB0B3F6DA1967E52A32F65E25DCEC622CD68",
"date": 455751680, "date": 455751680,
"hash": "94CF924C774DFDBE474A2A7E40AEA70E7E15D130C8CBEF8AF1D2BE97A8269F14" "hash": "94CF924C774DFDBE474A2A7E40AEA70E7E15D130C8CBEF8AF1D2BE97A8269F14"
}, },
"validated": true "validated": true
} }
``` ```
トランザクションストリームメッセージには次のフィールドがあります。 トランザクションストリームメッセージには次のフィールドがあります。
| `Field` | 型 | 説明 | | `Field`         | 型             | 説明       |
|:------------------------|:-----------------|:--------------------------------| |:------------------------|:--------------------------|:-----------------------|
| `type` | 文字列 | `transaction` は、トランザクションの通知であることを示します。この通知はさまざまなストリームから送信される可能性があります。 | | `type` | 文字列 | `transaction`は、トランザクションの通知であることを示します。この通知はさまざまなストリームから送信される可能性があります。 |
| `engine_result` | 文字列 | 文字列の[トランザクション結果コード](transaction-results.html) | | `engine_result` | 文字列 | 文字列の[トランザクション結果コード](transaction-results.html) |
| `engine_result_code` | 数値 | 数値の[トランザクション応答コード](transaction-results.html)(該当する場合) | | `engine_result_code` | 数値 | 数値の[トランザクション応答コード](transaction-results.html)(該当する場合) |
| `engine_result_message` | 文字列 | 人間が読み取れる形式のトランザクション応答の説明 | | `engine_result_message` | 文字列 | 人間が読み取れる形式のトランザクション応答の説明 |
| `ledger_current_index` | 符号なし整数 | (検証済みトランザクションでは省略)このトランザクションが現在提案されている現レジャーバージョンのシーケンス番号。 | | `ledger_current_index` | 数値 - [レジャーインデックス][] | _未検証のトランザクションのみ_ このトランザクションが現在提案されている現在進行中の[レジャーバージョン](ledgers.html)のレジャーインデックス。 |
| `ledger_hash` | 文字列 | (未検証のトランザクションでは省略)このトランザクションが記録されているレジャーバージョンの一意のハッシュ16進数 | | `ledger_hash` | 文字列 - [Hash][ | _検証済みのトランザクションのみ_ このトランザクションを含む レジャーバージョンの識別用ハッシュ |
| `ledger_index` | 符号なし整数 | (未検証のトランザクションでは省略)このトランザクションが記録されているレジャーバージョンのシーケンス番号。 | | `ledger_index` | 数値 - [レジャーインデックス][] | _検証済みのトランザクションのみ_ このトランザクションを含むレジャーバージョンのレジャーインデックス。 |
| `meta` | オブジェクト | (未検証のトランザクションでは省略)このトランザクションに関する各種メタデータ(影響するレジャーエントリーを含む) | | `meta` | オブジェクト | _検証済みのトランザクションのみ_ [トランザクションのメタデータ](transaction-metadata.html)。トランザクションの正確な結果を詳細に表示します。 |
| `transaction` | オブジェクト | JSONフォーマットの[トランザクションの定義](transaction-formats.html)。 | | `transaction` | オブジェクト | JSONフォーマットの[トランザクションの定義](transaction-formats.html)。 |
| `validated` | ブール値 | trueの場合、このトランザクションは検証済みレジャーに記録されてます。`transaction`ストリームからの応答は常に検証される必要があります。 | | `validated` | ブール値 | `true`の場合、このトランザクションは検証済みレジャーに含まれており、最終的な結果であることを意味します。`transaction`ストリームからの応答は常に検証される必要があります。 |
## ピアステータスストリーム ## ピアステータスストリーム
@@ -360,25 +362,25 @@
``` ```
{ {
"action": "CLOSING_LEDGER", "action": "CLOSING_LEDGER",
"date": 508546525, "date": 508546525,
"ledger_hash": "4D4CD9CD543F0C1EF023CC457F5BEFEA59EEF73E4552542D40E7C4FA08D3C320", "ledger_hash": "4D4CD9CD543F0C1EF023CC457F5BEFEA59EEF73E4552542D40E7C4FA08D3C320",
"ledger_index": 18853106, "ledger_index": 18853106,
"ledger_index_max": 18853106, "ledger_index_max": 18853106,
"ledger_index_min": 18852082, "ledger_index_min": 18852082,
"type": "peerStatusChange" "type": "peerStatusChange"
} }
``` ```
ピアステータスストリームメッセージは、ピア`rippled`サーバーのステータスが変化したイベントを表します。これらのメッセージは、次のフィールドを持つJSONオブジェクトです。 ピアステータスストリームメッセージは、ピア`rippled`サーバーのステータスが変化したイベントを表します。これらのメッセージは、次のフィールドを持つJSONオブジェクトです。
| `Field` | 値 | 説明 | | `Field`      | 値   | 説明      |
|:-------------------|:-------|:-----------------------------------------------| |:-------------------|:-------|:-----------------------------------------------|
| `type` | 文字列 | `peerStatusChange` は、ピアステータスストリームからのメッセージであることを示します。 | | `type` | 文字列 | `peerStatusChange`は、ピアステータスストリームからのメッセージであることを示します。 |
| `action` | 文字列 | このメッセージが送信される原因となったイベントのタイプ。有効な値については、[ピアステータスイベント](#ピアステータスイベント)を参照してください。 | | `action` | 文字列 | このメッセージが送信される原因となったイベントのタイプ。有効な値については、[ピアステータスイベント](#ピアステータスイベント)を参照してください。 |
| `date` | 数値 | このイベントが発生した時刻([Rippleエポック以降の経過秒数][] | | `date` | 数値 | このイベントが発生した時刻([Rippleエポック以降の経過秒数][] |
| `ledger_hash` | 文字列 | (省略される場合があります)このメッセージに関連するレジャーバージョンの識別用[ハッシュ][]。 | | `ledger_hash` | 文字列 | (省略される場合があります)このメッセージに関連するレジャーバージョンの識別用[ハッシュ][]。 |
| `ledger_index` | 数値 | (省略される場合があります)このメッセージに関連するレジャーバージョンの[レジャーインデックス][]。 | | `ledger_index` | 数値 | (省略される場合があります)このメッセージに関連するレジャーバージョンの[レジャーインデックス][]。 |
| `ledger_index_max` | 数値 | (省略される場合があります)ピアで現在使用可能な最大[レジャーインデックス][]。 | | `ledger_index_max` | 数値 | (省略される場合があります)ピアで現在使用可能な最大[レジャーインデックス][]。 |
| `ledger_index_min` | 数値 | (省略される場合があります)ピアで現在使用可能な最小[レジャーインデックス][]。 | | `ledger_index_min` | 数値 | (省略される場合があります)ピアで現在使用可能な最小[レジャーインデックス][]。 |
@@ -386,12 +388,12 @@
ピアステータスストリームメッセージの`action`フィールドには次のいずれかの値が含まれます。 ピアステータスストリームメッセージの`action`フィールドには次のいずれかの値が含まれます。
| `Value` | 意味 | | `Value`      | 意味      |
|:------------------|:---------------------------------------------------------| |:------------------|:---------------------------------------------------------|
| `CLOSING_LEDGER` | ピアがこの[レジャーインデックス][]のレジャーバージョンを閉鎖しました。この場合、通常はコンセンサスが間もなく開始されます。 | | `CLOSING_LEDGER` | ピアがこの[レジャーインデックス][]のレジャーバージョンを閉鎖しました。 |
| `ACCEPTED_LEDGER` | ピアがコンセンサスラウンドの結果としてこのレジャーバージョンを作成しました。**注記:** このレジャーが不変的に検証済みになるかどうかはまだ確実ではありません。 | | `ACCEPTED_LEDGER` | ピアがコンセンサスラウンドの結果としてこのレジャーバージョンを作成しました。**注記:** このレジャーが不変的に検証済みになるかどうかはまだ確実ではありません。 |
| `SWITCHED_LEDGER` | ピアは、ネットワークの他の部分に従っていないと結論付け、異なるレジャーバージョンに切り替えました。 | | `SWITCHED_LEDGER` | ピアは、ネットワークの他の部分に従っていないと結論付け、異なるレジャーバージョンに切り替えました。 |
| `LOST_SYNC` | ピアは検証済みのレジャーバージョンとコンセンサス処理中のレジャーバージョンの追跡でネットワークの他の部分に遅れをとりました。 | | `LOST_SYNC` | ピアは検証済みのレジャーバージョンとコンセンサス処理中のレジャーバージョンの追跡でネットワークの他の部分に遅れをとりました。 |
## オーダーブックストリーム ## オーダーブックストリーム
@@ -402,135 +404,156 @@
``` ```
{ {
"engine_result": "tesSUCCESS", "engine_result": "tesSUCCESS",
"engine_result_code": 0, "engine_result_code": 0,
"engine_result_message": "The transaction was applied.Only final in a validated ledger.", "engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"ledger_hash": "08547DD866F099CCB3666F113116B7AA2DF520FA2E3011DD1FF9C9C04A6C7C3E", "ledger_hash": "08547DD866F099CCB3666F113116B7AA2DF520FA2E3011DD1FF9C9C04A6C7C3E",
"ledger_index": 18852105, "ledger_index": 18852105,
"meta": { "meta": {
"AffectedNodes": [{ "AffectedNodes": [{
"ModifiedNode": { "ModifiedNode": {
"FinalFields": { "FinalFields": {
"Account": "rfCFLzNJYvvnoGHWQYACmJpTgkLUaugLEw", "Account": "rfCFLzNJYvvnoGHWQYACmJpTgkLUaugLEw",
"AccountTxnID": "D295E2BE50E3B78AED24790D7B9096996DAF43F095BF17DB83EEACC283D14050", "AccountTxnID": "D295E2BE50E3B78AED24790D7B9096996DAF43F095BF17DB83EEACC283D14050",
"Balance": "3070332374272", "Balance": "3070332374272",
"Flags": 0, "Flags": 0,
"OwnerCount": 23, "OwnerCount": 23,
"RegularKey": "r9S56zu6QeJD5d8A7QMfLAeYavgB9dhaX4", "RegularKey": "r9S56zu6QeJD5d8A7QMfLAeYavgB9dhaX4",
"Sequence": 12142921 "Sequence": 12142921
}, },
"LedgerEntryType": "AccountRoot", "LedgerEntryType": "AccountRoot",
"LedgerIndex": "2880A9B4FB90A306B576C2D532BFE390AB3904642647DCF739492AA244EF46D1", "LedgerIndex": "2880A9B4FB90A306B576C2D532BFE390AB3904642647DCF739492AA244EF46D1",
"PreviousFields": { "PreviousFields": {
"AccountTxnID": "3CA3422B0E42D76A7A677B0BA0BE72DFCD93676E0C80F8D2EB27C04BD8457A0F", "AccountTxnID": "3CA3422B0E42D76A7A677B0BA0BE72DFCD93676E0C80F8D2EB27C04BD8457A0F",
"Balance": "3070332385272", "Balance": "3070332385272",
"Sequence": 12142920 "Sequence": 12142920
}, },
"PreviousTxnID": "3CA3422B0E42D76A7A677B0BA0BE72DFCD93676E0C80F8D2EB27C04BD8457A0F", "PreviousTxnID": "3CA3422B0E42D76A7A677B0BA0BE72DFCD93676E0C80F8D2EB27C04BD8457A0F",
"PreviousTxnLgrSeq": 18852102 "PreviousTxnLgrSeq": 18852102
} }
}, { }, {
"ModifiedNode": { "ModifiedNode": {
"FinalFields": { "FinalFields": {
"Flags": 0, "Flags": 0,
"IndexPrevious": "00000000000022D2", "IndexPrevious": "00000000000022D2",
"Owner": "rfCFLzNJYvvnoGHWQYACmJpTgkLUaugLEw", "Owner": "rfCFLzNJYvvnoGHWQYACmJpTgkLUaugLEw",
"RootIndex": "F435FBBEC9654204D7151A01E686BAA8CB325A472D7B61C7916EA58B59355767" "RootIndex": "F435FBBEC9654204D7151A01E686BAA8CB325A472D7B61C7916EA58B59355767"
}, },
"LedgerEntryType": "DirectoryNode", "LedgerEntryType": "DirectoryNode",
"LedgerIndex": "29A543B6681AD7FC8AFBD1386DAE7385F02F9B8C4756A467DF6834AB54BBC9DB" "LedgerIndex": "29A543B6681AD7FC8AFBD1386DAE7385F02F9B8C4756A467DF6834AB54BBC9DB"
} }
}, { }, {
"ModifiedNode": { "ModifiedNode": {
"FinalFields": { "FinalFields": {
"ExchangeRate": "4C1BA999A513EF78", "ExchangeRate": "4C1BA999A513EF78",
"Flags": 0, "Flags": 0,
"RootIndex": "79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784C1BA999A513EF78", "RootIndex": "79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784C1BA999A513EF78",
"TakerGetsCurrency": "0000000000000000000000000000000000000000", "TakerGetsCurrency": "0000000000000000000000000000000000000000",
"TakerGetsIssuer": "0000000000000000000000000000000000000000", "TakerGetsIssuer": "0000000000000000000000000000000000000000",
"TakerPaysCurrency": "0000000000000000000000005553440000000000", "TakerPaysCurrency": "0000000000000000000000005553440000000000",
"TakerPaysIssuer": "2ADB0B3959D60A6E6991F729E1918B7163925230" "TakerPaysIssuer": "2ADB0B3959D60A6E6991F729E1918B7163925230"
}, },
"LedgerEntryType": "DirectoryNode", "LedgerEntryType": "DirectoryNode",
"LedgerIndex": "79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784C1BA999A513EF78" "LedgerIndex": "79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784C1BA999A513EF78"
} }
}, { }, {
"CreatedNode": { "CreatedNode": {
"LedgerEntryType": "Offer", "LedgerEntryType": "Offer",
"LedgerIndex": "92E235EE80D2B28A89BEE2C905D4545C2A004FD5D4097679C8A3FB25507FD9EB", "LedgerIndex": "92E235EE80D2B28A89BEE2C905D4545C2A004FD5D4097679C8A3FB25507FD9EB",
"NewFields": { "NewFields": {
"Account": "rfCFLzNJYvvnoGHWQYACmJpTgkLUaugLEw", "Account": "rfCFLzNJYvvnoGHWQYACmJpTgkLUaugLEw",
"BookDirectory": "79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784C1BA999A513EF78", "BookDirectory": "79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784C1BA999A513EF78",
"Expiration": 508543674, "Expiration": 508543674,
"OwnerNode": "00000000000022F4", "OwnerNode": "00000000000022F4",
"Sequence": 12142920, "Sequence": 12142920,
"TakerGets": "6537121438", "TakerGets": "6537121438",
"TakerPays": { "TakerPays": {
"currency": "USD", "currency": "USD",
"issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq", "issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",
"value": "50.9" "value": "50.9"
} }
} }
} }
}, { }, {
"DeletedNode": { "DeletedNode": {
"FinalFields": { "FinalFields": {
"Account": "rfCFLzNJYvvnoGHWQYACmJpTgkLUaugLEw", "Account": "rfCFLzNJYvvnoGHWQYACmJpTgkLUaugLEw",
"BookDirectory": "79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784C1BA999A513EF78", "BookDirectory": "79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784C1BA999A513EF78",
"BookNode": "0000000000000000", "BookNode": "0000000000000000",
"Expiration": 508543133, "Expiration": 508543133,
"Flags": 0, "Flags": 0,
"OwnerNode": "00000000000022F4", "OwnerNode": "00000000000022F4",
"PreviousTxnID": "58B3279C2D56AAC3D9B06106E637C01E3D911E9D31E2FE4EA0D886AC9F4DEE1E", "PreviousTxnID": "58B3279C2D56AAC3D9B06106E637C01E3D911E9D31E2FE4EA0D886AC9F4DEE1E",
"PreviousTxnLgrSeq": 18851945, "PreviousTxnLgrSeq": 18851945,
"Sequence": 12142889, "Sequence": 12142889,
"TakerGets": "6537121438", "TakerGets": "6537121438",
"TakerPays": { "TakerPays": {
"currency": "USD", "currency": "USD",
"issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq", "issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",
"value": "50.9" "value": "50.9"
} }
}, },
"LedgerEntryType": "Offer", "LedgerEntryType": "Offer",
"LedgerIndex": "D3436CE21925E1CB12C5C444963B47D7EA0CD9A0E387926DC76B23FE5CD1C15F" "LedgerIndex": "D3436CE21925E1CB12C5C444963B47D7EA0CD9A0E387926DC76B23FE5CD1C15F"
} }
}], }],
"TransactionIndex": 26, "TransactionIndex": 26,
"TransactionResult": "tesSUCCESS" "TransactionResult": "tesSUCCESS"
}, },
"status": "closed", "status": "closed",
"transaction": { "transaction": {
"Account": "rfCFLzNJYvvnoGHWQYACmJpTgkLUaugLEw", "Account": "rfCFLzNJYvvnoGHWQYACmJpTgkLUaugLEw",
"Expiration": 508543674, "Expiration": 508543674,
"Fee": "11000", "Fee": "11000",
"Flags": 2147483648, "Flags": 2147483648,
"LastLedgerSequence": 18852106, "LastLedgerSequence": 18852106,
"OfferSequence": 12142889, "OfferSequence": 12142889,
"Sequence": 12142920, "Sequence": 12142920,
"SigningPubKey": "034841BF24BD72C7CC371EBD87CCBF258D8ADB05C18DE207130364A97D8A3EA524", "SigningPubKey": "034841BF24BD72C7CC371EBD87CCBF258D8ADB05C18DE207130364A97D8A3EA524",
"TakerGets": "6537121438", "TakerGets": "6537121438",
"TakerPays": { "TakerPays": {
"currency": "USD", "currency": "USD",
"issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq", "issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",
"value": "50.9" "value": "50.9"
}, },
"TransactionType": "OfferCreate", "TransactionType": "OfferCreate",
"TxnSignature": "3045022100B9AD678A773FB61F8F9B565713C80CBF187A2F9EB8E9CE0DAC7B839CA6F4B04C02200613D173A0636CD9BE13F2E3EBD13A16932B5B7D8A96BB5F6D561CA5CDBC4AD3", "TxnSignature": "3045022100B9AD678A773FB61F8F9B565713C80CBF187A2F9EB8E9CE0DAC7B839CA6F4B04C02200613D173A0636CD9BE13F2E3EBD13A16932B5B7D8A96BB5F6D561CA5CDBC4AD3",
"date": 508543090, "date": 508543090,
"hash": "D295E2BE50E3B78AED24790D7B9096996DAF43F095BF17DB83EEACC283D14050", "hash": "D295E2BE50E3B78AED24790D7B9096996DAF43F095BF17DB83EEACC283D14050",
"owner_funds": "3070197374272" "owner_funds": "3070197374272"
}, },
"type": "transaction", "type": "transaction",
"validated": true "validated": true
} }
``` ```
オーダーブックストリームメッセージの形式は、[トランザクションストリームメッセージ](#トランザクションストリーム)と同様ですが、`OfferCreate`トランザクションに以下のフィールドも含まれている点が異なります。 オーダーブックストリームメッセージの形式は、[トランザクションストリームメッセージ](#トランザクションストリーム)と同様ですが、`OfferCreate`トランザクションに以下のフィールドも含まれている点が異なります。
| `Field` | 値 | 説明 | | `Field`          | 値   | 説明       |
|:--------------------------|:-------|:----------------------------------------| |:--------------------------|:-------|:----------------------------------------|
| `transaction.owner_funds` | 文字列 | このOfferCreateトランザクションを送信する`Account`が、このトランザクション実行後に有する`TakerGets`通貨の金額。この通貨額が[凍結](freezes.html)されているかどうかはチェックされません。 | | `transaction.owner_funds` | 文字列 | このOfferCreateトランザクションを送信する`Account`が、このトランザクション実行後に有する`TakerGets`通貨の金額。この通貨額が[凍結](freezes.html)されているかどうかはチェックされません。 |
## コンセンサスストリーム
[新規: rippled 1.4.0][]
`consensus`ストリームは、[コンセンサスプロセス](consensus.html)でフェーズが変更されると、`consensusPhase`メッセージを送信します。このメッセージには、サーバーで実行されているコンセンサスの新しいフェーズが含まれます。
```
{
"type": "consensusPhase",
"consensus": "accepted"
}
```
コンセンサスストリームメッセージのフィールドは次のとおりです。
| `Field`       | 型             | 説明        |
|:--------------------|:--------------------------|:---------------------------|
| `type` | 文字列 | `consensusPhase`は、このメッセージがコンセンサスストリームからのものであることを示します。 |
| `consensus` | 文字列 | サーバーで実行されている新しいコンセンサスフェーズ。値には、open、establish、acceptedなどがあります。 |
{% include '_snippets/rippled_versions.md' %} {% include '_snippets/rippled_versions.md' %}
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -1,7 +1,7 @@
# sign # sign
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/SignHandler.cpp "ソース") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/SignHandler.cpp "ソース")
`sign`メソッドは[JSONフォーマットのトランザクション](transaction-formats.html)とシークレットキーを受け取り、トランザクションの署名済みバイナリー表現を返します。結果は、同一のトランザクションJSONとシークレットキーを渡した場合も常に異なります。マルチ署名済みトランザクションに署名を付与する場合は、代わりに[sign_forメソッド][]を使用します。 `sign`メソッドは[JSONフォーマットのトランザクション](transaction-formats.html)と[シード値](cryptographic-keys.html)を受け取り、トランザクションの署名済みバイナリー表現を返します。[マルチ署名済みトランザクション](multi-signing.html)に署名を付与する場合は、代わりに[sign_forメソッド][]を使用します。
{% include '_snippets/public-signing-note.md' %} {% include '_snippets/public-signing-note.md' %}
<!--_ --> <!--_ -->
@@ -69,38 +69,36 @@ rippled sign s██████████████████████
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
[試してみる>](websocket-api-tool.html#sign) トランザクションに署名するには、[トランザクションを承認](transaction-basics.html#トランザクションの承認)できるシークレットキーを提供する必要があります。通常、サーバーが秘密鍵を取得するシード値を提供します。これを行うには、以下の方法があります。
トランザクションに署名するには、[トランザクションを承認](transaction-basics.html#トランザクションの承認)できるシークレットキーを提供する必要があります。これを行うには、以下の方法があります * `secret`フィールドにシードを指定し、`key_type`フィールドを省略します。この値は、XRP Ledgerの[base58][]シード、RFC-1751、16進値のフォーマットで記述するか、文字列パスフレーズとして記述しますsecp256k1キーのみ
* `key_type`値と、`seed``seed_hex`、または`passphrase`のいずれか1つを提供します。`secret`フィールドは省略します。(コマンドライン構文ではサポートされません)。
* `secret`値を指定し、`key_type`フィールドを省略します。この値は、XRP Ledgerの[base58][]シード、RFC-1751、16進値のフォーマットで記述するか、文字列パスフレーズとして記述しますsecp256k1キーのみ
* `key_type`値と、`seed``seed_hex`、または`passphrase`のいずれか1つを提供します。`secret`フィールドは省略します(コマンドライン構文ではサポートされません)。
要求には以下のパラメーターが含まれます。 要求には以下のパラメーターが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:---------------|:--------|:--------------------------------------------------| |:---------------|:--------|:--------------------------------------------------|
| `tx_json` | オブジェクト | JSONフォーマットの[トランザクション定義](transaction-formats.html) | | `tx_json` | オブジェクト | JSONフォーマットの[トランザクション定義](transaction-formats.html) |
| `secret` | 文字列 | _省略可_ トランザクションを提供するアカウントのシークレットキー。トランザクションへの署名に使用されます。信頼できないサーバーに対して、またはセキュリティが確保されていないネットワーク接続を通じて機密情報を送信しないでください。`key_type``seed``seed_hex``passphrase`と同時に使用することはできません。 | | `secret` | 文字列 | _省略可_ トランザクションを提供するアカウントの秘密シード。トランザクションへの署名に使用されます。信頼できないサーバーに対して、またはセキュリティが確保されていないネットワーク接続を通じて機密情報を送信しないでください。`key_type``seed``seed_hex``passphrase`と同時に使用することはできません。 |
| `seed` | 文字列 | _省略可_ トランザクションを提供するアカウントのシークレットキー。トランザクションへの署名に使用されます。XRP Ledgerの[base58][]フォーマットにする必要があります。指定する場合は、`key_type`も指定する必要があります。`secret``seed_hex``passphrase`と同時に使用することはできません。 | | `seed` | 文字列 | _省略可_ トランザクションを提供するアカウントの秘密シード。トランザクションへの署名に使用されます。XRP Ledgerの[base58][]フォーマットにする必要があります。指定する場合は、`key_type`も指定する必要があります。`secret``seed_hex``passphrase`と同時に使用することはできません。 |
| `seed_hex` | 文字列 | _省略可_ トランザクションを提供するアカウントのシークレットキー。トランザクションへの署名に使用されます。16進フォーマットにする必要があります。指定する場合は、`key_type`も指定する必要があります。`secret``seed``passphrase`と同時に使用することはできません。 | | `seed_hex` | 文字列 | _省略可_ トランザクションを提供するアカウントの秘密シード。トランザクションへの署名に使用されます。16進フォーマットにする必要があります。指定する場合は、`key_type`も指定する必要があります。`secret``seed``passphrase`と同時に使用することはできません。 |
| `passphrase` | 文字列 | _省略可_ トランザクションを提供するアカウントのシークレットキー。文字列パスフレーズとして、トランザクションへの署名に使用されます。指定する場合は、`key_type`も指定する必要があります。`secret``seed``seed_hex`と同時に使用することはできません。 | | `passphrase` | 文字列 | _省略可_ トランザクションを提供するアカウントの秘密シード。文字列パスフレーズとして、トランザクションへの署名に使用されます。指定する場合は、`key_type`も指定する必要があります。`secret``seed``seed_hex`と同時に使用することはできません。 |
| `key_type` | 文字列 | _省略可_ この要求で提供する暗号鍵の種類。有効な種類は、`secp256k1`または`ed25519`です。デフォルトは`secp256k1`です。`secret`と同時に使用することはできません。**注意:** Ed25519のサポートは実験的な機能です。 | | `key_type` | 文字列 | _省略可_ 指定された暗号化キーペアの[署名アルゴリズム](cryptographic-keys.html#署名アルゴリズム)。有効な種類は、`secp256k1`または`ed25519`です。デフォルトは`secp256k1`です。`secret`と同時に使用することはできません。 |
| `offline` | ブール値 | (省略可。デフォルトはfalsetrueにする場合は、トランザクションの生成時に、値を自動で入力または検証しようとしないでください。 | | `offline` | ブール値 | _(省略可)_ `true`場合は、トランザクションの生成時に、トランザクションの詳細を[自動入力](#自動入力可能なフィールド)しないでください。デフォルトは`false`です。 |
| `build_path` | ブール値 | _省略可_ Payment型のトランザクションに対して指定した場合、署名前に`Paths`フィールドが自動で入力されます。**注意:** サーバーは、このフィールドの値ではなく、このフィールドが存在するかどうかを調べます。この動作は変更される可能性があります。 | | `build_path` | ブール値 | _省略可_ Payment型のトランザクションに対して指定した場合、署名前に`Paths`フィールドが自動で入力されます。**注意:** サーバーは、このフィールドの値ではなく、このフィールドが存在するかどうかを調べます。この動作は変更される可能性があります。 |
| `fee_mult_max` | 整数 | (省略可。デフォルトは10、推奨値は1000[自動的に提供される`Fee`フィールド](transaction-common-fields.html#自動入力可能なフィールド)の上限値を設定します。現在の[トランザクションコストの負荷の乗数](transaction-cost.html#ローカル負荷コスト)が(`fee_mult_max` ÷ `fee_div_max`)よりも大きい場合、署名は`rpcHIGH_FEE`エラーで失敗します。トランザクションの`Fee`フィールド([トランザクションコスト](transaction-cost.html))を指定した場合は無視されます。 | | `fee_mult_max` | 整数 | _(省略可)_[自動的に提供される`Fee`フィールド](transaction-common-fields.html#自動入力可能なフィールド)の上限値を設定します。現在の[トランザクションコストの負荷の乗数](transaction-cost.html#ローカル負荷コスト)が(`fee_mult_max` ÷ `fee_div_max`)よりも大きい場合、署名は`rpcHIGH_FEE`エラーで失敗します。トランザクションの`Fee`フィールド([トランザクションコスト](transaction-cost.html))を指定した場合は無視されます。デフォルトは`10`です。 |
| `fee_div_max` | 整数 | (省略可。デフォルトは1)現在の[トランザクションコストの負荷の乗数](transaction-cost.html#ローカル負荷コスト)が(`fee_mult_max` ÷ `fee_div_max`)よりも大きい場合、署名は`rpcHIGH_FEE`エラーで失敗します。トランザクションの`Fee`フィールド([トランザクションコスト](transaction-cost.html))を指定した場合は無視されます。[新規: rippled 0.30.1][] | | `fee_div_max` | 整数 | _(省略可)_ 現在の[トランザクションコストの負荷の乗数](transaction-cost.html#ローカル負荷コスト)が(`fee_mult_max` ÷ `fee_div_max`)よりも大きい場合、署名は`rpcHIGH_FEE`エラーで失敗します。トランザクションの`Fee`フィールド([トランザクションコスト](transaction-cost.html))を指定した場合は無視されます。デフォルトは`1`です。[新規: rippled 0.30.1][] |
### 自動入力可能なフィールド ### 自動入力可能なフィールド
`tx_json`[トランザクションオブジェクト](transaction-formats.html))の特定のフィールドを省略すると、サーバーは自動的に入力しようとします。要求の`offline``true`と指定しない限り、サーバーは署名前に以下のフィールドを提供します。 `tx_json`[トランザクションオブジェクト](transaction-formats.html))の特定のフィールドを省略すると、サーバーは自動的に入力しようとします。要求の`offline``true`と指定しない限り、サーバーは署名前に以下のフィールドを提供します。
* `Sequence` - サーバーは、送信者のアカウント情報にある次のシーケンス番号を自動的に使用します。 * `Sequence` - サーバーは、送信者のアカウント情報にある次のシーケンス番号を自動的に使用します。
* **注意:** アカウントの次のシーケンス番号は、このトランザクションが適用されるまで増分されません。トランザクションの送信および個々のトランザクションへの応答を待たずに複数のトランザクションに署名する場合は、最初のトランザクション以降の各トランザクションについて、正しいシーケンス番号を手動で提供する必要があります。 * **注意:** アカウントの次のシーケンス番号は、このトランザクションが適用されるまで増分されません。トランザクションの送信および個々のトランザクションへの応答を待たずに複数のトランザクションに署名する場合は、最初のトランザクション以降の各トランザクションについて、正しいシーケンス番号を手動で提供する必要があります。
* `Fee` - `Fee`パラメーターを省略した場合、サーバーは適切なトランザクションコストを自動的に入力しようとします。本番環境のXRP Ledgerでは、適切な`fee_mult_max`値を提供しない限り、この処理は`rpcHIGH_FEE`エラーで失敗します。 * `Fee` - `Fee`パラメーターを省略した場合、サーバーは適切なトランザクションコストを自動的に入力しようとします。本番環境のXRP Ledgerでは、適切な`fee_mult_max`値を提供しない限り、この処理は`rpcHIGH_FEE`エラーで失敗します。
* `fee_mult_max`パラメーターと`fee_div_max`パラメーターは、[リファレンストランザクションコスト](transaction-cost.html#referenceトランザクションコスト)に適用される負荷スケーリング乗数によって、自動的に提供されるトランザクションコストの上限値を設定します。デフォルト設定では、自動的に提供される値が10×の乗数より大きい場合、エラーが返されます。ただし、本番環境のXRP Ledgerでは、[1000×の負荷乗数を使用することが一般的](transaction-cost.html#現在のトランザクションコスト)です。 * `fee_mult_max`パラメーターと`fee_div_max`パラメーターは、[リファレンストランザクションコスト](transaction-cost.html#referenceトランザクションコスト)に適用される負荷スケーリング乗数によって、自動的に提供されるトランザクションコストの上限値を設定します。デフォルト設定では、自動的に提供される値が10×の乗数より大きい場合、エラーが返されます。ただし、本番環境のXRP Ledgerでは、[1000×の負荷乗数を使用することが一般的](transaction-cost.html#現在のトランザクションコスト)です。
* コマンドライン構文では、`fee_mult_max`および`fee_div_max`はサポートされません。本番環境のXRP Ledgerの場合は、`Fee`値を提供する必要があります。 * コマンドライン構文では、`fee_mult_max`および`fee_div_max`はサポートされません。本番環境のXRP Ledgerの場合は、`Fee`値を提供する必要があります。
* **注意:** 悪意のあるサーバーは、`fee_mult_max``fee_div_max`の値を無視して、きわめて大きなトランザクションコストを指定するおそれがあります。 * **注意:** 悪意のあるサーバーは、`fee_mult_max``fee_div_max`の値を無視して、きわめて大きなトランザクションコストを指定するおそれがあります。
* `Paths` - Payment型のトランザクションの場合XRP間の移動を除く、Pathsフィールドは、[ripple_path_findメソッド][]を使用した場合と同様に自動的に入力できます。`build_path`を指定した場合のみ入力されます。 * `Paths` - Payment型のトランザクションの場合XRP間の移動を除く、Pathsフィールドは、[ripple_path_findメソッド][]を使用した場合と同様に自動的に入力できます。`build_path`を指定した場合のみ入力されます。
## 応答フォーマット ## 応答フォーマット
@@ -166,7 +164,7 @@ rippled sign s██████████████████████
} }
``` ```
*Commandline* *コマンドライン*
``` ```
Loading: "/etc/rippled.cfg" Loading: "/etc/rippled.cfg"
@@ -197,14 +195,14 @@ Connecting to 127.0.0.1:5005
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
この応答は[標準フォーマット][]に従っており、結果が正しい場合、以下のフィールドが含まれます。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:----------|:-------|:--------------------------------------------------------| |:----------|:-------|:--------------------------------------------------------|
| `tx_blob` | 文字列 | 正しく作成された署名済みトランザクションの16進バイナリー表現 | | `tx_blob` | 文字列 | 正しく作成された署名済みトランザクションの16進バイナリー表現 |
| `tx_json` | オブジェクト | 自動的に入力されたフィールドを含む、署名済み[トランザクション全体](transaction-formats.html)のJSON仕様 | | `tx_json` | オブジェクト | 自動的に入力されたフィールドを含む、署名済み[トランザクション全体](transaction-formats.html)のJSON仕様 |
**注意:** このコマンドの結果としてエラーメッセージが表示された場合、要求から取得されたシークレットキーがメッセージの中に記述されている可能性があります。これらのエラーが他者から見えない状態であることを確認してください。 **注意:** このコマンドの結果としてエラーメッセージが表示された場合、要求で指定されたシークレットがメッセージの中に含まれている可能性があります。これらのエラーが他者から見えない状態であることを確認してください。
* このエラーは、複数の人物が参照できるログファイルに書き込まないでください。 * このエラーは、複数の人物が参照できるログファイルに書き込まないでください。
* デバッグを目的として、誰でも参照できる場所にこのエラーを貼り付けないでください。 * デバッグを目的として、誰でも参照できる場所にこのエラーを貼り付けないでください。
@@ -212,7 +210,7 @@ Connecting to 127.0.0.1:5005
## 考えられるエラー ## 考えられるエラー
* いずれかの[汎用エラータイプ][]。 * いずれかの[一般的なエラータイプ][]。
* `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。 * `invalidParams` - 1つ以上のフィールドの指定が正しくないか、1つ以上の必須フィールドが指定されていません。
* `highFee` - トランザクションコストに適用される現在の負荷乗数が、自動的に提供されるトランザクションコストの上限を超えています。要求で指定する`fee_mult_max`を大きくするか1000以上`tx_json``Fee`フィールドに値を手動で指定します。 * `highFee` - トランザクションコストに適用される現在の負荷乗数が、自動的に提供されるトランザクションコストの上限を超えています。要求で指定する`fee_mult_max`を大きくするか1000以上`tx_json``Fee`フィールドに値を手動で指定します。
* `tooBusy` - トランザクションにパスが含まれていませんが、サーバーがビジーであるため、パス検出処理をすぐに実行できません。管理者として接続している場合は発生しません。 * `tooBusy` - トランザクションにパスが含まれていませんが、サーバーがビジーであるため、パス検出処理をすぐに実行できません。管理者として接続している場合は発生しません。

View File

@@ -1,5 +1,5 @@
# transaction_entry # transaction_entry
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/TransactionEntry.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/TransactionEntry.cpp "Source")
`transaction_entry`メソッドは、特定のレジャーバージョンから1つのトランザクションに関する情報を取得します。これに対して、[txメソッド][]はすべてのレジャーから指定のトランザクションを検索します。txメソッドの使用をお勧めします。 `transaction_entry`メソッドは、特定のレジャーバージョンから1つのトランザクションに関する情報を取得します。これに対して、[txメソッド][]はすべてのレジャーから指定のトランザクションを検索します。txメソッドの使用をお勧めします。
@@ -13,10 +13,10 @@
``` ```
{ {
"id":4, "id": 4,
"command":"transaction_entry", "command": "transaction_entry",
"tx_hash":"E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7", "tx_hash": "E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7",
"ledger_index":348734 "ledger_index": 348734
} }
``` ```
@@ -24,13 +24,13 @@
``` ```
{ {
"method":"transaction_entry", "method": "transaction_entry",
"params":[ "params": [
{ {
"tx_hash":"E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7", "tx_hash": "E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7",
"ledger_index":348734 "ledger_index": 348734
} }
] ]
} }
``` ```
@@ -47,11 +47,11 @@ rippled transaction_entry E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDA
要求には以下のパラメーターが含まれます。 要求には以下のパラメーターが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:---------------|:---------------------------|:-------------------------------| |:---------------|:---------------------------|:-------------------------------|
| `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。[レジャーの指定][]を参照してください) | | `ledger_hash` | 文字列 | _省略可_ 使用するレジャーバージョンの20バイトの16進文字列。[レジャーの指定][]を参照してください) |
| `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーのシーケンス番号、またはレジャーを自動的に選択するためのショートカット文字列。([レジャーの指定][]を参照してください) | | `ledger_index` | 文字列または符号なし整数 | _省略可_ 使用するレジャーの[レジャーインデックス][]、またはレジャーを自動的に選択するためのショートカット文字列。([レジャーの指定][]を参照してください) |
| `tx_hash` | 文字列 | 検索するトランザクションの一意のハッシュ | | `tx_hash` | 文字列 | 検索するトランザクションの一意のハッシュ |
**注記:** このメソッドでは、現在進行中のレジャーから情報を取得する操作はサポートされていません。`ledger_index`または`ledger_hash`でレジャーバージョンを指定する必要があります。 **注記:** このメソッドでは、現在進行中のレジャーから情報を取得する操作はサポートされていません。`ledger_index`または`ledger_hash`でレジャーバージョンを指定する必要があります。
@@ -65,129 +65,129 @@ rippled transaction_entry E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDA
``` ```
{ {
"id":4, "id": 4,
"result":{ "result": {
"ledger_index":348734, "ledger_index": 348734,
"metadata":{ "metadata": {
"AffectedNodes":[ "AffectedNodes": [
{ {
"ModifiedNode":{ "ModifiedNode": {
"FinalFields":{ "FinalFields": {
"Account":"r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", "Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"Balance":"59328999119", "Balance": "59328999119",
"Flags":0, "Flags": 0,
"OwnerCount":11, "OwnerCount": 11,
"Sequence":89 "Sequence": 89
}, },
"LedgerEntryType":"AccountRoot", "LedgerEntryType": "AccountRoot",
"LedgerIndex":"E0D7BDE68B468FF0B8D948FD865576517DA987569833A05374ADB9A72E870A06", "LedgerIndex": "E0D7BDE68B468FF0B8D948FD865576517DA987569833A05374ADB9A72E870A06",
"PreviousFields":{ "PreviousFields": {
"Balance":"59328999129", "Balance": "59328999129",
"Sequence":88 "Sequence": 88
}, },
"PreviousTxnID":"C26AA6B4F7C3B9F55E17CD0D11F12032A1C7AD2757229FFD277C9447A8815E6E", "PreviousTxnID": "C26AA6B4F7C3B9F55E17CD0D11F12032A1C7AD2757229FFD277C9447A8815E6E",
"PreviousTxnLgrSeq":348700 "PreviousTxnLgrSeq": 348700
} }
}, },
{ {
"ModifiedNode":{ "ModifiedNode": {
"FinalFields":{ "FinalFields": {
"Balance":{ "Balance": {
"currency":"USD", "currency": "USD",
"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value":"-1" "value": "-1"
}, },
"Flags":131072, "Flags": 131072,
"HighLimit":{ "HighLimit": {
"currency":"USD", "currency": "USD",
"issuer":"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value":"100" "value": "100"
}, },
"HighNode":"0000000000000000", "HighNode": "0000000000000000",
"LowLimit":{ "LowLimit": {
"currency":"USD", "currency": "USD",
"issuer":"r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", "issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"value":"0" "value": "0"
}, },
"LowNode":"0000000000000000" "LowNode": "0000000000000000"
}, },
"LedgerEntryType":"RippleState", "LedgerEntryType": "RippleState",
"LedgerIndex":"EA4BF03B4700123CDFFB6EB09DC1D6E28D5CEB7F680FB00FC24BC1C3BB2DB959", "LedgerIndex": "EA4BF03B4700123CDFFB6EB09DC1D6E28D5CEB7F680FB00FC24BC1C3BB2DB959",
"PreviousFields":{ "PreviousFields": {
"Balance":{ "Balance": {
"currency":"USD", "currency": "USD",
"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value":"0" "value": "0"
} }
}, },
"PreviousTxnID":"53354D84BAE8FDFC3F4DA879D984D24B929E7FEB9100D2AD9EFCD2E126BCCDC8", "PreviousTxnID": "53354D84BAE8FDFC3F4DA879D984D24B929E7FEB9100D2AD9EFCD2E126BCCDC8",
"PreviousTxnLgrSeq":343570 "PreviousTxnLgrSeq": 343570
} }
} }
], ],
"TransactionIndex":0, "TransactionIndex": 0,
"TransactionResult":"tesSUCCESS" "TransactionResult": "tesSUCCESS"
}, },
"tx_json":{ "tx_json": {
"Account":"r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", "Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"Amount":{ "Amount": {
"currency":"USD", "currency": "USD",
"issuer":"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "issuer": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"value":"1" "value": "1"
}, },
"Destination":"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "Destination": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"Fee":"10", "Fee": "10",
"Flags":0, "Flags": 0,
"Paths":[ "Paths": [
[ [
{ {
"account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", "account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"currency":"USD", "currency": "USD",
"issuer":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"type":49, "type": 49,
"type_hex":"0000000000000031" "type_hex": "0000000000000031"
} }
], ],
[ [
{ {
"account":"rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x", "account": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x",
"currency":"USD", "currency": "USD",
"issuer":"rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x", "issuer": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x",
"type":49, "type": 49,
"type_hex":"0000000000000031" "type_hex": "0000000000000031"
}, },
{ {
"account":"rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY", "account": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY",
"currency":"USD", "currency": "USD",
"issuer":"rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY", "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY",
"type":49, "type": 49,
"type_hex":"0000000000000031" "type_hex": "0000000000000031"
}, },
{ {
"account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", "account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"currency":"USD", "currency": "USD",
"issuer":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV",
"type":49, "type": 49,
"type_hex":"0000000000000031" "type_hex": "0000000000000031"
} }
] ]
], ],
"SendMax":{ "SendMax": {
"currency":"USD", "currency": "USD",
"issuer":"r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", "issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH",
"value":"1.01" "value": "1.01"
}, },
"Sequence":88, "Sequence": 88,
"SigningPubKey":"02EAE5DAB54DD8E1C49641D848D5B97D1B29149106174322EDF98A1B2CCE5D7F8E", "SigningPubKey": "02EAE5DAB54DD8E1C49641D848D5B97D1B29149106174322EDF98A1B2CCE5D7F8E",
"TransactionType":"Payment", "TransactionType": "Payment",
"TxnSignature":"30440220791B6A3E036ECEFFE99E8D4957564E8C84D1548C8C3E80A87ED1AA646ECCFB16022037C5CAC97E34E3021EBB426479F2ACF3ACA75DB91DCC48D1BCFB4CF547CFEAA0", "TxnSignature": "30440220791B6A3E036ECEFFE99E8D4957564E8C84D1548C8C3E80A87ED1AA646ECCFB16022037C5CAC97E34E3021EBB426479F2ACF3ACA75DB91DCC48D1BCFB4CF547CFEAA0",
"hash":"E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7", "hash": "E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7",
"inLedger":348734, "inLedger": 348734,
"ledger_index":348734 "ledger_index": 348734
} }
}, },
"status":"success", "status": "success",
"type":"response" "type": "response"
} }
``` ```
@@ -195,12 +195,12 @@ rippled transaction_entry E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDA
この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。 この応答は[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれます。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:---------------|:-----------------|:-----------------------------------------| |:---------------|:--------------------------|:--------------------------------|
| `ledger_index` | 符号なし整数 | トランザクションが検出されたレジャーバージョンのシーケンス番号。これは要求のledger_indexと同じです。 | | `ledger_index` | 数値 - [レジャーインデックス][] | トランザクションが検出されたレジャーバージョンのレジャーインデックス。これは要求のレジャーインデックスと同じです。 |
| `ledger_hash` | 文字列 | (省略される場合があります)トランザクションが検出されたレジャーバージョンの一意のハッシュ。これは要求のledger_hashと同じです。 | | `ledger_hash` | 文字列 - [Hash][] | _(省略される場合があります)_ トランザクションが検出されたレジャーバージョンの識別用ハッシュ。これは要求のハッシュと同じです。 |
| `metadata` | オブジェクト | トランザクションに関する各種メタデータ。 | | `metadata` | オブジェクト | [トランザクションのメタデータ](transaction-metadata.html)。トランザクションの正確な結果を詳細に表示します。 |
| `tx_json` | オブジェクト | [Transactionオブジェクト](transaction-formats.html)のJSON表現。 | | `tx_json` | オブジェクト | [Transactionオブジェクト](transaction-formats.html)のJSON表現。 |
サーバーがトランザクションの検出に失敗する原因として、次のようなものが考えられます。 サーバーがトランザクションの検出に失敗する原因として、次のようなものが考えられます。
@@ -210,13 +210,12 @@ rippled transaction_entry E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDA
## 考えられるエラー ## 考えられるエラー
* [汎用エラータイプ][]のすべて * いずれかの[一般的なエラータイプ][]。
* `fieldNotFoundTransaction` - `tx_hash`フィールドが要求で省略されています。 * `fieldNotFoundTransaction` - `tx_hash`フィールドが要求で省略されています。
* `notYetImplemented` - レジャーバージョンが要求に指定されていません。 * `notYetImplemented` - レジャーバージョンが要求に指定されていません。
* `lgrNotFound` - `ledger_hash`または`ledger_index`で指定したレジャーが存在しないか、存在してはいるもののサーバーが保有していません。 * `lgrNotFound` - `ledger_hash`または`ledger_index`で指定したレジャーが存在しないか、存在してはいるもののサーバーが保有していません。
* `transactionNotFound` - 要求に指定されているトランザクションが指定のレジャーで見つかりませんでした。(トランザクションが異なるレジャーバージョンにあるか、またはトランザクションがまったく使用できない可能性があります。) * `transactionNotFound` - 要求に指定されているトランザクションが指定のレジャーで見つかりませんでした。(トランザクションが異なるレジャーバージョンにあるか、またはトランザクションがまったく使用できない可能性があります。)
{% include '_snippets/rippled_versions.md' %} {% include '_snippets/rippled_versions.md' %}
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -6,28 +6,30 @@
``` ```
{ {
"Account":"rrrrrrrrrrrrrrrrrrrrrhoLvTp", "Account": "rrrrrrrrrrrrrrrrrrrrrhoLvTp",
"BaseFee":"000000000000000A", "BaseFee": "000000000000000A",
"Fee":"0", "Fee": "0",
"ReferenceFeeUnits":10, "ReferenceFeeUnits": 10,
"ReserveBase":20000000, "ReserveBase": 20000000,
"ReserveIncrement":5000000, "ReserveIncrement": 5000000,
"Sequence":0, "Sequence": 0,
"SigningPubKey":"", "SigningPubKey": "",
"TransactionType":"SetFee", "TransactionType": "SetFee",
"date":439578860, "date": 439578860,
"hash":"1C15FEA3E1D50F96B6598607FC773FF1F6E0125F30160144BE0C5CBC52F5151B", "hash": "1C15FEA3E1D50F96B6598607FC773FF1F6E0125F30160144BE0C5CBC52F5151B",
"ledger_index":3721729, "ledger_index": 3721729,
} }
``` ```
| フィールド | JSONの型 | [内部の型][] | 説明 | | フィールド | JSONの型 | [内部の型][] | 説明 |
|:------------------|:-----------------|:------------------|:------------------| |:------------------|:-----------------|:------------------|:------------------|
| BaseFee | 文字列 | UInt64 | リファレンストランザクションの手数料XRPのdrop数、16進数これは、負荷スケーリング前の[トランザクションコスト](transaction-cost.html)です。) | | BaseFee | 文字列 | UInt64 | リファレンストランザクションの手数料XRPのdrop数、16進数これは、負荷スケーリング前の[トランザクションコスト](transaction-cost.html)です。) |
| ReferenceFeeUnits | 符号なし整数 | UInt32 | リファレンストランザクションのコスト(手数料単位) | | ReferenceFeeUnits | 符号なし整数 | UInt32 | リファレンストランザクションのコスト(手数料単位) |
| ReserveBase | 符号なし整数 | UInt32 | 基本準備金drop数 | | ReserveBase | 符号なし整数 | UInt32 | 基本準備金drop数 |
| ReserveIncrement | 符号なし整数 | UInt32 | 増分準備金drop数 | | ReserveIncrement | 符号なし整数 | UInt32 | 増分準備金drop数 |
| LedgerSequence | 数値 | UInt32 | この似トランザクションが含まれているレジャーバージョンのインデックス。これにより、この疑似トランザクションと別途発生する同様の変更が区別されます。 | | LedgerSequence | 数値 | UInt32 | _過去に発生した`SetFee`疑似トランザクションの場合は省略_ この似トランザクションが表示されるレジャーバージョンのインデックス。これにより、この疑似トランザクションと別途発生する同様の変更が区別されます。 |
{% include '_snippets/setfee_uniqueness_note.md' %}
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -4,46 +4,48 @@
ほとんどの場合、`tec`コード付きのトランザクションは、[トランザクションコスト](transaction-cost.html)として支払われた分のXRPを消却する以外の操作は実行しませんが、いくつかの例外があります。例外として、`tecOVERSIZE`となったトランザクションは、一部の[資金供給のないオファー](offers.html#オファーのライフサイクル)を引き続きクリーンアップします。[トランザクションメタデータ](transaction-metadata.html)を常に確認し、トランザクションの実行内容を正確に把握してください。 ほとんどの場合、`tec`コード付きのトランザクションは、[トランザクションコスト](transaction-cost.html)として支払われた分のXRPを消却する以外の操作は実行しませんが、いくつかの例外があります。例外として、`tecOVERSIZE`となったトランザクションは、一部の[資金供給のないオファー](offers.html#オファーのライフサイクル)を引き続きクリーンアップします。[トランザクションメタデータ](transaction-metadata.html)を常に確認し、トランザクションの実行内容を正確に把握してください。
**注意:** 暫定的に`tec`コードで失敗したトランザクションは、再適用後に成功するか、または別のコードで失敗する可能性があります。検証済みレジャーバージョンに記録される結果が最終結果となります。詳細は、[結果のファイナリティー](finality-of-results.html)と[信頼性の高いトランザクション送信](reliable-transaction-submission.html)を参照してください。 **注意:** 暫定的に`tec`コードで失敗したトランザクションは、再適用後に成功するか、または別のコードで失敗する可能性があります。検証済みレジャーバージョンに記録される結果が最終結果となります。詳細は、[結果のファイナリティー](finality-of-results.html)と[信頼できるトランザクション送信](reliable-transaction-submission.html)を参照してください。
| コード | 値 | 説明 | | コード | 値 | 説明 |
|:---------------------------|:------|:----------------------------------------| |:---------------------------|:------|:----------------------------------------|
| `tecCLAIM` | 100 | 不明なエラー。トランザクションコストは消却されました。 | | `tecCLAIM` | 100 | 不明なエラー。トランザクションコストは消却されました。 |
| `tecCRYPTOCONDITION_ERROR` | 146 | この[EscrowCreate][]トランザクションまたは[EscrowFinish][]トランザクションに指定されるCrypto-conditionの形式が誤っているか、または一致しませんでした。 | | `tecCRYPTOCONDITION_ERROR` | 146 | この[EscrowCreate][]トランザクションまたは[EscrowFinish][]トランザクションに指定されるCrypto-conditionの形式が誤っているか、または一致しませんでした。 |
| `tecDIR_FULL` | 121 | トランザクションがアカウントの所有者ディレクトリにオブジェクトトラストライン、Check、Escrow、Payment Channelなどを追加しようと試みましたが、このアカウントはレジャーにこれ以上のオブジェクトを所有できません。 | | `tecDIR_FULL` | 121 | トランザクションがアカウントの所有者ディレクトリにオブジェクトトラストライン、Check、Escrow、Payment Channelなどを追加しようと試みましたが、このアカウントはレジャーにこれ以上のオブジェクトを所有できません。 |
| `tecDST_TAG_NEEDED` | 143 | [Paymentトランザクション][]の宛先タグが省略されましたが、支払先アカウントでは`lsfRequireDestTag`フラグが有効になっています。[新規: rippled 0.28.0][] | | `tecDUPLICATE` | 149 | トランザクションが、すでに存在するオブジェクト([DepositPreauth][]の承認など)を作成しようとしました。 |
| `tecEXPIRED` | 148 | トランザクションがオブジェクトOfferやCheckなどを作成しようとしましたが、そのオブジェクトで指定された有効期限がすでに経過しています。 | | `tecDST_TAG_NEEDED` | 143 | [Paymentトランザクション][]の宛先タグが省略されましたが、支払先アカウントでは`lsfRequireDestTag`フラグが有効になっています。[新規: rippled 0.28.0][] |
| `tecFAILED_PROCESSING` | 105 | トランザクションの処理中に不明なエラーが発生しました。 | | `tecEXPIRED` | 148 | トランザクションがオブジェクトOfferやCheckなどを作成しようとしましたが、そのオブジェクトで指定された有効期限がすでに経過しています。 |
| `tecFROZEN` | 137 | [OfferCreateトランザクション][]が失敗しました。関係する1つまたは両方の資産が[Global Freeze](freezes.html)の対象となっています。 | | `tecFAILED_PROCESSING` | 105 | トランザクションの処理中に不明なエラーが発生しました。 |
| `tecHAS_OBLIGATIONS` | 151 | The [AccountDelete transaction][] failed because the account to be deleted owns objects that cannot be deleted. See [Deletion of Accounts](accounts.html#deletion-of-accounts) for details. <!-- TODO: translate --> | | `tecFROZEN` | 137 | [OfferCreateトランザクション][]が失敗しました。関係する1つまたは両方の資産が[Global Freeze](freezes.html)の対象となっています。 |
| `tecINSUF_RESERVE_LINE` | 122 | 送信側アカウントに、新しいトラストラインを作成するのに十分なXRPがないため、トランザクションが失敗しました。[準備金](reserves.html)を参照してください)このエラーは、取引相手から同一通貨の送信側アカウントへのトラストラインがデフォルト以外の状態である場合に発生します。(その他のケースについては`tecNO_LINE_INSUF_RESERVE`を参照してください。 | | `tecHAS_OBLIGATIONS ` | 151 | 削除するアカウントが削除できないオブジェクトを所有しているため、[AccountDeleteトランザクション][]が失敗しました。詳細は、[アカウントの削除](accounts.html#アカウントの削除)を参照してください。 |
| `tecINSUF_RESERVE_OFFER` | 123 | 送信側アカウントに、新しいオファーを作成するのに十分なXRPがないため、トランザクションが失敗しました。[準備金](reserves.html)を参照してください。) | | `tecINSUF_RESERVE_LINE` | 122 | 送信側アカウントに、新しいトラストラインを作成するのに十分なXRPがないため、トランザクションが失敗しました。[準備金](reserves.html)を参照してください)このエラーは、取引相手から同一通貨の送信側アカウントへのトラストラインがデフォルト以外の状態である場合に発生します。(その他のケースについては`tecNO_LINE_INSUF_RESERVE`を参照してください。) |
| `tecINSUFFICIENT_RESERVE` | 141 | トランザクションによって[必要準備金](reserves.html)が増加し、送信側アカウントの残高を超える可能性があります。[SignerListSet][]、[PaymentChannelCreate][]、[PaymentChannelFund][]、および[EscrowCreate][]からこのエラーコードが返されることがあります。詳細は、[SignerListと準備金](signerlist.html#signerlistと準備金)を参照してください。 | | `tecINSUF_RESERVE_OFFER` | 123 | 送信側アカウントに、新しいオファーを作成するのに十分なXRPがないため、トランザクションが失敗しました。[準備金](reserves.html)を参照してください。) |
| `tecINTERNAL` | 144 | 不明な内部エラーが発生し、トランザクションコストは適用されました。通常はこのエラーは返されません。このエラーを再現できる場合は、[問題を報告](https://github.com/ripple/rippled/issues)してください。 | | `tecINSUFF_FEE` | 136 | 指定された[トランザクションコスト](transaction-cost.html)を支払うのに十分なXRPが送金元アカウントにないため、トランザクションが失敗しました。この場合、送金元のXRPが指定されたトランザクションコストよりも低い場合でも、トランザクション処理によってすべて消却されます。この結果は、このトランザクションがコンセンサスセットに含まれるのに十分なネットワークに配布された*後に*アカウントの残高が減少した場合にのみ発生します。そうでない場合、トランザクションは配布される前に[`terINSUF_FEE_B`](ter-codes.html)で失敗します。 |
| `tecINVARIANT_FAILED` | 147 | このトランザクションを実行しようとしたところ、不変性チェックが失敗しました。[EnforceInvariants Amendment][]が必要です。このエラーを再現できる場合は、[問題を報告](https://github.com/ripple/rippled/issues)してください。 | | `tecINSUFFICIENT_RESERVE` | 141 | トランザクションによって[必要準備金](reserves.html)が増加し、送信側アカウントの残高を超える可能性があります。[SignerListSet][]、[PaymentChannelCreate][]、[PaymentChannelFund][]、および[EscrowCreate][]からこのエラーコードが返されることがあります。詳細は、[SignerListと準備金](signerlist.html#signerlistと準備金)を参照してください。 |
| `tecNEED_MASTER_KEY` | 142 | このトランザクションはマスターキーを必要とする変更([マスターキーの無効化または残高凍結能力の放棄](accountset.html#accountsetのフラグ)など)を試みました。[新規: rippled 0.28.0][] | | `tecINTERNAL` | 144 | 不明な内部エラーが発生し、トランザクションコストは適用されました。通常はこのエラーは返されません。このエラーを再現できる場合は、[問題を報告](https://github.com/ripple/rippled/issues)してください。 |
| `tecNO_ALTERNATIVE_KEY` | 130 | トランザクションが唯一の[トランザクション承認](transaction-basics.html#トランザクションの承認)メソッドを削除しようとしました。これは、レギュラーキーを削除する[SetRegularKeyトランザクション][]、SignerListを削除する[SignerListSetトランザクション][]、またはマスターキーを無効にする[AccountSetトランザクション][]である可能性があります。(`rippled` 0.30.0より前のバージョンでは、このトランザクションは`tecMASTER_DISABLED`と呼ばれていました。) | | `tecINVARIANT_FAILED` | 147 | このトランザクションを実行しようとしたところ、不変性チェックが失敗しました。[EnforceInvariants Amendment][]が必要です。このエラーを再現できる場合は、[問題を報告](https://github.com/ripple/rippled/issues)してください。 |
| `tecNO_AUTH` | 134 | トランザクションはトラストラインの残高を、`lsfRequireAuth`フラグが有効になっているアカウントに追加する必要がありましたが、そのトラストラインが承認されていなかったため、失敗しました。トラストラインが存在しない場合は、代わりに`tecNO_LINE`が発生します。 | | `tecNEED_MASTER_KEY` | 142 | このトランザクションはマスターキーを必要とする変更([マスターキーの無効化または残高凍結能力の放棄](accountset.html#accountsetのフラグ)など)を試みました。[新規: rippled 0.28.0][] |
| `tecNO_DST` | 124 | トランザクションの受信側のアカウントが存在しません。これは、PaymentトランザクションタイプやTrustSetトランザクションタイプがあります。XRPを十分に受信した場合に作成される可能性があります。) | | `tecNO_ALTERNATIVE_KEY` | 130 | トランザクションが唯一の[トランザクション承認](transaction-basics.html#トランザクションの承認)メソッドを削除しようとしました。これは、レギュラーキーを削除する[SetRegularKeyトランザクション][]、SignerListを削除する[SignerListSetトランザクション][]、またはマスターキーを無効にする[AccountSetトランザクション][]である可能性があります。(`rippled` 0.30.0より前のバージョンでは、このトランザクションは`tecMASTER_DISABLED`と呼ばれていました。) |
| `tecNO_DST_INSUF_XRP` | 125 | トランザクションの受信側のアカウントが存在しません。トランザクションは、アカウントの作成に十分なXRPを送金していません。 | | `tecNO_AUTH` | 134 | トランザクションはトラストラインの残高を、`lsfRequireAuth`フラグが有効になっているアカウントに追加する必要がありましたが、そのトラストラインが承認されていなかったため、失敗しました。トラストラインが存在しない場合は、代わりに`tecNO_LINE`が発生します。 |
| `tecNO_ENTRY` | 140 | 将来の使用のために予約されています。 | | `tecNO_DST` | 124 | トランザクションの受信側のアカウントが存在しません。これには、PaymentトランザクションタイプやTrustSetトランザクションタイプがあります。XRPを十分に受信した場合に作成される可能性があります。 |
| `tecNO_ISSUER` | 133 | 通貨額の`issuer`フィールドに指定されたアカウントが存在しません。 | | `tecNO_DST_INSUF_XRP` | 125 | トランザクションの受信側のアカウントが存在しません。トランザクションは、アカウントの作成に十分なXRPを送金していません。 |
| `tecKILLED` | 150 | [OfferCreateトランザクション][]がtfFillOrKillフラグを指定しましたが、トランザクションを確定できなかったため、このトランザクションは取り消されました。_[fix1578 Amendment][]が必要です。_ | | `tecNO_ENTRY` | 140 | 将来の使用のために予約されています。 |
| `tecNO_LINE` | 135 | [OfferCreateトランザクション][]の`TakerPays`フィールドに、`lsfRequireAuth`を有効にしているイシュアーの資産が指定されており、このオファーを行っているアカウントはその資産に関してトラストラインを確立していません。(通常、オファーを暗黙に行うと必要に応じてトラストラインが作成されますが、この場合は承認なしでは資産を保有できないので問題にはなりません。)トラストラインは存在しているが承認されていない場合は、代わりに`tecNO_AUTH`が発生します。 | | `tecNO_ISSUER` | 133 | 通貨額の`issuer`フィールドに指定されたアカウントが存在しません。 |
| `tecNO_LINE_INSUF_RESERVE` | 126 | 送信側アカウントに、新しいトラストラインを作成するのに十分なXRPがないため、トランザクションが失敗しました。([準備金](reserves.html)を参照)このエラーは、取引相手がこのアカウントに対する同一通貨のトラストラインを持っていない場合に発生します。(その他のケースについては`tecINSUF_RESERVE_LINE`を参照してください。) | | `tecKILLED` | 150 | [OfferCreateトランザクション][]がtfFillOrKillフラグを指定しましたが、トランザクションを確定できなかったため、このトランザクションは取り消されました。_[fix1578 Amendment][]が必要です。_ |
| `tecNO_LINE_REDUNDANT` | 127 | トランザクションはトラストラインをデフォルト状態に設定しようと試みましましたが、トラストライン存在していなかったため、失敗しました。 | | `tecNO_LINE` | 135 | [OfferCreateトランザクション][]の`TakerPays`フィールドに、`lsfRequireAuth`を有効にしているイシュアーの資産が指定されており、このオファーを行っているアカウントはその資産に関してトラストラインを確立していません。(通常、オファーを暗黙に行うと必要に応じてトラストラインが作成されますが、この場合は承認なしでは資産を保有できないので問題にはなりません。)トラストライン存在しているが承認されていない場合は、代わりに`tecNO_AUTH`が発生します。 |
| `tecNO_PERMISSION` | 139 | 送信者にはこの操作を実行する権限がありません。たとえば[EscrowFinishトランザクション][]が`FinishAfter`時刻に達する前に保留中の支払をリリースしようとしたか、送信者が所有していないChannelで誰かが[PaymentChannelFund][]を使用しようとしたか、または[Payment][]が「DepositAuth」フラグが有効になっているアカウントに資金の送金を試みました。 | | `tecNO_LINE_INSUF_RESERVE` | 126 | 送信側アカウントに、新しいトラストラインを作成するのに十分なXRPがないため、トランザクションが失敗しました。[準備金](reserves.html)を参照)このエラーは、取引相手がこのアカウントに対する同一通貨のトラストラインを持っていない場合に発生します。(その他のケースについては`tecINSUF_RESERVE_LINE`を参照してください。) |
| `tecNO_REGULAR_KEY` | 131 | [AccountSetトランザクション][]がマスターキーを無効にしようとましたが、アカウントにはマスターキー以外で[トランザクションを承認する](transaction-basics.html#トランザクションの承認)方法がありません。[マルチ署名](multi-signing.html)が有効な場合、このコードは廃止予定であり、代わりに`tecNO_ALTERNATIVE_KEY`が使用されます。 | | `tecNO_LINE_REDUNDANT` | 127 | トランザクションはトラストラインをデフォルト状態に設定しようと試みましたが、トラストラインが存在していなかったため、失敗しました。 |
| `tecNO_TARGET` | 138 | トランザクションが参照するEscrowレジャーオブジェクトまたはPayChannelレジャーオブジェクトが存在していません。これらのオブジェクトは、これまでに存在したことがないか、すでに削除されています。たとえば、別の[EscrowFinishトランザクション][]で保留中の支払がすでに実行されている場合などです。)あるいは、支払先アカウントで`asfDisallowXRP`が設定されているため、このアカウントは[PaymentChannelCreate][]トランザクションまたは[EscrowCreate][]トランザクションの宛先に指定できません。 | | `tecNO_PERMISSION` | 139 | 送信者にはこの操作を実行する権限がありません。たとえば[EscrowFinishトランザクション][]`FinishAfter`時刻に達する前に保留中の支払をリリースしようとしたか、送信者が所有していないChannelで誰かが[PaymentChannelFund][]を使用しようとしたか、または[Payment][]が「DepositAuth」フラグが有効になっているアカウントに資金の送金を試みました。 |
| `tecOVERSIZE` | 145 | サーバーがこのトランザクションの適用時に大量のメタデータを作成したため、このトランザクションを処理できませんでした。[新規: rippled 0.29.0-hf1][] | | `tecNO_REGULAR_KEY` | 131 | [AccountSetトランザクション][]がマスターキーを無効にしようとしましたが、アカウントにはマスターキー以外で[トランザクションを承認する](transaction-basics.html#トランザクションの承認)方法がありません。[マルチ署名](multi-signing.html)が有効な場合、このコードは廃止予定であり、代わりに`tecNO_ALTERNATIVE_KEY`が使用されます。 |
| `tecOWNERS` | 132 | トランザクションでは、トランザクションを送信するアカウントの「所有者カウント」はゼロ以外である必要があります。このためトランザクションを正常に完了できません。たとえば、トラストラインや使用可能なオファーがあるアカウントでは、[`lsfRequireAuth`](accountset.html#accountsetのフラグ)フラグを有効にできません。 | | `tecNO_TARGET` | 138 | トランザクションが参照するEscrowレジャーオブジェクトまたはPayChannelレジャーオブジェクトが存在していません。これらのオブジェクトは、これまでに存在したことがないか、すでに削除されています。たとえば、別の[EscrowFinishトランザクション][]で保留中の支払がすでに実行されている場合などです。)あるいは、支払先アカウントで`asfDisallowXRP`が設定されているため、このアカウントは[PaymentChannelCreate][]トランザクションまたは[EscrowCreate][]トランザクションの宛先に指定できません。 |
| `tecPATH_DRY` | 128 | トランザクションが失敗しました。指定されたパスに、送信の実行に十分な流動性がありませんでした。つまり、支払元アカウントと支払先アカウントはトラストラインにより関連付けされていません。 | | `tecOVERSIZE` | 145 | サーバーがこのトランザクションの適用時に大量のメタデータを作成したため、このトランザクションを処理できませんでした。[新規: rippled 0.29.0-hf1][] |
| `tecPATH_PARTIAL` | 101 | トランザクションが失敗しました。指定されたパスに、全額を送するのに十分な流動性がありませんでした。 | | `tecOWNERS` | 132 | トランザクションでは、トランザクションを送するアカウントの「所有者カウント」はゼロ以外である必要があります。このためトランザクションを正常に完了できません。たとえば、トラストラインや使用可能なオファーがあるアカウントでは、[`lsfRequireAuth`](accountset.html#accountsetのフラグ)フラグを有効にできません。 |
| `tecTOO_SOON` | 152 | The [AccountDelete transaction][] failed because the account to be deleted had a `Sequence` number that is too high. The current ledger index must be at least 256 higher than the account's sequence number. <!-- TODO: translate --> | | `tecPATH_DRY` | 128 | トランザクションが失敗しました。指定されたパスに、送信の実行に十分な流動性がありませんでした。つまり、支払元アカウントと支払先アカウントはトラストラインにより関連付けされていません。 |
| `tecUNFUNDED` | 129 | トランザクションが失敗しました。アカウントがトランザクションの支払額に十分なXRPを保有しておらず、 _かつ_ このトランザクションを実行するのに追加で必要となる準備金が不足しています。([準備金](reserves.html)を参照してください。) | | `tecPATH_PARTIAL` | 101 | トランザクションが失敗しました。指定されたパスに、全額を送金するのに十分な流動性がありませんでした。 |
| `tecUNFUNDED_ADD` | 102 | **廃止予定。** | | `tecTOO_SOON` | 152 | 削除するアカウントの`Sequence`番号が大きすぎるため、[AccountDeleteトランザクション][]が失敗しました。現行のレジャーインデックスは、アカウントのシーケンス番号より256以上大きくなければなりません。 |
| `tecUNFUNDED_PAYMENT` | 104 | 送信側アカウントが準備金を考慮せずに、保有するXRPを超える額の送信を試みたため、トランザクションが失敗しました。([準備金](reserves.html)を参照してください。) | | `tecUNFUNDED` | 129 | トランザクションが失敗しました。アカウントがトランザクションの支払額に十分なXRPを保有しておらず、 _かつ_ このトランザクションを実行するのに追加で必要となる準備金が不足しています。([準備金](reserves.html)を参照してください。) |
| `tecUNFUNDED_OFFER` | 103 | [OfferCreateトランザクション][]が失敗しました。オファーの作成元アカウントに`TakerGets` 通貨がありません。 | | `tecUNFUNDED_ADD` | 102 | **廃止予定。** |
| `tecUNFUNDED_PAYMENT` | 104 | 送信側アカウントが準備金を考慮せずに、保有するXRPを超える額の送信を試みたため、トランザクションが失敗しました。[準備金](reserves.html)を参照してください。) |
| `tecUNFUNDED_OFFER` | 103 | [OfferCreateトランザクション][]が失敗しました。オファーの作成元アカウントに`TakerGets`通貨がありません。 |
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -2,29 +2,29 @@
これらのコードは、トランザクションが失敗してレジャーに記録されなかったが、一部の理論上のレジャーでは正常に完了できた可能性があることを示します。通常これは、このトランザクションが今後すべてのレジャーで正常に完了できないことを意味します。-199から-100までの数値が含まれています。特定のエラーを示すコードは変更される可能性があるので、コードを使用しないでください。 これらのコードは、トランザクションが失敗してレジャーに記録されなかったが、一部の理論上のレジャーでは正常に完了できた可能性があることを示します。通常これは、このトランザクションが今後すべてのレジャーで正常に完了できないことを意味します。-199から-100までの数値が含まれています。特定のエラーを示すコードは変更される可能性があるので、コードを使用しないでください。
**注意:** `tef`コードが付いているトランザクションはレジャーには適用されません。またこのようなトランザクションが原因でXRP Ledgerの状態が変わることはありません。ただし、暫定的に失敗したトランザクションは、再適用後に成功するか、または別のコードで失敗する可能性があります。詳細は、[結果のファイナリティー](finality-of-results.html)と[信頼性の高いトランザクション送信](reliable-transaction-submission.html)を参照してください。 **注意:** `tef`コードが付いているトランザクションはレジャーには適用されません。またこのようなトランザクションが原因でXRP Ledgerの状態が変わることはありません。ただし、暫定的に失敗したトランザクションは、再適用後に成功するか、または別のコードで失敗する可能性があります。詳細は、[結果のファイナリティー](finality-of-results.html)と[信頼できるトランザクション送信](reliable-transaction-submission.html)を参照してください。
| コード | 説明 | | コード | 説明 |
|:-----------------------|:----------------------------------------------------| |:-----------------------|:----------------------------------------------------|
| `tefALREADY` | まったく同一のトランザクションがすでに適用されています。 | | `tefALREADY` | まったく同一のトランザクションがすでに適用されています。 |
| `tefBAD_ADD_AUTH` | **廃止予定。** | | `tefBAD_ADD_AUTH` | **廃止予定。** |
| `tefBAD_AUTH` | このアカウントの署名に使用したキーには、このアカウントを変更する権限がありません。(このアカウントが[レギュラーキー](cryptographic-keys.html)として同じキーセットを持っている場合は変更が承認される可能性があります。) | | `tefBAD_AUTH` | このアカウントの署名に使用したキーには、このアカウントを変更する権限がありません。(このアカウントが[レギュラーキー](cryptographic-keys.html)として同じキーセットを持っている場合は変更が承認される可能性があります。) |
| `tefBAD_AUTH_MASTER` | このトランザクションを承認するために指定された1つの署名がマスターキーと一致していませんが、このアドレスに関連付けられているレギュラーキーもありません。 | | `tefBAD_AUTH_MASTER` | このトランザクションを承認するために指定された1つの署名がマスターキーと一致していませんが、このアドレスに関連付けられているレギュラーキーもありません。 |
| `tefBAD_LEDGER` | トランザクションの処理中に、レジャーが予期しない状態にあることが検出されました。このエラーを再現できる場合は、修正のため[問題を報告](https://github.com/ripple/rippled/issues)してください。 | | `tefBAD_LEDGER` | トランザクションの処理中に、レジャーが予期しない状態にあることが検出されました。このエラーを再現できる場合は、修正のため[問題を報告](https://github.com/ripple/rippled/issues)してください。 |
| `tefBAD_QUORUM` | トランザクションは[マルチ署名済み](multi-signing.html)トランザクションでしたが、そこに含まれるすべての署名の重みの合計が定数を満たしていません。 | | `tefBAD_QUORUM` | トランザクションは[マルチ署名済み](multi-signing.html)トランザクションでしたが、そこに含まれるすべての署名の重みの合計が定数を満たしていません。 |
| `tefBAD_SIGNATURE` | トランザクションは[マルチ署名済み](multi-signing.html)トランザクションでしたが、送信側アカウントに関連付けられているSignerListにないアドレスの署名が含まれていました。 | | `tefBAD_SIGNATURE` | トランザクションは[マルチ署名済み](multi-signing.html)トランザクションでしたが、送信側アカウントに関連付けられているSignerListにないアドレスの署名が含まれていました。 |
| `tefCREATED` | **廃止予定。** | | `tefCREATED` | **廃止予定。** |
| `tefEXCEPTION` | トランザクションの処理中に、サーバーが予期しない状態になりました。この状態は、予期しない入力(トランザクションのバイナリーデータの形式が大幅に誤っている場合など)が原因となった可能性があります。このエラーを再現できる場合は、修正のため[問題を報告](https://github.com/ripple/rippled/issues)してください。 | | `tefEXCEPTION` | トランザクションの処理中に、サーバーが予期しない状態になりました。この状態は、予期しない入力(トランザクションのバイナリーデータの形式が大幅に誤っている場合など)が原因となった可能性があります。このエラーを再現できる場合は、修正のため[問題を報告](https://github.com/ripple/rippled/issues)してください。 |
| `tefFAILURE` | トランザクション適用中の不明な障害。 | | `tefFAILURE` | トランザクション適用中の不明な障害。 |
| `tefINTERNAL` | トランザクションの適用を試みた際に、サーバーが予期しない状態になりました。このエラーを再現できる場合は、修正のため[問題を報告](https://github.com/ripple/rippled/issues)してください。 | | `tefINTERNAL` | トランザクションの適用を試みた際に、サーバーが予期しない状態になりました。このエラーを再現できる場合は、修正のため[問題を報告](https://github.com/ripple/rippled/issues)してください。 |
| `tefINVARIANT_FAILED` | [トランザクションコスト](transaction-cost.html)を請求しようとしたところ、不変性チェックが失敗しました。[EnforceInvariants Amendment][]が必要です。このエラーを再現できる場合は、[問題を報告](https://github.com/ripple/rippled/issues)してください。 | | `tefINVARIANT_FAILED` | [トランザクションコスト](transaction-cost.html)を請求しようとしたところ、不変性チェックが失敗しました。[EnforceInvariants Amendment][]が必要です。このエラーを再現できる場合は、[問題を報告](https://github.com/ripple/rippled/issues)してください。 |
| `tefMASTER_DISABLED` | トランザクションはアカウントのマスターキーで署名されていましたが、アカウントに`lsfDisableMaster`フィールドが設定されていました。 | | `tefMASTER_DISABLED` | トランザクションはアカウントのマスターキーで署名されていましたが、アカウントに`lsfDisableMaster`フィールドが設定されていました。 |
| `tefMAX_LEDGER` | トランザクションには[`LastLedgerSequence`](reliable-transaction-submission.html#lastledgersequence)パラメーターが指定されていましたが、現在のレジャーのシーケンス番号はすでに指定値を上回っています。 | | `tefMAX_LEDGER` | トランザクションには[`LastLedgerSequence`](reliable-transaction-submission.html#lastledgersequence)パラメーターが指定されていましたが、現在のレジャーのシーケンス番号はすでに指定値を上回っています。 |
| `tefNO_AUTH_REQUIRED` | [TrustSetトランザクション][]がトラストラインを承認済みとしてマークしようとしましたが、対応するアカウントに対して`lsfRequireAuth`フラグが有効になっていないため、承認は不要です。 | | `tefNO_AUTH_REQUIRED` | [TrustSetトランザクション][]がトラストラインを承認済みとしてマークしようとしましたが、対応するアカウントに対して`lsfRequireAuth`フラグが有効になっていないため、承認は不要です。 |
| `tefNOT_MULTI_SIGNING` | トランザクションは[マルチ署名済み](multi-signing.html)トランザクションでしたが、送信側アカウントでSignerListが定義されていません。 | | `tefNOT_MULTI_SIGNING` | トランザクションは[マルチ署名済み](multi-signing.html)トランザクションでしたが、送信側アカウントでSignerListが定義されていません。 |
| `tefPAST_SEQ` | トランザクションのシーケンス番号は、トランザクションの送信元アカウントの現在のシーケンス番号よりも小さい番号です。 | | `tefPAST_SEQ` | トランザクションのシーケンス番号は、トランザクションの送信元アカウントの現在のシーケンス番号よりも小さい番号です。 |
| `tefTOO_BIG` | The transaction would affect too many objects in the ledger. For example, this was an [AccountDelete transaction][] but the account to be deleted owns over 1000 objects in the ledger. <!-- TODO: translate --> | | `tefTOO_BIG` | レジャー内にある、トランザクションの影響を受けるオブジェクトが多過ぎます。例えば、これは[AccountDeleteトランザクション][]でしたが、削除されるアカウントのレジャーには1,000個を超えるオブジェクトがあります。 |
| `tefWRONG_PRIOR` | トランザクションに`AccountTxnID`フィールド(または廃止予定の`PreviousTxnID`フィールド)が含まれていますが、このフィールドに指定されているトランザクションはアカウントの前のトランザクションに一致しません。 | | `tefWRONG_PRIOR` | トランザクションに`AccountTxnID`フィールド(または廃止予定の`PreviousTxnID`フィールド)が含まれていますが、このフィールドに指定されているトランザクションはアカウントの前のトランザクションに一致しません。 |
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -0,0 +1,51 @@
# AccountDelete
[[ソース]](https://github.com/ripple/rippled/blob/develop/src/ripple/app/tx/impl/DeleteAccount.cpp "Source")
_[DeletableAccounts Amendment](known-amendments.html#deletableaccounts)が必要です :not_enabled:_
AccountDeleteトランザクションは、XRP Ledgerで[アカウント](accountroot.html)と、アカウントが所有するオブジェクトを削除し、可能であれば、アカウントの残りのXRPを指定された送金先アカウントに送信します。アカウントを削除する要件については、[アカウントの削除](accounts.html#アカウントの削除)を参照してください。
## {{currentpage.name}} JSONの例
```json
{
"TransactionType": "AccountDelete",
"Account": "rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm",
"Destination": "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe",
"DestinationTag": 13,
"Fee": "5000000",
"Sequence": 2470665,
"Flags": 2147483648
}
```
{% include '_snippets/tx-fields-intro.md' %}
<!--{# fix md highlighting_ #}-->
| フィールド | JSONの型 | [内部の型][] | 説明 |
|:-----------------|:-----------------|:------------------|:-------------------|
| `Destination` | 文字列 - [アドレス][ | アカウント | 送金元アカウントを削除した後に残ったXRPを受信するアカウントのアドレス。レジャーの資金供給されたアカウントである必要があります。送金元アカウントにすることはできません。 |
| `DestinationTag` | 数値 | UInt32 | _省略可_ ホストされた受取人、または削除されたアカウントの残りのXRPの受取人に関するその他の情報を識別する任意の[宛先タグ](source-and-destination-tags.html)。 |
## エラーケース
すべてのトランザクションで発生する可能性のあるエラーに加えて、{{currentpage.name}}トランザクションでは、次の[トランザクション結果コード](transaction-results.html)が発生する可能性があります。
| エラーコード | 説明 |
|:-----------|:------------|
| `temDISABLED` | [DeletableAccounts Amendment](known-amendments.html#deletableaccounts)が有効でない場合に発生します。 |
| `temDST_IS_SRC` | `Destination`がトランザクションの送金元(`Account`フィールド)と一致している場合に発生します。 |
| `tecDST_TAG_NEEDED` | `Destination`アカウントに[宛先タグ](source-and-destination-tags.html)が必要であるのに、`DestinationTag`フィールドが指定されていない場合に発生します。 |
| `tecNO_DST` | `Destination`アカウントが、レジャーの資金供給のあるアカウントではない場合に発生します。 |
| `tecNO_PERMISSION` | `Destination`アカウントに[Deposit Authorization](depositauth.html)が必要で、送金元が事前に承認されていない場合に発生します。 |
| `tecTOO_SOON` | 送金元の`Sequence`番号が大きすぎる場合に発生します。トランザクションの`Sequence`番号に256を加えた値が、現行の[レジャーインデックス][]より小さい値でなければなりません。 |
| `tecHAS_OBLIGATIONS` | 削除するアカウントが、レジャーの削除できないオブジェクトに接続されている場合に発生します。([escrow](escrow.html)など、他のアカウントによって作成されたオブジェクトが含まれます。) |
| `tefTOO_BIG` | 送金元アカウントが、レジャーの1,000個を超えるオブジェクトにリンクされている場合に発生します。これらのオブジェクトの一部が先行して個別に削除された場合、トランザクションは再試行で成功する可能性があります。 |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,6 +1,6 @@
# EscrowFinish # EscrowFinish
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/Escrow.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/Escrow.cpp "Source")
_[Escrow Amendment][]が必要です。_ _[Escrow Amendment][]が必要です。_
@@ -10,12 +10,12 @@ _[Escrow Amendment][]が必要です。_
```json ```json
{ {
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"TransactionType": "EscrowFinish", "TransactionType": "EscrowFinish",
"Owner": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", "Owner": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"OfferSequence": 7, "OfferSequence": 7,
"Condition": "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100", "Condition": "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100",
"Fulfillment": "A0028000" "Fulfillment": "A0028000"
} }
``` ```
@@ -23,12 +23,12 @@ _[Escrow Amendment][]が必要です。_
<!--{# fix md highlighting_ #}--> <!--{# fix md highlighting_ #}-->
| フィールド | JSONの型 | [内部の型][] | 説明 | | フィールド | JSONの型 | [内部の型][] | 説明 |
|:----------------|:-----------------|:------------------|:--------------------| |:----------------|:-----------------|:------------------|:--------------------|
| `Owner` | 文字列 | AccountID | 保留中の支払いに資金を供給した支払元アカウントのアドレス。 | | `Owner` | 文字列 | AccountID | 保留中の支払いに資金を供給した支払元アカウントのアドレス。 |
| `OfferSequence` | 符号なし整数 | UInt32 | 終了する保留中の支払いを作成した[EscrowCreateトランザクション][]のトランザクションシーケンス。 | | `OfferSequence` | 符号なし整数 | UInt32 | 終了する保留中の支払いを作成した[EscrowCreateトランザクション][]のトランザクションシーケンス。 |
| `Condition` | 文字列 | Blob | _省略可_ 以前に指定された保留中の支払いの[PREIMAGE-SHA-256 Crypto-condition](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1)に一致する16進数値。 | | `Condition` | 文字列 | Blob | _省略可_ 以前に指定された保留中の支払いの[PREIMAGE-SHA-256 Crypto-condition](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1)に一致する16進数値。 |
| `Fulfillment` | 文字列 | Blob | _省略可_ 保留中の支払いの`Condition`に一致する[PREIMAGE-SHA-256 Crypto-condition](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1.4)の16進数値。 | | `Fulfillment` | 文字列 | Blob | _省略可_ 保留中の支払いの`Condition`に一致する[PREIMAGE-SHA-256 Crypto-condition fulfillment](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1.4)の16進数値。 |
すべてのアカウントがEscrowFinishトランザクションを送信できます。 すべてのアカウントがEscrowFinishトランザクションを送信できます。
@@ -36,7 +36,9 @@ _[Escrow Amendment][]が必要です。_
- 保留中の支払いに`Condition`が指定されている場合に、その条件に対応する`Fulfillment`を指定しないと、この支払いを実行できません。 - 保留中の支払いに`Condition`が指定されている場合に、その条件に対応する`Fulfillment`を指定しないと、この支払いを実行できません。
- 有効期限切れの保留中の支払いは実行できません。具体的には、対応する[EscrowCreateトランザクション][]で指定されている`CancelAfter`時刻が、最後に閉鎖されたレジャーの閉鎖時刻よりも前の場合、EscrowFinishトランザクションは失敗します。 - 有効期限切れの保留中の支払いは実行できません。具体的には、対応する[EscrowCreateトランザクション][]で指定されている`CancelAfter`時刻が、最後に閉鎖されたレジャーの閉鎖時刻よりも前の場合、EscrowFinishトランザクションは失敗します。
**注記:** EscrowFinishトランザクションにフルフィルメントが含まれている場合、このトランザクションを送信するための最小[トランザクションコスト](transaction-cost.html)が増加します。トランザクションにフルフィルメントが含まれていない場合、トランザクションコストは標準の10 dropです。トランザクションにフルフィルメントが含まれている場合、トランザクションコストは330 [XRP drop][XRPのdrop数]に加えて、プリイメージサイズの16バイトごとに更に10 dropです。 **注記:** EscrowFinishトランザクションにフルフィルメントが含まれている場合、このトランザクションを送信するための最小[トランザクションコスト](transaction-cost.html)が増加します。トランザクションにフルフィルメントが含まれていない場合、トランザクションコストは標準の10 dropです。トランザクションにフルフィルメントが含まれている場合、トランザクションコストは330 [XRP drop][]に加えて、プリイメージサイズの16バイトごとに更に10 dropです。
[本番環境以外のネットワーク](parallel-networks.html)では、保留中のescrowの送金先アカウントを[削除](accounts.html#アカウントの削除)できる場合があります。この場合、 escrowを終了しようとしても結果`tecNO_TARGET`で失敗しますが、 escrowオブジェクトは通常期限切れになる場合を除き、維持されます。別の支払いで送金先アカウントが再作成された場合、 escrowは正常に終了できます。escrowの送金先アカウントは、[fix1523 Amendment](known-amendments.html#fix1523)が有効になる前にescrowが作成された場合にのみ削除できます。本番環境の XRP Ledgerにはそのようなescrowは存在しないため、本番環境のXRP Ledgerではこのようなエッジケースには対応できません。また、このエッジケースは、fix1523とescrowのAmendmentを同時に有効にするテストネットワークでも不可能です。これは、[新しいジェネシスレジャーを開始](start-a-new-genesis-ledger-in-stand-alone-mode.html)するときのデフォルトです。
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -1,5 +1,5 @@
# PaymentChannelClaim # PaymentChannelClaim
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source")
_[PayChan Amendment][]が必要です。_ _[PayChan Amendment][]が必要です。_
@@ -25,11 +25,11 @@ Channelの**宛先アドレス**は以下の操作を実行できます。
```json ```json
{ {
"Channel": "C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198", "Channel": "C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198",
"Balance": "1000000", "Balance": "1000000",
"Amount": "1000000", "Amount": "1000000",
"Signature": "30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B", "Signature": "30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B",
"PublicKey": "32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A" "PublicKey": "32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A"
} }
``` ```
@@ -39,23 +39,25 @@ Channelの**宛先アドレス**は以下の操作を実行できます。
<!--{# fix md highlighting_ #}--> <!--{# fix md highlighting_ #}-->
| フィールド | JSONの型 | [内部の型][] | 説明 | | フィールド | JSONの型 | [内部の型][] | 説明 |
|:------------|:----------|:------------------|:-------------------------------| |:------------|:----------|:------------------|:-------------------------------|
| `Channel` | 文字列 | Hash256 | Channelの一意のID64文字の16進文字列)。 | | `Channel` | 文字列 | Hash256 | Channelの一意のID64文字の16進文字列。 |
| `Balance` | 文字列 | Amount | _省略可_ このクレームの処理後にこのChannelから送金される[XRP、drop単位][]。XRPを送金する場合に必須です。Channelからこれまでに送金された総額よりも大きく、署名済みクレームの`Amount`よりも少ない額である必要があります。Channelを閉鎖する場合を除き、指定する必要があります。 | | `Balance` | 文字列 | Amount | _省略可_ このクレームの処理後にこのChannelから送金される[XRP、drop単位][通貨額]。XRPを送金する場合に必須です。Channelからこれまでに送金された総額よりも大きく、署名済みクレームの`Amount`よりも少ない額である必要があります。Channelを閉鎖する場合を除き、指定する必要があります。 |
| `Amount` | 文字列 | Amount | _省略可_`Signature`により承認された[XRP、drop単位][]の額。これは、署名済みメッセージの額に一致している必要があります。これは、Channelが利用できるXRPの累計額であり、以前に精算されたXRPを含みます。 | | `Amount` | 文字列 | Amount | _省略可_ `Signature`により承認された[XRP、drop単位][通貨額]の額。これは、署名済みメッセージの額に一致している必要があります。これは、Channelが利用できるXRPの累計額であり、以前に精算されたXRPを含みます。 |
| `Signature` | 文字列 | Blob | _省略可_ クレームの署名です16進数。署名付きメッセージには、Channel IDとクレームの額が含まれています。トランザクションの送信者がChannelの支払元アドレスでない場合には必須です。 | | `Signature` | 文字列 | Blob | _省略可_ クレームの署名です16進数。署名付きメッセージには、Channel IDとクレームの額が含まれています。トランザクションの送信者がChannelの支払元アドレスでない場合には必須です。 |
| `PublicKey` | 文字列 | Blob | _省略可_ 署名に使用する公開鍵16進数。公開鍵はレジャーに保管されているこのChannelの`PublicKey`と一致している必要があります。トランザクションの送信者がChannelの支払元アドレスでない場合には必須です。また`Signature`フィールドは省略されます。(`rippled`がトランザクションをレジャーに適用する前に署名の有効性をチェックできるように、トランザクションにPubKeyが指定されています。 | | `PublicKey` | 文字列 | Blob | _省略可_ 署名に使用する公開鍵16進数。公開鍵はレジャーに保管されているこのChannelの`PublicKey`と一致している必要があります。トランザクションの送信者がChannelの支払元アドレスでない場合には必須です。また`Signature`フィールドは省略されます。(`rippled`がトランザクションをレジャーに適用する前に署名の有効性をチェックできるように、トランザクションにPubKeyが指定されています。 |
[DeletableAccounts Amendment](known-amendments.html#deletableaccounts) :not_enabledが有効であり、 _かつ_ Payment Channelの作成時に[fixPayChanRecipientOwnerDir Amendment](known-amendments.html#fixpaychanrecipientownerdir) :not_enabled:が有効でなかった場合は、Payment Channelの送金先が[削除](accounts.html#アカウントの削除)され、現在レジャーに存在しない可能性があります。宛先が削除されている場合、支払元アカウントはチャネルから宛先にXRPを送金できません。トランザクションは`tecNO_DST`で失敗します。もちろん、削除されたアカウントがトランザクションを送信することはできません。宛先アカウントが削除されている場合に、このトランザクションタイプを他の用途チャネルの有効期限の調整、XRPのないチャネルのクローズ、有効期限を過ぎたチャネルの削除などで使用しても影響はありません。
## PaymentChannelClaimフラグ ## PaymentChannelClaimフラグ
PaymentChannelClaimタイプのトランザクションについては、[`Flags`フィールド](transaction-common-fields.html#flagsフィールド)で以下の値が追加でサポートされます。 PaymentChannelClaimタイプのトランザクションについては、[`Flags`フィールド](transaction-common-fields.html#flagsフィールド)で以下の値が追加でサポートされます。
| フラグ名 | 16進数値 | 10進数値 | 説明 | | フラグ名 | 16進数値 | 10進数値 | 説明 |
|:----------|:-----------|:--------------|:------------------------------------| |:----------|:-----------|:--------------|:------------------------------------|
| `tfRenew` | 0x00010000 | 65536 | Channelの`Expiration`時刻をクリアします。(`Expiration`は、Channelの変更できない`CancelAfter`時刻とは異なります。このフラグは、Payment Channelの支払元アドレスだけが使用できます。 | | `tfRenew` | 0x00010000 | 65536 | Channelの`Expiration`時刻をクリアします。(`Expiration`は、Channelの変更できない`CancelAfter`時刻とは異なります。このフラグは、Payment Channelの支払元アドレスだけが使用できます。 |
| `tfClose` | 0x00020000 | 131072 | Channelの閉鎖を要求します。このフラグは、Channelの支払元アドレスと宛先アドレスだけが使用できます。このフラグにより、現在のクレームの処理後にChannelにこれ以上のXRPが割り当てられない場合、または宛先アドレスが使用している場合に、Channelが即時に閉鎖されます。XRPがまだChannelに保有されているときに、支払元アドレスがこのフラグを使用した場合、`SettleDelay`秒の経過後にChannelが閉鎖するようにスケジュールされます。具体的には、Channelの`Expiration`は、前のレジャーの閉鎖時刻にChannelの`SettleDelay`の時間を加算した時刻に設定されます。ただし、Channelにこの時刻よりも早い`Expiration` 時刻がすでに設定されている場合を除きます。XRPがまだChannelに保有されているときに、宛先アドレスがこのフラグを使用した場合、クレーム処理後に残っているXRPはすべて支払元アドレスに返金されます。 | | `tfClose` | 0x00020000 | 131072 | Channelの閉鎖を要求します。このフラグは、Channelの支払元アドレスと宛先アドレスだけが使用できます。このフラグにより、現在のクレームの処理後にChannelにこれ以上のXRPが割り当てられない場合、または宛先アドレスが使用している場合に、Channelが即時に閉鎖されます。XRPがまだChannelに保有されているときに、支払元アドレスがこのフラグを使用した場合、`SettleDelay`秒の経過後にChannelが閉鎖するようにスケジュールされます。具体的には、Channelの`Expiration`は、前のレジャーの閉鎖時刻にChannelの`SettleDelay`の時間を加算した時刻に設定されます。ただし、Channelにこの時刻よりも早い`Expiration`時刻がすでに設定されている場合を除きます。XRPがまだChannelに保有されているときに、宛先アドレスがこのフラグを使用した場合、クレーム処理後に残っているXRPはすべて支払元アドレスに返金されます。 |
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -1,5 +1,5 @@
# PaymentChannelFund # PaymentChannelFund
[[ソース]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source")
_[PayChan Amendment][]が必要です。_ _[PayChan Amendment][]が必要です。_
@@ -9,22 +9,24 @@ PaymentChannelFundの例:
```json ```json
{ {
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"TransactionType": "PaymentChannelFund", "TransactionType": "PaymentChannelFund",
"Channel": "C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198", "Channel": "C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198",
"Amount": "200000", "Amount": "200000",
"Expiration": 543171558 "Expiration": 543171558
} }
``` ```
{% include '_snippets/tx-fields-intro.md' %} {% include '_snippets/tx-fields-intro.md' %}
<!--{# fix md highlighting_ #}--> <!--{# fix md highlighting_ #}-->
| フィールド | JSONの型 | [内部の型][] | 説明 | | フィールド | JSONの型 | [内部の型][] | 説明 |
|:-------------|:---------|:------------------|:------------------------------| |:-------------|:----------|:------------------|:------------------------------|
| `Channel` | 文字列 | Hash256 | 資金供給するChannelの一意のID64文字の16進文字列)。 | | `Channel` | 文字列 | Hash256 | 資金供給するChannelの一意のID64文字の16進文字列。 |
| `Amount` | 文字列 | Amount | Channelに追加する[XRP、drop単位][]の額。Channelの有効期限を設定し、XRPを追加しない場合は、これを`"0"`に設定します。 | | `Amount` | 文字列 | Amount | Channelに追加する[XRP、drop単位][通貨額]の額。Channelの有効期限を設定し、XRPを追加しない場合は、これを`"0"`に設定します。 |
| `Expiration` | 数値 | UInt32 | _省略可_ Channelに新たに設定する`Expiration`の時刻Rippleエポック以降の経過秒数。現行時刻にChannelの`SettleDelay`を加えた時刻よりも後であるか、またはChannelの既存の`Expiration`よりも後である必要があります。`Expiration`時刻の経過後には、トランザクションがそのChannelにアクセスするとChannelが閉鎖し、トランザクションの通常の処理は行われません。Channelの閉鎖時には未使用のXRPはすべて支払元アドレスに返金されます。`Expiration`は、Channelの不変の`CancelAfter`時刻とは別のものです。)詳細は、[PayChannelレジャーオブジェクトタイプ](paychannel.html)を参照してください。 | | `Expiration` | 数値 | UInt32 | _省略可_ Channelに新たに設定する`Expiration`の時刻Rippleエポック以降の経過秒数。現行時刻にChannelの`SettleDelay`を加えた時刻よりも後であるか、またはChannelの既存の`Expiration`よりも後である必要があります。`Expiration`時刻の経過後には、トランザクションがそのChannelにアクセスするとChannelが閉鎖し、トランザクションの通常の処理は行われません。Channelの閉鎖時には未使用のXRPはすべて支払元アドレスに返金されます。`Expiration`は、Channelの不変の`CancelAfter`時刻とは別のものです。)詳細は、[PayChannelレジャーオブジェクトタイプ](paychannel.html)を参照してください。 |
送金先アカウントが削除されている場合、トランザクションは`tecNO_DST`で失敗します。(これは、[DeletableAccounts Amendment](known-amendments.html#deletableaccounts) :not_enabled:が有効になっており、 _かつ_ Payment Channelの作成時に[fixPayChanRecipientOwnerDir amendment](known-amendments.html#fixpaychanrecipientownerdir) :not_enabled:が有効になっていなかった場合にのみ発生する可能性があります。)
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -1,6 +1,6 @@
# SetRegularKey # SetRegularKey
[[ソース]<br>](https://github.com/ripple/rippled/blob/4239880acb5e559446d2067f00dabb31cf102a23/src/ripple/app/transactors/SetRegularKey.cpp "Source") [[ソース]](https://github.com/ripple/rippled/blob/4239880acb5e559446d2067f00dabb31cf102a23/src/ripple/app/transactors/SetRegularKey.cpp "Source")
`SetRegularKey`トランザクションは、アカウントに関連付けられているレギュラーキーペアの割り当て、変更、削除を行います。 `SetRegularKey`トランザクションは、アカウントに関連付けられているレギュラーキーペアの割り当て、変更、削除を行います。
@@ -10,24 +10,24 @@
```json ```json
{ {
"Flags": 0, "Flags": 0,
"TransactionType": "SetRegularKey", "TransactionType": "SetRegularKey",
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee": "12", "Fee": "12",
"RegularKey": "rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD" "RegularKey": "rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD"
} }
``` ```
{% include '_snippets/tx-fields-intro.md' %} {% include '_snippets/tx-fields-intro.md' %}
<!--{# fix md highlighting_ #}--> <!--{# fix md highlighting_ #}-->
| フィールド | JSONの型 | [内部の型][] | 説明 | | フィールド | JSONの型 | [内部の型][] | 説明 |
|:-------------|:----------|:------------------|:------------------------------| |:-------------|:----------|:------------------|:------------------------------|
| `RegularKey` | 文字列 | AccountID | _省略可_ アカウントに割り当てるレギュラーキーペアを示すbase-58エンコード[アドレス][]。省略されている場合は、アカウントから既存のレギュラーキーペアが削除されます。 | | `RegularKey` | 文字列 | AccountID | _省略可_ アカウントに割り当てるレギュラーキーペアを示すbase-58エンコード[アドレス][]。省略されている場合は、アカウントから既存のレギュラーキーペアが削除されます。アドレスのマスターキーペアと一致してはなりません。 |
## 関連項目 ## 関連項目
レギュラーキーペアとマスターキーペアの詳細については、[暗号鍵](cryptographic-keys.html)を参照してください。 レギュラーキーペアとマスターキーペアの詳細は、[暗号鍵](cryptographic-keys.html)を参照してください。
アカウントへのレギュラーキーペアの割り当てについてのチュートリアルは、[レギュラーキーペアの操作](assign-a-regular-key-pair.html)を参照してください。 アカウントへのレギュラーキーペアの割り当てについてのチュートリアルは、[レギュラーキーペアの操作](assign-a-regular-key-pair.html)を参照してください。

View File

@@ -0,0 +1,302 @@
# xrp-ledger.tomlファイル
XRP Ledgerバリデータを実行するか、ビジネスにXRP Ledgerを使用する場合、機械が読み取れる形式の **`xrp-ledger.toml`** ファイルで自分のXRP Ledgerの使用状況に関する情報を世界中に提供することができます。スクリプトとアプリケーションで`xrp-ledger.toml`ファイルの情報を使用して、XRP Ledgerでの自分の情報を分かりやすく示すことができます。また、同じファイルを人間が読むことが便利な場合もあります。
`xrp-ledger.toml`ファイルの主な使用例のひとつに、[ドメインの検証](#ドメイン検証)があります。
#### 表記法
本書のキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」、および「OPTIONAL」は、[RFC 2119](https://tools.ietf.org/html/rfc2119)の記述どおりに解釈されます。
## ファイルの提供方法
`xrp-ledger.toml`ファイルは、Webサーバーより提供することを前提としています。このファイルは、次のURLで提供できます。
```
https://{DOMAIN}/.well-known/xrp-ledger.toml
```
`{DOMAIN}`には、お使いのドメイン名が入りますサブドメインを含む。例えば、次のいずれのURLからでもファイルを提供できます。
```
https://example.com/.well-known/xrp-ledger.toml
https://xrp.services.example.com/.well-known/xrp-ledger.toml
```
### プロトコル
上記の内容は、セキュリティ上、**HTTPSプロトコル**経由で提供する必要があります。その際、[TLS](https://tools.ietf.org/html/rfc8446)の最新の安全なバージョンと、既知の認証局によって署名された有効な証明書を使用します。(注記: TLSは以前はSSLと呼ばれていましたが、現在それらのバージョンは安全とは言えません。つまり、`xrp-ledger.toml`ファイルをホストするための前提条件は、適切に構成されたHTTPSのWebサーバーを用意することです。
プレーンHTTPプロトコルは中間者攻撃に対して脆弱です。例えば、一部のインターネットサービスは、プレーンHTTP経由で取得したコンテンツを、独自の広告が挿入されるように改変していることが知られています。同様の技術によって`xrp-ledger.toml`ファイルの内容が誤って伝達され、スクリプトの誤動作または虚偽的な動作につながる可能性を防ぐため、プレーンHTTP経由で提供される`xrp-ledger.toml`ファイルの内容を信頼すべきではありません。
### ドメイン
`xrp-ledger.toml`ファイルを提供するドメインは、所有権の表明とも言えます。このようなファイルの内容は、単独で提供されている場合、有用または信頼できるものではありません。実用的な観点からすれば、メインドメインからファイルを提供することは望ましくない場合もあります。そのため、任意の数のサブドメインを使用することができます。[XRP Ledgerアカウントの`Domain`フィールド](accountset.html#domain)を設定するときは、使用したすべてのサブドメインを含むフルドメインを指定する必要があります。詳細は、[アカウントの検証](#アカウント検証)を確認してください。
必要に応じて、複数のサブドメインから同じファイルを提供することもできます。例えば、サブドメイン`www.example.com`から`example.com`と同じWebサイトに遷移する場合は、どちらからもファイルを提供できます。Webサイトでプレフィクス`www`が必要な場合は、ドメインを指定する際例えば、XRP Ledgerアカウントの`Domain`フィールドを設定する際)に必ずプレフィクスを含めてください。
`xrp-ledger.toml`ファイルと同じドメインから人間が読める形式のWebサイトを提供することをお勧めします。このWebサイトでは、あなたのIDおよびXRP Ledgerの使用方法に関する詳細情報を提供します。この情報は、あなたやあなたのサービスに対する信頼を構築するのに役立ちます。
### パス
[RFC5785](https://tools.ietf.org/html/rfc5785)に準拠し、パスの開始部分は`/.well-known/`でなければなりません。ファイルは、パス`/.well-known/xrp-ledger.toml`で正しく表示される必要があります(すべて小文字)。
必要に応じて、同じファイルを、大文字と小文字を変えて(例: `/.well-known/XRP-Ledger.TOML`)提供することもできます。パスが大文字か小文字かによって、異なるコンテンツを提供することはできません。
### ヘッダー
#### Content-Type
`xrp-ledger.toml`ファイルに推奨される**Content-Type**は`application/toml`です。ただし、このファイルを使用するアプリケーションは、Content-Typeの値として`text/plain`も受け入れる必要があります。
#### CORS
他のWebサイト上のスクリプトでファイルを照会できるようにするには、ファイルに対して[CORS][]を有効にする必要があります。具体的には、サーバーで`xrp-ledger.toml`を提供するときに次のヘッダーを付加する必要があります。
```
Access-Control-Allow-Origin: *
```
このヘッダーが付加されるようにサーバーを構成する方法については、[CORSセットアップ](#corsの設定)を参照してください。
#### その他のヘッダー
サーバーでは、必要に応じて、圧縮、キャッシュ制御、リダイレクト、関連リソースのリンクなど、他の標準HTTPヘッダーを使用できます。
### 生成
`xrp-ledger.toml`ファイルは、Webサーバーに格納されている実際のファイルである場合もあれば、Webサーバーによってオンデマンドで生成される場合もあります。ファイルで提供されるコンテンツまたはWebサイトの構成によっては、後者の方が望ましい場合があります。
## 内容
`xrp-ledger.toml`ファイルの内容は、[TOML](https://github.com/toml-lang/toml)でフォーマットする必要があります。 **内容はすべてオプションです。** コメントは省略できますが、分かりやすくするために推奨されます。
サンプルコンテンツ:
```
# Example xrp-ledger.toml file. These contents should not be considered
# authoritative for any real entity or business.
# Note: all fields and all sections are optional.
[METADATA]
modified = 2019-01-22T00:00:00.000Z
expires = 2019-03-01T00:00:00.000Z
[[VALIDATORS]]
public_key = "nHBtDzdRDykxiuv7uSMPTcGexNm879RUUz5GW4h1qgjbtyvWZ1LE"
network = "main"
owner_country = "us"
server_country = "us"
unl = "https://vl.ripple.com"
[[VALIDATORS]]
public_key = "nHB57Sey9QgaB8CubTPvMZLkLAzfJzNMWBCCiDRgazWJujRdnz13"
network = "testnet"
owner_country = "us"
server_country = "us"
unl = "https://vl.testnet.rippletest.net"
[[ACCOUNTS]]
address = "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV"
desc = "Ripple-owned address from old ripple.txt file"
# Note: This doesn't prove ownership of an account unless the
# "Domain" field of the account in the XRP Ledger matches the
# domain this file was served from.
[[SERVERS]]
json_rpc = "https://s1.ripple.com:51234/"
ws = "wss://s1.ripple.com/"
peer = "https://s1.ripple.com:51235/"
desc = "General purpose server cluster"
[[SERVERS]]
json_rpc = "https://s2.ripple.com:51234/"
ws = "wss://s2.ripple.com/"
peer = "https://s2.ripple.com:51235/"
desc = "Full-history server cluster"
[[SERVERS]]
json_rpc = "https://s.testnet.rippletest.net:51234/"
ws = "wss://s.testnet.rippletest.net:51233/"
peer = "https://s.testnet.rippletest.net:51235/"
network = "testnet"
desc = "Test Net public server cluster"
[[PRINCIPALS]]
name = "Rome Reginelli" # Primary spec author
email = "rome@example.com" # Not my real email address
[[CURRENCIES]]
code = "LOL"
issuer = "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn"
network = "testnet"
display_decimals = 2
symbol = "😆" # In practical situations, it may be unwise to use emoji
# End of file
```
### Metadata
メタデータセクションには、`xrp-ledger.toml`ファイル自体に関する情報が表示されます。このセクションは、(存在する場合) _単一_ 角括弧を使用した`[METADATA]`行で開始する単一のテーブルでなければなりません。(`xrp-ledger.toml`ファイルの他のほとんどのセクションでは、情報の配列のために二重括弧を使用していますが、`[METADATA]`セクションは最大で1つしかありません。以下から任意のフィールドを指定できます大文字と小文字は区別されます
| フィールド | 型 | 説明 |
|:-----------|:-----------------|:---------------------------------------------|
| `modified` | オフセット日時 | `xrp-leder.toml`ファイルが最後に変更された時間。 |
| `expires` | オフセット日時 | 現在の時間がこの時間と同じか以降である場合、`xrp-ledger.toml`ファイルは期限切れと見なされます。 |
本仕様では`domain`フィールドは定義していません。このフィールドは、ファイルを提供するサイトから決定する必要があります。
**ヒント:** Rippleでは、オフセット日時の値についてオフセット`Z`を使用し、ミリ秒単位まで精度を高めることを推奨しています。(例: `2019-01-22T22:26:58.027Z`)ファイルを手動で編集する場合は、時間、分、秒、ミリ秒にゼロを指定して、時間を概算で示すことができます。(例: `2019-01-22T00:00:00.000Z`)
### バリデータ
バリデータリストには、操作するサーバーの検証に関する情報が表示されます。バリデータリストは、(存在する場合)各エントリが二重角括弧のヘッダー`[[VALIDATORS]]`を使用する複数のテーブルの配列でなければなりません。各エントリで、別個の検証サーバーが示されます。
ファイル内の _最初の_`[[VALIDATORS]]`エントリは、プライマリのバリデータとして扱われます。本番環境のXRP Ledgerで1つ以上のバリデータを実行する場合は、他のバリデータに信頼されるバリデータを最初に配置する必要があります。
_各_`[[VALIDATORS]]`エントリごとに、以下から任意のフィールドを指定することができます。
| フィールド | 型 | 説明 |
|:-------------|:-------|:-----------------------------------------------------|
| `public_key` | 文字列 | XRP Ledgerのbase58形式でエンコードされた、プライマリバリデータのマスター公開鍵通常、先頭は`n`)。 |
| `network` | 文字列 | このバリデータがフォローするネットワークチェーン。省略された場合、クライアントはバリデータが本番環境のXRP Ledgerをフォローすると想定する必要があります。本番環境のXRP Ledgerを明示的に指定するには`main`を使用します。RippleのXRP Ledger Test Netには`testnet`を使用します。他の値を指定して、他のTest Netまたは非標準のネットワークチェーンを表すことができます。
| `owner_country` | 文字列 | ISO-3166-2形式の国コード2桁。あなたバリデータの所有者が属する主な法的管轄域を表します。 |
| `server_country` | 文字列 | ISO-3166-2形式の国コード2桁。この検証サーバーがある物理的な場所を表します。 |
| `unl` | 文字列 | HTTPS URL。このバリデータが信頼する、他のバリデータのリストを確認できます。バリデータがUNL推奨のバリデータリストサイトを使用するように構成されている場合は、サーバーの構成と一致しなければなりません。本番環境のXRP Ledgerネットワークの場合は、`https://vl.ripple.com`(末尾のスラッシュは省略可)を使用します。 |
### アカウント
アカウントリストには、所有するXRP Ledgerアカウントに関する情報が表示されます。アカウントリストは、存在する場合各エントリが二重角括弧を含んだヘッダー`[[ACCOUNTS]]`を使用する複数のテーブルの配列でなければなりません。各エントリで、個別のアカウントが示されます。 _各_`[[ACCOUNTS]]`エントリごとに、以下から任意のフィールドを指定することができます。
| フィールド | 型 | 説明 |
|:----------|:-------|:--------------------------------------------------------|
| `address` | 文字列 | XRP Ledgerのbase58フォーマットでエンコードされた、アカウントの公開アドレス通常、先頭は`r`)。 |
| `network` | 文字列 | このアカウントが主に使用されるネットワークチェーン。省略された場合、クライアントはアカウントが本番環境のXRP Ledger _と_ 、場合によっては他のネットワークチェーンでも要求されていると想定する必要があります。本番環境のXRP Ledgerでは`main`を使用します。RippleのXRP Ledger Test Netには`testnet`を使用します。他の値を指定して、他のTest Netまたは非標準のネットワークチェーンを表すことができます。 |
| `desc` | 文字列 | 人間が読める形式での、このアカウントの目的または使用方法に関する説明。 |
**注意:** `xrp-ledger.toml`ファイルをホストすることで、誰でもアカウントの所有権を主張できるため、ここでのアカウントの存在が正式であると見なすべきではありません。ただし、[XRP Ledgerの当該アカウントの`Domain`フィールド](accountset.html#domain)が、この`xrp-ledger.toml`ファイルの提供元のドメインとも一致している場合は除きます。詳細は、[アカウントの検証](#アカウント検証)を確認してください。
### 責任者
責任者リストには、XRP Ledgerのビジネスおよびサービスに関係するユーザーまたは企業に関する情報が表示されます。責任者リストは、存在する場合各エントリが二重角括弧を含んだヘッダー`[[PRINCIPALS]]`を使用する複数のテーブルの配列でなければなりません。各エントリは異なる連絡先を示します。 _各_`[[PRINCIPALS]]`エントリごとに、以下から任意のフィールドを指定することができます。
| フィールド | 型 | 説明 |
|:--------|:-------|:-----------------------------------------------------|
| `name` | 文字列 | この責任者の名前。 |
| `email` | 文字列 | この責任者の連絡先メールアドレス。 |
必要に応じて、他の連絡先情報を指定することができます。(カスタムフィールドについては、[カスタムフィールド](#カスタムフィールド)を参照してください。)
### サーバー
サーバーリストには、パブリックアクセスで実行するXRP Ledgerサーバー`rippled`)に関する情報が表示されます。サーバーリストは、(存在する場合)各エントリが二重角括弧を含んだヘッダー`[[SERVERS]]`を使用する複数のテーブルの配列でなければなりません。各エントリは、異なるサーバーまたはサーバークラスターを示します。 _各_`[[SERVERS]]`エントリごとに、以下から任意のフィールドを指定することができます。
| フィールド | 型 | 説明 |
|:--------|:-------|:-----------------------------------------------------|
| `json_rpc` | 文字列URL | 公開JSON-RPC APIを提供するURL。先頭は`http://`または`https://`である必要があります。公開APIに対してはHTTPSが推奨されます。 |
| `ws` | 文字列URL | 公開WebSocket APIを提供するURL。先頭は`ws://`または`wss://`である必要があります。公開APIに対してはWSSが推奨されます。 |
| `peer` | 文字列URL | サーバーがXRP LedgerのピアプロトコルをリッスンしているURL。他のXRP Ledgerサーバーは、このURLで接続できます。サーバーよりピアクローラー応答が提供される場合は、このURLに`crawl`が付加されて提供されます。 |
| `network` | 文字列 | このサーバーがフォローするネットワークチェーン。省略された場合、クライアントはサーバーが本番環境のXRP Ledgerをフォローすると想定する必要があります。本番環境のXRP Ledgerを明示的に指定するには`main`を使用します。RippleのXRP Ledger Test Netには`testnet`を使用します。他の値を指定して、他のTest Netまたは非標準のネットワークチェーンを表すことができます。 |
このセクションのすべてのURLの末尾にスラッシュを付けることが推奨されます。省略された場合、クライアントアプリケーションでは、末尾にスラッシュが含まれていると想定します。
### 通貨
XRP Ledgerで資産、トークン、または通貨を発行する場合は、`[[CURRENCIES]]`リストでそれらに関する情報を提供できます。通貨リストは、(存在する場合)各エントリが二重角括弧を含んだヘッダー`[[CURRENCIES]]`を使用する複数のテーブルの配列でなければなりません。各エントリは、個別の発行済み通貨または資産を示します。 _各_`[[CURRENCIES]]`エントリごと _に_ 、以下から任意のフィールドを指定することができます。
| フィールド | 型 | 説明 |
|:--------|:-------|:------------------------------------------------------|
| `code` | 文字列 | XRP Ledgerでのこの通貨の大文字と小文字を区別するティッカーシンボル。例えば、3桁のコード、40文字の16進コード、またはカスタム形式XRP Ledgerで非標準コードの表記を把握しているクライアント用があります。XRP Ledgerの通貨コードフォーマットの詳細は、[通貨コードリファレンス](currency-formats.html#通貨コード)を参照してください。 |
| `display_decimals` | 数値 | クライアントアプリケーションがこの通貨の金額を表示するために使用する十進数。 |
| `issuer` | 文字列 | この通貨を発行するXRP Ledgerアカウントのアドレス。XRP Ledgerのbase58形式でエンコードされます通常、先頭は`r`)。また、このアドレスは`[[ACCOUNTS]]`リストに表示する必要があります。(留意事項: ここにアドレスが存在することは、それ自体では権限を持ちません。詳細は、[アカウントの検証](#アカウント検証)を参照してください。) |
| `network` | 文字列 | この通貨を発行するネットワークチェーン。本番環境のXRP Ledgerを明示的に指定するには`main`を使用します。省略された場合、クライアントは通貨が本番環境のXRP Ledgerで発行されていると想定する必要があります。RippleのXRP Ledger Test Netには`testnet`を使用します。他の値を指定して、他のTest Netまたは非標準のネットワークチェーンを表すことができます。 |
| `symbol` | 文字列 | 「$」や「€」などのテキスト記号。Unicode規格の記号がある場合に、資産または通貨の金額で使用されます。 |
### カスタムフィールド
`xrp-ledger.toml`ファイルは、XRP Ledgerのユーザーが、他のユーザーやスクリプト、アプリケーションに情報を提供することを目的としています。そのため、内容を伝えるのに役立つものの、この仕様には記載されていない多くの種類の情報が存在する可能性があります。ユーザーは、必要に応じて関連情報を伝えるために、`xrp-ledger.toml`ファイルの任意のレベルで他のフィールドを追加することをお勧めします。
`xrp-ledger.toml`ファイルを解析するツールは、アプリケーションが把握していないその他のフィールドを含むドキュメントを受け入れる必要があります。そのようなツールは、これらの追加フィールドを呼び出す上位レベルのアプリケーションで、追加フィールドを使用できるようにするか、それらのフィールドを無視することができます。この仕様の将来のバージョンとのフォワードコンパティビリティを維持するために、ツールはこの標準で指定されたフィールドを無視することもできます。`xrp-ledger.toml`ファイルに認識されていないフィールドが含まれている場合、ツールはエラーを返すべきではありません。タイプミスを検出するために、ツールは認識されていないフィールド(特に、フィールド名が標準フィールド名と類似している場合など)に警告を表示することができます。
認識したフィールドが予期されたとおりのフォーマットではない場合、そのフィールドがこの仕様で定義されていなくても、ツールがエラーを返す場合もあります。
カスタムフィールドを作成するときは、選択するフィールド名に注意してください。ごく一般的なフィールド名を使用すると、他のユーザーが同じ名前で異なるものを意味するか、競合する方法でフォーマットされる場合があります。他のユーザーにとって有益だと思われるカスタムフィールドを使用する場合は、このドキュメントのメンテナーにそのフィールドの仕様を提供してください。
## CORSの設定
`xrp-ledger.toml`ファイルに対してCross-Origin Resource Sharing[CORS][]を許可するようにWebサーバーを構成する必要があります。この構成は、Webサーバーによって異なります。
Apache HTTP Serverを実行する場合は、以下の内容を構成ファイルに追加します。
```
<Location "/.well-known/xrp-ledger.toml">
Header set Access-Control-Allow-Origin "*"
</Location>
```
または、以下の内容をサーバーの`/.well-known/`ディレクトリ内の`.htaccess`ファイルに追加できます。
```
<Files "xrp-ledger.toml">
Header set Access-Control-Allow-Origin "*"
</Files>
```
nginxを使用する場合は、以下の内容を構成ファイルに追加します。
```
location /.well-known/xrp-ledger.toml {
add_header 'Access-Control-Allow-Origin' '*';
}
```
他のWebサーバーについては、[サーバーにCORSサポートを追加したい](https://enable-cors.org/server.html)を参照してください。マネージドホスティングを使用する場合、特定のパスでCORSを有効にする方法については、Webホストのドキュメントを参照してください。Webサイト全体でCORSを有効にすることはあまりないと思われます。
[CORS]: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
## ドメイン検証
`xrp-ledger.toml`ファイルの用途のひとつは、同じエンティティが特定のドメインを運用し、かつバリデータの公開鍵によって識別される特定のバリデータも運用することを検証することです。ドメインとバリデータが同じエンティティによって所有されていることを検証することで、バリデータオペレーターとしてのIDを確実に保証できます。また、これは信頼できるバリデータになるための推奨手順でもあります。他の推奨事項については、[優れたバリデータの特徴の理解](run-rippled-as-a-validator.html#1-優れたバリデータの特徴の理解)を参照してください。)
ドメイン検証では、ドメインオペレーターとバリデータの間に双方向リンクを確立する必要があります。
1. ドメインはバリデータの所有権を主張します。
- [本書に記載されているすべての要件](#ファイルの提供方法)に従って、当該ドメインから`xrp-ledger.toml`ファイルを提供します。
- その`xrp-ledger.toml`ファイルで、`[[VALIDATORS]]`エントリの`public_key`フィールドにバリデータのマスター公開鍵を入力します。
2. バリデータは、ドメイン別に所有権を主張します。このステップの手順は、本仕様書の範囲外です。
<!-- TODO: Link documentation when it's available. -->
<!-- Aside: the old way of doing this was to set the `Domain` field of the
XRP Ledger account whose public key matched the validator's public key.
Since only the holder of the corresponding private key could send
transactions from this address, doing so effectively proved ownership
of the validator's private key.
-->
## アカウント検証
[ドメイン検証](#ドメイン検証)と同様に、アカウント検証は、同じエンティティが特定のドメインと特定のXRP Ledgerアドレスを運用していることを証明するという考え方を示します。XRP Ledgerの使用や`xrp-ledger.toml`ファイルの提供にはアカウント検証は必要ありませんが、透明性の確保のために、アカウントを検証することもできます。
アカウント検証では、ドメインオペレーターとアドレスの間に双方向リンクを確立する必要があります。
1. ドメインはアドレスの所有権を主張します。
- [本書に記載されているすべての要件](#ファイルの提供方法)に従って、当該ドメインから`xrp-ledger.toml`ファイルを提供します。
- その`xrp-ledger.toml`ファイルで、検証するアカウントのアドレスを`[[ACCOUNTS]]`エントリに入力します。このアドレスから通貨を発行する場合は、`[[CURRENCIES]]`エントリの`issuer`フィールドでこのアカウントを指定することもできます。
2. アドレスは、ドメイン別に所有権を主張します。
この`xrp-ledger.toml`ファイルの提供元のドメインに一致するように、[アカウントの`Domain`フィールドを設定](accountset.html#domain)します。ドメイン値ASCIIからデコードされた場合は、`www.`などのすべてのサブドメインを含め、 _正確に_ 一致する必要があります。国際化ドメイン名の場合は、[RFC3492](https://tools.ietf.org/html/rfc3492)の説明に従って、`Domain`値をドメインのPunycodeに設定します。
`Domain`を設定するにはトランザクションを送信する必要があるため、`Domain`値を設定する場合は必ずトランザクションを送信した時のアカウントの秘密鍵を所有している必要があります。
これらの2つのリンクのどちらも、それ自体で、権限があると見なされるべきではありません。誰でも任意のアカウントの所有権を主張する`xrp-ledger.toml`ファイルをホストでき、任意のアカウントオペレーターはその`Domain`フィールドを任意の文字列に設定できます。両者が一致したら、いずれも同じエンティティが操作しているという強力な証拠になります。
## 謝辞
この仕様は、[オリジナルのripple.txt仕様](https://web.archive.org/web/20161007113240/https://wiki.ripple.com/Ripple.txt)をもとに作成されたものであり、[stellar.tomlファイル](https://www.stellar.org/developers/guides/walkthroughs/how-to-complete-stellar-toml.html)から発想を得たものです。この仕様には、XRPコミュニティメンバーと、過去および現在の多くのRipple従業員からのフィードバックも組み込まれています。

View File

@@ -1,14 +1,37 @@
# XRP Ledger APIの使用開始 # XRP Ledger APIの使用開始
`rippled`サーバーに対してコマンドを実行するには、接続先のサーバーをあらかじめ把握しておく必要があります。大多数のサーバーは、外部ネットワークからの直接のAPI要求を受け入れないよう設定されています。 XRP Ledgerのコアサーバーソフトウェアは[`rippled`](the-rippled-server.html)です。XRP Ledgerでの開発に進むには、`rippled`サーバーのAPIにアクセスします。
別の方法として、[`rippled`の独自のローカルコピーを運用](install-rippled.html)することもできます。[管理用のメソッド](admin-rippled-methods.html)のいずれかにアクセスする場合、これは必須です。この場合、サーバーのバインド用として設定したIPアドレスとポートを使用する必要があります例えば`127.0.0.1:54321`。また、管理機能にアクセスするには、構成ファイルで管理用としてマークされているポートおよびIPアドレスから接続しなければなりません APIにアクセスする最も簡単な方法は、[**WebSocket API Tool**](websocket-api-tool.html)を使用するか、[XRP Ledger Explorer](https://livenet.xrpl.org/)を使用してレジャーの進行状況をその場で確認することです
[`rippled`の独自のインスタンスを実行](install-rippled.html)したり、[公開サーバー](#公開サーバー)を使用したりすることもできます。
## 公開サーバー
Rippleは、XRP Ledgerコミュニティ向けにいくつかの公開サーバーを提供しています。
| 演算子 | [ネットワーク][ | JSON-RPC URL | WebSocket URL | 注記 |
|:----------|:----------|:----------|:----------|:----------|
| Ripple | **Mainnet** | `https://s1.ripple.com:51234/` | `wss://s1.ripple.com/` | 汎用サーバークラスター |
| Ripple | **Mainnet** | `https://s2.ripple.com:51234/` | `wss://s2.ripple.com/` | [すべての履歴が記録されるサーバー](ledger-history.html#すべての履歴)クラスター |
| Ripple | Testnet | `https://s.altnet.rippletest.net:51234/` | `wss://s.altnet.rippletest.net/` | Testnet公開サーバー |
| Ripple | Devnet | `https://s.devnet.rippletest.net:51234/` | `wss://s.devnet.rippletest.net/` | Devnet公開サーバー |
[ネットワーク]: parallel-networks.html
これらの公開サーバーは継続的な使用やビジネスでの使用を想定したものではなく、いつでも使用不可となる可能性があります。日常的な使用については、独自の`rippled`サーバーを自社で運用するか、信頼できる事業者と運用委託契約を締結します。
## 管理者アクセス権限
`rippled`サーバーの[管理メソッド](admin-rippled-methods.html)を使用するには、次のように行います。この場合、サーバーのバインド用として設定したIPアドレスとポートを使用する必要があります例えば`127.0.0.1:54321`。また、管理機能にアクセスするには、構成ファイルで管理用としてマークされているポートおよびIPアドレスから接続しなければなりません。
[構成ファイルの例](https://github.com/ripple/rippled/blob/8429dd67e60ba360da591bfa905b58a35638fda1/cfg/rippled-example.cfg#L1050-L1073)では、ローカルループバックネットワーク上127.0.0.1のポート5005でJSON-RPCHTTP、ポート6006でWebSocketWSの接続をリッスンし、接続されるすべてのクライアントを管理者として扱っています。 [構成ファイルの例](https://github.com/ripple/rippled/blob/8429dd67e60ba360da591bfa905b58a35638fda1/cfg/rippled-example.cfg#L1050-L1073)では、ローカルループバックネットワーク上127.0.0.1のポート5005でJSON-RPCHTTP、ポート6006でWebSocketWSの接続をリッスンし、接続されるすべてのクライアントを管理者として扱っています。
## WebSocket API ## WebSocket API
いくつかのメソッドをXRP Ledgerで試すことを予定している場合は、独自のWebSocketコードを記述することなく、[Ripple WebSocket APIツール](websocket-api-tool.html)でAPIをすぐに使用できます。後ほど、独自の`rippled`サーバーへの接続が必要となった時点で、[ブラウザー](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications)または[Node.jsで独自のクライアントをビルド](https://www.npmjs.com/package/ws)することが可能です。 いくつかのメソッドをXRP Ledgerで試すことを予定している場合は、独自のWebSocketコードを記述することなく、[Ripple WebSocket APIツール](websocket-api-tool.html)でAPIをすぐに使用できます。後ほど、独自の`rippled`サーバーへの接続が必要となった時点で、[ブラウザー](monitor-incoming-payments-with-websocket.html)または[Node.jsで独自のクライアントをビルド](https://www.npmjs.com/package/ws)することが可能です。
### 要求フォーマット ### 要求フォーマット
@@ -20,25 +43,13 @@
応答はJSONオブジェクトとして返されます。 応答はJSONオブジェクトとして返されます。
### 公開サーバー
現在、Ripple社は以下の一連の公開WebSocketサーバーを運用しています。
| `Domain` | ポート | 注記 |
|:----------------|:-----|:--------------------------------------|
| `s1.ripple.com` | 443 | `wss://`のみ。汎用サーバー |
| `s2.ripple.com` | 443 | `wss://`のみ。すべての履歴が記録されるサーバー |
これらの公開サーバーは継続的な使用やビジネスでの使用を想定したものではなく、いつでも使用不可となる可能性があります。日常的な使用については、独自の`rippled`サーバーを自社で運用するか、信頼できる事業者と運用委託契約を締結します。
## JSON-RPC ## JSON-RPC
任意のHTTPクライアント[RESTED for Firefox](https://addons.mozilla.org/en-US/firefox/addon/rested/)[Postman for Chrome](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en)などを使用して、JSON-RPCで`rippled`サーバーを呼び出すことができます。ほとんどのプログラミング言語には、HTTP要求を組み込むためのライブラリーが用意されています。 任意のHTTPクライアント[RESTED for Firefox](https://addons.mozilla.org/en-US/firefox/addon/rested/)[Postman for Chrome](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en)、[Online HTTP client ExtendsClass](https://extendsclass.com/rest-client-online.html)などを使用して、JSON-RPCで`rippled`サーバーを呼び出すことができます。ほとんどのプログラミング言語には、HTTP要求を組み込むためのライブラリーが用意されています。
### 要求フォーマット ### 要求フォーマット
JSON-RPC要求を作成するには、`rippled`サーバーがJSON-RPC接続をリッスンしているポートおよびIPアドレス上で、HTTP **POST**要求をルートパス(`/`に送信します。HTTP/1.0またはHTTP/1.1を使用できます。HTTPSを使用する場合は、TLS v1.2を使用してください。セキュリティーの維持を理由として、`rippled` _は_ SSL v3以前をサポートしていません。 JSON-RPC要求を作成するには、`rippled`サーバーがJSON-RPC接続をリッスンしているポートおよびIPアドレス上で、HTTP **POST**要求をルートパス(`/`に送信します。HTTP/1.0またはHTTP/1.1を使用できます。HTTPSを使用する場合は、TLS v1.2を使用してください。セキュリティーの維持を理由として、`rippled`SSL v3以前を _サポートしていません_
値を`application/json`として、`Content-Type`ヘッダーを常に記述してください。 値を`application/json`として、`Content-Type`ヘッダーを常に記述してください。
@@ -51,17 +62,6 @@ JSON-RPC要求を作成するには、`rippled`サーバーがJSON-RPC接続を
応答もJSONオブジェクトになります。 応答もJSONオブジェクトになります。
### 公開サーバー
現在、Ripple社は以下の一連の公開JSON-RPCサーバーを運用しています。
| `Domain` | ポート | 注記 |
|:----------------|:------|:-----------------------|
| `s1.ripple.com` | 51234 | 汎用サーバー |
| `s2.ripple.com` | 51234 | すべての履歴が記録されるサーバー |
これらの公開サーバーは継続的な使用やビジネスでの使用を想定したものではなく、いつでも使用不可となる可能性があります。日常的な使用については、独自の`rippled`サーバーを自社で運用するか、信頼できる事業者と運用委託契約を締結します。
## コマンドライン ## コマンドライン
@@ -71,13 +71,14 @@ JSON-RPC要求を作成するには、`rippled`サーバーがJSON-RPC接続を
rippled --conf=/etc/rippled.cfg server_info rippled --conf=/etc/rippled.cfg server_info
``` ```
**注記:** コマンドラインインターフェイスは、管理の目的でのみ使用されることを想定しています。_サポートされるAPIではありません_。 **注記:** コマンドラインインターフェイスは、管理の目的でのみ使用されることを想定しています。 _サポートされるAPIではありません_
### 要求フォーマット ### 要求フォーマット
コマンドラインでは、通常の(先頭にダッシュが付いた)コマンドラインオプションに続けてコマンドを記述した後、一連の限定的なパラメーターを空白文字で区切って記述します。空白文字などの特殊な文字が含まれている可能性があるパラメーター値は、一重引用符で囲みます。 コマンドラインでは、通常の(先頭にダッシュが付いた)コマンドラインオプションに続けてコマンドを記述した後、一連の限定的なパラメーターを空白文字で区切って記述します。空白文字などの特殊な文字が含まれている可能性があるパラメーター値は、一重引用符で囲みます。
## 要求の例 ## 要求の例
<!-- MULTICODE_BLOCK_START --> <!-- MULTICODE_BLOCK_START -->
@@ -102,7 +103,7 @@ POST http://s1.ripple.com:51234/
"method": "account_info", "method": "account_info",
"params": [ "params": [
{ {
"account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"strict": true, "strict": true,
"ledger_index": "validated" "ledger_index": "validated"
} }
@@ -118,6 +119,7 @@ rippled account_info r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 validated true
<!-- MULTICODE_BLOCK_END --> <!-- MULTICODE_BLOCK_END -->
## 応答フォーマット ## 応答フォーマット
### 成功した場合の応答の例 ### 成功した場合の応答の例
@@ -128,7 +130,7 @@ rippled account_info r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 validated true
``` ```
{ {
"id": 2, "id": 2,
"status": "success", "status": "success",
"type": "response", "type": "response",
"result": { "result": {
@@ -151,7 +153,7 @@ rippled account_info r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 validated true
*JSON-RPC* *JSON-RPC*
``` ```
HTTP Status: 200 OK HTTP Status:200 OK
{ {
"result": { "result": {
"account_data": { "account_data": {
@@ -165,11 +167,12 @@ HTTP Status: 200 OK
"Sequence": 1400, "Sequence": 1400,
"index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05" "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05"
}, },
"ledger_index": 6761012, "ledger_index": 6761012,
"status": "success" "status": "success"
} }
} }
``` ```
*コマンドライン* *コマンドライン*
``` ```
@@ -196,13 +199,28 @@ HTTP Status: 200 OK
成功した場合の応答に含まれているフィールドは、以下のとおりです。 成功した場合の応答に含まれているフィールドは、以下のとおりです。
| `Field` | 型 | 説明 | | `Field` | 型 | 説明 |
|:----------------|:---------|:------------------------------------------------| |:----------|:----------|:----------|
| `id` | (場合により異なる) | WebSocketのみこの応答の要求元となった要求で提供されているID。 | | `id` | (場合により異なる) | WebSocketのみこの応答の要求元となった要求で提供されているID。 |
| `status` | 文字列 | WebSocketのみ値が`success`である場合、要求がサーバーによって正常に受信され、理解されたことを示します。 | | `status` | 文字列 | WebSocketのみ値が`success`である場合、要求がサーバーによって正常に受信され、理解されたことを示します。 |
| `result.status` | 文字列 | JSON-RPCおよびコマンドライン値が`success`である場合、要求がサーバーによって正常に受信され、理解されたことを示します。 | | `result.status` | 文字列 | JSON-RPCおよびコマンドライン値が`success`である場合、要求がサーバーによって正常に受信され、理解されたことを示します。 |
| `type` | 文字列 | WebSocketのみ値が`response`である場合、コマンドに対する正常な応答であることを示します。[非同期の通知](subscribe.html)では、`ledgerClosed``transaction`など異なる値が使用されます。 | | `type` | 文字列 | WebSocketのみ値が`response`である場合、コマンドに対する正常な応答であることを示します。[非同期の通知](subscribe.html)では、`ledgerClosed``transaction`など異なる値が使用されます。 |
| `result` | オブジェクト | クエリーの結果。内容はコマンドによって異なります。 | | `result` | オブジェクト | クエリーの結果。内容はコマンドによって異なります。 |
### コマンドライン ### コマンドライン
コマンドラインのメソッドはJSON-RPCと同一のインターフェイスを使用しているため、応答フォーマットはJSON-RPCの応答と同一です。 コマンドラインのメソッドはJSON-RPCと同一のインターフェイスを使用しているため、応答フォーマットはJSON-RPCの応答と同一です。
## 関連項目
- **コンセプト:**
- [XRP Ledgerの概要](xrp-ledger-overview.html)
- [ソフトウェアエコシステム](software-ecosystem.html)
- [並列ネットワーク](parallel-networks.html)
- **チュートリアル:**
- [RippleAPI for JavaScriptの使用開始](get-started-with-rippleapi-for-javascript.html)
- [信頼できるトランザクションの送信](reliable-transaction-submission.html)
- [rippledサーバーの管理](manage-the-rippled-server.html)
- **リファレンス:**
- [rippled APIリファレンス](rippled-api.html)
- [Ripple Data API v2](data-api.html)

View File

@@ -1,21 +1,449 @@
# トランザクションの結果の確認 # トランザクションの結果の確認
トランザクションの最終結果を確認するには、[txメソッド][]または[account_txメソッド][]を使用するか、`rippled`の他の応答を使用します。コンセンサスにより検証されたレジャーバージョンがこの応答に使用されていることを示す`"validated": true`を検索します。 XRP Ledgerを効果的に使用するには、[トランザクション](transaction-basics.html)の結果を次のように把握することが重要です。トランザクションは成功したか?トランザクションは何を遂行したか?失敗した場合は、なぜか?
| フィールド | 値 | 説明 | XRP Ledgerは共有システムとなっていて、すべてのデータが公開された形で正確に記録され、データはそれぞれ新しい[レジャーバージョン](ledgers.html)で安全に更新されます。誰もが任意のトランザクションの結果を確認し、[トランザクションメタデータ](transaction-metadata.html)によってその実行内容を確認できます。
|:-----------------------|:--------|:------------------------------------------|
| meta.TransactionResult | 文字列 | 結果を以下のように分類するコード(`tecPATH_DRY`など) | このドキュメントでは、トランザクションの結果がもたらされた理由を把握する方法について、詳細に説明します。エンドユーザー向けには、トランザクションの処理内容を表示するとわかりやすいです。例えば、[XRPチャートを使用して、記録されたトランザクションについての説明を英語で参照](https://xrpcharts.ripple.com/#/transactions/)できます。
| validated | ブール値 | この結果が検証済みレジャーの結果であるかどうか。`false`の場合、結果は暫定的です。`true`の場合、結果は最終結果です。 |
## 前提条件
これらの手順で説明されているトランザクションの結果を理解するには、以下が必要となります。
- 理解する対象となるトランザクションがわかっている。トランザクションの[識別用ハッシュ][]がわかっていれば、それによりトランザクションを検索できます。また、最近のレジャーで実行されたトランザクションまたは特定のアカウントに最後に影響を及ぼしたトランザクションを確認することもできます。
- 信頼できる情報と、トランザクションの送信日時に関する必要な履歴を提供する`rippled`サーバーにアクセスできる。
- 最近送信したトランザクションの結果を確認する場合、トランザクションの送信時に使用したサーバーがネットワークと同期されていれば、そのサーバーにアクセスできるだけで十分です。
- 古いトランザクションの結果については、[全履歴を記録するサーバー](ledger-history.html#すべての履歴)を使用できます。
**ヒント:** この他にも、[Data API](data-api.html)やエクスポートされた他のデータベースを使用するなど、XRP Ledgerからトランザクションのデータを照会する方法があります。ただし、これらのインターフェイスは正式なものではありません。このドキュメントでは、最も直接的で信頼できる結果を得るために、`rippled` APIを直接使用してデータを確認する方法を説明します。
## 1. トランザクションステータスの取得
トランザクションが成功したか失敗したかを確認するには、2つの問いが必要です。
1. トランザクションが検証済みレジャーに記録されたか。
2. 記録されていた場合、結果としてレジャーの状態はどのように変化したか。
検証済みレジャーにトランザクションが記録されていたかどうかを確認するには、通常、トランザクションが記録されている可能性のあるすべてのレジャーにアクセスする必要があります。最も簡単で確実な方法は、[全履歴を記録するサーバー](ledger-history.html#すべての履歴)でトランザクションを検索する方法です。[txメソッド][]、[account_txメソッド][]またはその他の`rippled`からの応答を使用します。コンセンサスにより検証されたレジャーバージョンがこの応答に使用されていることを示す`"validated": true`を検索します。
- 結果に`"validated": true`がない場合は、その結果は一時的である可能性があり、トランザクションの結果が最終的なものであるかどうかを知るには、レジャーが検証されるまで待機する必要があります。
- 結果に目的のトランザクションが含まれていない場合、または`txnNotFound`エラーが返される場合は、サーバーにある利用可能な履歴に保存されているどのレジャーにもそのトランザクションはありません。ただし、このことだけでトランザクションが失敗したかどうかを判断できないことがあります。サーバーに保存されていない検証済みレジャーバージョンにトランザクションが記録されている、または今後検証されるレジャーにトランザクションが記録されている場合があるためです。以下を把握することで、トランザクションが記録されるレジャーの範囲を制限することができます。
- トランザクションが記録されている可能性のある最古のレジャー。つまり、**トランザクションを初めて送信した _後に_ 最初に検証されるレジャー**。
- トランザクションが記録されている可能性のある最新のレジャー。つまり、トランザクションの`LastLedgerSequence`フィールドで定義されるレジャー
以下の例では、成功したトランザクションが[txメソッド][]によって返され、検証済みレジャーバージョンに記録されています。わかりやすくするために、JSON応答のフィールドの順序を並べ替え、一部を省略しています。
```json ```json
"hash": "E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7", {
"meta": { "TransactionType": "AccountSet",
... "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"TransactionResult": "tesSUCCESS" "Sequence": 376,
}, "hash": "017DED8F5E20F0335C6F56E3D5EE7EF5F7E83FB81D2904072E665EEA69402567",
"validated": true
... (省略) ...
"meta": {
"AffectedNodes": [
... (省略) ...
],
"TransactionResult": "tesSUCCESS"
},
"ledger_index": 46447423,
"validated": true
}
``` ```
この例では、rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpnというアドレスを持つ[アカウント](accounts.html)が、[シーケンス番号][] 376を使用して、[AccountSetトランザクション][]を送信したことを示しています。トランザクションの[識別用ハッシュ][]は`017DED8F5E20F0335C6F56E3D5EE7EF5F7E83FB81D2904072E665EEA69402567`で、その[結果](transaction-results.html)は`tesSUCCESS`です。トランザクションは、検証済みのレジャーバージョン46447423に記録されたため、結果は最終的なものです。
### ケース: 検証済みレジャーに記録されていない
**トランザクションが検証済みレジャーに記録されていない場合は、共有XRP Ledgerの状態には _いかなる_ 影響も及ぼしません。** 今後レジャーに記録されるトランザクションの失敗が[_最終的_](finality-of-results.html)となる場合、その失敗が将来影響を及ぼすことはありません。
トランザクションの失敗が最終的でない場合は、 _将来の_ 検証済みレジャーに記録される可能性があります。トランザクションを現在のオープンレジャーに適用して得た暫定的な結果から、トランザクションが最終レジャーに及ぼすと思われる影響を事前に確認できます。ただし、実際の結果は[さまざまな要因](finality-of-results.html#未確定の結果はどのように変更できますか)によって変わる場合があります。
### ケース: 検証済みレジャーに記録されている
トランザクションが検証済みレジャーに記録 _されている_ 場合、[トランザクションメタデータ](transaction-metadata.html)にはトランザクションの処理結果として、レジャーの状態に対して行われたすべての変更を網羅したレポートが含まれます。メタデータの`TransactionResult`フィールドには、以下のような、結果を要約した[トランザクション結果コード](transaction-results.html)が含まれます。
- コード`tesSUCCESS`は、トランザクションが、おおよそ成功したことを示します。
- `tec`-クラスコードは、トランザクションが失敗したことを示します。このことがレジャーの状態に及ぼす影響は、XRP[トランザクションコスト](transaction-cost.html)を消却し、場合によっては[有効期限切れのオファー](offers.html#オファーの有効期限)の削除および[Payment Channelの閉鎖](payment-channels.html#payment-channelのライフサイクル)などのブックキーピングを行うことだけです。
- どのレジャーにもその他のコードは表示されません。
結果コードは、トランザクションの結果の要約にすぎません。トランザクションの実行内容を詳しく理解するには、トランザクションの指示とトランザクションの実行前のレジャーの状態に照らして残りのメタデータを確認する必要があります。
## 2. メタデータの解釈
トランザクションメタデータは、以下に示すフィールドをはじめとして、トランザクションがレジャーに適用された方法を _正確に_ 示します。
{% include '_snippets/tx-metadata-field-table.md' %} <!--_ -->
ほとんどのメタデータは、[`AffectedNodes`配列](transaction-metadata.html#affectednodes)に含まれています。この配列で探す対象は、トランザクションのタイプによって異なります。ほぼすべてのトランザクションが、送金元の[AccountRootオブジェクト][]を変更してXRP[トランザクションコスト](transaction-cost.html)を消却し、[アカウントのシーケンス番号](basic-data-types.html#アカウントシーケンス)を増やします。
**情報:** このルールの例外として[疑似トランザクション](pseudo-transaction-types.html)があります。このトランザクションは実在するアカウントから送信されないため、AccountRootオブジェクトを変更しません。その他の例外として、AccountRootオブジェクトの`Balance`フィールドを変更せずに、AccountRootオブジェクトを変更するトランザクションがあります。[Free Key Resetトランザクション](transaction-cost.html#key-resetトランザクション)の場合、送金元のXRP残高は変わりません。トランザクションによって消却される金額と同額のXRPをアカウントが受け取る場合ただし、このようなことはほとんどありません、そのアカウントの正味残高は変わりません。XRPを受領したアカウントに関係なくトランザクションコストはメタデータの別の場所に反映されます。
以下は、上記のステップ1からの応答全文例です。レジャーに対して行われた変更を把握できるか確認してください。
```json
{
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee": "12",
"Flags": 2147483648,
"LastLedgerSequence": 46447424,
"Sequence": 376,
"SigningPubKey": "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB",
"TransactionType": "AccountSet",
"TxnSignature": "30450221009B2910D34527F4EA1A02C375D5C38CF768386ACDE0D17CDB04C564EC819D6A2C022064F419272003AA151BB32424F42FC3DBE060C8835031A4B79B69B0275247D5F4",
"date": 608257201,
"hash": "017DED8F5E20F0335C6F56E3D5EE7EF5F7E83FB81D2904072E665EEA69402567",
"inLedger": 46447423,
"ledger_index": 46447423,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"FinalFields": {
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"AccountTxnID": "017DED8F5E20F0335C6F56E3D5EE7EF5F7E83FB81D2904072E665EEA69402567",
"Balance": "396015164",
"Domain": "6D64756F31332E636F6D",
"EmailHash": "98B4375E1D753E5B91627516F6D70977",
"Flags": 8519680,
"MessageKey": "0000000000000000000000070000000300",
"OwnerCount": 9,
"Sequence": 377,
"TransferRate": 4294967295
},
"PreviousFields": {
"AccountTxnID": "E710CADE7FE9C26C51E8630138322D80926BE91E46D69BF2F36E6E4598D6D0CF",
"Balance": "396015176",
"Sequence": 376
},
"PreviousTxnID": "E710CADE7FE9C26C51E8630138322D80926BE91E46D69BF2F36E6E4598D6D0CF",
"PreviousTxnLgrSeq": 46447387
}
}
],
"TransactionIndex": 13,
"TransactionResult": "tesSUCCESS"
},
"validated": true
}
```
この[no-opトランザクション](cancel-or-skip-a-transaction.html)によって行われた _唯一_ の変更は[AccountRootオブジェクト][]の更新で、送金元のアカウントは以下のように表されています。
- `Sequence`値は376から377に増えます。
- このアカウントのXRPの`Balance`は、`396015176`から`396015164`[XRPのdrop数](basic-data-types.html#xrp)に変わります。残高から差し引かれた12dropは[トランザクションコスト](transaction-cost.html)で、このトランザクションの`Fee`フィールドに指定されています。
- このトランザクションが、このアドレスから送信された最新のトランザクションとなったことを反映して[`AccountTxnID`](transaction-common-fields.html#accounttxnid)が変わります。
- このアカウントに影響を及ぼした以前のトランザクションは、レジャーバージョン46447387で実行されたトランザクション`E710CADE7FE9C26C51E8630138322D80926BE91E46D69BF2F36E6E4598D6D0CF`で、`PreviousTxnID`および`PreviousTxnLgrSeq`フィールドに指定されています。(このことは、アカウントのトランザクション履歴をさかのぼる際に役立つ場合があります。)
**注記:** メタデータには明示的に示されませんが、トランザクションがレジャーオブジェクトを変更すると、必ずそのオブジェクトの`PreviousTxnID`および`PreviousTxnLgrSeq`フィールドが現在のトランザクションの情報で更新されます。同じ送金元の複数のトランザクションが1つのレジャーバージョンに含まれている場合、最初のトランザクション以降の各トランザクションは、これらすべてのトランザクションを記録するレジャーバージョンの[レジャーインデックス](basic-data-types.html#レジャーインデックス)を値とする`PreviousTxnLgrSeq`を提供します。
rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpnのアカウントの`ModifiedNode`エントリーが`AffectedNodes`配列の唯一のオブジェクトであるため、このトランザクションの結果として、このレジャーに対してその他の変更は行われませんでした。
**ヒント:** トランザクションによってXRPが送信または受信される場合、送金元の残高の変動額はトランザクションコストと合算され、`Balance`フィールドの正味金額は1回で変更されます。例えば、1XRP1,000,000dropを送信し、トランザクションコストで10drop消却した場合、メタデータには`Balance`が1,000,010XRPのdrop数減少したと示されます。
### 汎用的なブックキーピング
ほぼすべてのトランザクションにより、以下のような変更が行われます。
- **シーケンスとトランザクションコストの変更:** 送金元のシーケンス番号を増やし、トランザクションコストの支払いに使用するXRPを消却するために、[前述のとおりどのトランザクション(疑似トランザクションを除く)も、送金元の`AccountRoot`オブジェクトに変更を加えます](#2-メタデータの解釈)。
- **アカウントのスレッド化:** オブジェクトを作成する一部のトランザクションでは、目的の受取人または宛先のアカウントの[AccountRootオブジェクト](accountroot.html)も変更し、そのアカウントに関連する何らかの要素が変更されたことを示します。このアカウントを「タグ付け」する手法で、オブジェクトの`PreviousTxnID`および`PreviousTxnLgrSeq`フィールドのみを変更します。これにより、これらのフィールドに指定されたトランザクションの「スレッド」を追跡することで、アカウントが保持するアカウントのトランザクション履歴を効率よく検索することができます。
- **ディレクトリーの更新:** レジャーオブジェクトを作成または削除するトランザクションは、多くの場合[DirectoryNodeオブジェクト](directorynode.html)を変更して、どのオブジェクトが存在しているかを追跡します。また、トランザクションによって、アカウントの[所有者準備金](reserves.html#所有者準備金)に反映されるオブジェクトが追加されると、所有者の[AccountRootオブジェクト][]の`OwnerCount`が増加します。オブジェクトを削除すると、`OwnerCount`が減少します。
アカウントの`OwnerCount`を増やす例:
```json
{
"ModifiedNode": {
"FinalFields": {
"Account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
"Balance": "9999999990",
"Flags": 0,
"OwnerCount": 1,
"Sequence": 2
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05",
"PreviousFields": {
"Balance": "10000000000",
"OwnerCount": 0,
"Sequence": 1
},
"PreviousTxnID": "B24159F8552C355D35E43623F0E5AD965ADBF034D482421529E2703904E1EC09",
"PreviousTxnLgrSeq": 16154
}
}
```
多くのトランザクションのタイプで、[DirectoryNodeオブジェクト](directorynode.html)が作成または変更されます。これらのオブジェクトは、ブックキーピングに使用します。アカウントが所有するすべてのオブジェクト、またはすべてのオファーを追跡して、同じ為替レートで通貨を交換します。トランザクションがレジャーに新しいオブジェクトを作成した場合、トランザクションは既存のDirectoryNodeオブジェクトにエントリーを追加するか、別のDirectoryNodeオブジェクトを追加してディレクトリーの別のページを表さなければならないことがあります。トランザクションがレジャーからオブジェクトを削除した場合、トランザクションは不要となった1つ以上のDirectoryNodeオブジェクトを削除しなければならないことがあります。
新しいオファーディクトリーを表すCreatedNodeの例:
```json
{
"CreatedNode": {
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "F60ADF645E78B69857D2E4AEC8B7742FEABC8431BD8611D099B428C3E816DF93",
"NewFields": {
"ExchangeRate": "4E11C37937E08000",
"RootIndex": "F60ADF645E78B69857D2E4AEC8B7742FEABC8431BD8611D099B428C3E816DF93",
"TakerPaysCurrency": "0000000000000000000000004254430000000000",
"TakerPaysIssuer": "5E7B112523F68D2F5E879DB4EAC51C6698A69304"
}
}
},
```
トランザクションメタデータを処理する際に探すその他の項目は、トランザクションのタイプによって異なります。
### 支払い
[Paymentトランザクション][]はXRP間の直接トランザクション、[複数通貨間の支払い](cross-currency-payments.html)、または[XRP以外の発行済み通貨](issued-currencies.html)での直接トランザクションを表します。発行済み通貨からXRPへのトランザクション、またはXRPから発行済み通貨へのトランザクションなど、XRP間の直接トランザクション以外はすべて[partial payment](partial-payments.html)が可能です。
XRPの額は、`AccountRoot`オブジェクトの`Balance`フィールドで追跡されます。XRPは[Escrowオブジェクト](escrow-object.html)および[PayChannelオブジェクト](paychannel.html)にも存在する可能性がありますが、Paymentトランザクションがそれらに影響を及ぼすことはありません。
支払いでいくら支払われたかを確認するには、必ず[delivered_amountフィールド](partial-payments.html#delivered_amountフィールド)を使用する必要があります。
支払いにLedgerEntryTypeが`AccountRoot``CreatedNode`が含まれている場合は、その支払いによってレジャーの[新しいアカウントへの資金供給](accounts.html#アカウントの作成)が行われたことを意味します。
#### 発行済み通貨での支払い
発行済み通貨を利用する支払いは、多少複雑です。
発行済み通貨残高の変更は、[トラストライン](trust-lines-and-issuing.html)を表す[RippleStateオブジェクト](ripplestate.html)にすべて反映されます。一方の当事者のトラストラインで残高が増加すると、相手側当事者の残高は同じ額だけ減少すると考えられます。このことは、メタデータには、RippleStateオブジェクトの共有`Balance`に対する1回の変更としてのみ記録されます。この変更が「増加」または「減少」のどちらで記録されるかは、どちらのアカウントのアドレスが数値として大きいかによって決まります。
1回の支払いは、複数のトラストラインとオーダーブックで構成される長い[パス](paths.html)をたどる場合があります。間接的に当事者間を接続する複数のトラストラインの残高を変更するプロセスを[Rippling](rippling.html)と呼びます。トランザクションの`Amount`フィールドに指定された`issuer`に応じて、支払先アカウントに結び付けられている複数のトラストライン(`RippleState`アカウント)で支払額を分割することもできます。
**ヒント:** 変更されたオブジェクトがメタデータに表示される順序は、支払いを処理するときにこれらのオブジェクトにアクセスした順序とは必ずしも一致しません。`AffectedNodes`メンバーを並べ替えて資金がレジャーまでたどったパスを再構成すると、支払いの実行の詳細を把握しやすくなります。
複数通貨間の支払いでは、[オファー](offer.html)の一部または全額を消費して、通貨コードとイシュアーが異なる通貨間で変更が行われます。トランザクションで`Offer`タイプの`DeletedNode`オブジェクトが示される場合は、全額が消費されたオファーを示しているか、または処理の時点で[期限切れになるか、または資金化されない](offers.html#オファーのライフサイクル)ことがわかったオファーを示している可能性があります。トランザクションで`Offer`タイプの`ModifiedNode`が示される場合は、オファーの一部が消費されたことを示します。
[トラストラインの`QualityIn`および`QualityOut`設定](trustset.html)は、トラストラインの一方の側における発行済み通貨の額に影響を与える可能性があるため、残高の数値の変化は、送金元におけるその通貨の額と異なります。`delivered_amount`は、受取人による評価額でいくら送金されたのかを示します。
送金額と受取額が[発行済み通貨の精度](currency-formats.html#発行済み通貨の精度)の範囲外である場合は、一方のトランザクションで0に丸められる金額が、他方から引き出される可能性があります。そのため、両当事者が、お互いの残高に10<sup>16</sup>倍の差があるときに取引をすると、丸めることによって少額の発行済み通貨が「作成」または「消却」される可能性があります。XRPは丸められないので、XRPではこの状況は発生しません。
[パス](paths.html)の長さに応じて、複数通貨間の支払いのメタデータは _長く_ なります。例えば、[トランザクション8C55AFC2A2AA42B5CE624AEECDB3ACFDD1E5379D4E5BF74A8460C5E97EF8706B](https://xrpcharts.ripple.com/#/transactions/8C55AFC2A2AA42B5CE624AEECDB3ACFDD1E5379D4E5BF74A8460C5E97EF8706B)では、rHaaans...が発行した2.788 GCBを送金しXRPを支払いますが、2人のイシュアーのUSDを経由し、2つのアカウントにXRPを支払います。r9ZoLsJからのEURをETHと交換する資金供給されていないオファーを削除し、変更された合計17の異なるレジャーオブジェクトのブックキーピングを行います。
### オファー
[OfferCreateトランザクション][]では、成立した額や、トランザクションが`tfImmediateOrCancel`などのフラグを使用したかどうかによって、レジャーにオブジェクトが作成される場合と作成されない場合があります。トランザクションがレジャーのオーダーブックに新しいオファーを追加したどうかを確認するには、LedgerEntryTypeが`Offer``CreatedNode`エントリーを探します。例:
```json
{
"CreatedNode": {
"LedgerEntryType": "Offer",
"LedgerIndex": "F39B13FA15AD2A345A9613934AB3B5D94828D6457CCBB51E3135B6C44AE4BC83",
"NewFields": {
"Account": "rETSmijMPXT9fnDbLADZnecxgkoJJ6iKUA",
"BookDirectory": "CA462483C85A90DB76D8903681442394D8A5E2D0FFAC259C5B0C59269BFDDB2E",
"Expiration": 608427156,
"Sequence": 1082535,
"TakerGets": {
"currency": "EUR",
"issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",
"value": "2157.825"
},
"TakerPays": "7500000000"
}
}
}
```
タイプ`Offer``ModifiedNode`は、成立し、かつ一部が消費されたオファーを示します。1つのトランザクションで多数のオファーを消費できます。2種類の発行済み通貨を交換するオファーが、[オートブリッジング](autobridging.html)によってXRPを交換するオファーを消費することもあります。両替取引のすべてまたは一部をオートブリッジングできます。
LedgerEntryTypeが`Offer``DeletedNode`は、すべて消費された成立オファー、処理の時点で[期限切れになるか、または資金化されない](offers.html#オファーのライフサイクル)ことがわかったオファー、または新しいオファーを発行する過程でキャンセルされたオファーを示すことができます。キャンセルされたオファーは識別できます。これは、キャンセルされたオファーを発行した`Account`は、そのオファーを削除するトランザクションの送信元であるためです。
削除されたオファーの例:
```json
{
"DeletedNode": {
"FinalFields": {
"Account": "rETSmijMPXT9fnDbLADZnecxgkoJJ6iKUA",
"BookDirectory": "CA462483C85A90DB76D8903681442394D8A5E2D0FFAC259C5B0C595EDE3E1EE9",
"BookNode": "0000000000000000",
"Expiration": 608427144,
"Flags": 0,
"OwnerNode": "0000000000000000",
"PreviousTxnID": "0CA50181C1C2A4D45E9745F69B33FA0D34E60D4636562B9D9CDA1D4E2EFD1823",
"PreviousTxnLgrSeq": 46493676,
"Sequence": 1082533,
"TakerGets": {
"currency": "EUR",
"issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",
"value": "2157.675"
},
"TakerPays": "7500000000"
},
"LedgerEntryType": "Offer",
"LedgerIndex": "9DC99BF87F22FB957C86EE6D48407201C87FBE623B2F1BC4B950F83752B55E27"
}
}
```
オファーでは、両方のタイプの[DirectoryNodeオブジェクト](directorynode.html)を作成、削除、変更して、オファーの発行者と、どのオファーがどのような為替レートで利用可能になっているのかを追跡できます。一般的に、ユーザーがこのブックキーピングに細かな注意を払う必要はありません。
削除するオファーがなかった場合でも、[OfferCancelトランザクション][]には、コード`tesSUCCESS`が含まれる可能性があります。トランザクションが実際にオファーを削除したことを確認するには、LedgerEntryTypeが`Offer``DeletedNode`を探します。削除されていなかった場合は、そのオファーは以前のトランザクションによってすでに削除された可能性があります。またはOfferCancelトランザクションで、`OfferSequence`フィールドに誤ったシーケンス番号が使用された可能性があります。
OfferCreateトランザクションが、タイプが`RippleState``CreatedNode`を示す場合は、取引で受け取った発行済み通貨を保持するために、[オファーがトラストラインを作成した](offers.html#オファーとトラスト)ことを示しています。
### Escrow
成功した[EscrowCreateトランザクション][]は、レジャーに[Escrowオブジェクト](escrow-object.html)を作成します。LedgerEntryTypeが`Escrow``CreatedNode`エントリーを探します。`NewFields`には、escrowに預託されたXRPと同じ`Amount`と、指定したその他のプロパティが示されます。
成功したEscrowCreateトランザクションは、送金元から同じ額のXRPを引き出します。最終的なフィールドの`Account`がトランザクションの指示にある`Account`のアドレスと一致する、LedgerEntryTypeが`AccountRoot``ModifiedNode`を探します。XRPの`Balance`は、トランザクションコストの支払いのためにXRPが消却されたのに加えてXRPがescrowに預託されたため減少します。
成功した[EscrowFinishトランザクション][]は、受取人の`AccountRoot`を変更して(`Balance`フィールドのXRP残高を増やし、`Escrow`オブジェクトを削除し、escrow作成者の所有者数を減らします。escrow作成者、受取人および終了者をすべて異なるアカウントにしても、同じアカウントにしてもかまわないため、結果としてLedgerEntryTypeが`AccountRoot``ModifiedNode`オブジェクトが _13個_ になる可能性があります。XRPがescrowの最初の作成者に返されることを除けば、成功した[EscrowCancelトランザクション][]は極めて類似しています。
EscrowFinishは、escrowの条件を満たす場合にのみ成功し、EscrowCancelはEscrowオブジェクトの期限が前のレジャーの閉鎖時刻よりも前である場合にのみ成功します。
Escrowトランザクションでは、関係する送金元の所有者準備金やアカウントのディレクトリーを調整するために通常の[ブックキーピング](#汎用的なブックキーピング)も行われます。
次に示すコードの抜粋では、r9UUEX...の残高が10億XRP増加し、その所有者の数が1人減少しています。これは、そのアカウントからの自分自身へのescrowが正常に終了したためです。[第三者がescrowを完了した](https://xrpcharts.ripple.com/#/transactions/C4FE7F5643E20E7C761D92A1B8C98320614DD8B8CD8A04CFD990EBC5A39DDEA2)ため`Sequence`番号は変更されません。
```json
{
"ModifiedNode": {
"FinalFields": {
"Account": "r9UUEXn3cx2seufBkDa8F86usfjWM6HiYp",
"Balance": "1650000199898000",
"Flags": 1048576,
"OwnerCount": 11,
"Sequence": 23
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "13FDBC39E87D9B02F50940F9FDDDBFF825050B05BE7BE09C98FB05E49DD53FCA",
"PreviousFields": {
"Balance": "650000199898000",
"OwnerCount": 12
},
"PreviousTxnID": "D853342BC27D8F548CE4D7CB688A8FECE3229177790453BA80BC79DE9AAC3316",
"PreviousTxnLgrSeq": 41005507
}
},
{
"DeletedNode": {
"FinalFields": {
"Account": "r9UUEXn3cx2seufBkDa8F86usfjWM6HiYp",
"Amount": "1000000000000000",
"Destination": "r9UUEXn3cx2seufBkDa8F86usfjWM6HiYp",
"FinishAfter": 589075200,
"Flags": 0,
"OwnerNode": "0000000000000000",
"PreviousTxnID": "D5FB1C7D18F931A4FBFA468606220560C17ADF6DE230DA549F4BD11A81F19DFC",
"PreviousTxnLgrSeq": 35059548
},
"LedgerEntryType": "Escrow",
"LedgerIndex": "62F0ABB58C874A443F01CDCCA18B12E6DA69C254D3FB17A8B71CD8C6C68DB74D"
}
},
```
### Payment Channel
Payment Channelの作成時に、LedgerEntryTypeが`PayChannel``CreatedNode`を探します。また、送金元の残高の減少を示す、LedgerEntryTypeが`AccountRoot``ModifiedNode`も探す必要があります。アドレスが送金元に一致することを確認するために`FinalFields``Account`フィールドを探し、XRP残高の変化を確認するために`Balance`フィールドの差異を確認します。
[fixPayChanRecipientOwnerDir Amendment](known-amendments.html#fixpaychanrecipientownerdir) :not_enabled: が有効な場合は、メタデータは宛先のアカウントの[所有者ディレクトリー](directorynode.html)を変更して、新しく作成されるPayment Channelをリストで示す必要もあります。これにより、アカウントがオープンPayment Channelの受取人である場合に、そのアカウントが[削除される](accounts.html#アカウントの削除)ことを防ぎます。fixPayChanRecipientOwnerDir Amendmentが有効になる前にPayment Channelが作成された場合は、アカウントを削除できます。
Payment Channelの閉鎖を要求する方法は、Payment Channelの不変の`CancelAfter`時刻作成時にのみ設定されます以外にもいくつかあります。トランザクションでChannelの閉鎖をスケジュールする場合は、そのChannel用にLedgerEntryTypeが`PayChannel``ModifiedNode`エントリーがあり、`FinalFields``Expiration`フィールドには閉鎖時刻が新たに追加されています。以下の例は、送金元がクレームを清算せずにChannelを閉鎖するよう要求した場合に`PayChannel`に対して行われる変更を示します。
```json
{
"ModifiedNode": {
"FinalFields": {
"Account": "rNn78XpaTXpgLPGNcLwAmrcS8FifRWMWB6",
"Amount": "1000000",
"Balance": "0",
"Destination": "rwWfYsWiKRhYSkLtm3Aad48MMqotjPkU1F",
"Expiration": 608432060,
"Flags": 0,
"OwnerNode": "0000000000000002",
"PublicKey": "EDEACA57575C6824FC844B1DB4BF4AF2B01F3602F6A9AD9CFB8A3E47E2FD23683B",
"SettleDelay": 3600,
"SourceTag": 1613739140
},
"LedgerEntryType": "PayChannel",
"LedgerIndex": "DC99821FAF6345A4A6C41D5BEE402A7EA9198550F08D59512A69BFC069DC9778",
"PreviousFields": {},
"PreviousTxnID": "A9D6469F3CB233795B330CC8A73D08C44B4723EFEE11426FEE8E7CECC611E18E",
"PreviousTxnLgrSeq": 41889092
}
}
```
### TrustSetトランザクション
TrustSetトランザクションは、[`RippleState`オブジェクト](ripplestate.html)として表される[トラストライン](trust-lines-and-issuing.html)を作成、変更、または削除します。1つの`RippleState`オブジェクトに、関与する両当事者の設定が含まれます。これには両当事者の制限や[Ripplingの設定](rippling.html)などがあります。トラストラインの作成と変更によって[送金元の所有者準備金と所有者ディレクトリーの調整](#汎用的なブックキーピング)も行われます。
以下の例は、**rf1BiG...** が**rsA2Lp...** によって発行されたUSDを最大110 USDまで保持するという新しいトラストラインを示します。
```json
{
"CreatedNode": {
"LedgerEntryType": "RippleState",
"LedgerIndex": "9CA88CDEDFF9252B3DE183CE35B038F57282BC9503CDFA1923EF9A95DF0D6F7B",
"NewFields": {
"Balance": {
"currency": "USD",
"issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji",
"value": "0"
},
"Flags": 131072,
"HighLimit": {
"currency": "USD",
"issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"value": "110"
},
"LowLimit": {
"currency": "USD",
"issuer": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"value": "0"
}
}
}
}
```
### その他のトランザクション
その他のほとんどのトランザクションは、特定のタイプのレジャーエントリーを作成し、[送金元の所有者準備金と所有者ディレクトリーの調整](#汎用的なブックキーピング)を行います。
- [AccountSetトランザクション][]は、送金元の既存の[AccountRoot object][]を変更し、指定されたとおりに設定とフラグを変更します。
- [DepositPreauthトランザクション][]は、特定の送金元の[DepositPreauthオブジェクト](depositpreauth-object.html)を追加または削除します。
- [SetRegularKeyトランザクション][]は、送金元の[AccountRootオブジェクト][]を変更し、指定されたとおりに`RegularKey`フィールドを変更します。
- [SignerListSetトランザクション][]は、[SignerListオブジェクト](signerlist.html)を追加、削除、または置換します。
### 疑似トランザクション
[疑似トランザクション](pseudo-transaction-types.html)にもメタデータがありますが、これらのトランザクションは通常のトランザクションのすべてのルールに従うとは限りません。これらのトランザクションは、実在のアカウントには関連付けられていないため(この`Account`の値は、[base58エンコード形式の数字の0](accounts.html#特別なアドレス)です、レジャーのAccountRootオブジェクトを変更して`Sequence`シーケンス番号を増やしたり、XRPを消却したりしません。疑似トランザクションは、特別なレジャーオブジェクトに対して特定の変更のみを行います。
- [EnableAmendment疑似トランザクション][]は、[Amendmentレジャーオブジェクト](amendments-object.html)を変更して、有効なAmendment、過半数の支持を得ている保留中のAmendment、および保留中の期間を追跡します。
- [SetFee疑似トランザクション][]は、[FeeSettingsレジャーオブジェクト](feesettings.html)を変更して、[トランザクションコスト](transaction-cost.html)および[必要準備金](reserves.html)のベースレベルを変更します。
## 関連項目
- **コンセプト:**
- [結果のファイナリティー](finality-of-results.html) - トランザクションの成功また失敗が最終的なものとなるタイミングを判断する方法。(簡単な説明: トランザクションが検証済みレジャーにある場合は、その結果とメタデータは最終的なものです。)
- **チュートリアル:**
- [信頼できるトランザクションの送信](reliable-transaction-submission.html)
- [WebSocketを使用した着信ペイメントの監視](monitor-incoming-payments-with-websocket.html)
- **リファレンス:**
- [レジャーオブジェクトタイプのリファレンス](ledger-object-types.html) - レジャーオブジェクトの使用可能なすべてのタイプのフィールド
- [トランザクションのメタデータ](transaction-metadata.html) - メタデータフォーマットとメタデータに表示されるフィールドの概要
- [トランザクションの結果](transaction-results.html) - トランザクションのすべての結果コードを掲載した表一覧
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %} {% include '_snippets/tx-type-links.md' %}

View File

@@ -0,0 +1,601 @@
# WebSocketを使用した着信ペイメントの監視
このチュートリアルでは、[WebSocket `rippled` API](rippled-api.html)を使用して、着信[ペイメント](payment-types.html)を監視する方法を説明します。すべてのXRP Ledgerトランザクションは公開されているため、誰もが任意のアドレスへの着信ペイメントを監視できます。
WebSocketは、クライアントとサーバーが1つの接続を確立し、その接続を経由して両方向にメッセージを送信するモデルに従います。この接続は、明示的に閉じるまたは接続に障害が発生するまで続きます。これは、要求ごとにクライアントが新しい接続を開いて閉じるHTTPベースのAPIモデルJSON-RPCやRESTful APIなどとは対照的です[¹](#footnote-1)<a id="from-footnote-1"></a>
**ヒント:** このページの例はJavaScriptを使用しているため、Webブラウザーでネイティブに実行できます。JavaScriptで開発している場合は、[JavaScript向けRippleAPIライブラリ](rippleapi-reference.html)も利用すると、一部の作業を簡素化できます。このチュートリアルでは、RippleAPIを使用できないその他のプログラミング言語にステップを適合できるよう、RippleAPIを使用 _しない_ でトランザクションを監視する方法を説明します。
## 前提条件
- このページの例では、すべての主要な最新ブラウザーで使用できるJavaScriptおよびWebSocketプロトコルを使用しています。JavaScriptにある程度習熟し、WebSocketクライアントを使用する他のプログラミング言語の専門知識があれば、選択する言語に手順を適合させながら進めていくことができます。
- 安定したインターネット接続と`rippled`サーバーへアクセスが必要です。埋め込まれている例では、Rippleの公開サーバーのプールに接続します。[独自の`rippled`サーバーを運用](install-rippled.html)する場合は、ローカルでそのサーバーに接続することもできます。
- 丸め方によるエラーを発生させることなくXRPの価値を適切に処理するには、64ビット符号なし整数で計算できる数値タイプを使用できる必要があります。このチュートリアルの例では、[big.js](https://github.com/MikeMcl/big.js/)を使用しています。[発行済み通貨](issued-currencies.html)を使用する場合は、さらに高い精度が求められます。詳細は、[通貨の精度](currency-formats.html#xrpの精度)を参照してください。
<!-- Helper for interactive tutorial breadcrumbs -->
<script type="application/javascript" src="assets/vendor/big.min.js"></script>
<script type="application/javascript" src="assets/js/interactive-tutorial.js"></script>
<script type="application/javascript">
// Helper stuff for this interactive tutorial specifically
function writeToConsole(console_selector, message) {
let write_msg = "<div class='console-entry'>" + message + "</div>"
$(console_selector).find(".placeholder").remove()
$(console_selector).append(write_msg)
// TODO: JSON pretty-printing, maybe w/ multiple input args?
}
</script>
{% set n = cycler(* range(1,99)) %}
## {{n.next()}}. XRP Ledgerへの接続
着信ペイメントを監視する最初のステップとして、XRP Ledger、つまり`rippled`サーバーに接続します。
以下のJavaScriptコードでは、Rippleの公開サーバーのクラスターの1つに接続します。その後、コンソールにメッセージを記録し、[pingメソッド][]を使用して要求を送信します。次に、サーバー側からのメッセージを受信するときに、ハンドラーを設定してコンソールに再度メッセージを記録します。
```js
const socket = new WebSocket('wss://s.altnet.rippletest.net:51233')
socket.addEventListener('open', (event) => {
// This callback runs when the connection is open
console.log("Connected!")
const command = {
"id": "on_open_ping_1",
"command": "ping"
}
socket.send(JSON.stringify(command))
})
socket.addEventListener('message', (event) => {
console.log('Got message from server:', event.data)
})
socket.addEventListener('close', (event) => {
// Use this event to detect when you have become disconnected
// and respond appropriately.
console.log('Disconnected...')
})
```
上記の例では、[Test Net](xrp-test-net-faucet.html)上にあるRippleの公開APIサーバーの1つに対して、安全な接続`wss://`)を開きます。代わりにデフォルトの構成を使用してローカルで運用している`rippled`サーバーに接続するには、最初の行に以下を使用して、ローカルのポート**6006**で _安全ではない_ 接続(`ws://`)を開きます。
```js
const socket = new WebSocket('ws://localhost:6006')
```
**ヒント:** デフォルトでは、ローカル`rippled`サーバーに接続することで、インターネット上の公開サーバーに接続する際に使用できる[パブリックメソッド](public-rippled-methods.html)以外に、すべての[管理メソッド](admin-rippled-methods.html)と、[server_info][server_infoメソッド]などの一部の応答に含まれる管理者専用データを利用できます。
例:
{{ start_step("Connect") }}
<button id="connect-button" class="btn btn-primary">Connect</button>
<strong>Connection status:</strong>
<span id="connection-status">Not connected</span>
<div id='loader-{{n.current}}' style="display: none;"><img class='throbber' src="assets/img/xrp-loader-96.png"></div>
<h5>Console:</h5>
<div class="ws-console" id="monitor-console-connect"><span class="placeholder">(Log is empty)</span></div>
{{ end_step() }}
<script type="application/javascript">
let socket;
$("#connect-button").click((event) => {
socket = new WebSocket('wss://s.altnet.rippletest.net:51233')
socket.addEventListener('open', (event) => {
// This callback runs when the connection is open
writeToConsole("#monitor-console-connect", "Connected!")
$("#connection-status").text("Connected")
const command = {
"id": "on_open_ping_1",
"command": "ping"
}
socket.send(JSON.stringify(command))
complete_step("Connect")
$("#connect-button").prop("disabled", "disabled")
$("#enable_dispatcher").prop("disabled",false)
})
socket.addEventListener('close', (event) => {
$("#connection-status").text("Disconnected")
$("#connect-button").prop("disabled", false)
})
socket.addEventListener('message', (event) => {
writeToConsole("#monitor-console-connect", "Got message from server: " +
JSON.stringify(event.data))
})
})
</script>
## {{n.next()}}. ハンドラーへの着信メッセージのディスパッチ
WebSocket接続では、複数のメッセージをどちらの方向にも送信することが可能で、要求と応答の間に厳密な1:1の相互関係がないため、各着信メッセージに対応する処理を識別する必要があります。この処理をコーディングする際の優れたモデルとして、「ディスパッチャー」関数の設定が挙げられます。この関数は着信メッセージを読み取り、各メッセージを正しいコードのパスに中継して処理します。メッセージを適切にディスパッチできるように、`rippled`サーバーでは、すべてのWebSocketメッセージで`type`フィールドを使用できます。
- クライアント側からの要求への直接の応答となるメッセージの場合、`type`は文字列の`response`です。この場合、サーバーは以下も提供します。
- この応答に対する要求で指定された`id`に一致する`id`フィールド(応答が順序どおりに到着しない可能性があるため、これは重要です)。
- APIが要求の処理に成功したかどうかを示す`status`フィールド。文字列値`success`は、[成功した応答](response-formatting.html)を示します。文字列値`error`は、[エラー](error-formatting.html)を示します。
**警告:** トランザクションを送信する際、WebSocketメッセージの先頭にある`success``status`は、必ずしもトランザクション自体が成功したことを意味しません。これは、サーバーによって要求が理解されたということのみを示します。トランザクションの実際の結果を確認するには、[トランザクションの結果の確認](look-up-transaction-results.html)を参照してください。
- [サブスクリプション](subscribe.html)からのフォローアップメッセージの場合、`type`は、新しいトランザクション、レジャーまたは検証の通知など、フォローアップメッセージのタイプを示します。または継続している[pathfinding要求](path_find.html)のフォローアップを示します。クライアントがこれらのメッセージを受信するのは、それらをサブスクライブしている場合のみです。
**ヒント:** [JavaScript向けRippleAPI](rippleapi-reference.html)は、デフォルトでこのステップに対応しています。すべての非同期API要求はPromiseを使用して応答を提供します。また[`.on(event, callback)`メソッド](rippleapi-reference.html#listening-to-streams)を使用して、ストリームをリッスンできます。
以下のJavaScriptコードでは、API要求を便利な非同期[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)に変換するヘルパー関数を定義し、他のタイプのメッセージをグローバルハンドラーにマップするインターフェイスを設定します。
```js
const AWAITING = {}
const handleResponse = function(data) {
if (!data.hasOwnProperty("id")) {
console.error("Got response event without ID:", data)
return
}
if (AWAITING.hasOwnProperty(data.id)) {
AWAITING[data.id].resolve(data)
} else {
console.error("Response to un-awaited request w/ ID " + data.id)
}
}
let autoid_n = 0
function api_request(options) {
if (!options.hasOwnProperty("id")) {
options.id = "autoid_" + (autoid_n++)
}
let resolveHolder;
AWAITING[options.id] = new Promise((resolve, reject) => {
// Save the resolve func to be called by the handleResponse function later
resolveHolder = resolve
try {
// Use the socket opened in the previous example...
socket.send(JSON.stringify(options))
} catch(error) {
reject(error)
}
})
AWAITING[options.id].resolve = resolveHolder;
return AWAITING[options.id]
}
const WS_HANDLERS = {
"response": handleResponse
// Fill this out with your handlers in the following format:
// "type": function(event) { /* handle event of this type */ }
}
socket.addEventListener('message', (event) => {
const parsed_data = JSON.parse(event.data)
if (WS_HANDLERS.hasOwnProperty(parsed_data.type)) {
// Call the mapped handler
WS_HANDLERS[parsed_data.type](parsed_data)
} else {
console.log("Unhandled message from server", event)
}
})
// Demonstrate api_request functionality
async function pingpong() {
console.log("Ping...")
const response = await api_request({command: "ping"})
console.log("Pong!", response)
}
pingpong()
```
{{ start_step("Dispatch Messages") }}
<button id="enable_dispatcher" class="btn btn-primary" disabled="disabled">Enable Dispatcher</button>
<button id="dispatch_ping" class="btn btn-primary" disabled="disabled">Ping!</button>
<h5>Responses</h5>
<div class="ws-console" id="monitor-console-ping"><span class="placeholder">(Log is empty)</span></div>
{{ end_step() }}
<script type="application/javascript">
const AWAITING = {}
const handleResponse = function(data) {
if (!data.hasOwnProperty("id")) {
writeToConsole("#monitor-console-ping", "Got response event without ID:", data)
return
}
if (AWAITING.hasOwnProperty(data.id)) {
AWAITING[data.id].resolve(data)
} else {
writeToConsole("#monitor-console-ping", "Response to un-awaited request w/ ID " + data.id)
}
}
let autoid_n = 0
function api_request(options) {
if (!options.hasOwnProperty("id")) {
options.id = "autoid_" + (autoid_n++)
}
let resolveFunc;
AWAITING[options.id] = new Promise((resolve, reject) => {
// Save the resolve func to be called by the handleResponse function later
resolveFunc = resolve
try {
// Use the socket opened in the previous example...
socket.send(JSON.stringify(options))
} catch(error) {
reject(error)
}
})
AWAITING[options.id].resolve = resolveFunc
return AWAITING[options.id]
}
const WS_HANDLERS = {
"response": handleResponse
}
$("#enable_dispatcher").click((clickEvent) => {
socket.addEventListener('message', (event) => {
const parsed_data = JSON.parse(event.data)
if (WS_HANDLERS.hasOwnProperty(parsed_data.type)) {
// Call the mapped handler
WS_HANDLERS[parsed_data.type](parsed_data)
} else {
writeToConsole("#monitor-console-ping", "Unhandled message from server: " + event)
}
})
complete_step("Dispatch Messages")
$("#dispatch_ping").prop("disabled", false)
$("#tx_subscribe").prop("disabled", false)
})
async function pingpong() {
const response = await api_request({command: "ping"})
writeToConsole("#monitor-console-ping", "Pong! " + JSON.stringify(response))
}
$("#dispatch_ping").click((event) => {
pingpong()
})
</script>
## {{n.next()}}. アカウントのサブスクライブ
トランザクションがアカウントに影響を及ぼすたびに即座に通知を取得するには、[subscribeメソッド][]を使用してアカウントをサブスクライブします。実際には、このアカウントはあなた自身のアカウントでなくてもかまいません。すべてのトランザクションは公開されているため、任意のアカウントで、または複数のアカウントでもサブスクライブできます。
1つ以上のアカウントをサブスクライブした場合、指定したアカウントのいずれかに何らかの影響を及ぼす各検証済みトランザクションについて、`"type": "transaction"`が含まれるメッセージがサーバーから送信されます。これを確認するには、トランザクションメッセージで`"validated": true`を探します。
以下のコードサンプルは、Test Net Faucetの送信側アドレスをサブスクライブします。このコードサンプルでは、前のステップのディスパッチャーにハンドラーを追加することで、該当する各トランザクションのメッセージを記録します。
```js
async function do_subscribe() {
const sub_response = await api_request({
command:"subscribe",
accounts: ["rUCzEr6jrEyMpjhs4wSdQdz4g8Y382NxfM"]
})
if (sub_response.status === "success") {
console.log("Successfully subscribed!")
} else {
console.error("Error subscribing: ", sub_response)
}
}
do_subscribe()
const log_tx = function(tx) {
console.log(tx.transaction.TransactionType + " transaction sent by " +
tx.transaction.Account +
"\n Result: " + tx.meta.TransactionResult +
" in ledger " + tx.ledger_index +
"\n Validated? " + tx.validated)
}
WS_HANDLERS["transaction"] = log_tx
```
以下の例では、別のウィンドウまたは別のデバイスで[Transaction Sender](tx-sender.html)を開くことと、サブスクライブしているアドレスへのトランザクションの送信を試みます。
{{ start_step("Subscribe") }}
<label for="subscribe_address">Test Net Address:</label>
<input type="text" class="form-control" id="subscribe_address" value="rUCzEr6jrEyMpjhs4wSdQdz4g8Y382NxfM">
<button id="tx_subscribe" class="btn btn-primary" disabled="disabled">Subscribe</button>
<h5>Transactions</h5>
<div class="ws-console" id="monitor-console-subscribe"><span class="placeholder">(Log is empty)</span></div>
{{ end_step() }}
<script type="application/javascript">
async function do_subscribe() {
const sub_address = $("#subscribe_address").val()
const sub_response = await api_request({
command:"subscribe",
accounts: [sub_address]
})
if (sub_response.status === "success") {
writeToConsole("#monitor-console-subscribe", "Successfully subscribed!")
} else {
writeToConsole("#monitor-console-subscribe",
"Error subscribing: " + JSON.stringify(sub_response))
}
}
$("#tx_subscribe").click((event) => {
do_subscribe()
complete_step("Subscribe")
$("#tx_read").prop("disabled", false)
})
const log_tx = function(tx) {
writeToConsole("#monitor-console-subscribe",
tx.transaction.TransactionType + " transaction sent by " +
tx.transaction.Account +
"<br/>&nbsp;&nbsp;Result: " + tx.meta.TransactionResult +
" in ledger " + tx.ledger_index +
"<br/>&nbsp;&nbsp;Validated? " + tx.validated)
}
WS_HANDLERS["transaction"] = log_tx
</script>
## {{n.next()}}. 着信ペイメントの読み取り
アカウントをサブスクライブすると、 _アカウントへのすべてのトランザクションとアカウントからのすべてのトランザクション_ 、および _アカウントに間接的に影響を及ぼすトランザクション_ に関するメッセージが表示されます。この例として、[発行済み通貨](issued-currencies.html)の取引があります。アカウントが着信ペイメントを受け取った日時を認識することを目的とする場合、トランザクションストリームを絞り込んで、実際に支払われた額に基づいて支払いを処理する必要があります。以下の情報を探します。
- **`validated`フィールド**は、トランザクションの結果が[最終的である](finality-of-results.html)ことを示します。これは、`accounts`をサブスクライブする場合に常に当てはまりますが、`accounts_proposed`または`transactions_proposed`ストリーム _も_ サブスクライブしている場合は、サーバーは未確認のトランザクションに関して同様のメッセージを同じ接続で送信します。予防策として、`validated`フィールドを常に確認することをお勧めします。
- **`meta.TransactionResult`フィールド**は、[トランザクションの結果](transaction-results.html)です。結果が`tesSUCCESS`でない場合は、トランザクションは失敗したため、値を送信できません。
- **`transaction.Account`** フィールドはトランザクションの送信元です。他の人が送信したトランザクションのみを探している場合は、このフィールドがあなたのアドレスと一致するトランザクションを無視できます(自身に対する複数通貨間の支払いが _可能である_ 点に注意してください)。
- **`transaction.TransactionType`フィールド**はトランザクションのタイプです。アカウントに通貨を送金できる可能性があるトランザクションのタイプは以下のとおりです。
- **[Paymentトランザクション][]** はXRPまたは[発行済み通貨](issued-currencies.html)を送金できます。受取人のアドレスを含んでいる`transaction.Destination`フィールドによってこれらを絞り込み、必ず`meta.delivered_amount`を使用して実際に支払われた額を確認します。XRPの額は、[文字列のフォーマットで記述されます](basic-data-types.html#通貨額の指定)。
**警告:** 代わりに`transaction.Amount`フィールドを使用すると、[Partial Paymentの悪用](partial-payments.html#partial-paymentの悪用)に対して脆弱になる可能性があります。不正使用者はこの悪用を行ってあなたをだまし、あなたが支払ったよりも多くの金額を交換または引き出すことができます。
- **[CheckCashトランザクション][]** :not_enabled: では、アカウントは別のアカウントの[CheckCreateトランザクション][]によって承認された金額を受け取ることができます。**CheckCashトランザクション**のメタデータを確認すると、アカウントが受け取った通貨の額を確認できます。
- **[EscrowFinishトランザクション][]** は、以前の[EscrowCreateトランザクション][]によって作成された[Escrow](escrow.html)を終了することでXRPを送金できます。**EscrowFinishトランザクション**のメタデータを確認すると、escrowからXRPを受け取ったアカウントと、その額を確認できます。
- **[OfferCreateトランザクション][]** はアカウントがXRP Ledgerの[分散型取引所](decentralized-exchange.html)で以前発行したオファーを消費することで、XRPまたは発行済み通貨を送金できます。オファーを発行しないと、この方法で金額を受け取ることはできません。メタデータを確認して、アカウントが受け取った通貨この情報がある場合と、金額を確認します。
- **[PaymentChannelClaimトランザクション][]** では、[Payment Channel](payment-channels.html)からXRPを送金できます。メタデータを確認して、トランザクションからXRPを受け取ったアカウントこの情報がある場合を確認します。
- **[PaymentChannelFundトランザクション][]** は、閉鎖された期限切れのPayment Channelから送金元にXRPを返金することができます。
- **`meta`フィールド**には、1つまたは複数の通貨の種類とその正確な金額、その送金先などを示す[トランザクションメタデータ](transaction-metadata.html)が示されています。トランザクションメタデータを理解する方法の詳細は、[トランザクションの結果の確認](look-up-transaction-results.html)を参照してください。
以下のサンプルコードは、上に示したすべてのトランザクションのタイプのトランザクションメタデータを確認し、アカウントが受け取ったXRPの金額をレポートします。
```js
{% include '_code-samples/monitor-payments-websocket/read-amount-received.js' %}
```
{{ start_step("Read Payments") }}
<button id="tx_read" class="btn btn-primary" disabled="disabled">Start Reading</button>
<h5>Transactions</h5>
<div class="ws-console" id="monitor-console-read"><span class="placeholder">(Log is empty)</span></div>
{{ end_step() }}
<script type="application/javascript">
function CountXRPDifference(affected_nodes, address) {
// Helper to find an account in an AffectedNodes array and see how much
// its balance changed, if at all. Fortunately, each account appears at most
// once in the AffectedNodes array, so we can return as soon as we find it.
// Note: this reports the net balance change. If the address is the sender,
// any XRP balance changes combined with the transaction cost.
for (let i=0; i<affected_nodes.length; i++) {
if ((affected_nodes[i].hasOwnProperty("ModifiedNode"))) {
// modifies an existing ledger entry
let ledger_entry = affected_nodes[i].ModifiedNode
if (ledger_entry.LedgerEntryType === "AccountRoot" &&
ledger_entry.FinalFields.Account === address) {
if (!ledger_entry.PreviousFields.hasOwnProperty("Balance")) {
writeToConsole("#monitor-console-read", "XRP balance did not change.")
}
// Balance is in PreviousFields, so it changed. Time for
// high-precision math!
const old_balance = new Big(ledger_entry.PreviousFields.Balance)
const new_balance = new Big(ledger_entry.FinalFields.Balance)
const diff_in_drops = new_balance.minus(old_balance)
const xrp_amount = diff_in_drops.div(1e6)
if (xrp_amount.gte(0)) {
writeToConsole("#monitor-console-read", "Received " + xrp_amount.toString()+" XRP.")
return
} else {
writeToConsole("#monitor-console-read", "Spent " + xrp_amount.abs().toString() + " XRP.")
return
}
}
} else if ((affected_nodes[i].hasOwnProperty("CreatedNode"))) {
// created a ledger entry. maybe the account just got funded?
let ledger_entry = affected_nodes[i].CreatedNode
if (ledger_entry.LedgerEntryType === "AccountRoot" &&
ledger_entry.NewFields.Account === address) {
const balance_drops = new Big(ledger_entry.NewFields.Balance)
const xrp_amount = balance_drops.div(1e6)
writeToConsole("#monitor-console-read", "Received " + xrp_amount.toString() + " XRP (account funded).")
return
}
} // accounts cannot be deleted at this time, so we ignore DeletedNode
}
writeToConsole("#monitor-console-read", "Did not find address in affected nodes.")
return
}
function CountXRPReceived(tx, address) {
if (tx.meta.TransactionResult !== "tesSUCCESS") {
writeToConsole("#monitor-console-read", "Transaction failed.")
return
}
if (tx.transaction.TransactionType === "Payment") {
if (tx.transaction.Destination !== address) {
writeToConsole("#monitor-console-read", "Not the destination of this payment. (We're " +
address + "; they're " + tx.transaction.Destination + ")")
return
}
if (typeof tx.meta.delivered_amount === "string") {
const amount_in_drops = new Big(tx.meta.delivered_amount)
const xrp_amount = amount_in_drops.div(1e6)
writeToConsole("#monitor-console-read", "Received " + xrp_amount.toString() + " XRP.")
return
} else {
writeToConsole("#monitor-console-read", "Received non-XRP currency.")
return
}
} else if (["PaymentChannelClaim", "PaymentChannelFund", "OfferCreate",
"CheckCash", "EscrowFinish"].includes(
tx.transaction.TransactionType)) {
CountXRPDifference(tx.meta.AffectedNodes, address)
} else {
writeToConsole("#monitor-console-read", "Not a currency-delivering transaction type (" +
tx.transaction.TransactionType + ").")
}
}
$("#tx_read").click((event) => {
// Wrap the existing "transaction" handler to do the old thing and also
// do the CountXRPReceived thing
const sub_address = $("#subscribe_address").val()
const old_handler = WS_HANDLERS["transaction"]
const new_handler = function(data) {
old_handler(data)
CountXRPReceived(data, sub_address)
}
WS_HANDLERS["transaction"] = new_handler
// Disable the button so you can't stack up multiple levels of the new handler
$("#tx_read").prop("disabled", "disabled")
complete_step("Read Payments")
})
</script>
## 次のステップ
- [トランザクションの結果の確認](look-up-transaction-results.html)で、トランザクションの実行内容を確認し、適切に対応するソフトウェアを構築します。
- あなた自身のアドレスから[XRPの送金](send-xrp.html)を試します。
- [Escrow](escrow.html)、[Checks](checks.html)または[Payment Channel](payment-channels.html)のような高度なタイプのトランザクションの監視と着信通知への応答を試します。
<!--{# TODO: uncomment when it's ready. - To more robustly handle internet instability, [Follow a Transaction Chain](follow-a-transaction-chain.html) to detect if you missed a notification. #}-->
## その他のプログラミング言語
多くのプログラミング言語には、WebSocket接続を使用して、データの送受信を行うためのライブラリが用意されています。JavaScript以外の言語で`rippled`のWebSocket APIとの通信を効率良く始めるには、同様な機能を利用している以下の例を参考にしてください。
<!-- MULTICODE_BLOCK_START -->
*Go*
```go
package main
// Connect to the XRPL Ledger using websocket and subscribe to an account
// translation from the JavaScript example to Go
// https://developers.ripple.com/monitor-incoming-payments-with-websocket.html
// This example uses the Gorilla websocket library to create a websocket client
// install: go get github.com/gorilla/websocket
import (
"encoding/json"
"flag"
"log"
"net/url"
"os"
"os/signal"
"time"
"github.com/gorilla/websocket"
)
// websocket address
var addr = flag.String("addr", "s.altnet.rippletest.net:51233", "http service address")
// Payload object
type message struct {
Command string `json:"command"`
Accounts []string `json:"accounts"`
}
func main() {
flag.Parse()
log.SetFlags(0)
var m message
// check for interrupts and cleanly close the connection
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
u := url.URL{Scheme: "ws", Host: *addr, Path: "/"}
log.Printf("connecting to %s", u.String())
// make the connection
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("dial:", err)
}
// on exit close
defer c.Close()
done := make(chan struct{})
// send a subscribe command and a target XRPL account
m.Command = "subscribe"
m.Accounts = append(m.Accounts, "rUCzEr6jrEyMpjhs4wSdQdz4g8Y382NxfM")
// struct to JSON marshalling
msg, _ := json.Marshal(m)
// write to the websocket
err = c.WriteMessage(websocket.TextMessage, []byte(string(msg)))
if err != nil {
log.Println("write:", err)
return
}
// read from the websocket
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
// print the response from the XRP Ledger
log.Printf("recv: %s", message)
// handle interrupt
for {
select {
case <-done:
return
case <-interrupt:
log.Println("interrupt")
// Cleanly close the connection by sending a close message and then
// waiting (with timeout) for the server to close the connection.
err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
if err != nil {
log.Println("write close:", err)
return
}
select {
case <-done:
case <-time.After(time.Second):
}
return
}
}
}
```
<!-- MULTICODE_BLOCK_END -->
**ヒント:** 目的のプログラミング言語の例がない場合があります。このページの最上部にある「GitHubで編集する」リンクをクリックして、作成したサンプルコードを提供してください。
## 脚注
[1.](#from-footnote-1)<a id="footnote-1"></a>実際には、HTTPベースのAPIを何度も呼び出す場合、クライアントとサーバーは複数の要求と応答を処理する際に同じ接続を再利用できます。この方法は、[HTTP永続接続、またはキープアライブ](https://en.wikipedia.org/wiki/HTTP_persistent_connection)と呼ばれます。開発の観点から見ると、基本となる接続が新しい場合でも、再利用される場合でも、HTTPベースのAPIを使用するコードは同じです。
## 関連項目
- **コンセプト:**
- [トランザクションの基本](transaction-basics.html)
- [結果のファイナリティー](finality-of-results.html) - トランザクションの成功また失敗が最終的なものとなるタイミングを判断する方法(簡単な説明: トランザクションが検証済みレジャーにある場合は、その結果とメタデータは最終的なものです)。
- **チュートリアル:**
- [信頼できるトランザクションの送信](reliable-transaction-submission.html)
- [トランザクションの結果の確認](look-up-transaction-results.html)
- **リファレンス:**
- [トランザクションのタイプ](transaction-types.html)
- [トランザクションのメタデータ](transaction-metadata.html) - メタデータフォーマットとメタデータに表示されるフィールドの概要
- [トランザクションの結果](transaction-results.html) - トランザクションのすべての結果コードを掲載した表一覧
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,127 @@
# 安全な署名の設定
[トランザクション](transaction-basics.html)をXRP Ledgerに送信するには、[秘密鍵](cryptographic-keys.html)のセキュリティを損なわない方法でトランザクションにデジタル署名する必要があります。(他の人があなたの秘密鍵にアクセスできる場合、その人はあなたと同じようにあなたのアカウントを操作できるため、すべての資金が盗まれたり消却されたりする可能性があります。)このページでは、トランザクションに安全に署名できる環境の設定方法について説明します。
**ヒント:** ネットワークにトランザクションを送信していない場合は、Rippleが運用しているサーバーなど、信頼できる公開サーバーを安全に使用して、着信トランザクションの監視やその他のネットワークアクティビティの読み取りを行うことができます。XRP Ledgerのすべてのトランザクション、残高、データは公開されています。
セキュリティのレベルが異なるさまざまな構成があるため、状況に応じて適したものは異なります。次の中からニーズに最適なものを選択してください。
- [`rippled`をローカルで実行](#ローカルでrippledを実行する)または[同じLAN内で実行](#同じlan内でrippledを実行する)
- ローカル署名を行える[クライアントライブラリを使用](#ローカル署名機能のあるクライアントライブラリを使用する)
- XRP Ledgerの署名に対応した[専用の署名デバイスを使用](#専用の署名デバイスを使用する)
- 信頼できる[リモート`rippled`マシンに接続するために安全なVPNを使用](#リモートrippledサーバーに対して安全なvpnを使用する)
<!-- Source for all diagrams in this article: https://docs.google.com/presentation/d/1BfGyWgC0njoPiKUZz3gXHMVSUINE3Q-_lHqY_D0TGwg/ -->
## 安全でない構成
[![安全でない構成の図](img/insecure-signing-options.png)](img/insecure-signing-options.png)
外部のソースからあなたの秘密鍵にアクセスできる構成は危険で、不正使用者によってあなたのすべてのXRPおよびあなたのXRP Ledgerのアドレスにあるすべてのものが盗まれる可能性があります。そのような構成の例としては、インターネット経由で他の人の`rippled`サーバーの[signメソッド][]を使用する構成や、秘密鍵をインターネットを経由してプレーンテキストで自己所有サーバーに送信する構成などがあります。
秘密鍵の秘匿性は常に保持する必要があります。自分にメールで送信したり、人の目に触れるところで入力したりしてはいけません。秘密鍵を使用しないときは、決してプレーンテキストではなく、暗号化された形式で保存する必要があります。セキュリティと利便性のバランスは、アドレスの保有額によっても変わります。さまざまな目的に合わせてさまざまなセキュリティ構成の複数のアドレスを使用することをお勧めします。
<!-- Note: I'd link "issuing and operational addresses" for an explanation of hot/cold wallet security, but it's particularly gateway/issued-currency centric, which is not appropriate for this context. -->
## ローカルでrippledを実行する
[![署名にローカルrippledサーバーを使用する構成の図](img/secure-signing-local-rippled.png)](img/secure-signing-local-rippled.png)
この構成では、トランザクションを生成するマシンで`rippled`を実行します。 秘密鍵はマシンから出ていかないため、マシンへのアクセス権がない人は秘密鍵にアクセスできません。もちろん、マシンのセキュリティ保護に関する業界標準のプラクティスに従ってください。この構成を使用するには、次の手順を実行します。
1. [`rippled`をインストール](install-rippled.html)します。
ローカルマシンが[`rippled`の最小システム要件](system-requirements.html)を満たしていることを確認します。
2. トランザクションに署名する必要がある場合は、`localhost`または`127.0.0.1`のサーバーに接続します。シングル署名の場合は[signメソッド][]、マルチ署名の場合は[sign_forメソッド][]を使用します。
[構成ファイルの例](https://github.com/ripple/rippled/blob/8429dd67e60ba360da591bfa905b58a35638fda1/cfg/rippled-example.cfg#L1050-L1073)では、ローカルループバックネットワーク上127.0.0.1のポート5005でJSON-RPCHTTP、ポート6006でWebSocketWSの接続をリッスンし、接続されるすべてのクライアントを管理者として扱っています。
**注意:** 署名に[コマンドラインAPI](request-formatting.html#コマンドライン形式)を使用する場合は、コマンドラインでないクライアントで[Websocket APIやJSON-RPC APIを使用](get-started-with-the-rippled-api.html)する場合よりもセキュリティが弱くなります。コマンドライン構文を使用すると、秘密鍵がシステムのプロセスリストで他のユーザーに見える可能性があり、シェル履歴にプレーンテキスト形式でキーが保存される可能性があります。
3. サーバーの使用中は、稼働状態と最新状態を維持して、ネットワークと同期されるようにしておく必要があります。
**注記:** トランザクションを送信していないときは`rippled`サーバーをオフにすることが _可能_ ですが、再び起動したときにネットワークとの同期に最大15分かかります。
## 同じLAN内でrippledを実行する
[![署名にLAN経由でrippledサーバーを使用する構成の図](img/secure-signing-lan-rippled.png)](img/secure-signing-lan-rippled.png)
この構成では、署名するトランザクションを生成するマシンと同じプライベートローカルエリアネットワークLAN内の専用マシンで`rippled`サーバーを実行します。この構成では、`rippled`を実行する専用の1台のマシンを使用しながら、中程度のシステムスペックの1台以上のマシンでトランザクションの指示を組み立てることができます。自己所有のデータセンターやサーバールームがある場合に魅力的な選択肢です。
この構成を使用するには、`rippled`サーバーをLAN内の`wss`および`https`接続を受け入れるように設定します。[証明書ピンニング](https://en.wikipedia.org/wiki/Transport_Layer_Security#Certificate_pinning)を使用する場合は自己署名証明書を使用できます。あるいは、社内や既知の認証局が署名した証明書を使用できます。[Let's Encrypt](https://letsencrypt.org/)などの一部の認証局は無料で証明書を自動発行しています。
<!--{# TODO: link api-over-lan.html with the detailed instructions when those are ready #}-->
必ず、マシンのセキュリティ保護に関する業界標準のプラクティスに従ってください。例えば、ファイアウォール、ウイルス対策、適切なユーザー権限を使用するなどです。
## ローカル署名機能のあるクライアントライブラリを使用する
[![ローカル署名機能のあるクライアントライブラリを使用する構成の図](img/secure-signing-client-library.png)](img/secure-signing-client-library.png)
この構成では、トランザクションにローカルで署名するために使用しているプログラミング言語のクライアントライブラリを使用します。使用しているプログラミング言語に対応するクライアントライブラリが必要です。Rippleは、XRP Ledgerのトランザクションにローカルで署名することができる次のクライアントライブラリを公開しています。
- **RippleAPIripple-libfor JavaScript**
- [設定](get-started-with-rippleapi-for-javascript.html)
- [APIリファレンス](rippleapi-reference.html)
- **Signing Library for C++**`rippled`に付属)
- [ドキュメント](https://github.com/ripple/rippled/tree/develop/Builds/linux#signing-library)
Rippleが公開したものでないクライアントライブラリを使用する場合は、そのライブラリが実装している署名アルゴリズムの実装が適切で安全であることを確認してください。例えば、クライアントライブラリがデフォルトのECDSAアルゴリズムを使用している場合は、そのライブラリは[RFC6979](https://tools.ietf.org/html/rfc6979)に記載されているとおりに決定論的ノンスを使用している必要があります。)Rippleが公開している上記のすべてのライブラリは、業界のベストプラクティスに従っています。
最高レベルのセキュリティを実現するために、クライアントライブラリを安定した最新バージョンの状態に保ってください。
### RippleAPIを使用したローカル署名の例
以下のサンプルコードは、RippleAPI for JavaScriptを使用してトランザクションの指示にローカルで署名する方法を示しています。
```js
{% include '_code-samples/secure-signing/js/signPayment.js' %}
```
セキュリティを強化するために、[Vault](https://www.vaultproject.io/)などの管理ツールから秘密鍵を読み込みます。
## 専用の署名デバイスを使用する
[![専用の署名ハードウェアの使用の図](img/secure-signing-dedicated-hardware.png)](img/secure-signing-dedicated-hardware.png)
専用の署名デバイスが各社から販売されており、例えば[Ledger Nano S](https://www.ledger.com/products/ledger-nano-s)は、秘密鍵をデバイスから出さずに使ってXRP Ledgerトランザクションに署名できます。すべてのタイプのトランザクションに対応していないデバイスもあります。
この構成の設定は、特定のデバイスによって異なります。場合によっては、署名デバイスと通信するためにマシンで「マネージャー」アプリケーションを実行する必要があります。そのようなデバイスの設定と使用方法については、メーカーの手順を参照してください。
## リモートrippledサーバーに対して安全なVPNを使用する
[![VPNを経由してリモート`rippled`に安全に接続する構成の図](img/secure-signing-over-vpn.png)](img/secure-signing-over-vpn.png)
この構成では、コロケーション施設や遠隔地のデータセンターなどにあるリモートでホストされている`rippled`サーバーを使用し、暗号化されたVPNを使用してそのサーバーに接続します。
この構成を使用するには、[プライベートLANで`rippled`を実行](#同じlan内でrippledを実行する)するための手順に従いますが、VPNを使用してリモート`rippled`サーバーのLANに接続します。VPNの設定手順は環境によって異なり、このガイドでは説明しません。
## 関連項目
- **コンセプト:**
- [暗号鍵](cryptographic-keys.html)
- [マルチ署名](multi-signing.html)
- **チュートリアル:**
- [rippledのインストール](install-rippled.html)
- [レギュラーキーペアの割り当て](assign-a-regular-key-pair.html)
- [信頼できるトランザクションの送信](reliable-transaction-submission.html)
- [パブリック署名の有効化](enable-public-signing.html)
- **リファレンス:**
- [signメソッド][]
- [submitメソッド][]
- [RippleAPIリファレンス](rippleapi-reference.html)
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,340 @@
# オフラインでのアカウント設定のチュートリアル
きわめて安全な[署名構成](set-up-secure-signing.html)では、XRP Ledger[アカウント](accounts.html)の[暗号鍵](cryptographic-keys.html)をオフラインの物理的に隔離されたマシンに安全に保管します。この構成を設定すると、さまざまなトランザクションに署名して、署名済みトランザクションのみをオンラインコンピューターに転送し、秘密鍵をオンラインにいる不正使用者に見せることなくそれらのトランザクションをXRP Ledgerネットワークに送信できます。
**注意:** オフラインマシンを保護するためには、適切な運用セキュリティ対策が必要です。例えば、オフラインマシンは信頼できない人がアクセスできない場所に物理的に設置する必要があり、信頼できるオペレーターはマシンに悪用されたソフトウェアを転送しないように注意する必要があります。例えば、ネットワークに接続されたコンピューターに接続したことがあるUSBドライブは使用してはいけません。
## 前提条件
オフライン署名を使用するには、次の前提条件を満たしている必要があります。
- オフラインマシンとして使用する1台のコンピューターを用意していること。このマシンは[サポートされているオペレーティングシステム](system-requirements.html)でセットアップされている必要があります。オフラインセットアップの手順については、使用するオペレーティングシステムのサポートを参照してください(例: [Red Hat Enterprise Linux DVD ISOインストール手順](https://access.redhat.com/solutions/7227))。使用するソフトウェアと物理メディアがマルウェアに感染していないことを確認します。
- オンラインマシンとして使用する別のコンピューターを用意していること。このマシンは`rippled`を実行する必要はありませんが、XRP Ledgerネットワークに接続し、共有レジャーの状態についての正確な情報を受信できる必要があります。例えば、[公開サーバーへのWebSocket接続](get-started-with-the-rippled-api.html)を使用できます。
- 署名済みのトランザクションバイナリデータをオフラインマシンからオンラインマシンに転送する安全な方法を用意していること。
- その方法の1つは、オフラインマシンでQRコードジェネレーターを使用し、オンラインマシンでQRコードスキャナーを使用することです。この場合、「オンラインマシン」はスマートフォンなどの携帯デバイスだとよいでしょう。
- 別の方法としては、物理メディアを使ってオフラインマシンからオンラインマシンにファイルをコピーします。この方法を使用する場合、オフラインマシンが悪意のあるソフトウェアに感染するおそれのある物理メディアは使用しないよう注意します。例えば、オンラインマシンとオフラインマシンで同じUSBドライブを再利用しないようにします。
- オンラインマシンにデータを手動で入力することも _可能_ ですが、面倒でミスが発生しやすくなります。
## 手順
{% set n = cycler(* range(1,99)) %}
### {{n.next()}}. オフラインマシンの設定
オフラインマシンには、安全な永続ストレージ(暗号化されたディスクドライブなど)と[トランザクションに署名する](set-up-secure-signing.html)ための方法が必要です。一般的には、必要なソフトウェアをオンラインマシンでダウンロードして、物理メディアを使ってオフラインマシンに転送します。オンラインマシン、物理メディア、ソフトウェア自体がマルウェアに感染していないことを確認する必要があります。
XRP Ledgerで署名するためのソフトウェアオプションは次のとおりです。
- パッケージ(`.deb`または`.rpm`。使用するLinuxディストリビューションによって異なるファイルから[`rippled`をインストール](install-rippled.html)し、[スタンドアロンモードで実行します](rippled-server-modes.html)。
- [ripple-lib](rippleapi-reference.html)とその依存関係をオフラインでインストールします。例えば、Yarn Package Managerでは、[オフラインでの使用に関して推奨される手順](https://yarnpkg.com/blog/2016/11/24/offline-mirror/)があります。
- 関連項目: [安全な署名の設定](set-up-secure-signing.html)
オフラインマシンでトランザクションの指示を生成するプロセスを容易にするために、カスタムソフトウェアを設定することもできます。例えば、ソフトウェアで次に使用する[シーケンス番号][]を追跡したり、送信するトランザクションのタイプに応じた設定済みテンプレートを含めるといったことが可能です。
### {{n.next()}}.暗号鍵の生成
**オフラインマシン**で、アカウントで使用する[暗号鍵](cryptographic-keys.html)のペアを生成します。鍵は、単純なパスフレーズやエントロピーが十分でないその他のソースから生成するのではなく、安全なランダム手続きで生成してください。(例えば、`rippled`の[wallet_proposeメソッド][]を使用することができます。)
<!-- MULTICODE_BLOCK_START -->
_rippledコマンドライン_
```sh
$ ./rippled wallet_propose
Loading: "/etc/opt/ripple/rippled.cfg"
2019-Dec-09 22:58:24.110862955 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"account_id" : "r4MRc4BArFPXmiDjmLdrufyFManSYhfKE6",
"key_type" : "secp256k1",
"master_key" : "JANE GIBE LIST TEND NU RUDE JIG PA FLOG DEFT SAME NASH",
"master_seed" : "shYHSiJod8CLPTj1SNJ2PdUFj4pFk",
"master_seed_hex" : "8465FDB80B2E2620A7D58274C26291A0",
"public_key" : "aBQLW8imt7VChRJU1NMVCB7fE3jSL3VNEgLDKf88ygAhnfuZh3oo",
"public_key_hex" : "03396074ED4B8155ACF9A8DC3665EFA53B5CFA0A1E91C3879303D37721EB222644",
"status" : "success"
}
}
```
<!-- MULTICODE_BLOCK_END -->
次の値をメモします。
- **`account_id`**: これはキーペアに関連付けられているアドレスです。このアドレスは、XRPを供給このプロセスの先で実行した後に、XRP Ledgerでの **[アカウント](accounts.html)アドレス**になります。`account_id`は公開しても安全です。
- **`master_seed`**: これはキーペアの秘密シード値です。この値は、アカウントからのトランザクションに署名する際に使用します。最高レベルのセキュリティを実現するために、この値をオフラインマシンのディスクに書き込む前に暗号化してください。暗号化キーとして、人間のオペレーターが覚えやすい安全なパスフレーズや、物理的に安全な場所に書き留めたパスフレーズを使います。例えば、適切な重さのサイコロを使用して作成する[ダイスウェアパスフレーズ](http://world.std.com/~reinhold/diceware.html)などがあります。第2の要素として物理セキュリティキーを使用することもできます。この段階で取る対策の程度はご自身で決めてください。
- **`key_type`**: これは、このキーペアに使用する暗号化アルゴリズムです。有効なトランザクションに署名するには、どのようなタイプのキーペアを所有しているかを知る必要があります。デフォルトは`secp256k1`です。
`master_key``master_seed``master_seed_hex`の値はどこにも共有**しないでください**。これらはこのアドレスに関連付けられている秘密鍵を再作成するために使用できます。
### {{n.next()}}.新しいアドレスへの資金の供給
オンラインマシンから、ステップ1でメモした**アカウントアドレス** に十分なXRPを送金します。詳細は、[アカウントの作成](accounts.html#アカウントの作成)を参照してください。
**ヒント:** テストの目的で、[Testnet Faucet](xrp-testnet-faucet.html)を使用して、テスト用のXRPが入った新しいアカウントを取得できます。そのアカウントを使用して、オフラインで生成されたアドレスに資金を供給します。
### {{n.next()}}.アカウントの詳細の確認
前のステップからのトランザクションがコンセンサスにより検証されたら、アカウントが作成されたことになります。オンラインマシンから、[account_infoメソッド][]を使用して、アカウントのステータスを確認します。応答に`"validated": true`が含まれていることを確認し、この結果が最終的なものであることを確認します。
結果の`account_data``Sequence`フィールドにある、アカウントのシーケンス番号をメモします。この後のステップでアカウントのトランザクションに署名するために、このシーケンス番号を把握しておく必要があります。
[DeletableAccounts Amendment](known-amendments.html#deletableaccounts) :not_enabled:がenabledになっている場合、新しく資金を供給したアカウントの`Sequence`番号は、資金を供給したときの[レジャーインデックス][]と一致します。enabledになっていない場合、新しく資金を供給したアカウントの`Sequence`番号は常に1です。
<!-- MULTICODE_BLOCK_START -->
_rippledコマンドライン_
```sh
$ ./rippled account_info rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn
Loading: "/etc/opt/ripple/rippled.cfg"
2019-Dec-11 01:06:21.728637950 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"account_data" : {
"Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Balance" : "5000000000000",
"Flags" : 0,
"LedgerEntryType" : "AccountRoot",
"OwnerCount" : 0,
"PreviousTxnID" : "00C5B713B11DA775C6F932D38CE162C16FA88B7269BAFC6FDF4C6ADB74419670",
"PreviousTxnLgrSeq" : 3,
"Sequence" : 1,
"index" : "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8"
},
"ledger_current_index" : 4,
"status" : "success",
"validated" : false
}
}
```
<!-- MULTICODE_BLOCK_END -->
### {{n.next()}}.オフラインマシンでのシーケンス番号の入力
オフラインマシンでアカウントの開始シーケンス番号を保存します。オフラインマシンを使用してトランザクションを準備するときは、必ずこの保存されたシーケンス番号を使用し、シーケンス番号を1増やして、新しい値を保存します。
この方法で複数のトランザクションを前もって準備しておき、署名済みのトランザクションを一度にオンラインマシンに転送して、すべてを送信できます。各トランザクションの形式が有効で、十分な[トランザクションコスト](transaction-cost.html)を支払っていれば、XRP Ledgerネットワークは最終的にこれらのトランザクションを検証済みレジャーに含めて、共有XRP Ledgerにあるアカウントのシーケンス番号と、オフラインマシンで追跡している「現在の」シーケンス番号と同期が保たれるようにします。ほとんどのトランザクションでは、ネットワークに送信して15秒以内に最終的な検証済みの結果が得られます。
任意で、現在のレジャーインデックスをオフラインマシンに保存します。この値を使用して、今後のトランザクションに適切な`LastLedgerSequence`値を選択できます。
### {{n.next()}}.初期設定トランザクションの署名(ある場合)
オフラインマシンで、アカウントの設定用のトランザクションを準備して署名します。詳細は、アカウントを使用する目的によって異なります。例えば次のようなことができます。
- 定期的なローテーションで使用できる[レギュラーキーペアを割り当てる](assign-a-regular-key-pair.html)。
- ユーザーが送金理由や送金相手をタグ付けせずに送金できないようにするために、[宛先タグを要求する](require-destination-tags.html)。
- アカウントセキュリティを強化するために、[マルチ署名を設定する](set-up-multi-signing.html)。
- 明示的に承認した送金、または事前に承認した相手からの送金のみを受け取れるようにするために、[DepositAuthを有効にする](depositauth.html)。
- ユーザーがあなたの許可なくあなたへの[トラストライン](trust-lines-and-issuing.html)を開けないようにするために、[RequireAuthを有効にする](become-an-xrp-ledger-gateway.html#enabling-requireauth)。XRP Ledgerの分散型取引所や発行済み通貨機能を使用する予定がない場合は、これを対策として行うことをお勧めします。
- 発行済み通貨[ゲートウェイ](become-an-xrp-ledger-gateway.html)には次のような追加の設定がある場合があります。
- 発行済み通貨を送金するユーザーに対して[TransferRateを設定する](become-an-xrp-ledger-gateway.html#transferrate)。
- このアドレスを発行済み通貨のみに使用する予定の場合は、[XRPペイメントを禁止する](become-an-xrp-ledger-gateway.html#disallowxrp)。
この段階では、トランザクションに署名をするだけで、まだ送信しません。各トランザクションに対して、`Fee`[トランザクションコスト](transaction-cost.html))や`Sequence`[シーケンス番号][])など、通常は自動入力可能なフィールドを含めて、すべてのフィールドに入力する必要があります。一度に複数のトランザクションを準備する場合は、トランザクションの実行順にシーケンシャルに増やした`Sequence`番号を使用する必要があります。
RequireAuthを有効にする:
<!-- MULTICODE_BLOCK_START -->
_rippledコマンドライン_
```sh
$ rippled sign sn3nxiW7v8KXzPzAqzyHXbSSKNuN9 '{"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", "Fee": "12", "Sequence": 1, "TransactionType": "AccountSet", "SetFlag": 2}' offline
Loading: "/etc/opt/ripple/rippled.cfg"
2019-Dec-11 00:18:31.865955978 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"deprecated" : "This command has been deprecated and will be removed in a future version of the server. Please migrate to a standalone signing tool.",
"status" : "success",
"tx_blob" : "1200032280000000240000000120210000000268400000000000000C7321039543A0D3004CDA0904A09FB3710251C652D69EA338589279BC849D47A7B019A174473045022100D5C92D7705036CD7EBB601C8DFCD90927FA591A62AF832C489E9C898EC8E2FA0022052F1819340EB73E9749B8930A6935727362B8E141D1B2E246B49F912223FFD4381144B4E9C06F24296074F7BC48F92A97916C6DC5EA9",
"tx_json" : {
"Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee" : "12",
"Flags" : 2147483648,
"Sequence" : 1,
"SetFlag" : 2,
"SigningPubKey" : "039543A0D3004CDA0904A09FB3710251C652D69EA338589279BC849D47A7B019A1",
"TransactionType" : "AccountSet",
"TxnSignature" : "3045022100D5C92D7705036CD7EBB601C8DFCD90927FA591A62AF832C489E9C898EC8E2FA0022052F1819340EB73E9749B8930A6935727362B8E141D1B2E246B49F912223FFD43",
"hash" : "F81C34E7F05423DC1C973CB5008CA41AE984DE142EAA3975A749FABF0D08FA63"
}
}
}
```
<!-- MULTICODE_BLOCK_END -->
一定の時間内に _すべて_ のトランザクションで最終結果が得られるように、[`LastLedgerSequence`](reliable-transaction-submission.html#lastledgersequence)フィールドに入力してください。この値は、現行のレジャーインデックス(オンラインマシンから検索する必要がある)と、トランザクションを有効に保つ時間に基づいたものである必要があります。オンラインマシンからオフラインマシンへ、オフラインマシンからオンラインマシンへ切り替える時間を取れるだけの十分に大きな`LastLedgerSequence`値を設定するようにしてください。例えば、現行のレジャーインデックスより256大きな値では、トランザクションは約15分間有効になります。詳細は、[結果のファイナリティー](finality-of-results.html)と[信頼できるトランザクションの送信](reliable-transaction-submission.html)を参照してください。
### {{n.next()}}.オンラインマシンへのトランザクションのコピー
トランザクションに署名したら、次のステップは署名済みのトランザクションデータをオンラインマシンに入れることです。その方法の例については、[前提条件](#前提条件)を参照してください。
### {{n.next()}}.設定したトランザクションの送信
次のステップはトランザクションの送信です。ほとんどのトランザクションは、送信後の次の検証済みレジャー約4秒後、またはキューに入っている場合はその後のレジャー10秒未満で最終結果が得られるはずです。トランザクションの最終結果を追跡する詳細な手順については、[信頼できるトランザクションの送信](reliable-transaction-submission.html)を参照してください。
単純なトランザクションを送信する例:
<!-- MULTICODE_BLOCK_START -->
_rippledコマンドライン_
```sh
$ rippled submit 1200032280000000240000000120210000000268400000000000000C7321039543A0D3004CDA0904A09FB3710251C652D69EA338589279BC849D47A7B019A174473045022100D5C92D7705036CD7EBB601C8DFCD90927FA591A62AF832C489E9C898EC8E2FA0022052F1819340EB73E9749B8930A6935727362B8E141D1B2E246B49F912223FFD4381144B4E9C06F24296074F7BC48F92A97916C6DC5EA9
Loading: "/etc/opt/ripple/rippled.cfg"
2019-Dec-11 01:14:25.988839227 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"deprecated" : "Signing support in the 'submit' command has been deprecated and will be removed in a future version of the server. Please migrate to a standalone signing tool.",
"engine_result" : "tesSUCCESS",
"engine_result_code" : 0,
"engine_result_message" : "The transaction was applied. Only final in a validated ledger.",
"status" : "success",
"tx_blob" : "1200032280000000240000000120210000000268400000000000000C7321039543A0D3004CDA0904A09FB3710251C652D69EA338589279BC849D47A7B019A174473045022100D5C92D7705036CD7EBB601C8DFCD90927FA591A62AF832C489E9C898EC8E2FA0022052F1819340EB73E9749B8930A6935727362B8E141D1B2E246B49F912223FFD4381144B4E9C06F24296074F7BC48F92A97916C6DC5EA9",
"tx_json" : {
"Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee" : "12",
"Flags" : 2147483648,
"Sequence" : 1,
"SetFlag" : 2,
"SigningPubKey" : "039543A0D3004CDA0904A09FB3710251C652D69EA338589279BC849D47A7B019A1",
"TransactionType" : "AccountSet",
"TxnSignature" : "3045022100D5C92D7705036CD7EBB601C8DFCD90927FA591A62AF832C489E9C898EC8E2FA0022052F1819340EB73E9749B8930A6935727362B8E141D1B2E246B49F912223FFD43",
"hash" : "F81C34E7F05423DC1C973CB5008CA41AE984DE142EAA3975A749FABF0D08FA63"
}
}
}
```
<!-- MULTICODE_BLOCK_END -->
**ヒント:** 一度に10件を超えるトランザクションを送信しようとしている場合、10件未満のグループに分けて送信すると成功の可能性が高まります。[トランザクションキュー](transaction-queue.html)では同じ送信者から一度に送信されるトランザクションを10件に制限しているためです。10件の1グループのトランザクションを送信した後に、すべてのトランザクションがキューから出るのを待ってから、次のグループを送信します。
[最終的でない結果](finality-of-results.html)が得られて失敗したトランザクションの送信をやり直します。同じトランザクションが2回以上処理される可能性はありません。
### {{n.next()}}.トランザクションの最終ステータスの確認
送信した各トランザクションについて、トランザクションの[最終結果](finality-of-results.html)をメモします。例えば、[txメソッド][]を使用します。例:
<!-- MULTICODE_BLOCK_START -->
_rippledコマンドライン_
```sh
$ ./rippled tx F81C34E7F05423DC1C973CB5008CA41AE984DE142EAA3975A749FABF0D08FA63
Loading: "/etc/opt/ripple/rippled.cfg"
2019-Dec-11 01:38:30.124771464 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee" : "12",
"Flags" : 2147483648,
"Sequence" : 1,
"SetFlag" : 2,
"SigningPubKey" : "039543A0D3004CDA0904A09FB3710251C652D69EA338589279BC849D47A7B019A1",
"TransactionType" : "AccountSet",
"TxnSignature" : "3045022100D5C92D7705036CD7EBB601C8DFCD90927FA591A62AF832C489E9C898EC8E2FA0022052F1819340EB73E9749B8930A6935727362B8E141D1B2E246B49F912223FFD43",
"date" : 629343510,
"hash" : "F81C34E7F05423DC1C973CB5008CA41AE984DE142EAA3975A749FABF0D08FA63",
"inLedger" : 4,
"ledger_index" : 4,
"meta" : {
"AffectedNodes" : [
{
"ModifiedNode" : {
"FinalFields" : {
"Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Balance" : "4999999999988",
"Flags" : 262144,
"OwnerCount" : 0,
"Sequence" : 2
},
"LedgerEntryType" : "AccountRoot",
"LedgerIndex" : "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"PreviousFields" : {
"Balance" : "5000000000000",
"Flags" : 0,
"Sequence" : 1
},
"PreviousTxnID" : "00C5B713B11DA775C6F932D38CE162C16FA88B7269BAFC6FDF4C6ADB74419670",
"PreviousTxnLgrSeq" : 3
}
}
],
"TransactionIndex" : 0,
"TransactionResult" : "tesSUCCESS"
},
"status" : "success",
"validated" : true
}
}
```
<!-- MULTICODE_BLOCK_END -->
すべてのトランザクションが処理された後で送信側アカウントの[account_info][account_infoメソッド]を確認すると便利です。アカウントの現在のシーケンス番号(`Sequence`フィールドと、必要に応じてXRP残高をメモします。
失敗したトランザクションについては、どうするか決める必要があります。
- トランザクションが`tefMAX_LEDGER`コードで失敗した場合、トランザクションが処理されるように、より高い[トランザクションコスト](transaction-cost.html)を指定する必要があります。これはXRP Ledgerネットワークに負荷がかかっていることを示している可能性があります。トランザクションを、より高いコストを支払い、より高い`LastLedgerSequence`パラメーターある場合を持つ新しいバージョンに置き換えるのも1つの方法です。
- トランザクションが[`tem`クラスコードで](tem-codes.html)で失敗した場合は、トランザクションの生成時にスペルミスなどのミスをした可能性があります。トランザクションを再度確認し、有効な形式に置き換えます。
- トランザクションが[`tec`クラスコード](tec-codes.html)で失敗した場合は、失敗した具体的な理由に応じてケースバイケースで対処する必要があります。
調整や置き換えをするトランザクションについては、オフラインマシンに戻るタイミングについての詳細をメモします。
### {{n.next()}}.オフラインマシンのステータスの調整
オフラインマシンに戻り、カスタムサーバーに保存されている設定に必要な変更を加えます。例えば次のような変更です。
- アカウントの現在の`Sequence`番号を更新する。すべてのトランザクションが検証済みレジャーに含まれている場合(成功または`tec`コードで終了)、オフラインマシンに保存されているシーケンス番号はすでに正確であるはずです。含まれていない場合は、保存されているシーケンス番号を、前のステップでメモした`Sequence`値と一致するように変更する必要があります。
- 新しいトランザクションで適切な`LastLedgerSequence`値を使用できるように、現在のレジャーインデックスを更新する。(新しいトランザクションを生成する直前に必ずこれを行う必要があります。)
- _省略可_ オフラインマシンで使用可能なXRPの金額を追跡している場合は、使用可能なXRPの実際の金額を更新する。
その後で、前のステップで失敗したトランザクションの置き換えとなるトランザクションを調整して署名します。以前の手順と同様に、オフラインマシンでトランザクションを生成し、オンラインマシンから送信します。
## 関連項目
- **コンセプト:**
- [アカウント](accounts.html)
- [暗号鍵](cryptographic-keys.html)
- **チュートリアル:**
- [安全な署名の設定](set-up-secure-signing.html)
- [レギュラーキーペアの割り当て](assign-a-regular-key-pair.html)
- [マルチ署名の設定](set-up-multi-signing.html)
- **リファレンス:**
- [基本的なデータタイプ: ](basic-data-types.html#アカウントシーケンス)[ ](basic-data-types.html#アカウントシーケンス)[アカウントシーケンス](basic-data-types.html#アカウントシーケンス)
- [account_infoメソッド][]
- [signメソッド][]
- [submitメソッド][]
- [txメソッド][]
- [AccountSetトランザクション][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,94 @@
# 宛先タグの要求
`RequireDest`設定RippleAPIの`requireDestinationTag`)は、送金先を識別する[宛先タグ](source-and-destination-tags.html)を顧客が付け忘れている場合にあなたのアドレスに[送金](payment-types.html)できないようにするためのものです。有効にすると、XRP Ledgerは宛先タグが付いていないあなたのアドレスへの送金を拒否します。
以下は、ローカルでホストされている`rippled`の[submitメソッド][]を使用して、`RequireDest`フラグを有効にする[AccountSetトランザクション][]を送信する例です。
要求:
<!-- MULTICODE_BLOCK_START -->
*JSON-RPC*
```json
POST http://localhost:5005/
Content-Type: application/json
{
"method": "submit",
"params": [
{
"secret": "sn3nxiW7v8KXzPzAqzyHXbSSKNuN9",
"tx_json": {
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee": "15000",
"Flags": 0,
"SetFlag": 1,
"TransactionType": "AccountSet"
}
}
]
}
```
{% include '_snippets/secret-key-warning.md' %}
<!--{#_ #}-->
<!-- MULTICODE_BLOCK_END -->
応答:
<!-- MULTICODE_BLOCK_START -->
*JSON-RPC*
```json
200 OK
{
"result" : {
"deprecated" : "Signing support in the 'submit' command has been deprecated and will be removed in a future version of the server. Please migrate to a standalone signing tool.",
"engine_result" : "tesSUCCESS",
"engine_result_code" : 0,
"engine_result_message" : "The transaction was applied. Only final in a validated ledger.",
"status" : "success",
"tx_blob" : "12000322000000002400000179202100000001684000000000003A98732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402201C430B4C29D0A0AB94286AE55FB9981B00F84C7985AF4BD44570782C5E0C5E290220363B68B81580231B32176F8C477B822ECB9EC673B84237BEF15BE6F59108B97D81144B4E9C06F24296074F7BC48F92A97916C6DC5EA9",
"tx_json" : {
"Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee" : "15000",
"Flags" : 0,
"Sequence" : 377,
"SetFlag" : 1,
"SigningPubKey" : "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB",
"TransactionType" : "AccountSet",
"TxnSignature" : "304402201C430B4C29D0A0AB94286AE55FB9981B00F84C7985AF4BD44570782C5E0C5E290220363B68B81580231B32176F8C477B822ECB9EC673B84237BEF15BE6F59108B97D",
"hash" : "3F2B233907BE9EC51AE1C822EC0B6BB0965EFD2400B218BE988DDA9529F53CA4"
}
}
}
```
<!-- MULTICODE_BLOCK_END -->
## 関連項目
- **コンセプト:**
- [アカウント](accounts.html)
- [ソースタグと宛先タグ](source-and-destination-tags.html)
- [トランザクションコスト](transaction-cost.html)
- [支払いタイプ](payment-types.html)
- **チュートリアル:**
- [XRP Ledgerのビジネス](xrp-ledger-businesses.html)
- **リファレンス:**
- [account_infoメソッド][]
- [AccountSetトランザクション][]
- [AccountRootのフラグ](accountroot.html#accountrootのフラグ)
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,37 +1,34 @@
# マルチ署名の設定 # マルチ署名の設定
マルチ署名は、XRP Ledgerのトランザクションを承認する3種類の方法の1つです。マルチ署名の他に[レギュラーキーとマスターキー](cryptographic-keys.html)で署名する方法があります。3種類のトランザクション承認方法を自由に組み合わせて使用できるようにアドレスを設定できます。 [マルチ署名](multi-signing.html)は、XRP Ledgerの[トランザクション](transaction-basics.html)を承認する3種類の方法の1つです。マルチ署名の他に[レギュラーキーとマスターキー](cryptographic-keys.html)で署名する方法があります。3種類のトランザクション承認方法を自由に組み合わせて使用できるように[アドレス](accounts.html)を設定できます。
このチュートリアルでは、アドレスのマルチ署名を有効にする方法を説明します。 このチュートリアルでは、アドレスのマルチ署名を有効にする方法を説明します。
## 前提条件 ## 前提条件
- 資金供給のあるXRP Ledgerアドレスが必要です。 - トランザクションを送信するための十分なXRPが供給されていて、新しい署名者リストの[必要準備金](reserves.html)を満たしている資金供給のあるXRP Ledger[アドレス](accounts.html)が必要です。
- [MultiSignReserve mendment][]が有効な場合、マルチ署名を使用するには、使用する署名と署名者の数に関わらず、アカウントの準備金として5 XRPが必要です。MultiSignReserve Amendmentは**2019年4月7日**以降、本番環境のXRP Ledgerで有効になっています。)
- [MultiSignReserve Amendment][]が有効ではないテストネットワークでは、マルチ署名を使用するには[アカウント準備金](reserves.html)に通常よりも多くのXRPが必要となります。必要額は、リストの署名者の数に応じて増加します。
- XRP Ledgerフォーマットでキーペアを生成するツールを利用できる必要があります。この処理に`rippled`サーバーを使用する場合は、[wallet_proposeメソッド][]が管理者専用であるため、管理者アクセス権限が必要です。 - XRP Ledgerフォーマットでキーペアを生成するツールを利用できる必要があります。この処理に`rippled`サーバーを使用する場合は、[wallet_proposeメソッド][]が管理者専用であるため、管理者アクセス権限が必要です。
- あるいは、すでにXRP Ledgerアドレスを持っている人をあなたのアドレスの署名者として承認するには、その人または組織のアカウントアドレスを知っている必要があります。
- マルチ署名は使用可能である必要があります。マルチ署名は、2016年6月27日以降、XRP Ledger Consensusプロトコルに対する[**Amendment**](amendments.html)により利用できるようになりました。 - マルチ署名は使用可能である必要があります。MultiSign Amendmentは**2016年6月27日**以降、本番環境のXRP Ledgerで有効になっています。)
## 1. 構成の設計
## 1. 資金供給のあるアドレスの準備 含めたい署名者の数を決定します最大8。特定のトランザクションに必要な署名の数に基づいて、署名者リストの定数と署名者の重みを選択します。シンプルな「M-of-N」の署名設定では、各署名者に重み **`1`** を割り当て、リストの定数が「M」になるように設定します。これが必要な署名の数です。
トランザクションを送信でき、利用可能なXRPを十分に保有するXRP Ledgerアドレスが必要です。
[MultiSignReserve Amendment][]が有効ではない場合、マルチ署名を使用するには[アカウント準備金](reserves.html)および[トランザクションコスト](transaction-cost.html)に通常よりも多くのXRPが必要となります。必要額は、使用する署名および署名者の数に応じて増加します。
[MultiSignReserve Amendment][]が有効な場合、マルチ署名を使用するには、使用する署名と署名者の数に関わらず、アカウントの準備金として5 XRPが必要です。マルチ署名済みトランザクションの[トランザクションコスト](transaction-cost.html)は、このAmendmentの影響を受けず、使用する署名と署名者の数に応じて増加します。
`rippled`を[スタンドアロンモード](rippled-server-modes.html#rippledサーバーをスタンドアロンモードで実行する理由)で新しいジェネシスレジャーで開始した場合は、以下の操作を行う必要があります:
1. 新しいアドレスのキーを生成するか、またはすでに所有するキーを再利用します。
2. ジェネシスアカウントから新しいアドレスに資金を供給するため、Paymentトランザクションを送信します。[XRPのdrop数][]で100,000,000以上を送信してください。
3. 手動でレジャーを閉鎖します。
## 2. メンバーキーの準備 ## 2. メンバーキーの準備
複数のXRP LedgerキーセットアドレスとシークレットをSignerListのメンバーに追加する必要があります。SignerListには、レジャーに既存の資金供給のあるアドレス、または[wallet_proposeメソッド][]で生成した新しいアドレスを追加できます。例: 署名者リストにメンバーとして加える有効な形式のXRP Ledgerアドレスが1つ以上必要です。あなた、またはあなたが選択した署名者は、これらのアドレスに関連付けられた秘密鍵を知っておく必要があります。アドレスは、レジャーに存在する資金供給されたアカウントにすることもできますが、必ずしもそうである必要はありません。
[wallet_proposeメソッド][]を使用して新しいアドレスを生成できます。例:
$ rippled wallet_propose $ rippled wallet_propose
Loading: "/etc/opt/ripple/rippled.cfg" Loading: "/etc/opt/ripple/rippled.cfg"
@@ -94,7 +91,7 @@
"result" : { "result" : {
"engine_result" : "tesSUCCESS", "engine_result" : "tesSUCCESS",
"engine_result_code" : 0, "engine_result_code" : 0,
"engine_result_message" : "The transaction was applied.Only final in a validated ledger.", "engine_result_message" : "The transaction was applied. Only final in a validated ledger.",
"status" : "success", "status" : "success",
"tx_blob" : "12000C2200000000240000000120230000000368400000000000271073210303E20EC6B4A39A629815AE02C0A1393B9225E3B890CAE45B59F42FA29BE9668D74473045022100BEDFA12502C66DDCB64521972E5356F4DB965F553853D53D4C69B4897F11B4780220595202D1E080345B65BAF8EBD6CA161C227F1B62C7E72EA5CA282B9434A6F04281142DECAB42CA805119A9BA2FF305C9AFA12F0B86A1F4EB1300028114204288D2E47F8EF6C99BCC457966320D12409711E1EB13000181147908A7F0EDD48EA896C3580A399F0EE78611C8E3E1EB13000181143A4C02EA95AD6AC3BED92FA036E0BBFB712C030CE1F1", "tx_blob" : "12000C2200000000240000000120230000000368400000000000271073210303E20EC6B4A39A629815AE02C0A1393B9225E3B890CAE45B59F42FA29BE9668D74473045022100BEDFA12502C66DDCB64521972E5356F4DB965F553853D53D4C69B4897F11B4780220595202D1E080345B65BAF8EBD6CA161C227F1B62C7E72EA5CA282B9434A6F04281142DECAB42CA805119A9BA2FF305C9AFA12F0B86A1F4EB1300028114204288D2E47F8EF6C99BCC457966320D12409711E1EB13000181147908A7F0EDD48EA896C3580A399F0EE78611C8E3E1EB13000181143A4C02EA95AD6AC3BED92FA036E0BBFB712C030CE1F1",
"tx_json" : { "tx_json" : {
@@ -136,21 +133,9 @@
**注記:** [MultiSignReserve Amendment][]が有効ではない場合は、SignerListのメンバーの増加に応じて、アドレスの[所有者準備金](reserves.html#所有者準備金)のXRP額を増加する必要があります。アドレスに十分なXRPがないと、トランザクションは[tecINSUFFICIENT_RESERVE](tec-codes.html)で失敗します。[MultiSignReserve Amendment][]が有効な場合は、SignerListの署名者の数に関係なく[所有者準備金](reserves.html#所有者準備金)として必要なXRPは5 XRPです。関連項目: [SignerListと準備金](signerlist.html#signerlistと準備金) **注記:** [MultiSignReserve Amendment][]が有効ではない場合は、SignerListのメンバーの増加に応じて、アドレスの[所有者準備金](reserves.html#所有者準備金)のXRP額を増加する必要があります。アドレスに十分なXRPがないと、トランザクションは[tecINSUFFICIENT_RESERVE](tec-codes.html)で失敗します。[MultiSignReserve Amendment][]が有効な場合は、SignerListの署名者の数に関係なく[所有者準備金](reserves.html#所有者準備金)として必要なXRPは5 XRPです。関連項目: [SignerListと準備金](signerlist.html#signerlistと準備金)
## 4. レジャーの閉鎖 ## 4. 検証の待機
本番環境のネットワークでは、レジャーが自動的に閉鎖するまでに47秒かかる場合があります。 {% include '_snippets/wait-for-validation.md' %} <!--#{ fix md highlighting_ #}-->
スタンドアロンモードで`rippled`を実行している場合は、[ledger_acceptメソッド][]を使用してレジャーを手動で閉鎖します。
$ rippled ledger_accept
Loading: "/etc/opt/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result" : {
"ledger_current_index" : 6,
"status" : "success"
}
}
## 5. 新しい署名者リストの確認 ## 5. 新しい署名者リストの確認
@@ -181,14 +166,14 @@
}, },
{ {
"SignerEntry" : { "SignerEntry" : {
"Account" : "raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n", "Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"SignerWeight" : 1 "SignerWeight" : 2
} }
}, },
{ {
"SignerEntry" : { "SignerEntry" : {
"Account" : "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v", "Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"SignerWeight" : 1 "SignerWeight" : 2
} }
} }
], ],
@@ -211,7 +196,25 @@ SignerListが予期した内容で存在していれば、アドレスでマル
これで、アドレスから[マルチ署名済みトランザクションを送信](send-a-multi-signed-transaction.html)できます。次の操作も実行できます。 これで、アドレスから[マルチ署名済みトランザクションを送信](send-a-multi-signed-transaction.html)できます。次の操作も実行できます。
* `asfDisableMaster`フラグを使用して[AccountSetトランザクション][]を送信し、アドレスのマスターキーペアを無効化。 * `asfDisableMaster`フラグを使用して[AccountSetトランザクション][]を送信し、アドレスのマスターキーペアを無効化。
* [SetRegularKeyトランザクション][]を送信してアドレスのレギュラーキーペアを削除(レギュラーキーペアをすでに設定している場合)。 * [SetRegularKeyトランザクション][]を送信して[アドレスのレギュラーキーペアを削除](change-or-remove-a-regular-key-pair.html)(レギュラーキーペアをすでに設定している場合)。
## 関連項目
- **コンセプト:**
- [暗号鍵](cryptographic-keys.html)
- [マルチ署名](multi-signing.html)
- **チュートリアル:**
- [rippledのインストール](install-rippled.html)
- [レギュラーキーペアの割り当て](assign-a-regular-key-pair.html)
- [信頼できるトランザクションの送信](reliable-transaction-submission.html)
- [パブリック署名の有効化](enable-public-signing.html)
- **リファレンス:**
- [wallet_proposeメソッド][]
- [account_objectsメソッド][]
- [sign_forメソッド][]
- [submit_multisignedメソッド][]
- [SignerListSetトランザクション][]
- [SignerListオブジェクト](signerlist.html)
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -10,10 +10,10 @@
履歴シャードを保管できるように`rippled`サーバーを設定する前に、履歴シャードストアーに割り当てるディスク容量を決定する必要があります。これはまた、デフォルトのレジャーストアーに保持する履歴の量にも影響します。シャードストアーのサイズを設定する際には、以下の点を考慮してください。 履歴シャードを保管できるように`rippled`サーバーを設定する前に、履歴シャードストアーに割り当てるディスク容量を決定する必要があります。これはまた、デフォルトのレジャーストアーに保持する履歴の量にも影響します。シャードストアーのサイズを設定する際には、以下の点を考慮してください。
- レジャーストアー(`[node_db]`スタンザにより定義される)は、履歴シャードストアーとは別のストアーです。レジャーストアーはすべてのサーバーに必要であり、そこには一定範囲の最近の履歴が保管されている _必要があります_ 。保管する範囲は、`online_delete`パラメーターに使用可能な状態で維持するレジャーの数によって定義されます。デフォルトの設定では、最新のレジャー2000個が保管されます。 - レジャーストアー(`[node_db]`スタンザにより定義される)は、履歴シャードストアーとは別のストアーです。レジャーストアーはすべてのサーバーに必要であり、そこには一定範囲の最近の履歴が保管されている必要があります。保管する範囲は、`online_delete`パラメーターに使用可能な状態で維持するレジャーの数によって定義されます。デフォルトの設定では、最新のレジャー2000個が保管されます。
- レジャーストアーに2^15個以上のレジャー32768が保持されている場合は、レジャーストアーからシャードストアーへ最近の履歴のグループを効率的にインポートできます。 - レジャーストアーに2<sup>15</sup>個以上のレジャー32768が保持されている場合は、レジャーストアーからシャードストアーへ最近の履歴のグループを効率的にインポートできます。
- 履歴<sup></sup>シャードストアー(`[shard_db]`スタンザにより定義される)は、履歴シャードを保管する場合にのみ必要です。履歴シャードを保管しないサーバーではこの構成スタンザを省略する必要があります。履歴シャードストアーのサイズは`max_size_gb`パラメーターでギガバイト単位で定義されます。サーバーは完全なシャードを保管するため、この容量を最大限利用します。 - 履歴シャードストアー(`[shard_db]`スタンザにより定義される)は、履歴シャードを保管する場合にのみ必要です。履歴シャードを保管しないサーバーではこの構成スタンザを省略する必要があります。履歴シャードストアーのサイズは`max_size_gb`パラメーターでギガバイト単位で定義されます。サーバーは完全なシャードを保管するため、この容量を最大限利用します。履歴シャードストアーは、 _必ず_ ソリッドステートディスクまたは同様の高速なメディアに保管します。従来の回転式ハードディスクでは不十分です。
- シャードには2^14個のレジャー16384が含まれており、シャードの経過期間に応じて約200 MB4 GBを専有します。古いシャードほどXRP Ledgerでのアクティビティが少ないため、サイズが小さくなります。 - シャードには2<sup>14</sup>個のレジャー16384が含まれており、シャードの経過期間に応じて約200MB4GBを専有します。古いシャードほどXRP Ledgerでのアクティビティが少ないため、サイズが小さくなります。
- 履歴シャードストアーとレジャーストアーはファイルパスを分けて保管する _必要があります_ 。必要に応じて、レジャーストアーと履歴ストアーをそれぞれ別のディスクやパーティションに配置するように設定できます。 - 履歴シャードストアーとレジャーストアーはファイルパスを分けて保管する _必要があります_ 。必要に応じて、レジャーストアーと履歴ストアーをそれぞれ別のディスクやパーティションに配置するように設定できます。
- 完全なレジャー履歴をレジャーストアーと履歴シャードストアーの両方に保持できますが、冗長な処理となります。 - 完全なレジャー履歴をレジャーストアーと履歴シャードストアーの両方に保持できますが、冗長な処理となります。
- シャードの取得にかかる時間、`rippled`サーバーに必要なファイルハンドル数、およびメモリーキャッシュ使用率は、シャードのサイズの影響を直接受けます。 - シャードの取得にかかる時間、`rippled`サーバーに必要なファイルハンドル数、およびメモリーキャッシュ使用率は、シャードのサイズの影響を直接受けます。
@@ -24,7 +24,7 @@
{% include '_snippets/conf-file-location.md' %}<!--_ --> {% include '_snippets/conf-file-location.md' %}<!--_ -->
以下のスニペットに、`[shard_db]` スタンザの例を示します。 以下のスニペットに、`[shard_db]`スタンザの例を示します。
``` ```
[shard_db] [shard_db]
@@ -33,9 +33,9 @@ path=/var/lib/rippled/db/shards/nudb
max_size_gb=50 max_size_gb=50
``` ```
**ヒント:** シャードストアーにはNuDB`type=NuDB`を使用することが推奨されます。NuDBはRocksDBに比べ、シャードあたりの使用ファイルハンドル数が少なくなります。RocksDBは、保管するデータのサイズに応じて拡張するメモリーを使用するため、大量のメモリーオーバーヘッドが必要になる可能性があります。ただし、NuDBはSSDドライブで使用するように設計されており、回転型ディスクでは機能しません。 <!-- NOTE: out of date; needs to be re-translated. NuDB is required as of v1.3.1. --> `type`フィールドは省略できます。省略しない場合は、`NuDB`である _必要があります_ 。[新規: rippled 1.3.1][]
**注意:** 履歴シャーディングを有効にした後にシャードストアーのデータベースタイプを変更する場合は、パスを変更するか、または設定されているパスから既存のデータを削除する必要があります。`rippled`がシャードストアーパスで不適切なデータを検出すると、[起動できない](server-wont-start.html)可能性があります。 **注意:** `rippled`がシャードストアーパスで不適切なデータを検出すると、[起動できない](server-wont-start.html)可能性があります。シャードストアーには新しいフォルダーを使用する必要があります。以前にRocksDBシャードストアー`rippled` 1.2.x以前を使用していた場合は、別のパスを使用するか、RocksDBシャードデータを削除します。
詳細は、[rippled.cfgの設定例](https://github.com/ripple/rippled/blob/master/cfg/rippled-example.cfg)の`[shard_db]`の例を参照してください。 詳細は、[rippled.cfgの設定例](https://github.com/ripple/rippled/blob/master/cfg/rippled-example.cfg)の`[shard_db]`の例を参照してください。
@@ -51,4 +51,26 @@ systemctl restart rippled
このフォルダーには、サーバーに保管されている各シャードのフォルダーが番号付きで保存されています。常に、最大で1つのフォルダーに、未完了であることを示す`control.txt`ファイルが保存されています。 このフォルダーには、サーバーに保管されている各シャードのフォルダーが番号付きで保存されています。常に、最大で1つのフォルダーに、未完了であることを示す`control.txt`ファイルが保存されています。
<!-- TODO: add download_shard and crawl_shards commands when they get added. --> [download_shardメソッド][]を使用して、サーバーにアーカイブファイルからシャードをダウンロードしてインポートするように指示できます。
サーバーとそのピアが使用できるシャードのリストを表示するには、[crawl_shardsメソッド][]か[ピアクローラー](peer-crawler.html)を使用します。
## 関連項目
- **コンセプト:**
- [レジャー履歴](ledger-history.html)
- [オンライン削除](online-deletion.html)
- **チュートリアル:**
- [オンライン削除の設定](configure-online-deletion.html)
- [ピアクローラーの設定](configure-the-peer-crawler.html)
- [容量の計画](capacity-planning.html)
- **リファレンス:**
- [download_shardメソッド][]
- [crawl_shardsメソッド][]
- [レジャーデータフォーマット](ledger-data-formats.html)
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,54 +1,112 @@
# XRP Test Netへのrippledの接続 # XRPL Altnetへのrippledの接続
Rippleは、XRP Ledgerのテストプラットフォームを提供するため[XRP Test Network](https://ripple.com/build/xrp-test-net/)を開発しました。XRP Test Netの資金は実際の資金ではなく、テスト専用の資金です。本番環境のXRP Ledger Networkに接続する前に、`rippled`サーバーをXRP Test Netに接続して、`rippled`の機能をテストして理解できます。また、XRP Test Netを使用して、作成したコードが`rippled`と正しくやり取りすることを検証できます。 Rippleは[代替となるテスト用および開発用ネットワーク](parallel-networks.html)を作成しており、開発者が最新のXRP Ledgerの非本番バージョンTestnetでアプリケーションをテストしたり、最新のベータバージョンDevnetで機能をテストして実験したりできるようにしています。 **これらのネットワークで使用する資金は実際の資金ではなく、テスト専用の資金です。** TestnetまたはDevnetの[`rippled`サーバー](the-rippled-server.html)に接続できます。
**注記:** XRP Test Netのレジャーと残高は定期的にリセットされます。 **注記:** XRP TestnetとDevnetのレジャーと残高は定期的にリセットされます。
`rippled`サーバーをXRP Test Netに接続するには、以下の構成を設定します。 `rippled`サーバーをXRP TestnetまたはDevnetに接続するには、以下の構成を設定します。
1. `rippled.cfg`ファイルで以下の手順に従います。 1. `rippled.cfg`ファイルで以下の手順に従います。
a. 以下のセクションのコメントを解除します。 a. [Testnet](xrp-testnet-faucet.html)に接続するには、以下のセクションのコメントを解除し、次のように追加します。
[ips] [ips]
r.altnet.rippletest.net 51235 s.altnet.rippletest.net 51235
b. 以下のセクションを次のようにコメントアウトします。 b. [Devnet](xrp-testnet-faucet.html)に接続するには、以下のセクションのコメントを解除し、次のように追加します。
[ips]
s.devnet.rippletest.net 51235
c. 以下のセクションを次のようにコメントアウトします。
# [ips] # [ips]
# r.ripple.com 51235 # r.ripple.com 51235
2. `validators.txt`ファイルで以下の手順に従います。 2. `validators.txt`ファイルで以下の手順に従います。
2a. Altnetに接続するための変更
a. 以下のセクションのコメントを解除し、Altnetに接続するようにします。
[validator_list_sites]
https://vl.altnet.rippletest.net
[validator_list_keys]
ED264807102805220DA0F312E71FC2C69E1552C9C5790F6C25E3729DEB573D5860
b. 以下のセクションを次のようにコメントアウトします。
# [validator_list_sites]
# https://vl.ripple.com
#
# [validator_list_keys]
# ED2677ABFFD1B33AC6FBC3062B71F1E8397C1505E1C42C64D11AD1B28FF73F4734
2b. Devnetに接続するための変更
a. 以下のセクションをコメントアウトします。
# [validator_list_sites]
# https://vl.altnet.rippletest.net
# [validator_list_keys]
# ED264807102805220DA0F312E71FC2C69E1552C9C5790F6C25E3729DEB573D5860
# [validator_list_sites]
# https://vl.ripple.com
#
# [validator_list_keys]
# ED2677ABFFD1B33AC6FBC3062B71F1E8397C1505E1C42C64D11AD1B28FF73F4734
b. 次の信頼できるバリデータをvalidator.txtファイルに追加します。
# Hard-coded List of Devnet Validators
[validators]
n9Mo4QVGnMrRN9jhAxdUFxwvyM4aeE1RvCuEGvMYt31hPspb1E2c
n9MEwP4LSSikUnhZJNQVQxoMCgoRrGm6GGbG46AumH2KrRrdmr6B
n9M1pogKUmueZ2r3E3JnZyM3g6AxkxWPr8Vr3zWtuRLqB7bHETFD
n9MX7LbfHvPkFYgGrJmCyLh8Reu38wsnnxA4TKhxGTZBuxRz3w1U
n94aw2fof4xxd8g3swN2qJCmooHdGv1ajY8Ae42T77nAQhZeYGdd
n9LiE1gpUGws1kFGKCM9rVFNYPVS4QziwkQn281EFXX7TViCp2RC
n9Jq9w1R8UrvV1u2SQqGhSXLroeWNmPNc3AVszRXhpUr1fmbLyhS
a. 以下のセクションのコメントを解除します。
[validator_list_sites]
https://vl.altnet.rippletest.net
[validator_list_keys]
ED264807102805220DA0F312E71FC2C69E1552C9C5790F6C25E3729DEB573D5860
b. 以下のセクションを次のようにコメントアウトします。
# [validator_list_sites]
# https://vl.ripple.com
#
# [validator_list_keys]
# ED2677ABFFD1B33AC6FBC3062B71F1E8397C1505E1C42C64D11AD1B28FF73F4734
3. `rippled`を再起動します。 3. `rippled`を再起動します。
4. `rippled`がXRP Test Netに接続していることを確認するため、サーバーで[server_infoメソッド][]を使用して、その結果をTest Net のパブリックサーバーの結果と比較します。両方のサーバーで`validated_ledger`オブジェクトの`seq`フィールドが同一である必要があります確認中にこの数が変化した場合は、12の差が生じる可能性があります 4. `rippled`がXRP TestnetまたはDevnetに接続していることを確認するため、サーバーで[server_infoメソッド][]を使用して、その結果をTestnetまたはDevnetの公開サーバーの結果と比較します。両方のサーバーで`validated_ledger`オブジェクトの`seq`フィールドが同一である必要があります確認中にこの数が変化した場合は、12の差が生じる可能性があります
以下のコマンドは、`s.altnet.rippletest.net` にあるTest Net サーバーの最新の検証済みレジャーをチェックします。 以下のコマンドは、`s.altnet.rippletest.net`にあるTestnetサーバーの最新の検証済みレジャーをチェックします。
$ ./rippled --rpc_ip 34.210.87.206:51234 server_info | grep seq $ ./rippled --rpc_ip 34.210.87.206:51234 server_info | grep seq
以下のコマンドは、ローカルの `rippled` の最新検証済みレジャーシーケンスをチェックします。 以下のコマンドは、`s.devnet.rippletest.net`にあるDevnetサーバーの最新検証済みレジャーをチェックします。
$ ./rippled --rpc_ip 34.83.125.234:51234 server_info | grep seq
以下のコマンドは、ローカルの`rippled`の最新検証済みレジャーインデックスをチェックします。
$ ./rippled server_info | grep seq $ ./rippled server_info | grep seq
## 関連項目
- **ツール:**
- [XRP Faucet](xrp-testnet-faucet.html)
- [WebSocket APIツール](websocket-api-tool.html) - 接続オプションで「Testnet公開サーバー」を選択します。
- **コンセプト:**
- [並列ネットワーク](parallel-networks.html)
- [コンセンサスについて](intro-to-consensus.html)
- **チュートリアル:**
- [バリデータとしてのrippledの実行](run-rippled-as-a-validator.html)
- [スタンドアロンモードでの`rippled`のオフラインテスト](use-stand-alone-mode.html)
- `rippled`の[トラブルシューティング](troubleshoot-the-rippled-server.html)
- **リファレンス:**
- [server_infoメソッド][]
<!--{# common link defs #}--> <!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %} {% include '_snippets/rippled-api-links.md' %}

View File

@@ -1,12 +1,12 @@
# バリデータとしてのrippledの実行 # バリデータとしてのrippledの実行
バリデータモードで実行されている`rippled`サーバーは、ストックサーバーが実行するあらゆる処理を実行します。 [バリデータモード](rippled-server-modes.html)で実行されている[`rippled`サーバー](the-rippled-server.html)は、ストックサーバーが実行するあらゆる処理を実行します。
- ピアのネットワークへの接続 - [ピアのネットワーク](consensus-network.html)への接続
- 暗号署名されたトランザクションの中継 - 暗号署名された[トランザクション](transaction-basics.html)の中継
- 共有グローバル台帳全体のローカルコピーの維持 - 完全な共有グローバル[レジャー](ledgers.html)のローカルコピーの維持
バリデータが _特異である_ のは、検証メッセージも発行するという点です。これらのメッセージは、[コンセンサスプロセス](consensus-principles-and-rules.html#コンセンサスの仕組み)の進行中、XRP Ledgerネットワークによる評価の対象となる候補のトランザクションです。 バリデータが _特異である_ のは、検証メッセージも発行するという点です。これらのメッセージは、[コンセンサスプロセス](consensus-principles-and-rules.html#コンセンサスの仕組み)の進行中、XRP Ledgerネットワークによる評価の対象となる候補のトランザクションです。
@@ -21,20 +21,20 @@
バリデータ(サーバー)が以下の特質を常に備えるよう努めます。優れたバリデータであることは、`rippled`サーバーの運用者や[https://vl.ripple.com](https://vl.ripple.com)などのバリデータリスト発行者が、バリデータを彼らのUNLに追加する際に、バリデータを信頼する上で後押しになります。 バリデータ(サーバー)が以下の特質を常に備えるよう努めます。優れたバリデータであることは、`rippled`サーバーの運用者や[https://vl.ripple.com](https://vl.ripple.com)などのバリデータリスト発行者が、バリデータを彼らのUNLに追加する際に、バリデータを信頼する上で後押しになります。
- **可用性** - **可用性**
優れたバリデータは、常に稼働し、提案されるあらゆるレジャーについて検証投票を送信します。100%のアップタイムを実現するよう努めてください。 優れたバリデータは、常に稼働し、提案されるあらゆるレジャーについて検証投票を送信します。100%のアップタイムを実現するよう努めてください。
- **合意** - **合意**
優れたバリデータの投票は、可能な限り高い頻度で、コンセンサスプロセスの結果と合致します。これに該当しない場合は、バリデータのソフトウェアが最新のものではないか、不具合があるか、意図的な偏りがあることを示唆している可能性があります。常に[最新の`rippled`リリース](https://github.com/ripple/rippled/tree/master)を、修正を加えることなく実行します。新規リリースについて知るために、[`rippled`のリリースを確認](https://github.com/ripple/rippled/releases)してください。 優れたバリデータの投票は、可能な限り高い頻度で、コンセンサスプロセスの結果と合致します。これに該当しない場合は、バリデータのソフトウェアが最新のものではないか、不具合があるか、意図的な偏りがあることを示唆している可能性があります。常に[最新の`rippled`リリース](https://github.com/ripple/rippled/tree/master)を、修正を加えることなく実行します。新規リリースについて知るために、[`rippled`のリリースを確認](https://github.com/ripple/rippled/releases)してください。
- **適時の投票** - **適時の投票**
優れたバリデータの投票は、コンセンサスラウンドが終了する前に、素早く届きます。適時の投票を維持するには、バリデータが推奨される[システム要件](system-requirements.html)を満たしていることを確認してください。これには、高速のインターネット接続が含まれます。 優れたバリデータの投票は、コンセンサスラウンドが終了する前に、素早く届きます。適時の投票を維持するには、バリデータが推奨される[システム要件](system-requirements.html)を満たしていることを確認してください。これには、高速のインターネット接続が含まれます。
- **身元の確さ** - **身元の確さ**
優れたバリデータには、身元が明確な所有者が存在します。[ドメイン検証](#6-ドメイン検証の提供)を提供することは、その第一歩になります。XRP LedgerネットワークのUNLに、多くの法的な管轄域および地域のさまざまな所有者によって運営されているバリデータが含まれていると理想的です。結果として、信頼できるバリデータの公正な運用が地域特有の事象によって損なわれるおそれが低減されます。 優れたバリデータには、身元が明確な所有者が存在します。[ドメイン検証](#6-ドメイン検証の提供)を提供することは、その第一歩になります。XRP LedgerネットワークのUNLに、多くの法的な管轄域および地域のさまざまな所有者によって運営されているバリデータが含まれていると理想的です。結果として、信頼できるバリデータの公正な運用が地域特有の事象によって損なわれるおそれが低減されます。
Ripple社は、推奨される一連のバリデータを記載した[バリデータリスト](https://github.com/ripple/rippled/blob/develop/cfg/validators-example.txt)を公開しています。本番環境のサーバーでは、このリストを使用することを強くお勧めします。 Ripple社は、推奨される一連のバリデータを記載した[バリデータリスト](https://github.com/ripple/rippled/blob/develop/cfg/validators-example.txt)を公開しています。本番環境のサーバーでは、このリストを使用することを強くお勧めします。
@@ -42,7 +42,7 @@ Ripple社は、推奨される一連のバリデータを記載した[バリデ
## 2. `rippled`サーバーのインストール ## 2. `rippled`サーバーのインストール
詳細については、[`rippled`のインストール](install-rippled.html)を参照してください。 詳細は、[`rippled`のインストール](install-rippled.html)を参照してください。
@@ -50,42 +50,42 @@ Ripple社は、推奨される一連のバリデータを記載した[バリデ
`rippled`サーバーで検証を有効にすることは、サーバーの`rippled.cfg`ファイルにあるバリデータトークンを提供することを意味します。バリデータキーとトークンを安全に生成して管理するために、`validator-keys`ツール(`rippled` RPMに含まれるを使用することをお勧めします。 `rippled`サーバーで検証を有効にすることは、サーバーの`rippled.cfg`ファイルにあるバリデータトークンを提供することを意味します。バリデータキーとトークンを安全に生成して管理するために、`validator-keys`ツール(`rippled` RPMに含まれるを使用することをお勧めします。
バリデータ(サーバー)**以外の** 場所で、以下の手順に従います。 バリデータ(サーバー)**以外の**場所で、以下の手順に従います。
1. `validator-keys`ツールを`rippled` RPMを通じてまだインストールしていない場合は、手動でビルドして実行します。 1. `validator-keys`ツールを`rippled` RPMを通じてまだインストールしていない場合は、手動でビルドして実行します。
`validator-keys`ツールを手動でビルドして実行する方法については、[validator-keys-tool](https://github.com/ripple/validator-keys-tool)を参照してください。 `validator-keys`ツールを手動でビルドして実行する方法については、[validator-keys-tool](https://github.com/ripple/validator-keys-tool)を参照してください。
2. `create_keys`コマンドを使用して、バリデータキーペアを生成します。 2. `create_keys`コマンドを使用して、バリデータキーペアを生成します。
$ validator-keys create_keys $ validator-keys create_keys
Ubuntuでの出力の例: Ubuntuでの出力の例:
Validator keys stored in /home/my-user/.ripple/validator-keys.json Validator keys stored in /home/my-user/.ripple/validator-keys.json
This file should be stored securely and not shared. This file should be stored securely and not shared.
macOSでの出力の例: macOSでの出力の例:
Validator keys stored in /Users/my-user/.ripple/validator-keys.json Validator keys stored in /Users/my-user/.ripple/validator-keys.json
This file should be stored securely and not shared. This file should be stored securely and not shared.
**警告:** 生成した`validator-keys.json`キーファイルは、暗号化されたUSBフラッシュドライブなど、安全かつ回復可能なオフラインの場所に保管してください。内容には修正を加えないでください。特に、キーの使用場所となるバリデータにキーファイルを保存しないようにします。バリデータの`secret_key`が悪用された場合は、ただちに[キーを破棄](https://github.com/ripple/validator-keys-tool/blob/master/doc/validator-keys-tool-guide.md#key-revocation)します。 **警告:** 生成した`validator-keys.json`キーファイルは、暗号化されたUSBフラッシュドライブなど、安全かつ回復可能なオフラインの場所に保管してください。内容には修正を加えないでください。特に、キーの使用場所となるバリデータにキーファイルを保存しないようにします。バリデータの`secret_key`が悪用された場合は、ただちに[キーを破棄](https://github.com/ripple/validator-keys-tool/blob/master/doc/validator-keys-tool-guide.md#key-revocation)します。
`validator-keys`ツールおよびツールで生成されるキーペアの詳細は、[Validator Keys Tool Guide](https://github.com/ripple/validator-keys-tool/blob/master/doc/validator-keys-tool-guide.md)を参照してください。 `validator-keys`ツールおよびツールで生成されるキーペアの詳細は、[Validator Keys Tool Guide](https://github.com/ripple/validator-keys-tool/blob/master/doc/validator-keys-tool-guide.md)を参照してください。
3. `create_token`コマンドを使用して、バリデータトークンを生成します。 3. `create_token`コマンドを使用して、バリデータトークンを生成します。
$ validator-keys create_token --keyfile /PATH/TO/YOUR/validator-keys.json $ validator-keys create_token --keyfile /PATH/TO/YOUR/validator-keys.json
出力の例: 出力の例:
Update rippled.cfg file with these values: Update rippled.cfg file with these values:
# validator public key: nHUtNnLVx7odrz5dnfb2xpIgbEeJPbzJWfdicSkGyVw1eE5GpjQr # validator public key: nHUtNnLVx7odrz5dnfb2xpIgbEeJPbzJWfdicSkGyVw1eE5GpjQr
[validator_token] [validator_token]
eyJ2YWxpZGF0aW9uX3NlY3J|dF9rZXkiOiI5ZWQ0NWY4NjYyNDFjYzE4YTI3NDdiNT eyJ2YWxpZGF0aW9uX3NlY3J|dF9rZXkiOiI5ZWQ0NWY4NjYyNDFjYzE4YTI3NDdiNT
QzODdjMDYyNTkwNzk3MmY0ZTcxOTAyMzFmYWE5Mzc0NTdmYT|kYWY2IiwibWFuaWZl QzODdjMDYyNTkwNzk3MmY0ZTcxOTAyMzFmYWE5Mzc0NTdmYT|kYWY2IiwibWFuaWZl
@@ -99,100 +99,109 @@ Ripple社は、推奨される一連のバリデータを記載した[バリデ
バリデータ(サーバー)で、以下の手順に従います。 バリデータ(サーバー)で、以下の手順に従います。
1. `[validator_token]`とその値を、バリデータの`rippled.cfg`ファイルに追加します。 1. `[validator_token]`とその値を、バリデータの`rippled.cfg`ファイルに追加します。
以前に、`validator-keys`ツールを使用せずにバリデータを設定している場合は、`[validation_seed]`とその値を`rippled.cfg`ファイルから削除します。これにより、バリデータの公開鍵が変更されます。 以前に、`validator-keys`ツールを使用せずにバリデータを設定している場合は、`[validation_seed]`とその値を`rippled.cfg`ファイルから削除します。これにより、バリデータの公開鍵が変更されます。
2. `rippled`を再起動します。 2. `rippled`を再起動します。
$ sudo systemctl restart rippled.service $ sudo systemctl restart rippled.service
3. `server_info`コマンドを使用してバリデータの情報を取得し、バリデータとして実行されていることを確認します。 3. `server_info`コマンドを使用してバリデータの情報を取得し、バリデータとして実行されていることを確認します。
$ rippled server_info $ rippled server_info
- 応答に含まれている`pubkey_validator`の値は、バリデータで使用するために生成した`validator-keys.json`ファイルの`public_key`と一致している必要があります。
- `server_state`の値は、 _**proposing**_ にする必要があります。
- 応答に含まれている`pubkey_validator`の値は、バリデータで使用するために生成した`validator-keys.json`ファイルの`public_key`と一致している必要があります。 **セキュリティのヒント:** `rippled.cfg`ファイルに対する権限をより制限的なものに変更します。Linuxでは、`0600`にすることを推奨します。`chmod 0600 rippled.cfg`を使用して変更できます。
- `server_state`の値は、 _**proposing**_ にする必要があります。
## 4. ネットワークへの接続 ## 4. ネットワークへの接続
バリデータのオペレーターが果たすべき重要な責任の1つは、信頼できる安全な接続によってバリデータXRP Ledgerネットワークに接続されるようにすることです。ネットワーク上の潜在的に悪意のあるピアに無作為に接続するのではなく、以下のいずれかの方法でネットワークに接続するようにバリデータに指示できます このセクションでは、バリデータXRP Ledgerネットワークに接続するために使用できる3種類の構成について説明します。ユースケースに最適な構成を使用してください
- [公開ハブ](#公開ハブを使用した接続) - [検出されたピア](#検出されたピアを使用した接続): ピアツーピアネットワーク内の任意のサーバーに接続します。
- [プロキシ](#プロキシを使用した接続)
これらのいずれかの構成を使用すると、[DDoS](https://en.wikipedia.org/wiki/Denial-of-service_attack)攻撃からバリデータを保護するとともに、ネットワークへの信頼できる接続をバリデータに提供する上で役立ちます。 - [プロキシ](#プロキシを使用した接続): ストック`rippled`サーバーを、バリデータとピアツーピアネットワークの他の部分との間のプロキシとして実行します。
- [公開ハブ](#公開ハブを使用した接続): 評価の高い特定の公開サーバーにのみ接続します。
これらのアプローチの違いについては、[ピア接続設定のメリットとデメリット](peer-protocol.html#ピア接続設定のメリットとデメリット)を参照してください。
### 公開ハブを使用した接続 ### 検出されたピアを使用した接続
この構成では、ネットワークに接続している1つ以上の公開ハブにバリデータを接続します。適切に運用されている公開ハブには、以下の特徴があります。 この構成では、[検出されたピア](peer-protocol.html#ピアの検出)を使用してバリデータをXRP Ledgerネットワークに接続します。これは`rippled`サーバーのデフォルトの動作です。
- 十分な帯域幅 _**検出されたピアを使用してバリデータをXRP Ledgerネットワークに接続するには、**_ バリデータの`rippled.cfg`ファイルで`[peer_private]`スタンザを省略するか、それを`0`に設定します。この構成の[サンプルのrippled.cfgファイル](https://github.com/ripple/rippled/blob/develop/cfg/rippled-example.cfg)が提供されています
- 多数の信頼できるピアとの接続。
- メッセージを確実に中継する能力。
公開ハブに接続することの利点は、安全かつ信頼できる多くのネットワーク接続にアクセスしやすいことです。このような接続は、バリデータの健全性の維持に役立ちます。
公開ハブを使用してバリデータをネットワークに接続するには、バリデータの`rippled.cfg`ファイルで以下の構成を設定します。
1. 以下の`[ips_fixed]`スタンザを記述します。2つの値`r.ripple.com 51235``zaphod.alloy.ee 51235`が公開ハブです。このスタンザは、これらの公開ハブとのピア接続を常に維持するよう`rippled`に指示します。
[ips_fixed]
r.ripple.com 51235
zaphod.alloy.ee 51235
他の`rippled`サーバーのIPアドレスをここに記述することもできますが、それらのサーバーに対して以下の事項を期待できる場合に _**限ります**_
- メッセージを検閲することなく中継する。
- オンライン状態を常に維持する。
- サーバーに対するDDoS攻撃を実行しない。
- サーバーをクラッシュさせようとしない。
- 未知の相手にバリデータのIPアドレスを公開しない。
2. 以下の`[peer_private]`スタンザを記述し、`1`に設定します。この設定を有効にすると、バリデータのピアに対して、バリデータのIPアドレスをブロードキャストしないよう指示することになります。また、バリデータに対して、`[ips_fixed]`スタンザで設定されているピアにのみ接続するよう指示することになります。これにより、既知の信頼できるピア`rippled`サーバーに対してのみ、バリデータが接続を確立し、IPアドレスを共有することが保証されます。
**警告:** バリデータのIPアドレスを、その他の方法で公開していないことを確認してください。
[peer_private]
1
`[peer_private]`が有効になっている場合、`rippled`は、`[ips]`スタンザで指定されている接続をすべて無視します。現在`[ips]`スタンザにあるIPアドレスに接続する必要がある場合は、代わりに`[ips_fixed]`スタンザに記述します。ただし、それらのIPアドレスに対して、ステップ1で説明した挙動を期待できる場合に _**限ります**_
### プロキシを使用した接続 ### プロキシを使用した接続
この構成では、バリデータと発着信ネットワークトラフィックの間でプロキシとして使用するストック`rippled`サーバーを実行します。 この構成は、自社で運用するストック`rippled`サーバーを通じてバリデータをネットワークに接続します。これらのプロキシサーバーは、バリデータと発着信ネットワークトラフィックの間に設置します。
**注記:** これらのサーバーはプロキシとして動作しますが、HTTP(S)トラフィック用のWebプロキシではありません。 _**プロキシを使用してバリデータをXRP Ledgerネットワークに接続するには、次の手順を実行します。**_
この設定の利点は、自社で運用するプロキシサーバーを通じて、安全かつ信頼できる多くのネットワークへの接続の冗長性やアクセス性が高まることです。このような接続は、バリデータの健全性の維持に役立ちます 1. ストック`rippled`サーバーを設置します。詳細は、[rippledのインストール](install-rippled.html)を参照してください
2. バリデータとストック`rippled`サーバーを設定して、[クラスター](cluster-rippled-servers.html)内で実行します。
3. バリデータの`rippled.cfg`ファイルで、`[peer_private]``1`に設定します。そうすることで、バリデータのIPアドレスが転送されないようにします。詳細は、[プライベートピア](peer-protocol.html#プライベートピア)を参照してください。また、これによりクラスター内でバリデータを実行するよう`[ips_fixed]`スタンザで定義したサーバー以外のサーバーに、バリデータが接続しないようになります。
**警告:** バリデータのIPアドレスを、その他の方法で公開していないことを確認してください。
4. 以下のトラフィックのみを許可するように、バリデータのホストマシンのファイアウォールを構成します。
- 着信トラフィック: 構成したクラスター内にあるストック`rippled`サーバーのIPアドレスが発信元である場合のみ
- 発信トラフィック: 構成したクラスター内にあるストック`rippled`サーバーのIPアドレスおよびポート443経由の<https://vl.ripple.com>が送信先である場合のみ
5. `rippled`を再起動します。
$ sudo systemctl restart rippled.service
6. いずれかのストック`rippled`サーバーにある[ピアクローラー](peer-crawler.html)エンドポイントを使用します。応答には、バリデータが含まれていないはずです。これにより、バリデータの`[peer_private]`構成が機能していることが確認されます。バリデータの`[peer_private]`を有効にした場合の効果の1つは、バリデータのピアによって、ピアクローラーの結果にバリデータが含まれないことです。
$ curl --insecure https://STOCK_SERVER_IP_ADDRESS_HERE:51235/crawl | python3 -m json.tool
<!-- { TODO: Future: add a recommended network architecture diagram to represent the proxy, clustering, and firewall setup: https://ripplelabs.atlassian.net/browse/DOC-2046 }--> <!-- { TODO: Future: add a recommended network architecture diagram to represent the proxy, clustering, and firewall setup: https://ripplelabs.atlassian.net/browse/DOC-2046 }-->
1. `rippled`サーバーで[検証を有効に](#3-rippledサーバーで検証を有効化)します。
2. ストック`rippled`サーバーを設置します。詳細については、[rippledのインストール](install-rippled.html)を参照してください。 ### 公開ハブを使用した接続
3. バリデータとストック`rippled`サーバーを設定して、[クラスター](cluster-rippled-servers.html)内で実行します。 この構成では、2つの[公開ハブ](rippled-server-modes.html#公開ハブ)を使用してバリデータをネットワークに接続します。この構成は、[自社で運用しているプロキシを使用した接続](#プロキシを使用した接続)と似ていますが、公開ハブを通じて接続します。
4. バリデータの`rippled.cfg`ファイルで、`[peer_private]``1`に設定してバリデータのIPアドレスが転送されないようにします。詳細については、[プライベートピア](peer-protocol.html#プライベートピア)を参照してください。 _**公開ハブを使用してバリデータをネットワークに接続するには、次の手順を実行します。**_
**警告:** バリデータのIPアドレスを、その他の方法で公開していないことを確認してください 1. バリデータの`rippled.cfg`ファイルに、次の`[ips_fixed]`スタンザを含めます。2つの値`r.ripple.com 51235``zaphod.alloy.ee 51235`がデフォルトの公開ハブです。このスタンザは、これらの公開ハブとのピア接続を常に維持するよう`rippled`に指示します
[ips_fixed]
r.ripple.com 51235
zaphod.alloy.ee 51235
**注意:** この構成では、デフォルトの公開ハブを使用してバリデータをネットワークに接続します。これらは _デフォルト_ の公開ハブであるため、ビジー状態になってバリデータにネットワークへの接続を提供できない場合があります。この問題を避けるために、接続する公開ハブの数を増やすか、デフォルトでない公開ハブに接続するようにします。
他の`rippled`サーバーのIPアドレスをここに記述することもできますが、それらのサーバーに対して以下の事項を期待できる場合に _**限ります**_
- メッセージを検閲することなく中継する。
- オンライン状態を常に維持する。
- サーバーに対するDDoS攻撃を実行しない。
- サーバーをクラッシュさせようとしない。
- 未知の相手にバリデータのIPアドレスを公開しない。
5. 以下のトラフィックのみを許可するように、バリデータのホストマシンのファイアウォールを構成します。 2. また、バリデータの`rippled.cfg`ファイルに、次の`[peer_private]`スタンザを含めて、それを`1`に設定します。それにより、バリデータのピアに対して、バリデータのIPアドレスをブロードキャストしないよう指示することになります。また、バリデータに対して、`[ips_fixed]`スタンザで設定されているピアにのみ接続するよう指示することになります。これにより、既知の信頼できるピア`rippled`サーバーに対してのみ、バリデータが接続を確立し、IPアドレスを共有することが保証されます。
- 着信トラフィック: 構成したクラスター内にあるストック`rippled`サーバーのIPアドレスが発信元である場合のみ [peer_private]
1
- 発信トラフィック: 構成したクラスター内にあるストック`rippled`サーバーのIPアドレスおよびポート443経由の<https://vl.ripple.com>が送信先である場合のみ
**警告:** バリデータのIPアドレスを、その他の方法で公開していないことを確認してください。
6. `rippled`を再起動します。
`[peer_private]`が有効になっている場合、`rippled`は、`[ips]`スタンザで指定されている接続をすべて無視します。現在`[ips]`スタンザにあるIPアドレスに接続する必要がある場合は、代わりにそれを`[ips_fixed]`スタンザに記述します。ただし、それらのIPアドレスに対して、ステップ1で説明した確実な挙動を期待できる場合に _**限ります**_
3. `rippled`を再起動します。
$ sudo systemctl restart rippled.service $ sudo systemctl restart rippled.service
7. いずれかのストック`rippled`サーバーにある[ピアクローラー](peer-crawler.html)エンドポイントを使用します。応答には、バリデータが含まれていないはずです。これにより、バリデータの`[peer_private]`構成が機能していることが確認されます。バリデータの`[peer_private]`を有効にした場合の効果の1つは、バリデータのピアによって、ピアクローラーの結果にバリデータが含まれないことです。
## 5. ネットワーク接続の確認 ## 5. ネットワーク接続の確認
@@ -200,14 +209,14 @@ Ripple社は、推奨される一連のバリデータを記載した[バリデ
ここでは、バリデータがXRP Ledgerネットワークへの健全な接続を保持していることを検証する方法をいくつか紹介します。 ここでは、バリデータがXRP Ledgerネットワークへの健全な接続を保持していることを検証する方法をいくつか紹介します。
- [`peers`](peers.html)コマンドを使用して、バリデータに接続しているすべての`rippled`サーバーのリストを取得します。`peers`の配列が`null`である場合、ネットワークへの健全な接続が存在していません。このドキュメントの手順に従ってバリデータを設置した場合、`peers`の配列には、`[ips_fixed]`スタンザで定義されているピアの数と同数のオブジェクトが含まれています。 - [`peers`](peers.html)コマンドを使用して、バリデータに接続しているすべての`rippled`サーバーのリストを取得します。`peers`の配列が`null`である場合、ネットワークへの健全な接続が存在していません。このドキュメントの手順に従ってバリデータを設置した場合、`peers`の配列には、`[ips_fixed]`スタンザで定義されているピアの数と同数のオブジェクトが含まれています。
公開ハブを`[ips_fixed]`スタンザに記述した場合、そのハブがビジーになっているときは、バリデータの接続が拒否されることがあります。この場合、接続の数は、`[ips_fixed]`スタンザで設定した数よりも最終的に少なくなることがあります。初めて拒否された場合、バリデータは接続を再試行します。 公開ハブを`[ips_fixed]`スタンザに記述した場合、そのハブがビジーになっているときは、バリデータの接続が拒否されることがあります。この場合、接続の数は、`[ips_fixed]`スタンザで設定した数よりも最終的に少なくなることがあります。初めて拒否された場合、バリデータは接続を再試行します。
ネットワークへの安全かつ信頼できる接続を維持することが困難であり、公開ハブまたはプロキシを使用して接続を設定していない場合、[4. ネットワークへの接続](#4-ネットワークへの接続)を参照してください。このセクションで説明されているいずれかの方法は、バリデータがネットワークへの健全な接続を維持する上で有用となる可能性があります。 ネットワークへの安全かつ信頼できる接続を維持することが困難であり、公開ハブまたはプロキシを使用して接続を設定していない場合、[4. ネットワークへの接続](#4-ネットワークへの接続)を参照してください。このセクションで説明されているいずれかの方法は、バリデータがネットワークへの健全な接続を維持する上で有用となる可能性があります。
- [`server_info`](server_info.html)コマンドを使用して、バリデータに関するいくつかの基本情報を取得します。`server_state`は、`proposing`に設定されているはずです。`full`または`validating`に設定されている場合もありますが、`proposing`に移行するまでの数分間に限られます。 - [`server_info`](server_info.html)コマンドを使用して、バリデータに関するいくつかの基本情報を取得します。`server_state`は、`proposing`に設定されているはずです。`full`または`validating`に設定されている場合もありますが、`proposing`に移行するまでの数分間に限られます。
`server_state``proposing`に設定されている時間が大部分を占めていない場合、XRP Ledgerネットワークにバリデータが完全に参加できていないことを示している可能性があります。サーバーの状態および`server_info`エンドポイントを使用してバリデータの問題を診断する方法の詳細は、[`rippled`サーバーの状態](rippled-server-states.html)および[`server_info`の取得](diagnosing-problems.html#server_infoの取得)を参照してください。 `server_state``proposing`に設定されている時間が大部分を占めていない場合、XRP Ledgerネットワークにバリデータが完全に参加できていないことを示している可能性があります。サーバーの状態および`server_info`エンドポイントを使用してバリデータの問題を診断する方法の詳細は、[`rippled`サーバーの状態](rippled-server-states.html)および[`server_info`の取得](diagnosing-problems.html#server_infoの取得)を参照してください。
- [`validators`](validators.html)コマンドを使用して、バリデータによって使用される、公開済みかつ信頼できるバリデータの最新リストを取得します。`validator_list_expires`の値が、`never`(無期限)、期限が切れていない、または期限切れ間近のいずれかであることを確認してください。 - [`validators`](validators.html)コマンドを使用して、バリデータによって使用される、公開済みかつ信頼できるバリデータの最新リストを取得します。`validator_list_expires`の値が、`never`(無期限)、期限が切れていない、または期限切れ間近のいずれかであることを確認してください。
@@ -225,37 +234,37 @@ Ripple社は、推奨される一連のバリデータを記載した[バリデ
ドメイン検証を提供するには、以下の手順に従います。 ドメイン検証を提供するには、以下の手順に従います。
1. バリデータと公に関連付ける、所有しているドメインの名前を選択します。そのドメインのポート443で外部に公開されるHTTPSサーバーを実行中であり、そのサーバーのTLS証明書に関連付けられている秘密鍵ファイルへのアクセス権を持っている必要があります。注記: [TLSの旧称はSSLです](https://en.wikipedia.org/wiki/Transport_Layer_Security) 1. バリデータと公に関連付ける、所有しているドメインの名前を選択します。そのドメインのポート443で外部に公開されるHTTPSサーバーを実行中であり、そのサーバーのTLS証明書に関連付けられている秘密鍵ファイルへのアクセス権を持っている必要があります。注記: [TLSの旧称はSSLです](https://en.wikipedia.org/wiki/Transport_Layer_Security)DDoS攻撃への対策として、ドメイン名によってバリデータのIPアドレスが解決されないようにする必要があります
2. バリデータの公開鍵を公開し、特に他の`rippled`オペレーターに知らせます。例えば、Webサイト、ソーシャルメディア、[XRPChatコミュニティーフォーラム](https://www.xrpchat.com/)、またはプレスリリースでバリデータの公開鍵を公表できます。 2. バリデータの公開鍵を公開し、特に他の`rippled`オペレーターに知らせます。例えば、Webサイト、ソーシャルメディア、[XRPChatコミュニティーフォーラム](https://www.xrpchat.com/)、またはプレスリリースでバリデータの公開鍵を公表できます。
3. この[Googleフォーム](https://docs.google.com/forms/d/e/1FAIpQLScszfq7rRLAfArSZtvitCyl-VFA9cNcdnXLFjURsdCQ3gHW7w/viewform)を使用して、自身のバリデータをXRP Chartsの[バリデータレジストリー](https://xrpcharts.ripple.com/#/validators)に登録するための要求を送信します。バリデータをこのレジストリーに登録することは、そのバリデータとドメインを所有していることを示す、別の形での公的な証拠になります。フォームに漏れなく記入するには、以下の情報が必要です。 3. この[Googleフォーム](https://docs.google.com/forms/d/e/1FAIpQLScszfq7rRLAfArSZtvitCyl-VFA9cNcdnXLFjURsdCQ3gHW7w/viewform)を使用して、自身のバリデータをXRP Chartsの[バリデータレジストリー](https://xrpcharts.ripple.com/#/validators)に登録するための要求を送信します。バリデータをこのレジストリーに登録することは、そのバリデータとドメインを所有していることを示す、別の形での公的な証拠になります。フォームに漏れなく記入するには、以下の情報が必要です。
1. バリデータのサーバーで以下のコマンドを実行して、バリデータの公開鍵を検出します。 1. バリデータのサーバーで以下のコマンドを実行して、バリデータの公開鍵を検出します。
$ /opt/ripple/bin/rippled server_info | grep pubkey_validator $ /opt/ripple/bin/rippled server_info | grep pubkey_validator
返された値を、Googleフォームの**Validator Public Key**フィールドに入力します。 返された値を、Googleフォームの**Validator Public Key**フィールドに入力します。
2. WebドメインのTLS秘密鍵を使用して、バリデータの公開鍵に署名します。TLS秘密鍵ファイルをバリデータのサーバーに保存する必要はありません。 2. WebドメインのTLS秘密鍵を使用して、バリデータの公開鍵に署名します。TLS秘密鍵ファイルをバリデータのサーバーに保存する必要はありません。
$ openssl dgst -sha256 -hex -sign /PATH/TO/YOUR/TLS.key <(echo YOUR_VALIDATOR_PUBLIC_KEY_HERE) $ openssl dgst -sha256 -hex -sign /PATH/TO/YOUR/TLS.key <(echo YOUR_VALIDATOR_PUBLIC_KEY_HERE)
出力の例: 出力の例:
4a8b84ac264d18d116856efd2761a76f3f4544a1fbd82b9835bcd0aa67db91c53342a1ab197ab1ec4ae763d8476dd92fb9c24e6d9de37e3594c0af05d0f14fd2a00a7a5369723c019f122956bf3fc6c6b176ed0469c70c864aa07b4bf73042b1c7cf0b2c656aaf20ece5745f54ab0f78fab50ebd599e62401f4b57a4cccdf8b76d26f4490a1c51367e4a36faf860d48dd2f98a6134ebec1a6d92fadf9f89aae67e854f33e1acdcde12cfaf5f5dbf1b6a33833e768edbb9ff374cf4ae2be21dbc73186a5b54cc518f63d6081919e6125f7daf9a1d8e96e3fdbf3b94b089438221f8cfd78fd4fc85c646b288eb6d22771a3ee47fb597d28091e7aff38a1e636b4f 4a8b84ac264d18d116856efd2761a76f3f4544a1fbd82b9835bcd0aa67db91c53342a1ab197ab1ec4ae763d8476dd92fb9c24e6d9de37e3594c0af05d0f14fd2a00a7a5369723c019f122956bf3fc6c6b176ed0469c70c864aa07b4bf73042b1c7cf0b2c656aaf20ece5745f54ab0f78fab50ebd599e62401f4b57a4cccdf8b76d26f4490a1c51367e4a36faf860d48dd2f98a6134ebec1a6d92fadf9f89aae67e854f33e1acdcde12cfaf5f5dbf1b6a33833e768edbb9ff374cf4ae2be21dbc73186a5b54cc518f63d6081919e6125f7daf9a1d8e96e3fdbf3b94b089438221f8cfd78fd4fc85c646b288eb6d22771a3ee47fb597d28091e7aff38a1e636b4f
返された値を、Googleフォームの**SSL Signature**フィールドに入力します。 返された値を、Googleフォームの**SSL Signature**フィールドに入力します。
3. [`validator-keys`ツール](https://github.com/ripple/validator-keys-tool/blob/master/doc/validator-keys-tool-guide.md)`rippled`のRPMに収録を使用して、ドメイン名に署名します。 3. [`validator-keys`ツール](https://github.com/ripple/validator-keys-tool/blob/master/doc/validator-keys-tool-guide.md)`rippled`のRPMに収録を使用して、ドメイン名に署名します。
$ validator-keys --keyfile /PATH/TO/YOUR/validator-keys.json sign YOUR_DOMAIN_NAME $ validator-keys --keyfile /PATH/TO/YOUR/validator-keys.json sign YOUR_DOMAIN_NAME
出力の例: 出力の例:
E852C2FE725B64F353E19DB463C40B1ABB85959A63B8D09F72C6B6C27F80B6C72ED9D5ED6DC4B8690D1F195E28FF1B00FB7119C3F9831459F3C3DE263B73AC04 E852C2FE725B64F353E19DB463C40B1ABB85959A63B8D09F72C6B6C27F80B6C72ED9D5ED6DC4B8690D1F195E28FF1B00FB7119C3F9831459F3C3DE263B73AC04
返された値を、Googleフォームの**Domain Signature**フィールドに入力します。 返された値を、Googleフォームの**Domain Signature**フィールドに入力します。
4. 記入したGoogleフォームを送信すると、ドメイン検証の成否を通知するメールがXRP Chartsから送信されます。ドメイン検証が成功した場合は、XRP Chartsの[バリデータレジストリー](https://xrpcharts.ripple.com/#/validators)にバリデータとドメインが表示されます。 4. 記入したGoogleフォームを送信すると、ドメイン検証の成否を通知するメールがXRP Chartsから送信されます。ドメイン検証が成功した場合は、XRP Chartsの[バリデータレジストリー](https://xrpcharts.ripple.com/#/validators)にバリデータとドメインが表示されます。
@@ -268,3 +277,27 @@ Ripple社は、推奨される一連のバリデータを記載した[バリデ
バリデータのマスター秘密鍵が漏えいした場合は、ただちに永続的に破棄する必要があります。 バリデータのマスター秘密鍵が漏えいした場合は、ただちに永続的に破棄する必要があります。
`validator-keys`ツールでバリデータ用に生成したマスターキーペアを破棄する方法については、[Key Revocation](https://github.com/ripple/validator-keys-tool/blob/master/doc/validator-keys-tool-guide.md#key-revocation)を参照してください。 `validator-keys`ツールでバリデータ用に生成したマスターキーペアを破棄する方法については、[Key Revocation](https://github.com/ripple/validator-keys-tool/blob/master/doc/validator-keys-tool-guide.md#key-revocation)を参照してください。
## 関連項目
- **コンセプト:**
- [XRP Ledgerの概要](xrp-ledger-overview.html)
- [コンセンサスネットワーク](consensus-network.html)
- [`rippled`サーバー](the-rippled-server.html)
- **チュートリアル:**
- [rippledサーバーのクラスター化](cluster-rippled-servers.html)
- [`rippled`のインストール](install-rippled.html)
- [容量の計画](capacity-planning.html)
- [XRP Ledgerのビジネス](xrp-ledger-businesses.html)
- **リファレンス:**
- [Validator Keysツールガイド](https://github.com/ripple/validator-keys-tool/blob/master/doc/validator-keys-tool-guide.md)
- [consensus_infoメソッド][]
- [validator_list_sitesメソッド][]
- [validatorsメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,90 @@
# プライベートサーバーの設定
[プライベートサーバー](peer-protocol.html#プライベートピア)は、オープンなピアツーピアネットワーク内の検出されたピアに直接接続するのではなく、特定の信頼できるピアのみを通じてネットワークに接続する`rippled`サーバーです。この種の構成は、[バリデータ](run-rippled-as-a-validator.html)に一般的に推奨される任意の対策ですが、その他の特定の目的でも役立ちます。
## 前提条件
プライベートサーバーを使用するには、次の前提条件を満たしている必要があります。
- [`rippled`をインストール](install-rippled.html)して最新バージョンにアップデートし、まだ実行していない状態である必要があります。
- 自社で運用している**プロキシ**を通じて接続するか、**公開ハブ**を通じて接続するかを決める必要があります。これらの選択肢の違いについては、[ピアリング構成のメリットとデメリット](peer-protocol.html#ピア接続設定のメリットとデメリット)を参照してください。
- プロキシを使用している場合、`rippled`がインストールされていてプロキシとして使用し実行される別のマシンが必要です。これらのサーバーは、外部のネットワークとプライベートサーバーに接続できる必要があります。
- どちらの構成でも、接続先のピアのIPアドレスとポートを把握しておく必要があります。
## 手順
特定のサーバーをプライベートピアとして設定するには、次の手順を実行します。
1. `rippled`の構成ファイルを編集します。
vim /etc/opt/ripple/rippled.cfg
{% include '_snippets/conf-file-location.md' %}<!--_ -->
2. プライベートピアリングを有効にします。
構成ファイルに以下のスタンザを追加するか、コメントを解除します。
[peer_private]
1
3. 固定数のピアを追加します。
構成ファイルに`[ips_fixed]`スタンザを追加するか、コメントを解除します。このスタンザの各行は、接続先のピアのホスト名またはIPアドレス、1個の空白文字、このピアがピアプロトコル接続を受け付けるポートの順に記載されている必要があります。
例えば、**公開ハブ**を使用して接続する場合は、以下のスタンザを使用できます。
[ips_fixed]
r.ripple.com 51235
zaphod.alloy.ee 51235
サーバーが**プロキシ**を使用して接続している場合は、IPアドレスとポートが、プロキシとして使用している`rippled`サーバーの構成と一致している必要があります。これらの各サーバーについては、ポート番号が、サーバーの構成ファイルに記載されている`protocol = peer`ポート通常は51235と一致している必要があります。例えば、構成は次のようになります。
[ips_fixed]
192.168.0.1 51235
192.168.0.2 51235
4. プロキシを使用している場合、プロキシをプライベートピアと互いを含めてクラスター化します。
公開ハブを使用している場合は、このステップをスキップします。
プロキシを使用している場合、プライベートピアを含む[クラスターとしてプロキシを構成](cluster-rippled-servers.html)します。クラスターの各メンバーは、クラスターの_他の_各メンバーをリストにした`[ips_fixed]`スタンザを持っている必要があります。ただし、`[peer_private]`スタンザを持つのは**プライベートサーバーのみ**とします。
各プロキシで`rippled`を再起動します。各プロキシサーバーで、次のようにします。
sudo service systemctl restart rippled
5. プライベートサーバーで`rippled`を起動します。
sudo service systemctl start rippled
6. [peersメソッド][]を使用して、プライベートサーバーが自身のピアに _のみ_ 接続していることを確認します。
応答の`peers`配列に、構成済みのピアのいずれでもない`address`を持つオブジェクトが含まれていてはなりません。含まれている場合は、構成ファイルを再度確認して、プライベートサーバーを再起動します。
## 次のステップ
追加の予防対策として、自身のピアでないサーバーからプライベートサーバーへの着信接続をブロックするようにファイアウォールを設定する必要があります。プロキシサーバーを実行している場合は、ファイヤーウォールを通じてプロキシに[ピアポートを転送](forward-ports-for-peering.html)するようにします。ただし、プライベートピアで**ない**ものに転送します。この設定方法の具体的な手順は、使用するファイアウォールによって異なります。
ファイアウォールがポート80で発信HTTP接続を**ブロックしない**ことを確認します。デフォルトの設定では、このポートを使用して**vl.ripple.com**から最新の推奨バリデータリストをダウンロードします。バリデータリストがないと、サーバーはどのバリデータを信頼してよいかわからず、ネットワークが、いつコンセンサスに至ったかを認識できません。
## 関連項目
- **コンセプト:**
- [ピアプロトコル](peer-protocol.html)
- [コンセンサス](consensus.html)
- [並列ネットワーク](parallel-networks.html)
- **チュートリアル:**
- [ピアクローラーの設定](configure-the-peer-crawler.html)
- **リファレンス:**
- [peersメソッド][]
- [connectメソッド][]
- [fetch_infoメソッド][]
- [ピアクローラー](peer-crawler.html)
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,5 @@
# ピアリングの設定
XRP Ledgerのピアツーピアプロトコルは、ほとんどの場合、ピア接続を自動的に管理します。場合によっては、サーバーが接続するピアを手動で調整して、サーバーの可用性とネットワークの他の部分との接続性を最大限に高めたいというケースがあります。
同じデータセンター内で複数のサーバーを稼動させている場合は、[クラスター化](cluster-rippled-servers.html)して効率を向上させたいケースがあります。ピアツーピアネットワークのトポロジー内の重要なハブなど、稼動していないが接続を維持したいサーバー用の予約済みピアスロットを使うことができます。他のピアについては、サーバーはピアを自動検出し、その接続を管理しますが、望ましくない動作をするピアをブロックするように手動で介入することもできます。

View File

@@ -0,0 +1,59 @@
# ピアリングのポート転送
XRP Ledgerのピアツーピアネットワーク内にあるサーバーは、[ピアプロトコル](peer-protocol.html)を介して通信します。セキュリティとネットワークの他の部分との接続を両立させるために、ファイアウォールを使用して、サーバーをほとんどのポートから保護し、ピアプロトコルポートだけを開放するか転送するようにする必要があります。
`rippled`サーバーの稼動中に、[server_infoメソッド][]を実行すると、いくつのピアがあるか確認することができます。`info`オブジェクトの`peers`フィールドは、サーバーに現在接続しているピアの数を示します。この数が10または11の場合、通常はファイアウォールが着信接続をブロックしていることを示します。
ファイアウォールが着信ピア接続をブロックしていると思われるためピアが10個しかないことを示している`server_info`の結果の例(一部省略)は次のとおりです。
```json
$ ./rippled server_info
Loading: "/etc/opt/ripple/rippled.cfg"
2019-Dec-23 22:15:09.343961928 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"info" : {
...(省略)...
"load_factor" : 1,
"peer_disconnects" : "0",
"peer_disconnects_resources" : "0",
"peers" : 10,
"pubkey_node" : "n9KUjqxCr5FKThSNXdzb7oqN8rYwScB2dUnNqxQxbEA17JkaWy5x",
"pubkey_validator" : "n9KM73uq5BM3Fc6cxG3k5TruvbLc8Ffq17JZBmWC4uP4csL4rFST",
"published_ledger" : "none",
"server_state" : "connected",
...(省略)...
},
"status" : "success"
}
}
```
着信接続を許可するために、ピアプロトコルポートを転送するようにファイアウォールを設定します。ピアプロトコルポートは、デフォルトの構成ファイルでは**ポート51235**で提供されます。ポートの転送の手順はファイアウォールによって異なります。例えば、Red Hat Enterprise Linuxで`firewalld`ソフトウェアファイアウォールを使用している場合は、[`firewall-cmd`ツールを使用](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-port_forwarding)して、TCPトラフィックを次のように転送します。
```sh
$ sudo firewall-cmd --add-forward-port=port=51235:proto=tcp:toport=51235
```
その他のソフトウェアファイアウォールとハードウェアファイアウォールについては、メーカー公式のドキュメントを参照してください。
## 関連項目
- **コンセプト:**
- [ピアプロトコル](peer-protocol.html)
- [`rippled`サーバー](the-rippled-server.html)
- **チュートリアル:**
- [容量の計画](capacity-planning.html)
- [`rippled`サーバーのトラブルシューティング](troubleshoot-the-rippled-server.html)
- **リファレンス:**
- [connectメソッド][]
- [peersメソッド][]
- [printメソッド][]
- [server_infoメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,72 @@
# 特定のピアへの手動接続
サーバーをXRP Ledgerネットワーク内の特定の[ピア](peer-protocol.html)に手動で接続するには、次の手順を実行します。
**ヒント:** サーバーが起動時にこのサーバーに自動的に接続して、以降も接続を維持するようにするには、そのピアに対して[ピアリザベーション](use-a-peer-reservation.html)を設定することができます。
## 前提条件
- 接続先のピアのIPアドレスを把握しておく必要があります。
- 接続先のピアがXRP Ledger[ピアプロトコル](peer-protocol.html)に使用するポートを把握しておく必要があります。デフォルトでは、ポート51235です。
- サーバーからピアへのネットワーク接続を用意する必要があります。例えば、ピアサーバーは[ファイアウォールを通じて適切なポートを転送する](forward-ports-for-peering.html)必要があります。
- ピアサーバーに使用可能なピアスロットがある必要があります。ピアがすでにピアの最大数に達している場合、ピアサーバーのオペレーターに依頼して、サーバーの[ピアリザベーション](use-a-peer-reservation.html)を追加してもらいます。
## 手順
接続するには、[connectメソッド][]を使用します。例:
<!-- MULTICODE_BLOCK_START -->
*WebSocket*
```
{
"command": "connect",
"ip": "169.54.2.151",
"port": 51235
}
```
*JSON-RPC*
```
{
"method": "connect",
"params": [
{
"ip": "169.54.2.151",
"port": 51235
}
]
}
```
*コマンドライン*
```
rippled connect 169.54.2.151 51235
```
<!-- MULTICODE_BLOCK_END -->
## 関連項目
- **コンセプト:**
- [ピアプロトコル](peer-protocol.html)
- [`rippled`サーバー](the-rippled-server.html)
- **チュートリアル:**
- [容量の計画](capacity-planning.html)
- [`rippled`サーバーのトラブルシューティング](troubleshoot-the-rippled-server.html)
- **リファレンス:**
- [connectメソッド][]
- [peersメソッド][]
- [printメソッド][]
- [server_infoメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,48 @@
# ピアの最大数の設定
`rippled`サーバーには、接続先の[ピア](peer-protocol.html)の数を定める設定可能なソフト最大数があります。ピアのデフォルトの最大数は**21**です。
**注記:** 内部的に、サーバーは受信ピアと送信ピアのおおよそのクォータを生成します。[固定ピアやピアリザベーション](peer-protocol.html#固定ピアとピアリザベーション)を使用している場合、あるいは[connectメソッド][]を使用して追加のピアに手動で接続している場合は、このソフト最大数を超える可能性があります。
サーバーが許可するピアの最大数を変更するには、以下の手順を実行します。
1. `rippled`の構成ファイルを編集します。
$ vim /etc/opt/ripple/rippled.cfg
{% include '_snippets/conf-file-location.md' %}<!--_ -->
2. 構成ファイルで、`[peers_max]`スタンザのコメントを解除して編集するか、まだない場合は追加します。
[peers_max]
30
スタンザの内容は、許可するピアの合計数を示す整数のみである必要があります。デフォルトでは、サーバーは受信ピアが約85%、送信ピアが約15%という比率を維持するように試みますが、送信ピアの最小数が10であるため、68未満の値にしても、サーバーが行う送信ピア接続の数は増えません。
`[peers_max]`値を10未満にした場合でも、サーバーはハードコーディングされた最小数である10台の送信ピアを許可するため、ネットワークとの接続を維持できます。すべての送信ピア接続をブロックするには、[サーバーをプライベートピアとして設定](run-rippled-as-a-validator.html#プロキシを使用した接続)します。
**注意:** 接続先のピアサーバーが増えると、`rippled`サーバーが使用するネットワーク帯域幅も増えます。`rippled`サーバーに良好なネットワーク接続があり、使用する帯域幅のコストを許容できる場合にのみ、ピアサーバーの数に大きな値を設定してください。
3. `rippled`サーバーを再起動します。
$ sudo systemctl restart rippled.service
## 関連項目
- **コンセプト:**
- [ピアプロトコル](peer-protocol.html)
- [`rippled`サーバー](the-rippled-server.html)
- **チュートリアル:**
- [容量の計画](capacity-planning.html)
- [`rippled`サーバーのトラブルシューティング](troubleshoot-the-rippled-server.html)
- **リファレンス:**
- [connectメソッド][]
- [peersメソッド][]
- [printメソッド][]
- [server_infoメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,178 @@
# ピアリザベーションの使用
[ピアリザベーション][]を使用すると、`rippled`サーバーが予約とマッチしたピアからの通信を常に受け入れるように設定できます。このページでは、ピアリザベーションを使用して2台のサーバー間のピアツーピア通信を、各サーバーの管理者の協力のもと一貫して維持する方法について説明します。
ピアリザベーションは、2台のサーバーが異なる組織によって運用されていて、着信接続を受信するサーバーが、多くのピアを持つ[ハブサーバー](rippled-server-modes.html#公開ハブ)である場合に特に便利です。分かりやすいように、これらの手順では次の用語を使用します。
- **ストックサーバー**は発信接続を行うサーバーです。このサーバーは、ハブサーバー上のピアリザベーションを _使用_ します。
- **ハブサーバー**は着信接続を受信するサーバーです。管理者は、このサーバーにピアリザベーションを _追加_ します。
ただし、一方または両方のサーバーがハブ、バリデータ、ストックサーバーのいずれあっても、これらの手順を使用してピアリザベーションを設定できます。また、よりビジーな状態にあるサーバーから発信接続をする場合にもピアリザベーションを使用できますが、以下のプロセスではそのような構成については説明しません。
## 前提条件
これらの手順を実行するには、次の前提条件を満たしている必要があります。
- 両方のサーバーの管理者が`rippled`を[インストール](install-rippled.html)して実行している。
- 両方のサーバーの管理者が協力することに合意し、連絡が取り合える。秘密情報を共有する必要はないため、パブリックな通信チャネルを使用してもかまいません。
- ハブサーバーが着信ピア接続を受信できる。ファイアウォールをそのように設定する手順については、[ピアリングのポート転送](forward-ports-for-peering.html)を参照してください。
- 両方のサーバーが、同じ[XRP Ledgerネットワーク](parallel-networks.html)本番XRP Ledger、Testnet、Devnetなどと同期するように設定されている。
## 手順
ピアリザベーションを使用するには、以下の手順に従います。
### 1.(ストックサーバー)永続ノードキーペアを設定する
ストックサーバーの管理者が、以下の手順を実行します。
永続ノードキーペア値をすでにサーバーに設定している場合は、[ステップ2: ノード公開鍵をピアの管理者に連絡する](#2-communicate-the-stock-servers-node-public-key)に進んでください。(例えば、各サーバーの永続ノードキーペアは[サーバークラスターの設定](cluster-rippled-servers.html)の一環として設定します。)
**ヒント:** 永続ノードキーペアの設定は省略可能ですが、この設定をしておけば、サーバーのデータベースの消去や新規マシンへの移行が必要となった場合にピア接続の設定を容易に維持することができます。永続ノードキーペアを設定しない場合は、[server_infoメソッド][]の応答の`pubkey_node`フィールドに表示される、サーバーが自動生成したノード公開鍵を使用できます。
1. [validation_createメソッド][]を使用して新しいランダムキーペアを生成します。(`secret`値を省略します。)
例:
rippled validation_create
Loading: "/etc/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result" : {
"status" : "success",
"validation_key" : "FAWN JAVA JADE HEAL VARY HER REEL SHAW GAIL ARCH BEN IRMA",
"validation_public_key" : "n9Mxf6qD4J55XeLSCEpqaePW4GjoCR5U1ZeGZGJUCNe3bQa4yQbG",
"validation_seed" : "ssZkdwURFMBXenJPbrpE14b6noJSu"
}
}
`validation_seed`(ノードシード値)と`validation_public_key`値(ノード公開鍵)を保存します。
2. `rippled`の構成ファイルを編集します。
vim /etc/opt/ripple/rippled.cfg
{% include '_snippets/conf-file-location.md' %}<!--_ -->
3. 前のステップで生成した`validation_seed`値を使用して、`[node_seed]`スタンザを追加します。
例:
[node_seed]
ssZkdwURFMBXenJPbrpE14b6noJSu
**警告:** すべてのサーバーの`[node_seed]`値が一意である必要があります。構成ファイルを別のサーバーにコピーする場合は、`[node_seed]`値を削除するか、変更してください。`[node_seed]`は公開しないようにします。不正使用者がこの値にアクセスできた場合、それを使用してサーバーを偽装し、XRP Ledgerのピアツーピア通信を行う可能性があります。
4. `rippled`サーバーを再起動します。
systemctl restart rippled
### 2.ストックサーバーのノード公開鍵を連絡する
ストックサーバーの管理者が、ハブサーバーの管理者にストックサーバーのード公開鍵を伝えます。ステップ1の`validation_public_key`を使用します。)ハブサーバーの管理者はこの値を以降のステップで使用する必要があります。
### 3.(ハブサーバー)ピアリザベーションを追加する
ハブサーバーの管理者が、以下の手順を実行します。
[peer_reservations_addメソッド][]を使用し、前のステップで入手したノード公開鍵を使用して予約を追加します。例:
```sh
$ rippled peer_reservations_add n9Mxf6qD4J55XeLSCEpqaePW4GjoCR5U1ZeGZGJUCNe3bQa4yQbG "Description here"
Loading: "/etc/opt/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result": {
"status": "success"
}
}
```
**ヒント:** 説明はオプションのフィールドです。この予約は誰のためにしたものかを人間が読み取れる形式のメモを追加できます。
### 4.ハブサーバーの現在のIPアドレスとピアポートを連絡する
ハブサーバーの管理者は、サーバーの現在のIPアドレスとピアポートをストックサーバーの管理者に伝える必要があります。ハブサーバーが、ネットワークアドレス変換NATを行なうファイアウォールの内側にある場合は、サーバーの _外部_ IPアドレスを使用します。デフォルトの構成ファイルは、ピアプロトコルにポート51235を使用します。
### 5.(ストックサーバー)ピアサーバーに接続する
ストックサーバーの管理者が、以下の手順を実行します。
[connectメソッド][]を使用して、サーバーをハブサーバーに接続します。例:
<!-- MULTICODE_BLOCK_START -->
*WebSocket*
```
{
"command": "connect",
"ip": "169.54.2.151",
"port": 51235
}
```
*JSON-RPC*
```
{
"method": "connect",
"params": [
{
"ip": "169.54.2.151",
"port": 51235
}
]
}
```
*コマンドライン*
```
rippled connect 169.54.2.151 51235
```
<!-- MULTICODE_BLOCK_END -->
ハブサーバーの管理者が上記の手順に従ってピアリザベーションを設定した場合、自動的に接続され、可能な限り接続が維持されます。
## 次のステップ
サーバーの管理者は、サーバーに設定された他のピアへの予約を管理できます。(他のサーバーからの予約は確認できません。)次のことを実行できます。
- [peer_reservations_addメソッド][]を使用して、ピアリザベーションの追加や説明の更新を行う。
- [peer_reservations_listメソッド][]を使用して、予約先のサーバーを確認する。
- [peer_reservations_delメソッド][]を使用して、予約を削除する。
- [peersメソッド][]を使用して、現在接続しているピアと使用している帯域幅の量を確認する。
**ヒント:** 不正なピアからの接続を即座に切断するAPIメソッドはありませんが、`firewalld`などのソフトウェアファイアウォールを使用すれば、不正なピアからのサーバーへの接続をブロックできます。例については、コミュニティーによって作成された[rbhスクリプト](https://github.com/gnanderson/rbh)を参照してください。
## 関連項目
- **コンセプト:**
- [ピアプロトコル](peer-protocol.html)
- [コンセンサス](consensus.html)
- [並列ネットワーク](parallel-networks.html)
- **チュートリアル:**
- [容量の計画](capacity-planning.html)
- [`rippled`のトラブルシューティング](troubleshoot-the-rippled-server.html)
- **リファレンス:**
- [peersメソッド][]
- [peer_reservations_addメソッド][]
- [peer_reservations_delメソッド][]
- [peer_reservations_listメソッド][]
- [connectメソッド][]
- [fetch_infoメソッド][]
- [ピアクローラー](peer-crawler.html)
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,113 +1,117 @@
# macOSでのrippledの構築と実行 # macOSでのrippledの構築と実行
現時点において、Rippleでは`rippled`の本番環境にmacOSの使用を推奨していません。本番環境には、最高レベルの品質管理とテストを経た、[Ubuntuプラットフォーム](install-rippled-on-ubuntu-with-alien.html)のご使用をご検討ください。 [`rippled`](the-rippled-server.html)の本番環境にmacOSプラットフォームを使用することは推奨されていません。本番環境には、最高レベルの品質管理とテストを経た、[Ubuntuプラットフォーム](install-rippled-on-ubuntu-with-alien.html)のご使用をご検討ください。
しかしながら、macOSは多くの開発やテストの作業に適しています。 `rippled` は、10.13 High SierraまでのmacOSでテスト済みです。 しかしながら、macOSは多くの開発やテストの作業に適しています。`rippled`は、10.13 High SierraまでのmacOSでテスト済みです。
開発目的の場合は、`sudo`を使用するのではなく、自身のユーザーとして`rippled`を実行することをお勧めします。 開発目的の場合は、`sudo`を使用するのではなく、非管理者ユーザーとして`rippled`を実行します。
1. [Xcode](https://developer.apple.com/download/)をインストールします。 1. [Xcode](https://developer.apple.com/download/)をインストールします。
0. Xcodeコマンドラインツールをインストールします。 0. Xcodeコマンドラインツールをインストールします。
$ xcode-select --install $ xcode-select --install
0. [Homebrew](https://brew.sh/)をインストールします。 0. [Homebrew](https://brew.sh/)をインストールします。
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
0. Homebrewをアップデートします。 0. Homebrewをアップデートします。
$ brew update $ brew update
0. Homebrewを使用して依存関係をインストールします。 0. Homebrewを使用して依存関係をインストールします。
$ brew install git cmake pkg-config protobuf openssl ninja $ brew install git cmake pkg-config protobuf openssl ninja
0. Boost 1.71.0をインストールします。 `rippled` 1.4.0はBoost 1.70以と互換性を持ちます。 0. Boost 1.70.0以降をインストールします。`rippled`1.4.0はBoost 1.70.0と互換性があります。HomebrewのリポジトリにあるBoostの最新バージョンでは不十分であるため、Boostを手動でインストールする必要があります。次の例では、本書執筆時点の最新バージョンであるBoost 1.71.0を使用しています。
1. [Boost 1.71.0](https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.bz2)をダウンロードします。
2. フォルダに抽出します。場所をメモしておいてください。
3. ターミナルで以下を実行します。
cd /LOCATION/OF/YOUR/BOOST/DIRECTORY
./bootstrap.sh
./b2 cxxflags="-std=c++14"
1. [Boost 1.71.0](https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.bz2)をダウンロードします。 0. `BOOST_ROOT`環境が、Boostのインストールで作成されたディレクトリーを指すようにします。
2. フォルダに抽出します。場所をメモしておいてください 1. Boostディレクトリーを確認するには、Boostを手動でインストールした場合は`pwd`、Homebrewを使用してインストールした場合は`brew --prefix boost`を使用します
3. ターミナルで以下を実行します。 2. 以下のコードをBoostディレクトリーの場所に編集して実行し、Boost環境変数が`.bash_profile`ファイルに追加されるようにします。そうすることで、ログイン時にこの環境変数が自動的に設定されます。
cd /LOCATION/OF/YOUR/BOOST/DIRECTORY $ echo $"export BOOST_ROOT=/Users/my_user/boost_1_71_0" >> ~/.bash_profile
./bootstrap.sh
./b2 cxxflags="-std=c++14"
0. `BOOST_ROOT`環境変数が、Boostのインストールで作成されたディレクトリーを指すようにします。Boostのインストールディレクトリーを見つけるには、`brew info boost`を使用します。この環境変数を`.bash_profile`ファイルに追加すると、ログイン時に自動的に設定されます。例えば、次のようにします。
export BOOST_ROOT=/Users/my_user/boost_1_71_0
0. 前のステップで`.bash_profile`ファイルをアップデートした場合には、それを読み込みます。例:
0. 前のステップで`.bash_profile`ファイルをアップデートした場合には、新しいターミナルウィンドウでそれを読み込みます。例:
$ source .bash_profile $ source .bash_profile
0. 希望の場所に`rippled`ソースコードをクローンし、`rippled`ディレクトリーにアクセスします。これを行うには、GitHomebrewを使用して前にインストール済みとGitHubを設定する必要があります。例えば、GitHubアカウントを作成し、SSHキーを設定します。詳細は、[Set up git](https://help.github.com/articles/set-up-git/)を参照してください。 0. 希望の場所に`rippled`ソースコードをクローンし、`rippled`ディレクトリーにアクセスします。これを行うには、GitHomebrewを使用して前にインストール済みとGitHubを設定する必要があります。例えば、GitHubアカウントを作成し、SSHキーを設定します。詳細は、[Set up git](https://help.github.com/articles/set-up-git/)を参照してください。
$ git clone git@github.com:ripple/rippled.git $ git clone git@github.com:ripple/rippled.git
$ cd rippled $ cd rippled
0. デフォルトでは、クローンを実行すると`develop`ブランチに移動します。開発作業をしていて、未テストの機能の最新セットを使用したい場合にはこのブランチを使用します。 0. デフォルトでは、クローンを実行すると`develop`ブランチに移動します。開発作業をしていて、未テストの機能の最新セットを使用したい場合にはこのブランチを使用します。
最新の安定したリリースを使用したい場合には、`master`ブランチをチェックアウトします。 最新の安定したリリースを使用したい場合には、`master`ブランチをチェックアウトします。
$ git checkout master $ git checkout master
最新のリリース候補をテストしたい場合には、`release`ブランチをチェックアウトします。 最新のリリース候補をテストしたい場合には、`release`ブランチをチェックアウトします。
$ git checkout release $ git checkout release
または、[GitHub](https://github.com/ripple/rippled/releases)にリストされたタグ付きのリリースをチェックアウトすることもできます。 または、[GitHub](https://github.com/ripple/rippled/releases)にリストされたタグ付きのリリースをチェックアウトすることもできます。
0. クローンしたばかりの`rippled`ディレクトリー内にビルドディレクトリーを作成し、そこにアクセスします。例: 0. クローンしたばかりの`rippled`ディレクトリー内にビルドディレクトリーを作成し、そこにアクセスします。例:
$ mkdir my_build $ mkdir my_build
$ cd my_build $ cd my_build
0. `rippled`を構築します。ハードウェアの仕様にもよりますが、これには約5分ほどかかります。 0. `rippled`を構築します。ハードウェアの仕様にもよりますが、これには約5分ほどかかります。
$ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug .. $ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug ..
`CMAKE_BUILD_TYPE``Debug`または`Release`ビルドタイプに設定できます。標準的な4つの[`CMAKE_BUILD_TYPE`](https://cmake.org/cmake/help/v3.0/variable/CMAKE_BUILD_TYPE.html)の値がすべてサポートされています。 `CMAKE_BUILD_TYPE``Debug`または`Release`ビルドタイプに設定できます。標準的な4つの[`CMAKE_BUILD_TYPE`](https://cmake.org/cmake/help/v3.0/variable/CMAKE_BUILD_TYPE.html)の値がすべてサポートされています。
0. CMakeを使用してビルドを実行します。ハードウェアの仕様にもよりますが、これには約10分ほどかかります。 0. CMakeを使用してビルドを実行します。ハードウェアの仕様にもよりますが、これには約10分ほどかかります。
$ cmake --build .-- -j 4 $ cmake --build .-- -j 4
**ヒント:** この例では、`-j`パラメーターが`4`に設定されています。これにより、4つのプロセスを使用し、並行してビルドします。使用する最適なプロセス数は、お使いのハードウェアで使用可能なCPUコア数によって異なります。`sysctl -n hw.ncpu`を使用して、CPUのコア数を調べてください。 **ヒント:** この例では、`-j`パラメーターが`4`に設定されています。これにより、4つのプロセスを使用し、並行してビルドします。使用する最適なプロセス数は、お使いのハードウェアで使用可能なCPUコア数によって異なります。`sysctl -n hw.ncpu`を使用して、CPUのコア数を調べてください。
0. サーバー実行可能ファイルに組み込まれたユニットテストを実行します。ハードウェアの仕様にもよりますが、これには約5分ほどかかります。省略可能ですが、推奨します 0. サーバー実行可能ファイルに組み込まれたユニットテストを実行します。ハードウェアの仕様にもよりますが、これには約5分ほどかかります。省略可能ですが、推奨します
$ ./rippled --unittest
$ ./rippled --unittest 0. `rippled`は、`rippled.cfg`構成ファイルの実行を必要とします。`rippled/cfg`に、サンプル構成ファイルの`rippled-example.cfg`があります。このファイルをコピーし、`rippled`を非ルートユーザーとして実行できる場所に`rippled.cfg`という名前で保存します。`rippled`ディレクトリーにアクセスして、以下を実行します。
0. `rippled` は、`rippled.cfg`構成ファイルの実行を必要とします。`rippled/cfg`に、サンプル構成ファイルの`rippled-example.cfg`があります。このファイルをコピーし、`rippled`を非ルートユーザーとして実行できる場所に`rippled.cfg`という名前で保存します。`rippled`ディレクトリーにアクセスして、以下を実行します。 $ mkdir -p $HOME/.config/ripple
$ cp cfg/rippled-example.cfg $HOME/.config/ripple/rippled.cfg
$ mkdir -p $HOME/.config/ripple
$ cp cfg/rippled-example.cfg $HOME/.config/ripple/rippled.cfg
0. `rippled.cfg`を編集し、必要なファイルパスを設定します。`rippled`を実行するユーザーは、ここで指定するすべてのパスへの書き込み権限を持っている必要があります。 0. `rippled.cfg`を編集し、必要なファイルパスを設定します。`rippled`を実行するユーザーは、ここで指定するすべてのパスへの書き込み権限を持っている必要があります。
* `[node_db]`パスを、台帳データベースを保存する場所に設定します。
* `[database_path]`パスを、その他のデータベースデータを保存する場所に設定します。この場所には、構成データを持つSQLiteデータベースも含まれ、通常、`[node_db]`パスフィールドの1つ上のレベルになります。
* `[debug_logfile]``rippled`がログ情報を書き込めるパスに設定します。
`rippled`を正常に起動するために必要な構成はこれだけです。その他の構成はすべて省略可能であり、作業サーバーをセットアップしてから調整することもできます。詳細は、[Additional Configurations](#その他の構成)を参照してください。
* `[node_db]`パスを、台帳データベースを保存する場所に設定します。 0. `rippled`は、`validators.txt`ファイルの実行を必要とします。`rippled/cfg/`に、サンプルバリデータファイルの`validators-example.txt`があります。このファイルをコピーし、`rippled.cfg`ファイルと同じフォルダーに`validators.txt`という名前で保存します。`rippled`ディレクトリーにアクセスして、以下を実行します。
* `[database_path]`パスを、その他のデータベースデータを保存する場所に設定します。この場所には、構成データを持つSQLiteデータベースも含まれ、通常、`[node_db]`パスフィールドの1つ上のレベルになります。 $ cp cfg/validators-example.txt $HOME/.config/ripple/validators.txt
* `[debug_logfile]``rippled`がログ情報を書き込めるパスに設定します。 **警告:** Rippleは、安全を第一に考えて分散プランをデザインしました。特にRippleから勧められない限り、移行中に`validators.txt`ファイルを変更しないでください。小さな変更であっても、バリデータの設定に変更を加えると、サーバーがネットワークから分岐し、古い、不完全、または正しくないデータについて報告する原因となることがあります。そのようなデータを使用すると、経費の無駄になります。
`rippled`を正常に起動するために必要な構成はこれだけです。その他の構成はすべて省略可能であり、作業サーバーをセットアップしてから調整することもできます。詳細については、[追加構成](#additional-configuration)を参照してください。
0. `rippled` は、`validators.txt`ファイルの実行を必要とします。`rippled/cfg/`に、サンプルバリデータファイルの`validators-example.txt`があります。このファイルをコピーし、`rippled.cfg`ファイルと同じフォルダーに`validators.txt`という名前で保存します。`rippled`ディレクトリーにアクセスして、以下を実行します。
$ cp cfg/validators-example.txt $HOME/.config/ripple/validators.txt
**警告:** Rippleは、安全を第一に考えて分散プランをデザインしました。特にRippleから勧められない限り、移行中に`validators.txt`ファイルを変更しないでください。小さな変更であっても、バリデータの設定に変更を加えると、サーバーがネットワークから分岐し、古い、不完全、または正しくないデータについて報告する原因となることがあります。そのようなデータを使用すると、経費の無駄になります。
0. ビルドディレクトリー(`my_build`など)にアクセスし、`rippled`サービスを開始します。 0. ビルドディレクトリー(`my_build`など)にアクセスし、`rippled`サービスを開始します。
$ ./rippled $ ./rippled
以下は、ターミナルに表示される内容の抜粋です。 以下は、ターミナルに表示される内容の抜粋です。
``` ```
2018-Oct-26 18:21:39.593738 JobQueue:NFO Auto-tuning to 6 validation/transaction/proposal threads. 2018-Oct-26 18:21:39.593738 JobQueue:NFO Auto-tuning to 6 validation/transaction/proposal threads.
@@ -157,7 +161,7 @@
2018-Oct-26 18:23:03.034750 InboundLedger:WRN Want: 8DFAD21AD3090DE5D6F7592B3821C3DA77A72287705B4CF98DC0F84D5DD2BDF8 2018-Oct-26 18:23:03.034750 InboundLedger:WRN Want: 8DFAD21AD3090DE5D6F7592B3821C3DA77A72287705B4CF98DC0F84D5DD2BDF8
``` ```
`rippled`ログメッセージの詳細については、[ログメッセージについて](understanding-log-messages.html)を参照してください。 `rippled`ログメッセージの詳細は、[ログメッセージについて](understanding-log-messages.html)を参照してください。
## 次のステップ ## 次のステップ
@@ -165,6 +169,21 @@
## 関連項目 ## 関連項目
- [Ubuntu Linuxでrippledをインストール](install-rippled-on-ubuntu-with-alien.html)本番環境用の、Ubuntu上の事前構築済みバイナリー - **コンセプト:**
- [Ubuntuでの`rippled`の構築と実行](build-run-rippled-ubuntu.html)Ubuntuで`rippled`を自分でコンパイル) - [`rippled`サーバー](the-rippled-server.html)
- [その他のプラットフォーム用のコンパイル手順](https://github.com/ripple/rippled/tree/develop/Builds) - [コンセンサスについて](intro-to-consensus.html)
- **チュートリアル:**
- [Ubuntu Linuxでrippledをインストール](install-rippled-on-ubuntu.html)本番環境用の、Ubuntu上の事前構築済みバイナリーをインストール
- [rippledの構成](configure-rippled.html)
- [rippledのトラブルシューティング](troubleshoot-the-rippled-server.html)
- [rippled APIの使用開始](get-started-with-the-rippled-api.html)
- **リファレンス:**
- [rippled APIリファレンス](rippled-api.html)
- [`rippled`コマンドラインの使用](commandline-usage.html)
- [server_infoメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -1,6 +1,6 @@
# Ubuntuでのrippledの構築と実行 # Ubuntuでのrippledの構築と実行
`rippled` は、XRP Ledgerを管理するコアのピアツーピアサーバーです。`rippled`サーバーは、ピアのネットワークに接続し、暗号で署名された取引を中継し、共有のグローバル台帳の完全なローカルコピーを維持します。 `rippled`は、XRP Ledgerを管理するコアのピアツーピアサーバーです。`rippled`サーバーは、ピアのネットワークに接続し、暗号で署名された取引を中継し、共有のグローバル台帳の完全なローカルコピーを維持します。
`rippled`の概要については、[Operating rippled Servers](install-rippled.html)を参照してください。 `rippled`の概要については、[Operating rippled Servers](install-rippled.html)を参照してください。
@@ -18,102 +18,105 @@
次の手順では、UbuntuのAPTAdvanced Packaging Toolを使用し、`rippled`の構築と実行に必要なソフトウェアをインストールします。 次の手順では、UbuntuのAPTAdvanced Packaging Toolを使用し、`rippled`の構築と実行に必要なソフトウェアをインストールします。
1. `apt-get`でインストールまたはアップグレードできるパッケージのリストを更新します。 1. `apt-get`でインストールまたはアップグレードできるパッケージのリストを更新します。
sudo apt-get update sudo apt-get update
2. 現在インストールされているパッケージをアップグレードします。 2. 現在インストールされているパッケージをアップグレードします。
sudo apt-get -y upgrade sudo apt-get -y upgrade
3. 依存関係をインストールします。 3. 依存関係をインストールします。
sudo apt-get -y install git pkg-config protobuf-compiler libprotobuf-dev libssl-dev wget sudo apt-get -y install git pkg-config protobuf-compiler libprotobuf-dev libssl-dev wget
4. CMakeをインストールします。 4. CMakeをインストールします。
`rippled`のバージョン1.4.0は、CMake 3.9.0以降を必要とします。このチュートリアルでは、執筆時の最新バージョンだったCMake 3.13.3を使用しました。 `rippled`のバージョン1.4.0は、CMake 3.9.0以降を必要とします。このチュートリアルでは、執筆時の最新バージョンだったCMake 3.13.3を使用しました。
CMake 3.9.0以降をすでにインストールしてある場合には、このステップはスキップできます。 CMake 3.9.0以降をすでにインストールしてある場合には、このステップはスキップできます。
CMake 3.13.3をインストールするには、以下を実行します。 CMake 3.13.3をインストールするには、以下を実行します。
wget https://github.com/Kitware/CMake/releases/download/v3.13.3/cmake-3.13.3-Linux-x86_64.sh wget https://github.com/Kitware/CMake/releases/download/v3.13.3/cmake-3.13.3-Linux-x86_64.sh
sudo sh cmake-3.13.3-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir sudo sh cmake-3.13.3-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir
`cmake --version`を使用し、正常にインストールされたことを確認します。 `cmake --version`を使用し、正常にインストールされたことを確認します。
5. Boostをコンパイルします。 5. Boostをコンパイルします。
`rippled` 1.4.0はBoost 1.70以上と互換性を持ちます。Ubuntu18.0416.04も)のソフトウェアリポジトリにBoostバージョン1.70.0がないため、自分でコンパイルする必要があります。 `rippled`のバージョン1.4.0はBoostバージョン1.70.0以降を必要とします。Ubuntu 18.04(または16.04ソフトウェアリポジトリにBoostバージョン1.70.0以降がないため、自分でコンパイルする必要があります。次の例では、執筆時点の最新バージョンであるBoost 1.71.0を使用しています。)
以前に`rippled`用にBoost 1.71.0をインストールしていて、`BOOST_ROOT`環境変数を構成した場合には、このステップはスキップできます。 以前に`rippled`用にBoost 1.71.0をインストールしていて、`BOOST_ROOT`環境変数を構成した場合には、このステップはスキップできます。
1. Boost 1.71.0をダウンロードします。 1. Boost 1.71.0をダウンロードします。
wget https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.gz wget https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.gz
2. `boost_1_71_0.tar.gz`を抽出します。 2. `boost_1_71_0.tar.gz`を抽出します。
tar xvzf boost_1_71_0.tar.gz tar xvzf boost_1_71_0.tar.gz
3. 新しい`boost_1_71_0`ディレクトリーに移動します。 3. 新しい`boost_1_71_0`ディレクトリーに移動します。
cd boost_1_71_0 cd boost_1_71_0
4. 使用するBoost.Buildシステムを準備します。 4. 使用するBoost.Buildシステムを準備します。
./bootstrap.sh ./bootstrap.sh
5. 個別にコンパイルされたBoostライブラリを構築します。ハードウェアの仕様にもよりますが、これには約10分かかります。 5. 個別にコンパイルされたBoostライブラリを構築します。ハードウェアの仕様にもよりますが、これには約10分かかります。
./b2 -j 4 ./b2 -j 4
**ヒント:** この例では、4つのプロセスを並行して構築します。使用する最適なプロセス数は、お使いのハードウェアで使用可能なCPUコア数によって異なります。`cat /proc/cpuinfo`を使用して、ハードウェアプロセッサーに関する情報を取得できます。 **ヒント:** この例では、4つのプロセスを並行して構築します。使用する最適なプロセス数は、お使いのハードウェアで使用可能なCPUコア数によって異なります。`cat /proc/cpuinfo`を使用して、ハードウェアプロセッサーに関する情報を取得できます。
6. `BOOST_ROOT`環境変数を、新しい`boost_1_71_0`ディレクトリーを参照するように設定します。ログイン時に自動的に設定されるようにするため、この環境変数を、シェル用の`.profile`またはそれに相当するファイルに入れることをお勧めします。ファイルに次の行を追加します。 6. `BOOST_ROOT`環境変数を、新しい`boost_1_71_0`ディレクトリーを参照するように設定します。ログイン時に自動的に設定されるようにするため、この環境変数を、シェル用の`.profile`またはそれに相当するファイルに入れることをお勧めします。ファイルに次の行を追加します。
export BOOST_ROOT=/home/my_user/boost_1_71_0 export BOOST_ROOT=/home/my_user/boost_1_71_0
7. 更新した`.profile`ファイルを読み込みます。例: 7. 更新した`.profile`ファイルを読み込みます。例:
source ~/.profile source ~/.profile
6. 作業ディレクトリーから、`rippled`ソースコードを取得します。`master`ブランチに最新のリリースバージョンがあります。 6. 作業ディレクトリーから、`rippled`ソースコードを取得します。`master`ブランチに最新のリリースバージョンがあります。
git clone https://github.com/ripple/rippled.git git clone https://github.com/ripple/rippled.git
cd rippled cd rippled
git checkout master git checkout master
7. コミットログを調べ、正しいバージョンをコンパイルしていることを確認します。最新のコミットは、よく知られるRipple開発者によって署名され、バージョン番号が最新のリリースバージョンに設定されています。例: 7. コミットログを調べ、正しいバージョンをコンパイルしていることを確認します。最新のコミットは、よく知られるRipple開発者によって署名され、バージョン番号が最新のリリースバージョンに設定されています。例:
$ git log -1 $ git log -1
commit 06c371544acc3b488b9d9c057cee4e51f6bef7a2
Author: Nik Bougalis <nikb@bougalis.net>
Date: Mon Nov 25 22:58:03 2019 -0800
Set version to 1.4.0
commit e1adbd7ddd5dfa9f2a9791aa3c0fcc1fdb4e8236
Author: Manoj doshi <mdoshi@ripple.com>
Date: Wed Jul 24 15:21:56 2019 -0700
Set version to 1.3.1
8. 以前に`rippled`を構築したことがある場合、または(そしてもっと重要なのは)構築しようとして失敗したことがある場合には、クリーンな状態から開始するために、次のステップに移る前に`my_build/`ディレクトリーまたはユーザーが付けた名前を削除する必要があります。このディレクトリーを削除しないと、セグメンテーションエラーsegfaultが原因で`rippled`実行可能ファイルがクラッシュするなど、予期しない動作が発生することがあります。 8. 以前に`rippled`を構築したことがある場合、または(そしてもっと重要なのは)構築しようとして失敗したことがある場合には、クリーンな状態から開始するために、次のステップに移る前に`my_build/`ディレクトリーまたはユーザーが付けた名前を削除する必要があります。このディレクトリーを削除しないと、セグメンテーションエラーsegfaultが原因で`rippled`実行可能ファイルがクラッシュするなど、予期しない動作が発生することがあります。
`rippled`1.0.0以上を構築するのが初めての場合には、`my_build/`ディレクトリーはないため、次のステップに進むことができます。 `rippled` 1.0.0以上を構築するのが初めての場合には、`my_build/`ディレクトリーはないため、次のステップに進むことができます。
9. CMakeを使用して、ソースコードから`rippled`バイナリー実行可能ファイルを構築します。その結果、`my_build`ディレクトリーに`rippled`バイナリー実行可能ファイルが構築されます。 9. CMakeを使用して、ソースコードから`rippled`バイナリー実行可能ファイルを構築します。その結果、`my_build`ディレクトリーに`rippled`バイナリー実行可能ファイルが構築されます。
1. ビルドシステムを生成します。ビルドは、ソースツリールートとは別のディレクトリーで実行します。この例では、`rippled`のサブディレクトリーである`my_build`ディレクトリーを使用します。 1. ビルドシステムを生成します。ビルドは、ソースツリールートとは別のディレクトリーで実行します。この例では、`rippled`のサブディレクトリーである`my_build`ディレクトリーを使用します。
mkdir my_build mkdir my_build
cd my_build cd my_build
cmake .. cmake ..
**ヒント:** デフォルトのビルドには、本番環境では有用ではないものの、開発環境に便利なデバッグ記号が含まれています。`rippled`を本番環境用サーバーで使用するには、`cmake`コマンドの実行時に`-DCMAKE_BUILD_TYPE=Release`フラグを追加します。 **ヒント:** デフォルトのビルドには、本番環境では有用ではないものの、開発環境に便利なデバッグ記号が含まれています。`rippled`を本番環境用サーバーで使用するには、`cmake`コマンドの実行時に`-DCMAKE_BUILD_TYPE=Release`フラグを追加します。
2. `rippled`のバイナリー実行可能ファイルを構築します。ハードウェアの仕様にもよりますが、これには約30分かかります。 2. `rippled`のバイナリー実行可能ファイルを構築します。ハードウェアの仕様にもよりますが、これには約30分かかります。
cmake --build . cmake --build .
10. _省略可能_`rippled`ユニットテストを実行します。テストエラーがない場合には、`rippled`実行可能ファイルがほぼ確実に正しくコンパイルされています。 10. _省略可能_`rippled`ユニットテストを実行します。テストエラーがない場合には、`rippled`実行可能ファイルがほぼ確実に正しくコンパイルされています。
./rippled -u ./rippled -u
@@ -122,23 +125,23 @@
`rippled`を正常に起動させるために必要な以下の構成を行います。その他の構成はすべて省略可能であり、作業サーバーをセットアップしてから調整することもできます。 `rippled`を正常に起動させるために必要な以下の構成を行います。その他の構成はすべて省略可能であり、作業サーバーをセットアップしてから調整することもできます。
1. `rippled`フォルダーに移動して、サンプル構成ファイルのコピーを作成します。構成ファイルをこの場所に保存すると、`rippled`を非ルートユーザーとして実行できます(推奨)。 1. `rippled`フォルダーに移動して、サンプル構成ファイルのコピーを作成します。構成ファイルをこの場所に保存すると、`rippled`を非ルートユーザーとして実行できます(推奨)。
mkdir -p ~/.config/ripple mkdir -p ~/.config/ripple
cp cfg/rippled-example.cfg ~/.config/ripple/rippled.cfg cp cfg/rippled-example.cfg ~/.config/ripple/rippled.cfg
2. 構成ファイルを編集し、必要なファイルパスを設定します。`rippled`を実行するユーザーは、ここで指定するすべてのパスへの書き込み権限を持っている必要があります。 2. 構成ファイルを編集し、必要なファイルパスを設定します。`rippled`を実行するユーザーは、ここで指定するすべてのパスへの書き込み権限を持っている必要があります。
1. `[node_db]`のパスを、台帳データベースを保存する場所に設定します。 1. `[node_db]`のパスを、台帳データベースを保存する場所に設定します。
2. `[database_path]`を、その他のデータベースデータを保存する場所に設定します。この場所には、構成データを持つSQLiteデータベースも含まれ、通常、`[node_db]`パスフィールドの1つ上のレベルになります。 2. `[database_path]`を、その他のデータベースデータを保存する場所に設定します。この場所には、構成データを持つSQLiteデータベースも含まれ、通常、`[node_db]`パスフィールドの1つ上のレベルになります。
3. `[debug_logfile]``rippled`がロギング情報を書き込めるパスに設定します。 3. `[debug_logfile]``rippled`がログ情報を書き込めるパスに設定します。
3. サンプルの`validators.txt`ファイルを`rippled.cfg`と同じフォルダーに保存します。 3. サンプルの`validators.txt`ファイルを`rippled.cfg`と同じフォルダーに保存します。
cp cfg/validators-example.txt ~/.config/ripple/validators.txt cp cfg/validators-example.txt ~/.config/ripple/validators.txt
**警告:** Rippleは、安全を第一に考えて[分散プラン](https://ripple.com/dev-blog/decentralization-strategy-update/)をデザインしました。特にRippleから勧められない限り、移行中に`validators.txt`ファイルを変更*しない*でください。小さな変更であっても、バリデータの設定に変更を加えると、サーバーがネットワークから分岐し、古い、不完全、または正しくないデータについて報告する原因となることがあります。そのようなデータを使用すると、経費の無駄になります。 **警告:** Rippleは、安全を第一に考えて[分散プラン](https://xrpl.org/blog/2017/decent-strategy-update.html)をデザインしました。特にRippleから勧められない限り、移行中に`validators.txt`ファイルを変更*しない*でください。小さな変更であっても、バリデータの設定に変更を加えると、サーバーがネットワークから分岐し、古い、不完全、または正しくないデータについて報告する原因となることがあります。そのようなデータを使用すると、経費の無駄になります。
## 3. `rippled`の実行 ## 3. `rippled`の実行
@@ -193,10 +196,10 @@ Watchdog: Launching child 1
2018-Jun-06 00:52:33.379747629 LedgerConsensus:WRN {"accepted":true,"account_hash":"CC1F1EC08E76BC9FE843BBF9C6068C5B73192E6957B9CC1174DCB2B94DD2025A","close_flags":0,"close_time":581561550,"close_time_human":"2018-Jun-06 00:52:30.000000000","close_time_resolution":30,"closed":true,"hash":"94354A7FECAB638C29BBC79B18CFDBDC05E4FF72647AD62F072DB4D23A5E0317","ledger_hash":"94354A7FECAB638C29BBC79B18CFDBDC05E4FF72647AD62F072DB4D23A5E0317","ledger_index":"3","parent_close_time":581561490,"parent_hash":"80BF92A69F65F5C543E962DF4B41715546FDD97FC6988028E5ACBB46654756CA","seqNum":"3","totalCoins":"100000000000000000","total_coins":"100000000000000000","transaction_hash":"0000000000000000000000000000000000000000000000000000000000000000"} 2018-Jun-06 00:52:33.379747629 LedgerConsensus:WRN {"accepted":true,"account_hash":"CC1F1EC08E76BC9FE843BBF9C6068C5B73192E6957B9CC1174DCB2B94DD2025A","close_flags":0,"close_time":581561550,"close_time_human":"2018-Jun-06 00:52:30.000000000","close_time_resolution":30,"closed":true,"hash":"94354A7FECAB638C29BBC79B18CFDBDC05E4FF72647AD62F072DB4D23A5E0317","ledger_hash":"94354A7FECAB638C29BBC79B18CFDBDC05E4FF72647AD62F072DB4D23A5E0317","ledger_index":"3","parent_close_time":581561490,"parent_hash":"80BF92A69F65F5C543E962DF4B41715546FDD97FC6988028E5ACBB46654756CA","seqNum":"3","totalCoins":"100000000000000000","total_coins":"100000000000000000","transaction_hash":"0000000000000000000000000000000000000000000000000000000000000000"}
... ...
2018-Jun-06 00:53:50.568965045 LedgerConsensus:WRN {"accepted":true,"account_hash":"A79E6754544F9C8FC74870C95A39CED1D45CC1206DDA4C113E51F9DB6DDB0E76","close_flags":0,"close_time":581561630,"close_time_human":"2018-Jun-06 00:53:50.000000000","close_time_resolution":10,"closed":true,"hash":"6294118F39F5F2B8349E7CC6D4D5931011622E78DD4E34D91372651E9F453E2F","ledger_hash":"6294118F39F5F2B8349E7CC6D4D5931011622E78DD4E34D91372651E9F453E2F","ledger_index":"29","parent_close_time":581561623,"parent_hash":"5F57870CE5160D6B53271955F26E3BE63696D1127B91BC7943F9A199B313CB85","seqNum":"29","totalCoins":"100000000000000000","total_coins":"100000000000000000","transaction_hash":"0000000000000000000000000000000000000000000000000000000000000000"} 2018-Jun-06 00:53:50.568965045 LedgerConsensus:WRN {"accepted":true,"account_hash":"A79E6754544F9C8FC74870C95A39CED1D45CC1206DDA4C113E51F9DB6DDB0E76","close_flags":0,"close_time":581561630,"close_time_human":"2018-Jun-06 00:53:50.000000000","close_time_resolution":10,"closed":true,"hash":"6294118F39F5F2B8349E7CC6D4D5931011622E78DD4E34D91372651E9F453E2F","ledger_hash":"6294118F39F5F2B8349E7CC6D4D5931011622E78DD4E34D91372651E9F453E2F","ledger_index":"29","parent_close_time":581561623,"parent_hash":"5F57870CE5160D6B53271955F26E3BE63696D1127B91BC7943F9A199B313CB85","seqNum":"29","totalCoins":"100000000000000000","total_coins":"100000000000000000","transaction_hash":"0000000000000000000000000000000000000000000000000000000000000000"}
2018-Jun-06 0:53:50.569776678 LedgerConsensus:WRN Need consensus ledger 6A0DE66550B6BA9636E3F8FDB71C2E924D182A1835E4143B2170DAA1D33CAE8D 2018-Jun-06 00:53:50.569776678 LedgerConsensus:WRN Need consensus ledger 6A0DE66550B6BA9636E3F8FDB71C2E924D182A1835E4143B2170DAA1D33CAE8D
2018-Jun-06 0:53:51.576778862 NetworkOPs:WRN We are not running on the consensus ledger 2018-Jun-06 00:53:51.576778862 NetworkOPs:WRN We are not running on the consensus ledger
2018-Jun-06 00:53:53.576524564 LedgerConsensus:WRN View of consensus changed during establish status=establish, mode=wrongLedger 2018-Jun-06 00:53:53.576524564 LedgerConsensus:WRN View of consensus changed during establish status=establish, mode=wrongLedger
2018-Jun-06 0:53:53.576783663 LedgerConsensus:WRN 6A0DE66550B6BA9636E3F8FDB71C2E924D182A1835E4143B2170DAA1D33CAE8D to 1CB9C9A1C27403CBAB9DFCFA61E1F915059DFE4FA93524537B885CC190DB5C6B 2018-Jun-06 00:53:53.576783663 LedgerConsensus:WRN 6A0DE66550B6BA9636E3F8FDB71C2E924D182A1835E4143B2170DAA1D33CAE8D to 1CB9C9A1C27403CBAB9DFCFA61E1F915059DFE4FA93524537B885CC190DB5C6B
2018-Jun-06 00:53:53.577079124 LedgerConsensus:WRN {"accepted":true,"account_hash":"5CAB3E4F5F2AC1A764106D7CC0729E6E7D1F7F93C65B7D8CB04C8DE2FC2C1305","close_flags":0,"close_time":581561631,"close_time_human":"2018-Jun-06 00:53:51.000000000","close_time_resolution":10,"closed":true,"hash":"201E147BD195CE3C56B0C0B8DF58386FC7BFF450E1E5B286A29AB856926D5F79","ledger_hash":"201E147BD195CE3C56B0C0B8DF58386FC7BFF450E1E5B286A29AB856926D5F79","ledger_index":"30","parent_close_time":581561630,"parent_hash":"6294118F39F5F2B8349E7CC6D4D5931011622E78DD4E34D91372651E9F453E2F","seqNum":"30","totalCoins":"100000000000000000","total_coins":"100000000000000000","transaction_hash":"0000000000000000000000000000000000000000000000000000000000000000"} 2018-Jun-06 00:53:53.577079124 LedgerConsensus:WRN {"accepted":true,"account_hash":"5CAB3E4F5F2AC1A764106D7CC0729E6E7D1F7F93C65B7D8CB04C8DE2FC2C1305","close_flags":0,"close_time":581561631,"close_time_human":"2018-Jun-06 00:53:51.000000000","close_time_resolution":10,"closed":true,"hash":"201E147BD195CE3C56B0C0B8DF58386FC7BFF450E1E5B286A29AB856926D5F79","ledger_hash":"201E147BD195CE3C56B0C0B8DF58386FC7BFF450E1E5B286A29AB856926D5F79","ledger_index":"30","parent_close_time":581561630,"parent_hash":"6294118F39F5F2B8349E7CC6D4D5931011622E78DD4E34D91372651E9F453E2F","seqNum":"30","totalCoins":"100000000000000000","total_coins":"100000000000000000","transaction_hash":"0000000000000000000000000000000000000000000000000000000000000000"}
``` ```
@@ -205,8 +208,32 @@ Watchdog: Launching child 1
* これでストック`rippled`サーバーを実行できたので、次に検証サーバーとして実行してみましょう。検証サーバーの詳細について、そして検証サーバーを実行する理由については、[rippledのセットアップチュートリアル](install-rippled.html)を参照してください。 * これでストック`rippled`サーバーを実行できたので、次に検証サーバーとして実行してみましょう。検証サーバーの詳細について、そして検証サーバーを実行する理由については、[rippledのセットアップチュートリアル](install-rippled.html)を参照してください。
* `rippled` APIを使用して`rippled`サーバーと通信する方法については、[`rippled` API reference](rippled-api.html)を参照してください。 * `rippled` APIを使用して`rippled`サーバーと通信する方法については、[`rippled` APIリファレンス](rippled-api.html)を参照してください。
* 開発のベストプラクティスとして、`rippled` `.deb`ファイルを構築することをお勧めします。詳細は、_Ubuntu Packaging Guide_ の[Packaging New Software](http://packaging.ubuntu.com/html/packaging-new-software.html)を参照してください * 開発のベストプラクティスとして、`rippled` `.deb`パッケージをビルドすることをお勧めします。CMakeビルドのdebパッケージターゲットを使用して、ソースツリーから直接`deb`パッケージをビルドできます。ビルドマシンには[Dockerをインストール](https://docs.docker.com/install/#supported-platforms)している必要があります。このプロセスを完了するのに1時間以上かかる場合があります。`deb`パッケージをビルドするには、以下の手順に従います
mkdir -p build/pkg && cd build/pkg
cmake -Dpackages_only=ON ../..
cmake --build . --target dpkg
* また、`systemd`をインストールすることもできます。詳細については、[systemd for Upstart Users](https://wiki.ubuntu.com/SystemdForUpstartUsers)を参照してください。[公式の`rippled`システムユニットファイル](https://github.com/ripple/rippled-package-builder/blob/staging/rpm-builder/rippled.service)をそのまま使用するか、ニーズに合わせてファイルを編集して使用できます。 * また、`systemd`をインストールすることもできます。詳細は、[systemd for Upstart Users](https://wiki.ubuntu.com/SystemdForUpstartUsers)を参照してください。[公式の`rippled`システムユニットファイル](https://github.com/ripple/rippled/blob/master/Builds/containers/shared/rippled.service)をそのまま使用するか、ニーズに合わせてファイルを編集して使用できます。
## 関連項目
- **コンセプト:**
- [`rippled`サーバー](the-rippled-server.html)
- [コンセンサスについて](intro-to-consensus.html)
- **チュートリアル:**
- [rippledの構成](configure-rippled.html)
- [rippledのトラブルシューティング](troubleshoot-the-rippled-server.html)
- [rippled APIの使用開始](get-started-with-the-rippled-api.html)
- **リファレンス:**
- [rippled APIリファレンス](rippled-api.html)
- [`rippled`コマンドラインの使用](commandline-usage.html)
- [server_infoメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -13,19 +13,37 @@
## インストール手順 ## インストール手順
1. Ripple RPMリポジトリをインストールします。 1. Ripple RPMリポジトリをインストールします。
$ cat << REPOFILE | sudo tee /etc/yum.repos.d/ripple.repo
[ripple-stable]
name=XRP Ledger Packages
baseurl=https://repos.ripple.com/repos/rippled-rpm/stable/
enabled=1
gpgcheck=0
gpgkey=https://repos.ripple.com/repos/rippled-rpm/stable/repodata/repomd.xml.key
repo_gpgcheck=1
REPOFILE
$ sudo rpm -Uvh https://mirrors.ripple.com/ripple-repo-el7.rpm 2. 最新のrepoのアップデートを取得します
$ sudo yum -y update
2. `rippled`ソフトウェアパッケージをインストールします 3. 新しい`rippled`パッケージをインストールします
$ sudo yum install rippled
バージョン1.3.1では構成ファイル`rippled.cfg`および`validators.txt`を変更する必要はありませんこのアップデート手順では既存の構成ファイルが現在のまま残ります
$ sudo yum install --enablerepo=ripple-stable rippled 4. systemdユニットファイルを再度読み込みます
3. システム起動時に開始するように、`rippled`サービスを設定します。 $ sudo systemctl daemon-reload
5. 起動時に開始するように`rippled`サービスを設定します
$ sudo systemctl enable rippled.service $ sudo systemctl enable rippled.service
4. `rippled`サービスを開始します 6. `rippled`サービスを開始します
$ sudo systemctl start rippled.service $ sudo systemctl start rippled.service
@@ -33,9 +51,23 @@
{% include '_snippets/post-rippled-install.md' %}<!--_ --> {% include '_snippets/post-rippled-install.md' %}<!--_ -->
## 関連項目 ## 関連項目
- [CentOS/Red Hatでの自動更新](update-rippled-automatically-on-centos-rhel.html) - **コンセプト:**
- [Ubuntu Linuxでrippledをインストール](install-rippled-on-ubuntu-with-alien.html)Ubuntu上の事前構築済みバイナリー - [`rippled`サーバー](the-rippled-server.html)
- [Ubuntuでの'rippled'の構築と実行](build-run-rippled-ubuntu.html)Ubuntuで`rippled`を自分でコンパイル) - [コンセンサスについて](intro-to-consensus.html)
- [その他のプラットフォーム用のコンパイル手順](https://github.com/ripple/rippled/tree/develop/Builds) - **チュートリアル:**
- [rippledの構成](configure-rippled.html)
- [rippledのトラブルシューティング](troubleshoot-the-rippled-server.html)
- [rippled APIの使用開始](get-started-with-the-rippled-api.html)
- **リファレンス:**
- [rippled APIリファレンス](rippled-api.html)
- [`rippled`コマンドラインの使用](commandline-usage.html)
- [server_infoメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,104 @@
# UbuntuまたはDebian Linuxへのインストール
このページでは、[`apt`](https://help.ubuntu.com/lts/serverguide/apt.html)ユーティリティを使用して、**Ubuntu Linux 16.04以降**または**Debian 9Stretch** に`rippled`の安定した最新バージョンをインストールする場合の推奨手順を説明します。
以下の手順では、Rippleによってコンパイルされたバイナリーをインストールします。
## 前提条件
`rippled`をインストールする前に、[システム要件](system-requirements.html)を満たす必要があります。
## インストール手順
1. リポジトリを更新します。
$ sudo apt -y update
2. ユーティリティをインストールします。
$ sudo apt -y install apt-transport-https ca-certificates wget gnupg
3. Rippleのパッケージ署名用のGPGキーを、信頼できるキーのリストに追加します。
$ wget -q -O - "https://repos.ripple.com/repos/api/gpg/key/public" | \
sudo apt-key add -
4. 追加したキーのフィンガープリントを確認します。
$ apt-key finger
出力に、次のようなRipple用のエントリーが含まれています。
pub rsa3072 2019-02-14 [SC] [expires: 2021-02-13]
C001 0EC2 05B3 5A33 10DC 90DE 395F 97FF CCAF D9A2
uid [ unknown] TechOps Team at Ripple <techops+rippled@ripple.com>
sub rsa3072 2019-02-14 [E] [expires: 2021-02-13]
特に、フィンガープリントが一致することを確認してください。上記の例では、フィンガープリントは2行目の`C001`で始まる部分です。)
5. 使用しているオペレーティングシステムのバージョンに対応する適切なRippleリポジトリを追加します。
$ echo "deb https://repos.ripple.com/repos/rippled-deb bionic stable" | \
sudo tee -a /etc/apt/sources.list.d/ripple.list
上記の例は、**Ubuntu 18.04 Bionic Beaver**に適切です。その他のオペレーティングシステムについては、`bionic`という単語を次のいずれかに置き換えます。
- **Ubuntu 16.04 Xenial Xerus**の場合は`xenial`
- **Debian 9 Stretch**の場合は`stretch`
`rippled`の開発バージョンまたはプレリリースバージョンにアクセスするには、`stable`ではなく次のいずれかを使用します。
- `unstable` - プレインストールビルド([`release`ブランチ](https://github.com/ripple/rippled/tree/release)
- `nightly` - 実験/開発ビルド([`develop`ブランチ](https://github.com/ripple/rippled/tree/develop)
**警告:** 安定版ではないナイトリービルドはいつの時点でも壊れる可能性があります。これらのビルドを本番環境のサーバーに使用しないでください。
6. Rippleリポジトリを取得します。
$ sudo apt -y update
7. `rippled`ソフトウェアパッケージをインストールします。
$ sudo apt -y install rippled
8. `rippled`サービスのステータスをチェックします。
$ systemctl status rippled.service
`rippled`サービスが自動的に開始します。開始しない場合は、手動で開始できます。
$ sudo systemctl start rippled.service
起動時に自動で起動するようにするには、以下の手順に従います。
$ sudo systemctl enable rippled.service
## 次のステップ
{% include '_snippets/post-rippled-install.md' %}
<!--_ -->
## 関連項目
- **コンセプト:**
- [`rippled`サーバー](the-rippled-server.html)
- [コンセンサスについて](intro-to-consensus.html)
- **チュートリアル:**
- [rippledの構成](configure-rippled.html)
- [rippledのトラブルシューティング](troubleshoot-the-rippled-server.html)
- [rippled APIの使用開始](get-started-with-the-rippled-api.html)
- **リファレンス:**
- [rippled APIリファレンス](rippled-api.html)
- [`rippled`コマンドラインの使用](commandline-usage.html)
- [server_infoメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,106 @@
# rippled v1.3.xへの移行手順
このドキュメントでは、`rippled` 1.2.4以前のバージョンから`rippled` v1.3以降に移行するプロセスについて説明します。`rippled`のインストールプロセスがバージョン1.3では変更されたため、この移行プロセスは必須です。
このドキュメントでは、サポートされるプラットフォームでアップグレードするための移行手順について説明します。
- [CentOSまたはRed Hat Enterprise LinuxRHEL](#centosまたはred-hat-enterprise-linuxrhelでの移行)
- [Ubuntu Linux](#ubuntu-linuxでの移行)
その他のプラットフォームについては、ソースからコンパイルするためのアップデート手順を参照してください。([Ubuntu](build-run-rippled-ubuntu.html)、[macOS](build-run-rippled-macos.html)、または[Windows](https://github.com/ripple/rippled/tree/develop/Builds/VisualStudio2017)
## CentOSまたはRed Hat Enterprise LinuxRHELでの移行
Rippleの公式RPMリポジトリとそれを使用するための手順が変更されました。[自動更新](update-rippled-automatically-on-linux.html)を有効にしている場合は、システムで移行が自動的に実行されます。以前のリポジトリから新しいリポジトリに手動で移行するには、以下の手順を実行します。
1. `rippled`サーバーを停止します。
$ sudo systemctl stop rippled.service
2. 以前のRippleリポジトリパッケージを削除します。
$ sudo rpm -e ripple-repo
`rippled-repo`パッケージは、現在**廃止予定**です。このパッケージはバージョン1.3.1に対応するために、最後にもう一度だけ更新されました。今後は、リポジトリに変更があれば、`ripple.repo`ファイルに手動で変更を加える必要があります。
3. Rippleの新しいyumリポジトリを追加します。
$ cat << REPOFILE | sudo tee /etc/yum.repos.d/ripple.repo
[ripple-stable]
name=XRP Ledger Packages
baseurl=https://repos.ripple.com/repos/rippled-rpm/stable/
enabled=1
gpgcheck=0
gpgkey=https://repos.ripple.com/repos/rippled-rpm/stable/repodata/repomd.xml.key
repo_gpgcheck=1
REPOFILE
4. 新しい`rippled`パッケージをインストールします
$ sudo yum install rippled
バージョン1.3.1では構成ファイル`rippled.cfg`および`validators.txt`を変更する必要はありませんこのアップデート手順では既存の構成ファイルが現在のまま残ります
5. systemdユニットファイルを再度読み込みます
$ sudo systemctl daemon-reload
6. `rippled`サービスを開始します
$ sudo systemctl start rippled.service
**警告:** [自動更新](update-rippled-automatically-on-linux.html)を使用している場合この移行プロセスを実行した後も自動更新が続きますただし、**`ripple-repo`パッケージは現在は廃止予定**ですそのため今後はRippleのリポジトリへの変更があれば各自がrepoファイルを手動で更新する必要があります
## Ubuntu Linuxでの移行
バージョン1.3より前ではUbuntu Linuxに`rippled`をインストールする方法としてAlienを使用してRPMパッケージをインストールする方法がサポートされていました`rippled`v1.3.1からRippleはUbuntuおよびDebian Linux向けのネイティブパッケージを提供しておりこれが推奨のインストール方法となりますすでにRPMパッケージをインストールしている場合は[インストール手順](install-rippled-on-ubuntu.html)を実行してパッケージをアップグレードしネイティブAPT`.deb`パッケージに切り替えます
構成ファイル`/opt/ripple/etc/rippled.cfg`および`/opt/ripple/etc/validators.txt`に変更を加えている場合はインストール中に`apt`から構成ファイルをパッケージからの最新バージョンで上書きするかどうかを尋ねられる場合がありますバージョン1.3では構成ファイルに変更を加える必要はありませんそのため既存の構成ファイルはそのまま維持できます
1.3用のネイティブAPTパッケージをインストールした後でサービスを再読み込み/再起動する必要があります
1. systemdユニットファイルを再度読み込みます
$ sudo systemctl daemon-reload
2. `rippled`サービスを再起動します
$ sudo systemctl restart rippled.service
他のパッケージ用にAlienを使用する必要がなくなった場合は必要に応じて次の手順でAlienとその依存関係をアンインストールできます
1. Alienをアンインストールします
$ sudo apt -y remove alien
2. 使用していない依存関係をアンインストールします
$ sudo apt -y autoremove
### 自動更新
`rippled` v1.3パッケージにはUbuntuおよびDebian Linuxで動作する最新のauto-updateスクリプトが含まれています詳細は[Linuxでの`rippled`の自動更新](update-rippled-automatically-on-linux.html)を参照してください
## 関連項目
- **[`rippled` v1.3.1リリースノート](https://github.com/ripple/rippled/releases/1.3.1)**
- **コンセプト:**
- [`rippled`サーバー](the-rippled-server.html)
- [コンセンサスについて](intro-to-consensus.html)
- **チュートリアル:**
- [Linuxでの自動更新](update-rippled-automatically-on-linux.html)
- [rippledのトラブルシューティング](troubleshoot-the-rippled-server.html)
- [rippled APIの使用開始](get-started-with-the-rippled-api.html)
- **リファレンス:**
- [rippled APIリファレンス](rippled-api.html)
- [`rippled`コマンドラインの使用](commandline-usage.html)
- [server_infoメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -5,14 +5,15 @@
ネットワークに参加するための費用を抑えるため、`rippled`サーバーは一般製品のハードウェア上で快適に実行できる必要があります。Rippleでは、現時点で以下の最小要件を推奨します。 ネットワークに参加するための費用を抑えるため、`rippled`サーバーは一般製品のハードウェア上で快適に実行できる必要があります。Rippleでは、現時点で以下の最小要件を推奨します。
- オペレーティングシステム: - オペレーティングシステム:
- 本番環境: CentOSまたはRedHat Enterprise Linux最新リリースまたはUbuntu 16.04以降)をサポート - 本番環境: CentOSまたはRedHat Enterprise Linux最新リリース、Ubuntu16.04以降)、Debian9.xをサポート
- 開発環境: Mac OS X、Windows64ビット、またはほとんどのLinuxディストリビューション - 開発環境: Mac OS X、Windows64ビット、またはほとんどのLinuxディストリビューション
- CPU: 64ビットx86_64、2つ以上のコア - CPU: 64ビット x86_64、2つ以上のコア
- ディスク: データベースパーティション用に最低50GB。SSDを強く推奨最低でも1000IOPS、それよりも多いことが望ましい - ディスク: データベースパーティション用に最低50GB。SSDを強く推奨最低でも1000IOPS、それよりも多いことが望ましい
- RAM: 8GB以上 - RAM: 8GB以上
作業負荷によっては、Amazon EC2の`m3.large` VMサイズが適切な場合があります。高速のネットワーク接続が望ましいです。サーバーのクライアント処理負荷が増加すると、必要なリソースも増加します。 作業負荷によっては、Amazon EC2の`m3.large` VMサイズが適切な場合があります。高速のネットワーク接続が望ましいです。サーバーのクライアント処理負荷が増加すると、必要なリソースも増加します。
## 推奨される仕様 ## 推奨される仕様
企業の本番環境で最良のパフォーマンスを実現するため、Rippleでは、以下の仕様のベアメタルで`rippled`を実行することを推奨しています。 企業の本番環境で最良のパフォーマンスを実現するため、Rippleでは、以下の仕様のベアメタルで`rippled`を実行することを推奨しています。
@@ -21,10 +22,31 @@
- CPU: Intel Xeon 3以上、GHzプロセッサー、4コア、ハイパースレッディング有効 - CPU: Intel Xeon 3以上、GHzプロセッサー、4コア、ハイパースレッディング有効
- ディスク: SSD7000回以上の書き込み/秒、10,000回以上の読み取り/秒) - ディスク: SSD7000回以上の書き込み/秒、10,000回以上の読み取り/秒)
- RAM: - RAM:
- テスト用: 8GB以上 - テスト用: 8GB以上
- 本番環境用: 32GB - 本番環境用: 32GB
- ネットワーク: ホスト上にギガビットネットワークインターフェイスを備える企業データセンターネットワーク - ネットワーク: ホスト上にギガビットネットワークインターフェイスを備える企業データセンターネットワーク
## システム時刻
`rippled`サーバーは、正確な時刻が維持されていることを前提としています。`ntpd``chrony`などのデーモンで、ネットワークタイムプロトコルNTPを使用してシステムの時刻を同期することを推奨します。
## 関連項目 ## 関連項目
実稼働向けの推奨仕様および計画について詳しくは、[容量の計画](capacity-planning.html)を参照してください。 - **コンセプト:**
- [`rippled`サーバー](the-rippled-server.html)
- [コンセンサスについて](intro-to-consensus.html)
- **チュートリアル:**
- [容量の計画](capacity-planning.html) - 本番環境向けの推奨仕様および計画についての詳細情報
- [`rippled`のインストール](install-rippled.html)
- [rippledのトラブルシューティング](troubleshoot-the-rippled-server.html)
- **リファレンス:**
- [rippled APIリファレンス](rippled-api.html)
- [`rippled`コマンドラインの使用](commandline-usage.html)
- [server_infoメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,37 @@
# Linuxでの自動更新
Linuxでは、`rippled`が1回限りの`cron`構成を使用して最新バージョンに自動的にアップグレードされるように設定できます。可能であれば自動更新を有効にしておくことが推奨されます。
以下の手順では、`rippled`が[`yum`リポジトリからCentOS/RedHat](install-rippled-on-centos-rhel-with-yum.html)、または[`apt`Ubuntu/Debianを使用して](install-rippled-on-ubuntu.html)インストールされていることを前提としています。
自動更新を設定するには、以下の手順に従います。
1. `/opt/ripple/etc/update-rippled-cron`が存在することを確認します。存在しない場合は、([CentOS/Red Hat](update-rippled-manually-on-centos-rhel.html)または[Ubuntu/Debian](update-rippled-manually-on-ubuntu.html)を)手動で更新します。
2. `cron.d`フォルダーに、`/opt/ripple/etc/update-rippled-cron`構成ファイルへのsymlinkを作成します。
$ sudo ln -s /opt/ripple/etc/update-rippled-cron /etc/cron.d/
このcron構成は、インストール済みの`rippled`パッケージを新版のリリース後1時間以内に更新するためのスクリプトを実行します。同時に更新を実行しているすべてのサーバーが停止する可能性を抑えるため、このスクリプトはランダムな分数最大で59で更新を遅延して行います。
**注意:** 将来的には、Rippleのリポジトリが変更された場合に、更新を検索するスクリプトが実行されるURLの手動更新が必要となることがあります。必要な変更についての最新情報は、[XRP Ledgerブログ](/blog/)または[ripple-serverメーリングリスト](https://groups.google.com/forum/#!forum/ripple-server)でお知らせします。
## 関連項目
- **コンセプト:**
- [`rippled`サーバー](the-rippled-server.html)
- [コンセンサスについて](intro-to-consensus.html)
- **チュートリアル:**
- [容量の計画](capacity-planning.html)
- [rippledのトラブルシューティング](troubleshoot-the-rippled-server.html)
- **リファレンス:**
- [rippled APIリファレンス](rippled-api.html)
- [`rippled`コマンドラインの使用](commandline-usage.html)
- [server_infoメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -0,0 +1,41 @@
# CentOS/Red Hatでの手動更新
このページでは、CentOSまたはRed Hat Enterprise Linuxで最新リリースの`rippled`に手動で更新する手順を説明します。可能であれば手動更新ではなく[自動更新](update-rippled-automatically-on-linux.html)を設定することが推奨されます。
以下の手順は、[`rippled`がすでに`yum`リポジトリからインストール](install-rippled-on-centos-rhel-with-yum.html)されていることを前提としています。
**ヒント:** これらの手順をすべて一度に実行するには、`rippled`パッケージに含まれている`/opt/ripple/bin/update-rippled.sh`スクリプトを実行します。このスクリプトは`sudo`ユーザーとして実行する必要があります。
手動で更新するには、以下の手順を実行します。
1. 最新の`rippled`パッケージをダウンロードしてインストールします。
$ sudo yum update rippled
2. `systemd`ユニットファイルを再度読み込みます。
$ sudo systemctl daemon-reload
3. `rippled`サービスを再起動します。
$ sudo service rippled restart
## 関連項目
- **コンセプト:**
- [`rippled`サーバー](the-rippled-server.html)
- [コンセンサスについて](intro-to-consensus.html)
- **チュートリアル:**
- [`rippled` v1.3.xへの移行手順](rippled-1-3-migration-instructions.html) <!-- Note: remove when versions older than v1.3 are basically extinct -->
- [rippledのトラブルシューティング](troubleshoot-the-rippled-server.html)
- **リファレンス:**
- [rippled APIリファレンス](rippled-api.html)
- [`rippled`コマンドラインの使用](commandline-usage.html)
- [server_infoメソッド][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

Some files were not shown because too many files have changed in this diff Show More