mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-11-04 20:05:50 +00:00
revert HTML files to local links
This commit is contained in:
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,13 +110,13 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Concepts</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li class="level-2"><a href="concept-paths.html">Paths</a></li>
|
||||
<li class="level-2"><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li class="level-2"><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -127,8 +127,8 @@
|
||||
<main class="main" role="main">
|
||||
<div class="content">
|
||||
<h1 id="fee-voting">Fee Voting</h1>
|
||||
<p>Validators can vote for changes to basic <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> as well as <a href="https://ripple.com/build/reserves/">reserve requirements</a>. If the preferences in a validator's configuration are different than the network's current settings, the validator expresses its preferences to the network periodically. If a quorum of validators agrees on a change, they can apply a change that takes effect thereafter. Validators may do this for various reasons, especially to reflect long-term changes in the value of XRP.</p>
|
||||
<p>Operators of <a href="https://ripple.com/build/rippled-setup/#running-a-validator"><code>rippled</code> validators</a> can set their preferences for the transaction cost and reserve requirements in the <code>[voting]</code> stanza of the <code>rippled.cfg</code> file. <strong>Caution:</strong> insufficient requirements could expose the Ripple peer-to-peer network to denial-of-service attacks. The parameters you can set are as follows:</p>
|
||||
<p>Validators can vote for changes to basic <a href="concept-transaction-cost.html">transaction cost</a> as well as <a href="concept-reserves.html">reserve requirements</a>. If the preferences in a validator's configuration are different than the network's current settings, the validator expresses its preferences to the network periodically. If a quorum of validators agrees on a change, they can apply a change that takes effect thereafter. Validators may do this for various reasons, especially to reflect long-term changes in the value of XRP.</p>
|
||||
<p>Operators of <a href="tutorial-rippled-setup.html#running-a-validator"><code>rippled</code> validators</a> can set their preferences for the transaction cost and reserve requirements in the <code>[voting]</code> stanza of the <code>rippled.cfg</code> file. <strong>Caution:</strong> insufficient requirements could expose the Ripple peer-to-peer network to denial-of-service attacks. The parameters you can set are as follows:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -158,7 +158,7 @@
|
||||
<h3 id="voting-process">Voting Process</h3>
|
||||
<p>Every 256th ledger is called a "flag" ledger. (A flag ledger is defined such that the <code>ledger_index</code> <a href="https://en.wikipedia.org/wiki/Modulo_operation">modulo</a> <code>256</code> is equal to <code>0</code>.) In the ledger immediately before the flag ledger, each validator whose account reserve or transaction cost preferences are different than the current network setting distributes a "vote" message alongside its ledger validation, indicating the values that validator prefers.</p>
|
||||
<p>In the flag ledger itself, nothing happens, but validators receive and take note of the votes from other validators they trust. </p>
|
||||
<p>After counting the votes of other validators, each validator attempts to compromise between its own preferences and the preferences of a majority of validators it trusts. (For example, if one validator wants to raise the minimum transaction cost from 10 to 100, but most validators only want to raise it from 10 to 20, the one validator settles on the change to raise the cost to 20. However, the one validator never settles on a value lower than 10 or higher than 100.) If a compromise is possible, the validator inserts a <a href="https://ripple.com/build/transactions/#setfee">SetFee pseudo-transaction</a> into its proposal for the ledger following the flag ledger. Other validators who want the same change insert an identical SetFee pseudo-transaction into their proposals for the same ledger. (Validators whose preferences match the existing network settings do nothing.) If a SetFee psuedo-transaction survives the consensus process to be included in a validated ledger, then the new transaction cost and reserve settings denoted by the SetFee pseudo-transaction take effect starting with the following ledger.</p>
|
||||
<p>After counting the votes of other validators, each validator attempts to compromise between its own preferences and the preferences of a majority of validators it trusts. (For example, if one validator wants to raise the minimum transaction cost from 10 to 100, but most validators only want to raise it from 10 to 20, the one validator settles on the change to raise the cost to 20. However, the one validator never settles on a value lower than 10 or higher than 100.) If a compromise is possible, the validator inserts a <a href="reference-transaction-format.html#setfee">SetFee pseudo-transaction</a> into its proposal for the ledger following the flag ledger. Other validators who want the same change insert an identical SetFee pseudo-transaction into their proposals for the same ledger. (Validators whose preferences match the existing network settings do nothing.) If a SetFee psuedo-transaction survives the consensus process to be included in a validated ledger, then the new transaction cost and reserve settings denoted by the SetFee pseudo-transaction take effect starting with the following ledger.</p>
|
||||
<p>In short:</p>
|
||||
<ul>
|
||||
<li><strong>Flag ledger -1</strong>: Validators submit votes.</li>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,13 +110,13 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Concepts</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li class="level-2"><a href="concept-paths.html">Paths</a></li>
|
||||
<li class="level-2"><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li class="level-2"><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -128,11 +128,11 @@
|
||||
<div class="content">
|
||||
<h1 id="fees-disambiguation">Fees (Disambiguation)</h1>
|
||||
<p>The Ripple Consensus Ledger is a decentralized ledger, secured by cryptography, and operated by a distributed peer-to-peer network of servers. This means that no one party, not even the Ripple, Inc., can charge a fee for access to the network.</p>
|
||||
<p>However, the rules of the Ripple Consensus Ledger include several types of fees, including the <a href="https://ripple.com/build/transaction-cost/"><em>transaction cost</em></a> and <a href="https://ripple.com/build/reserves/"><em>reserve requirement</em></a>, which protect the ledger against abuse. (These neutral fees are not paid to anyone.) There are also several optional ways that users of the Consensus Ledger can collect fees from each other, both inside and outside the Ripple Consensus Ledger.</p>
|
||||
<p>However, the rules of the Ripple Consensus Ledger include several types of fees, including the <a href="concept-transaction-cost.html"><em>transaction cost</em></a> and <a href="concept-reserves.html"><em>reserve requirement</em></a>, which protect the ledger against abuse. (These neutral fees are not paid to anyone.) There are also several optional ways that users of the Consensus Ledger can collect fees from each other, both inside and outside the Ripple Consensus Ledger.</p>
|
||||
<h2 id="in-the-ledger">In the Ledger</h2>
|
||||
<p>The <em><strong>transaction cost</strong></em> (sometimes called the transaction fee) is a miniscule amount of XRP destroyed in order to send a transaction. This cost scales with the load of the network, which protects the peer-to-peer network from spam. See <a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a> for more information.</p>
|
||||
<p>The <em><strong>account reserve</strong></em> is a minimum amount of XRP that an account must possess. It scales with the number of objects the account owns in the ledger. This disincentivizes users from increasing the size of the ledger needlessly. See <a href="https://ripple.com/build/reserves/">Reserves</a> for more information.</p>
|
||||
<p><em><strong>Transfer fees</strong></em> are optional percentage fees that gateways can charge to transfer the currencies they issue to other accounts within the Ripple Consensus Ledger. See <a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a> for more information.</p>
|
||||
<p>The <em><strong>transaction cost</strong></em> (sometimes called the transaction fee) is a miniscule amount of XRP destroyed in order to send a transaction. This cost scales with the load of the network, which protects the peer-to-peer network from spam. See <a href="concept-transaction-cost.html">Transaction Cost</a> for more information.</p>
|
||||
<p>The <em><strong>account reserve</strong></em> is a minimum amount of XRP that an account must possess. It scales with the number of objects the account owns in the ledger. This disincentivizes users from increasing the size of the ledger needlessly. See <a href="concept-reserves.html">Reserves</a> for more information.</p>
|
||||
<p><em><strong>Transfer fees</strong></em> are optional percentage fees that gateways can charge to transfer the currencies they issue to other accounts within the Ripple Consensus Ledger. See <a href="concept-transfer-fees.html">Transfer Fees</a> for more information.</p>
|
||||
<p><em><strong>Trust line quality</strong></em> is a setting that allows an account to value balances on a trust line at higher or lower than face value. This can lead to situations that are similar to charging a fee. Trust line quality does not apply to XRP, which is not tied to a trust line.</p>
|
||||
<h2 id="outside-the-ledger">Outside the Ledger</h2>
|
||||
<p>While the above values are the only fees built into the Ripple Consensus Ledger, people can still invent ways to charge fees associated with the ledger. A common example is withdrawal or deposit fees charged by gateways, which are assessed when you use the gateway to get money into or out of the Ripple Consensus Ledger. This may cover the costs of transferring balances on traditional payment rails, or it may be in addition to those costs.</p>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,13 +110,13 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Concepts</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li class="level-2"><a href="concept-paths.html">Paths</a></li>
|
||||
<li class="level-2"><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li class="level-2"><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -141,21 +141,21 @@
|
||||
<li>Payments can still occur directly between the two parties of the frozen trust line.</li>
|
||||
<li>The counterparty of that trust line can no longer decrease its balance on the frozen trust line, except in direct payments to the issuer. The counterparty can only send the frozen issuances directly to the issuer.</li>
|
||||
<li>The counterparty can still receive payments from others on the frozen trust line.</li>
|
||||
<li>The counterparty's offers to sell the currency issued on the frozen trust line are <a href="https://ripple.com/build/transactions/#lifecycle-of-an-offer">considered unfunded</a>.</li>
|
||||
<li>The counterparty's offers to sell the currency issued on the frozen trust line are <a href="reference-transaction-format.html#lifecycle-of-an-offer">considered unfunded</a>.</li>
|
||||
</ul>
|
||||
<p>A gateway can freeze the trust line linking it to a counterparty if that counterparty shows suspicious activity or violates the gateway's terms of use. The gateway should also freeze the counterparty in any other systems the gateway operates that are connected to the Ripple Consensus Ledger. (Otherwise, an account might still be able to engage in undesired activity by sending payments through the gateway.)</p>
|
||||
<p>An individual account can freeze its trust line to a gateway. This has no effect on transactions between the gateway and other users. It does, however, prevent other accounts, including <a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">operational accounts</a>, from sending that gateway's issued currency to the individual account. This type of individual freeze has no effect on offers.</p>
|
||||
<p>An individual account can freeze its trust line to a gateway. This has no effect on transactions between the gateway and other users. It does, however, prevent other accounts, including <a href="concept-issuing-and-operational-accounts.html">operational accounts</a>, from sending that gateway's issued currency to the individual account. This type of individual freeze has no effect on offers.</p>
|
||||
<p>The Individual Freeze applies to a single currency only. In order to freeze multiple currencies with a particular counterparty, the account must enable Individual Freeze on the trust lines for each currency individually.</p>
|
||||
<p>An account cannot enable the Individual Freeze setting if it has previously enabled the <a href="#no-freeze">No Freeze</a> setting.</p>
|
||||
<h2 id="global-freeze">Global Freeze</h2>
|
||||
<p>The <strong>Global Freeze</strong> feature is a setting on an account. When an issuing account enables the Global Freeze feature, the following rules apply:</p>
|
||||
<ul>
|
||||
<li>All counterparties of the frozen issuing account can no longer decrease the balances in their trust lines to the frozen account, except in direct payments to the issuer. (This also affects any <a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">operational accounts</a>.)</li>
|
||||
<li>All counterparties of the frozen issuing account can no longer decrease the balances in their trust lines to the frozen account, except in direct payments to the issuer. (This also affects any <a href="concept-issuing-and-operational-accounts.html">operational accounts</a>.)</li>
|
||||
<li>Counterparties of the frozen issuing account can still send and receive payments directly to and from the issuing account.</li>
|
||||
<li>All offers to sell currencies issued by the frozen account are <a href="https://ripple.com/build/transactions/#lifecycle-of-an-offer">considered unfunded</a>.</li>
|
||||
<li>All offers to sell currencies issued by the frozen account are <a href="reference-transaction-format.html#lifecycle-of-an-offer">considered unfunded</a>.</li>
|
||||
</ul>
|
||||
<p>It can be useful to enable Global Freeze on a gateway's <a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">issuing account</a> if an operational account is compromised, or immediately after regaining control of a compromised issuing account. This stops the flow of funds, preventing attackers from getting away with any more money or at least making it easier to track what happened. In addition to enacting a Global Freeze in the Ripple Consensus Ledger, a financial institution should also suspend activities in its connectors to outside systems.</p>
|
||||
<p>It can also be useful to enable Global Freeze if a gateway intends to migrate to a new <a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">issuing account</a>, or if the gateway intends to cease doing business. This locks the funds at a specific point in time, so users cannot trade them away for other currencies.</p>
|
||||
<p>It can be useful to enable Global Freeze on a gateway's <a href="concept-issuing-and-operational-accounts.html">issuing account</a> if an operational account is compromised, or immediately after regaining control of a compromised issuing account. This stops the flow of funds, preventing attackers from getting away with any more money or at least making it easier to track what happened. In addition to enacting a Global Freeze in the Ripple Consensus Ledger, a financial institution should also suspend activities in its connectors to outside systems.</p>
|
||||
<p>It can also be useful to enable Global Freeze if a gateway intends to migrate to a new <a href="concept-issuing-and-operational-accounts.html">issuing account</a>, or if the gateway intends to cease doing business. This locks the funds at a specific point in time, so users cannot trade them away for other currencies.</p>
|
||||
<p>Global Freeze applies to <em>all</em> currencies issued and held by the account. You cannot enable Global Freeze for only one currency. If you want to have the ability to freeze some currencies and not others, you should use different accounts for each currency.</p>
|
||||
<p>An account can always enable the Global Freeze setting. However, if the account has previously enabled the <a href="#no-freeze">No Freeze</a> setting, it can never <em>disable</em> Global Freeze.</p>
|
||||
<h2 id="no-freeze">No Freeze</h2>
|
||||
@@ -166,11 +166,11 @@
|
||||
</ul>
|
||||
<p>The Ripple Consensus Ledger cannot force a gateway to honor the obligations that its issued funds represent, so giving up the ability to enable a Global Freeze cannot protect customers. However, giving up the ability to <em>disable</em> a Global Freeze ensures that the Global Freeze feature is not used unfairly against some customers.</p>
|
||||
<p>The No Freeze setting applies to all currencies issued to and from an account. If you want to be able to freeze some currencies but not others, you should use different accounts for each currency.</p>
|
||||
<p>You can only enable the No Freeze setting with a transaction signed by your account's master key. You cannot use a <a href="https://ripple.com/build/transactions/#setregularkey">Regular Key</a> or a <a href="https://wiki.ripple.com/Multisign">multi-signed transaction</a> to enable No Freeze.</p>
|
||||
<p>You can only enable the No Freeze setting with a transaction signed by your account's master key. You cannot use a <a href="reference-transaction-format.html#setregularkey">Regular Key</a> or a <a href="https://wiki.ripple.com/Multisign">multi-signed transaction</a> to enable No Freeze.</p>
|
||||
<h1 id="technical-details">Technical Details</h1>
|
||||
<h2 id="enabling-or-disabling-individual-freeze">Enabling or Disabling Individual Freeze</h2>
|
||||
<h3 id="using-rippled">Using <code>rippled</code></h3>
|
||||
<p>To enable or disable Individual Freeze on a specific trust line, send a <code>TrustSet</code> transaction. Use the <a href="https://ripple.com/build/transactions/#trustset-flags"><code>tfSetFreeze</code> flag</a> to enable a freeze, and the <code>tfClearFreeze</code> flag to disable it. The fields of the transaction should be as follows:</p>
|
||||
<p>To enable or disable Individual Freeze on a specific trust line, send a <code>TrustSet</code> transaction. Use the <a href="reference-transaction-format.html#trustset-flags"><code>tfSetFreeze</code> flag</a> to enable a freeze, and the <code>tfClearFreeze</code> flag to disable it. The fields of the transaction should be as follows:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -217,8 +217,8 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Set the <code>Fee</code>, <code>Sequence</code>, and <code>LastLedgerSequence</code> parameters <a href="https://ripple.com/build/transactions/#signing-and-sending-transactions">in the typical way</a>.</p>
|
||||
<p>Example of submitting a TrustSet transaction to enable an individual freeze using the <a href="https://ripple.com/build/rippled-apis/#websocket-api">WebSocket API</a>:</p>
|
||||
<p>Set the <code>Fee</code>, <code>Sequence</code>, and <code>LastLedgerSequence</code> parameters <a href="reference-transaction-format.html#signing-and-sending-transactions">in the typical way</a>.</p>
|
||||
<p>Example of submitting a TrustSet transaction to enable an individual freeze using the <a href="reference-rippled.html#websocket-api">WebSocket API</a>:</p>
|
||||
<pre><code>{
|
||||
"id": 12,
|
||||
"command": "submit",
|
||||
@@ -242,7 +242,7 @@
|
||||
</code></pre>
|
||||
<p>(<strong>Reminder</strong>: Never transmit your account secret to an untrusted server or over an insecure channel.)</p>
|
||||
<h3 id="using-rippleapi">Using RippleAPI</h3>
|
||||
<p>To enable or disable Individual Freeze on a specific trust line, prepare a <em>Trustline</em> transaction using the <a href="https://ripple.com/build/rippleapi/#preparetrustline">prepareTrustline</a> method. The fields of the <code>trustline</code> parameter should be set as follows:</p>
|
||||
<p>To enable or disable Individual Freeze on a specific trust line, prepare a <em>Trustline</em> transaction using the <a href="reference-rippleapi.html#preparetrustline">prepareTrustline</a> method. The fields of the <code>trustline</code> parameter should be set as follows:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -255,12 +255,12 @@
|
||||
<tr>
|
||||
<td>currency</td>
|
||||
<td>String</td>
|
||||
<td>The <a href="https://ripple.com/build/rippleapi/#currency">currency</a> of the trust line to freeze</td>
|
||||
<td>The <a href="reference-rippleapi.html#currency">currency</a> of the trust line to freeze</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>counterparty</td>
|
||||
<td>String</td>
|
||||
<td>The <a href="https://ripple.com/build/rippleapi/#ripple-address">Ripple address</a> of the counterparty</td>
|
||||
<td>The <a href="reference-rippleapi.html#ripple-address">Ripple address</a> of the counterparty</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>limit</td>
|
||||
@@ -274,7 +274,7 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The rest of the <a href="https://ripple.com/build/rippleapi/#transaction-flow">transaction flow</a> is the same as any other transaction.</p>
|
||||
<p>The rest of the <a href="reference-rippleapi.html#transaction-flow">transaction flow</a> is the same as any other transaction.</p>
|
||||
<p>Example JavaScript (ECMAScript 6) code to enable Individual Freeze on a trust line:</p>
|
||||
<pre><code class="js">const {RippleAPI} = require('ripple-lib');
|
||||
|
||||
@@ -336,8 +336,8 @@ api.connect().then(() => {
|
||||
</code></pre>
|
||||
<h2 id="enabling-or-disabling-global-freeze">Enabling or Disabling Global Freeze</h2>
|
||||
<h3 id="using-rippled-1">Using <code>rippled</code></h3>
|
||||
<p>To enable Global Freeze on an account, send an <code>AccountSet</code> transaction with the <a href="https://ripple.com/build/transactions/#accountset-flags">asfGlobalFreeze flag value</a> in the <code>SetFlag</code> field. To disable Global Freeze, put the asfGlobalFreeze flag value in the <code>ClearFlag</code> field instead.</p>
|
||||
<p>Example of submitting an AccountSet transaction to enable Global Freeze using the <a href="https://ripple.com/build/rippled-apis/#websocket-api">WebSocket API</a>:</p>
|
||||
<p>To enable Global Freeze on an account, send an <code>AccountSet</code> transaction with the <a href="reference-transaction-format.html#accountset-flags">asfGlobalFreeze flag value</a> in the <code>SetFlag</code> field. To disable Global Freeze, put the asfGlobalFreeze flag value in the <code>ClearFlag</code> field instead.</p>
|
||||
<p>Example of submitting an AccountSet transaction to enable Global Freeze using the <a href="reference-rippled.html#websocket-api">WebSocket API</a>:</p>
|
||||
<pre><code>{
|
||||
"id": 12,
|
||||
"command": "submit",
|
||||
@@ -357,7 +357,7 @@ api.connect().then(() => {
|
||||
</code></pre>
|
||||
<p>(<strong>Reminder</strong>: Never transmit your account secret to an untrusted server or over an insecure channel.)</p>
|
||||
<h3 id="using-rippleapi-1">Using RippleAPI</h3>
|
||||
<p>To enable or disable Global Freeze on an account, prepare a <strong>Settings</strong> transaction using the <a href="https://ripple.com/build/rippleapi/#preparesettings">prepareSettings</a> method. The <code>settings</code> parameter should be an object set as follows:</p>
|
||||
<p>To enable or disable Global Freeze on an account, prepare a <strong>Settings</strong> transaction using the <a href="reference-rippleapi.html#preparesettings">prepareSettings</a> method. The <code>settings</code> parameter should be an object set as follows:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -374,7 +374,7 @@ api.connect().then(() => {
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The rest of the <a href="https://ripple.com/build/rippleapi/#transaction-flow">transaction flow</a> is the same as any other transaction.</p>
|
||||
<p>The rest of the <a href="reference-rippleapi.html#transaction-flow">transaction flow</a> is the same as any other transaction.</p>
|
||||
<p>Example JavaScript (ECMAScript 6) code to enable Global Freeze on an account:</p>
|
||||
<pre><code class="js">const {RippleAPI} = require('ripple-lib');
|
||||
|
||||
@@ -416,8 +416,8 @@ api.connect().then(() => {
|
||||
</code></pre>
|
||||
<h2 id="enabling-no-freeze">Enabling No Freeze</h2>
|
||||
<h3 id="using-rippled-2">Using <code>rippled</code></h3>
|
||||
<p>To enable No Freeze on an account, send an <code>AccountSet</code> transaction with the <a href="https://ripple.com/build/transactions/#accountset-flags">asfNoFreeze flag value</a> in the <code>SetFlag</code> field. You must sign this transaction using the master key. Once enabled, you cannot disable No Freeze.</p>
|
||||
<p>Example of submitting an AccountSet transaction to enable No Freeze using the <a href="https://ripple.com/build/rippled-apis/#websocket-api">WebSocket API</a>:</p>
|
||||
<p>To enable No Freeze on an account, send an <code>AccountSet</code> transaction with the <a href="reference-transaction-format.html#accountset-flags">asfNoFreeze flag value</a> in the <code>SetFlag</code> field. You must sign this transaction using the master key. Once enabled, you cannot disable No Freeze.</p>
|
||||
<p>Example of submitting an AccountSet transaction to enable No Freeze using the <a href="reference-rippled.html#websocket-api">WebSocket API</a>:</p>
|
||||
<p>WebSocket request:</p>
|
||||
<pre><code>{
|
||||
"id": 12,
|
||||
@@ -438,7 +438,7 @@ api.connect().then(() => {
|
||||
</code></pre>
|
||||
<p>(<strong>Reminder</strong>: Never transmit your account secret to an untrusted server or over an insecure channel.)</p>
|
||||
<h3 id="using-rippleapi-2">Using RippleAPI</h3>
|
||||
<p>To enable No Freeze on an account, prepare a <strong>Settings</strong> transaction using the <a href="https://ripple.com/build/rippleapi/#preparesettings">prepareSettings</a> method. Once enabled, you cannot disable No Freeze. The <code>settings</code> parameter should be an object set as follows:</p>
|
||||
<p>To enable No Freeze on an account, prepare a <strong>Settings</strong> transaction using the <a href="reference-rippleapi.html#preparesettings">prepareSettings</a> method. Once enabled, you cannot disable No Freeze. The <code>settings</code> parameter should be an object set as follows:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -455,7 +455,7 @@ api.connect().then(() => {
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>You must <a href="https://ripple.com/build/rippleapi/#sign">sign</a> this transaction using the master key. The rest of the <a href="https://ripple.com/build/rippleapi/#transaction-flow">transaction flow</a> is the same as any other transaction.</p>
|
||||
<p>You must <a href="reference-rippleapi.html#sign">sign</a> this transaction using the master key. The rest of the <a href="reference-rippleapi.html#transaction-flow">transaction flow</a> is the same as any other transaction.</p>
|
||||
<p>Example JavaScript (ECMAScript 6) code to enable No Freeze on an account:</p>
|
||||
<pre><code class="js">const {RippleAPI} = require('ripple-lib');
|
||||
|
||||
@@ -496,7 +496,7 @@ api.connect().then(() => {
|
||||
</code></pre>
|
||||
<h2 id="checking-for-individual-freeze">Checking for Individual Freeze</h2>
|
||||
<h3 id="using-rippled-3">Using <code>rippled</code></h3>
|
||||
<p>To see if a trust line has an Individual Freeze enabled, use the <a href="https://ripple.com/build/rippled-apis/#account-lines"><code>account_lines</code> method</a> with the following parameters:</p>
|
||||
<p>To see if a trust line has an Individual Freeze enabled, use the <a href="reference-rippled.html#account-lines"><code>account_lines</code> method</a> with the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -579,7 +579,7 @@ api.connect().then(() => {
|
||||
</code></pre>
|
||||
<p>The field <code>"freeze": true</code> indicates that rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn has enabled Individual Freeze on the USD trust line to rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW. The lack of a field <code>"freeze_peer": true</code> indicates that the counterparty has <em>not</em> frozen the trust line.</p>
|
||||
<h3 id="using-rippleapi-3">Using RippleAPI</h3>
|
||||
<p>To see if a trust line has an Individual Freeze enabled, use the <a href="https://ripple.com/build/rippleapi/#gettrustlines"><code>getTrustlines</code> method</a> with the following parameters:</p>
|
||||
<p>To see if a trust line has an Individual Freeze enabled, use the <a href="reference-rippleapi.html#gettrustlines"><code>getTrustlines</code> method</a> with the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -664,7 +664,7 @@ api.connect().then(() => {
|
||||
</code></pre>
|
||||
<h2 id="checking-for-global-freeze-and-no-freeze">Checking for Global Freeze and No Freeze</h2>
|
||||
<h3 id="using-rippled-4">Using <code>rippled</code></h3>
|
||||
<p>To see if an account has Global Freeze and/or No Freeze enabled, use the <a href="https://ripple.com/build/rippled-apis/#account-lines"><code>account_info</code> method</a> with the following parameters:</p>
|
||||
<p>To see if an account has Global Freeze and/or No Freeze enabled, use the <a href="reference-rippled.html#account-lines"><code>account_info</code> method</a> with the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -688,8 +688,8 @@ api.connect().then(() => {
|
||||
</table>
|
||||
<p>Check the value of the <code>account_data.Flags</code> field of the response using the <a href="https://en.wikipedia.org/wiki/Bitwise_operation#AND">bitwise-AND</a> operator:</p>
|
||||
<ul>
|
||||
<li>If <code>Flags</code> AND <code>0x00400000</code> (<a href="https://ripple.com/build/ledger-format/#accountroot-flags">lsfGlobalFreeze</a>) is <em>nonzero</em>: Global Freeze is enabled.</li>
|
||||
<li>If <code>Flags</code> AND <code>0x00200000</code> (<a href="https://ripple.com/build/ledger-format/#accountroot-flags">lsfNoFreeze</a>) is <em>nonzero</em>: No Freeze is enabled.</li>
|
||||
<li>If <code>Flags</code> AND <code>0x00400000</code> (<a href="reference-ledger-format.html#accountroot-flags">lsfGlobalFreeze</a>) is <em>nonzero</em>: Global Freeze is enabled.</li>
|
||||
<li>If <code>Flags</code> AND <code>0x00200000</code> (<a href="reference-ledger-format.html#accountroot-flags">lsfNoFreeze</a>) is <em>nonzero</em>: No Freeze is enabled.</li>
|
||||
</ul>
|
||||
<p>Example WebSocket request:</p>
|
||||
<pre><code>{
|
||||
@@ -741,7 +741,7 @@ console.log(currentFlags & lsfNoFreeze); //0
|
||||
//therefore, No Freeze is not enabled
|
||||
</code></pre>
|
||||
<h3 id="using-rippleapi-4">Using RippleAPI</h3>
|
||||
<p>To see if an account has Global Freeze and/or No Freeze enabled, use the <a href="https://ripple.com/build/rippleapi/#getsettings"><code>getSettings</code> method</a> with the following parameters:</p>
|
||||
<p>To see if an account has Global Freeze and/or No Freeze enabled, use the <a href="reference-rippleapi.html#getsettings"><code>getSettings</code> method</a> with the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,8 +110,8 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Best Practices</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li class="level-2"><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li class="level-2"><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,13 +110,13 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Concepts</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li class="level-2"><a href="concept-paths.html">Paths</a></li>
|
||||
<li class="level-2"><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li class="level-2"><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -142,15 +142,15 @@
|
||||
<p><a href="img/paths-examples.png"><img alt="Diagram of three example paths" src="img/paths-examples.png"/></a></p>
|
||||
<h1 id="technical-details">Technical Details</h1>
|
||||
<h2 id="pathfinding">Pathfinding</h2>
|
||||
<p>The <code>rippled</code> API has two methods that can be used for pathfinding. The <a href="https://ripple.com/build/rippled-apis/#ripple-path-find"><code>ripple_path_find</code> command</a> does a one-time lookup of possible path sets. The <a href="https://ripple.com/build/rippled-apis/#path-find"><code>path_find</code> command</a> (WebSocket only) expands on the initial search with follow-up responses whenever a ledger closes or the server finds a better path.</p>
|
||||
<p>You can have <code>rippled</code> automatically fill in paths when you sign it, by including the <code>build_path</code> field in a request to the <a href="https://ripple.com/build/rippled-apis/#sign"><code>sign</code> command</a> or <a href="https://ripple.com/build/rippled-apis/#sign-and-submit-mode"><code>submit</code> command (sign-and-submit mode)</a>. However, we recommend pathfinding separately and confirming the results prior to signing, in order to avoid surprises. There are no guarantees on how expensive the paths the server finds will be at the time of submission. (Although <code>rippled</code> is designed to search for the cheapest paths possible, it may not always find them. Untrustworthy <code>rippled</code> instances could also be modified to change this behavior for profit.)</p>
|
||||
<p>The <code>rippled</code> API has two methods that can be used for pathfinding. The <a href="reference-rippled.html#ripple-path-find"><code>ripple_path_find</code> command</a> does a one-time lookup of possible path sets. The <a href="reference-rippled.html#path-find"><code>path_find</code> command</a> (WebSocket only) expands on the initial search with follow-up responses whenever a ledger closes or the server finds a better path.</p>
|
||||
<p>You can have <code>rippled</code> automatically fill in paths when you sign it, by including the <code>build_path</code> field in a request to the <a href="reference-rippled.html#sign"><code>sign</code> command</a> or <a href="reference-rippled.html#sign-and-submit-mode"><code>submit</code> command (sign-and-submit mode)</a>. However, we recommend pathfinding separately and confirming the results prior to signing, in order to avoid surprises. There are no guarantees on how expensive the paths the server finds will be at the time of submission. (Although <code>rippled</code> is designed to search for the cheapest paths possible, it may not always find them. Untrustworthy <code>rippled</code> instances could also be modified to change this behavior for profit.)</p>
|
||||
<p>Finding paths is a very challenging problem that changes slightly every few seconds as new ledgers are validated, so <code>rippled</code> is not designed to find the absolute best path. Still, you can find several possible paths and estimate the cost of delivering a particular amount.</p>
|
||||
<h2 id="implied-steps">Implied Steps</h2>
|
||||
<p>By convention, several steps of a path are implied by the <a href="https://ripple.com/build/transactions/#payment">fields of the Payment transaction</a>: specifically, the <code>Account</code> (sender), <code>Destination</code> (receiver), <code>Amount</code> (currency and amount to be delivered) and <code>SendMax</code> (currency and amount to be sent, if specified). The implied steps are as follows:</p>
|
||||
<p>By convention, several steps of a path are implied by the <a href="reference-transaction-format.html#payment">fields of the Payment transaction</a>: specifically, the <code>Account</code> (sender), <code>Destination</code> (receiver), <code>Amount</code> (currency and amount to be delivered) and <code>SendMax</code> (currency and amount to be sent, if specified). The implied steps are as follows:</p>
|
||||
<ul>
|
||||
<li>The first step of a path is always implied to be the sender of the transaction, as defined by the transaction's <code>Account</code> field.</li>
|
||||
<li>If the transaction includes a <code>SendMax</code> field with an <code>issuer</code> that is not the sender of the transaction, that issuer is implied to be the second step of the path.<ul>
|
||||
<li>If <code>issuer</code> of the <code>SendMax</code> <em>is</em> the sending account, then the path starts at the sending account, and may use any of that account's trust lines in the given currency. See <a href="https://ripple.com/build/transactions/#special-issuer-values-for-sendmax-and-amount">special values for SendMax and Amount</a> for details.</li>
|
||||
<li>If <code>issuer</code> of the <code>SendMax</code> <em>is</em> the sending account, then the path starts at the sending account, and may use any of that account's trust lines in the given currency. See <a href="reference-transaction-format.html#special-issuer-values-for-sendmax-and-amount">special values for SendMax and Amount</a> for details.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>If the <code>Amount</code> field of the transaction includes an <code>issuer</code> that is not the same as the <code>Destination</code> of the transaction, that issuer is implied to be the second-to-last step of the path.</li>
|
||||
@@ -169,7 +169,7 @@
|
||||
</ul>
|
||||
<p>The following diagram enumerates all possible default paths:
|
||||
<a href="img/paths-default_paths.png"><img alt="Diagram of default paths" src="img/paths-default_paths.png"/></a></p>
|
||||
<p>You can use the <a href="https://ripple.com/build/transactions/#payment-flags"><code>tfNoDirectRipple</code> flag</a> to disable the default path. In this case, the transaction can only execute using the paths explicitly included in the transaction. Traders can use this option to take arbitrage opportunities.</p>
|
||||
<p>You can use the <a href="reference-transaction-format.html#payment-flags"><code>tfNoDirectRipple</code> flag</a> to disable the default path. In this case, the transaction can only execute using the paths explicitly included in the transaction. Traders can use this option to take arbitrage opportunities.</p>
|
||||
<h2 id="path-specifications">Path Specifications</h2>
|
||||
<p>A path set is an array. Each member of the path set is another array that represents an individual <em>path</em>. Each member of a path is an object that specifies the step. A step has the following fields:</p>
|
||||
<table>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,13 +110,13 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Concepts</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li class="level-2"><a href="concept-paths.html">Paths</a></li>
|
||||
<li class="level-2"><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li class="level-2"><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -139,18 +139,18 @@
|
||||
<h3 id="owner-reserves">Owner Reserves</h3>
|
||||
<p>Many objects in the ledger are owned by a particular account, and therefore count toward the reserve requirement of that account. When objects are removed from the ledger, they no longer count against their owner's reserve requirement.</p>
|
||||
<ul>
|
||||
<li><a href="https://ripple.com/build/ledger-format/#offer">Offers</a> are owned by the account that placed them. An Offer can be automatically removed from the ledger if it is fully consumed or if it is found unfunded during transaction processing. Alternatively, the owner can cancel an offer by sending an <a href="https://ripple.com/build/transactions/#offercancel">OfferCancel transaction</a>, or by sending an <a href="https://ripple.com/build/transactions/#offercreate">OfferCreate transaction</a> that contains an <code>OfferSequence</code> parameter.</li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/#ripplestate">Trust lines</a> are shared between two accounts. The owner reserve can apply to one or both of the accounts, depending on whether the fields that account controls are in their default state. See <a href="https://ripple.com/build/ledger-format/#contributing-to-the-owner-reserve">Contributing to the Owner Reserve</a> for details.</li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/#directorynode">Owner directories</a> list all the ledger nodes that contribute to an account's owner reserve. However, the owner directory itself does not count towards the reserve.</li>
|
||||
<li><a href="reference-ledger-format.html#offer">Offers</a> are owned by the account that placed them. An Offer can be automatically removed from the ledger if it is fully consumed or if it is found unfunded during transaction processing. Alternatively, the owner can cancel an offer by sending an <a href="reference-transaction-format.html#offercancel">OfferCancel transaction</a>, or by sending an <a href="reference-transaction-format.html#offercreate">OfferCreate transaction</a> that contains an <code>OfferSequence</code> parameter.</li>
|
||||
<li><a href="reference-ledger-format.html#ripplestate">Trust lines</a> are shared between two accounts. The owner reserve can apply to one or both of the accounts, depending on whether the fields that account controls are in their default state. See <a href="reference-ledger-format.html#contributing-to-the-owner-reserve">Contributing to the Owner Reserve</a> for details.</li>
|
||||
<li><a href="reference-ledger-format.html#directorynode">Owner directories</a> list all the ledger nodes that contribute to an account's owner reserve. However, the owner directory itself does not count towards the reserve.</li>
|
||||
</ul>
|
||||
<h4 id="owner-reserve-edge-cases">Owner Reserve Edge Cases</h4>
|
||||
<p>The Ripple Consensus Ledger considers an <a href="https://ripple.com/build/transactions/#offercreate">OfferCreate transaction</a> to be an explicit statement of willingness to hold an asset. Consuming the offer automatically creates a trust line (with limit 0, and a balance above that limit) for the <code>taker_pays</code> currency if such a trust line does not exist. However, if the offer's owner does not possess enough XRP to meet the additional reserve requirement of the new trust line, the offer is considered unfunded. See also: <a href="https://ripple.com/build/transactions/#lifecycle-of-an-offer">Lifecycle of an Offer</a>.</p>
|
||||
<p>The Ripple Consensus Ledger considers an <a href="reference-transaction-format.html#offercreate">OfferCreate transaction</a> to be an explicit statement of willingness to hold an asset. Consuming the offer automatically creates a trust line (with limit 0, and a balance above that limit) for the <code>taker_pays</code> currency if such a trust line does not exist. However, if the offer's owner does not possess enough XRP to meet the additional reserve requirement of the new trust line, the offer is considered unfunded. See also: <a href="reference-transaction-format.html#lifecycle-of-an-offer">Lifecycle of an Offer</a>.</p>
|
||||
<h2 id="going-below-the-reserve-requirement">Going Below the Reserve Requirement</h2>
|
||||
<p>During transaction processing, a transaction can only be successful if the sending account possesses at least the reserve requirement in XRP. In the process, the <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> destroys some of the sending account's XRP balance. This can cause an account to go below the reserve requirement.</p>
|
||||
<p>During transaction processing, a transaction can only be successful if the sending account possesses at least the reserve requirement in XRP. In the process, the <a href="concept-transaction-cost.html">transaction cost</a> destroys some of the sending account's XRP balance. This can cause an account to go below the reserve requirement.</p>
|
||||
<p>When an account has less XRP than its current reserve requirement, it cannot send new transactions. Even so, it continues to exist in the ledger, as all accounts do. Unless the reserve requirements decrease, the only way for the account to become able to send transactions again is for it to receive enough XRP that it meets the reserve requirement.</p>
|
||||
<p><strong>Exception:</strong> When an account is below the reserve requirement, it can send new <a href="https://ripple.com/build/transactions/#offercreate">OfferCreate transactions</a> to acquire more XRP, or other currencies on its existing trust lines. These transactions cannot create new <a href="https://ripple.com/build/ledger-format/#ripplestate">trust lines</a>, or <a href="https://ripple.com/build/ledger-format/#offer">Offer nodes in the ledger</a>, so they can only execute trades that consume Offers that are already in the order books.</p>
|
||||
<p><strong>Exception:</strong> When an account is below the reserve requirement, it can send new <a href="reference-transaction-format.html#offercreate">OfferCreate transactions</a> to acquire more XRP, or other currencies on its existing trust lines. These transactions cannot create new <a href="reference-ledger-format.html#ripplestate">trust lines</a>, or <a href="reference-ledger-format.html#offer">Offer nodes in the ledger</a>, so they can only execute trades that consume Offers that are already in the order books.</p>
|
||||
<h2 id="changing-the-reserve-requirements">Changing the Reserve Requirements</h2>
|
||||
<p>The Ripple Consensus Ledger has a mechanism for changing the reserve requirements in order to account for long-term changes in the value of XRP. Any changes have to be approved by the consensus process. See <a href="https://ripple.com/build/fee-voting/">Fee Voting</a> for more information.</p>
|
||||
<p>The Ripple Consensus Ledger has a mechanism for changing the reserve requirements in order to account for long-term changes in the value of XRP. Any changes have to be approved by the consensus process. See <a href="concept-fee-voting.html">Fee Voting</a> for more information.</p>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,13 +110,13 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Concepts</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li class="level-2"><a href="concept-paths.html">Paths</a></li>
|
||||
<li class="level-2"><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li class="level-2"><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -135,45 +135,45 @@
|
||||
<h2 id="beneficiaries-of-the-transaction-cost">Beneficiaries of the Transaction Cost</h2>
|
||||
<p>The transaction cost is not paid to any party: the XRP is irrevocably destroyed. Since no new XRP can ever be created, this makes XRP more scarce, and consequently benefits all holders of XRP by making XRP more valuable.</p>
|
||||
<h2 id="load-scaling">Load Scaling</h2>
|
||||
<p>Each <code>rippled</code> server independently scales the transaction cost based on its current load. If you submit a transaction with a <code>Fee</code> value that is lower than current load-based transaction cost of the <code>rippled</code> server, that server neither applies nor relays the transaction. (<strong>Note:</strong> If you submit a transaction through an <a href="https://ripple.com/build/rippled-apis/#connecting-to-rippled">admin connection</a>, the server applies and relays the transaction as long as the transaction cost meets the overall minimum.) A transaction is very unlikely to survive <a href="https://ripple.com/knowledge_center/the-ripple-ledger-consensus-process/">the consensus process</a> unless its <code>Fee</code> value meets the requirements of a majority of servers.</p>
|
||||
<p>Each <code>rippled</code> server independently scales the transaction cost based on its current load. If you submit a transaction with a <code>Fee</code> value that is lower than current load-based transaction cost of the <code>rippled</code> server, that server neither applies nor relays the transaction. (<strong>Note:</strong> If you submit a transaction through an <a href="reference-rippled.html#connecting-to-rippled">admin connection</a>, the server applies and relays the transaction as long as the transaction cost meets the overall minimum.) A transaction is very unlikely to survive <a href="https://ripple.com/knowledge_center/the-ripple-ledger-consensus-process/">the consensus process</a> unless its <code>Fee</code> value meets the requirements of a majority of servers.</p>
|
||||
<h2 id="querying-the-transaction-cost">Querying the Transaction Cost</h2>
|
||||
<p>The <code>rippled</code> APIs have two ways to query the transaction cost: the <code>server_info</code> command (intended for humans) and the <code>server_state</code> command (intended for machines).</p>
|
||||
<h3 id="server-info">server_info</h3>
|
||||
<p>The <a href="https://ripple.com/build/rippled-apis/#server-info"><code>server_info</code> command</a> reports the unscaled minimum XRP cost, as of the previous ledger, as <code>validated_ledger.base_fee_xrp</code>, in the form of decimal XRP. The actual cost necessary to relay a transaction is scaled by multiplying that <code>base_fee_xrp</code> value by the <code>load_factor</code> parameter in the same response, which represents the server's current load level. In other words:</p>
|
||||
<p>The <a href="reference-rippled.html#server-info"><code>server_info</code> command</a> reports the unscaled minimum XRP cost, as of the previous ledger, as <code>validated_ledger.base_fee_xrp</code>, in the form of decimal XRP. The actual cost necessary to relay a transaction is scaled by multiplying that <code>base_fee_xrp</code> value by the <code>load_factor</code> parameter in the same response, which represents the server's current load level. In other words:</p>
|
||||
<p><strong>Current Transaction Cost in XRP = <code>base_fee_xrp</code> × <code>load_factor</code></strong></p>
|
||||
<h3 id="server-state">server_state</h3>
|
||||
<p>The <a href="https://ripple.com/build/rippled-apis/#server-state"><code>server_state</code> command</a> returns a direct representation of <code>rippled</code>'s internal load calculations. In this case, the effective load rate is the ratio of the current <code>load_factor</code> to the <code>load_base</code>. The <code>validated_ledger.base_fee</code> parameter reports the minimum transaction cost in <a href="https://ripple.com/build/rippled-apis/#specifying-currency-amounts">drops of XRP</a>. This design enables <code>rippled</code> to calculate the transaction cost using only integer math, while still allowing a reasonable amount of fine-tuning for server load. The actual calculation of the transaction cost is as follows:</p>
|
||||
<p>The <a href="reference-rippled.html#server-state"><code>server_state</code> command</a> returns a direct representation of <code>rippled</code>'s internal load calculations. In this case, the effective load rate is the ratio of the current <code>load_factor</code> to the <code>load_base</code>. The <code>validated_ledger.base_fee</code> parameter reports the minimum transaction cost in <a href="reference-rippled.html#specifying-currency-amounts">drops of XRP</a>. This design enables <code>rippled</code> to calculate the transaction cost using only integer math, while still allowing a reasonable amount of fine-tuning for server load. The actual calculation of the transaction cost is as follows:</p>
|
||||
<p><strong>Current Transaction Cost in Drops = (<code>base_fee</code> × <code>load_factor</code>) ÷ <code>load_base</code></strong></p>
|
||||
<h2 id="specifying-the-transaction-cost">Specifying the Transaction Cost</h2>
|
||||
<p>Every signed transaction must include the transaction cost in the <a href="https://ripple.com/build/transactions/#common-fields"><code>Fee</code> field</a>. Like all fields of a signed transaction, this field cannot be changed without invalidating the signature.</p>
|
||||
<p>Every signed transaction must include the transaction cost in the <a href="reference-transaction-format.html#common-fields"><code>Fee</code> field</a>. Like all fields of a signed transaction, this field cannot be changed without invalidating the signature.</p>
|
||||
<p>As a rule, the Ripple Consensus Ledger executes transactions <em>exactly</em> as they are signed. (To do anything else would be difficult to coordinate across a decentralized consensus network, at the least.) As a consequence of this, every transaction destroys the exact amount of XRP specified by the <code>Fee</code> field, even if it is much more than the current minimum transaction cost for any part of the network. The transaction cost can even destroy XRP that would otherwise be set aside for an account's reserve requirement.</p>
|
||||
<p>Before signing a transaction, we recommend <a href="#querying-the-transaction-cost">looking up the current load-based transaction cost</a>. If the transaction cost is currently high due to load scaling, you may want to wait for it to decrease. If you do not plan on submitting the transaction immediately, we recommend specifying a slightly higher transaction cost to account for future load-based fluctuations in the transaction cost.</p>
|
||||
<h3 id="automatically-specifying-the-transaction-cost">Automatically Specifying the Transaction Cost</h3>
|
||||
<p>When you sign a transaction online, you can omit the <code>Fee</code> field. In this case, <code>rippled</code> or ripple-lib looks up an appropriate value based on the state of the peer-to-peer network, and includes it before signing the transaction. However, there are several drawbacks and limitations to automatically filling in the transaction cost in this manner:</p>
|
||||
<ul>
|
||||
<li>If the network's transaction cost goes up between signing and distributing the transaction, the transaction may not be confirmed.<ul>
|
||||
<li>In the worst case, the transaction may be stuck in a state of being neither definitively confirmed or rejected, unless it included a <code>LastLedgerSequence</code> parameter or until you cancel it with a new transaction that uses the same <code>Sequence</code> number. See <a href="https://ripple.com/build/reliable-transaction-submission/">reliable transaction submission</a> for best practices.</li>
|
||||
<li>In the worst case, the transaction may be stuck in a state of being neither definitively confirmed or rejected, unless it included a <code>LastLedgerSequence</code> parameter or until you cancel it with a new transaction that uses the same <code>Sequence</code> number. See <a href="tutorial-reliable-transaction-submission.html">reliable transaction submission</a> for best practices.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>You do not know in advance exactly what value you are signing for the <code>Fee</code> field.<ul>
|
||||
<li>If you are using <code>rippled</code>, you can also use the <code>fee_mult_max</code> parameter of the <a href="https://ripple.com/build/rippled-apis/#sign"><code>sign</code> command</a> to set a limit to the load scaling you are willing to sign.</li>
|
||||
<li>If you are using <code>rippled</code>, you can also use the <code>fee_mult_max</code> parameter of the <a href="reference-rippled.html#sign"><code>sign</code> command</a> to set a limit to the load scaling you are willing to sign.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>You cannot look up the current transaction cost from an offline machine.</li>
|
||||
</ul>
|
||||
<h2 id="transaction-costs-and-failed-transactions">Transaction Costs and Failed Transactions</h2>
|
||||
<p>Since the purpose of the transaction cost is to protect the peer-to-peer Ripple network from excessive load, it should apply to any transaction that gets distributed to the network, regardless of whether or not that transaction succeeds. However, in order to affect the shared global ledger, a transaction must be included in a validated ledger. Thus, <code>rippled</code> servers attempt to include failed transactions in ledgers, with <a href="https://ripple.com/build/transactions/#result-categories"><code>tec</code> status codes</a> ("tec" stands for "Transaction Engine - Claimed fee only").</p>
|
||||
<p>Since the purpose of the transaction cost is to protect the peer-to-peer Ripple network from excessive load, it should apply to any transaction that gets distributed to the network, regardless of whether or not that transaction succeeds. However, in order to affect the shared global ledger, a transaction must be included in a validated ledger. Thus, <code>rippled</code> servers attempt to include failed transactions in ledgers, with <a href="reference-transaction-format.html#result-categories"><code>tec</code> status codes</a> ("tec" stands for "Transaction Engine - Claimed fee only").</p>
|
||||
<p>The transaction cost is only debited from the sender's XRP balance when the transaction actually becomes included in a validated ledger. This is true whether the transaction is considered successful or fails with a <code>tec</code> code.</p>
|
||||
<p>If a transaction's failure is <a href="https://ripple.com/build/transactions/#finality-of-results">final</a>, the <code>rippled</code> server does not relay it to the network. Consequently, that transaction does not get included in a validated ledger, and it cannot have any effect on anyone's XRP balance.</p>
|
||||
<p>If a transaction's failure is <a href="reference-transaction-format.html#finality-of-results">final</a>, the <code>rippled</code> server does not relay it to the network. Consequently, that transaction does not get included in a validated ledger, and it cannot have any effect on anyone's XRP balance.</p>
|
||||
<h3 id="insufficient-xrp">Insufficient XRP</h3>
|
||||
<p>When a <code>rippled</code> server initially evaluates a transaction, it rejects the transaction with the error code <code>terINSUF_FEE_B</code> if the sending account does not have a high enough XRP balance to pay the XRP transaction cost. Since this is a <code>ter</code> (Retry) code, the <code>rippled</code> server retries the transaction without relaying it to the network, until the transaction's outcome is <a href="https://ripple.com/build/transactions/#finality-of-results">final</a>.</p>
|
||||
<p>When a <code>rippled</code> server initially evaluates a transaction, it rejects the transaction with the error code <code>terINSUF_FEE_B</code> if the sending account does not have a high enough XRP balance to pay the XRP transaction cost. Since this is a <code>ter</code> (Retry) code, the <code>rippled</code> server retries the transaction without relaying it to the network, until the transaction's outcome is <a href="reference-transaction-format.html#finality-of-results">final</a>.</p>
|
||||
<p>When a transaction has already been distributed to the network, but the account does not have sufficient XRP to pay the transaction cost, the result code <code>tecINSUFF_FEE</code> occurs instead. In this case, the account pays all the XRP it can, ending with 0 XRP. This can occur because <code>rippled</code> decides whether to relay the transaction to the network based on its in-progress ledger, but transactions may be dropped or reordered when building the consensus ledger.</p>
|
||||
<h2 id="key-reset-transaction">Key Reset Transaction</h2>
|
||||
<p>As a special case, an account can send a <a href="https://ripple.com/build/transactions/#setregularkey">SetRegularKey</a> transaction with a transaction cost of <code>0</code>, as long as the account's <a href="https://ripple.com/build/ledger-format/#accountroot-flags">lsfPasswordSpent flag</a> is disabled. This transaction must be signed by the account's <em>master key</em>. Sending this transaction enables the lsfPasswordSpent flag.</p>
|
||||
<p>As a special case, an account can send a <a href="reference-transaction-format.html#setregularkey">SetRegularKey</a> transaction with a transaction cost of <code>0</code>, as long as the account's <a href="reference-ledger-format.html#accountroot-flags">lsfPasswordSpent flag</a> is disabled. This transaction must be signed by the account's <em>master key</em>. Sending this transaction enables the lsfPasswordSpent flag.</p>
|
||||
<p>This feature is designed to allow you to recover an account if the regular key is compromised, without worrying about whether the compromised account has any XRP available. This way, you can regain control of the account before you send additional XRP to it.</p>
|
||||
<p>The <a href="https://ripple.com/build/ledger-format/#accountroot-flags">lsfPasswordSpent flag</a> starts out disabled. If enabled, it gets disabled again when the account receives a <a href="https://ripple.com/build/transactions/#payment">Payment</a> of XRP.</p>
|
||||
<p>The <a href="reference-ledger-format.html#accountroot-flags">lsfPasswordSpent flag</a> starts out disabled. If enabled, it gets disabled again when the account receives a <a href="reference-transaction-format.html#payment">Payment</a> of XRP.</p>
|
||||
<h2 id="changing-the-transaction-cost">Changing the Transaction Cost</h2>
|
||||
<p>In addition to short-term scaling to account for load, the Ripple Consensus Ledger has a mechanism for changing the minimum transaction cost in order to account for long-term changes in the value of XRP. Any changes have to be approved by the consensus process. See <a href="https://ripple.com/build/fee-voting/">Fee Voting</a> for more information.</p>
|
||||
<p>In addition to short-term scaling to account for load, the Ripple Consensus Ledger has a mechanism for changing the minimum transaction cost in order to account for long-term changes in the value of XRP. Any changes have to be approved by the consensus process. See <a href="concept-fee-voting.html">Fee Voting</a> for more information.</p>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,13 +110,13 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Concepts</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li class="level-2"><a href="concept-paths.html">Paths</a></li>
|
||||
<li class="level-2"><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li class="level-2"><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li class="level-2"><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li class="level-2"><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li class="level-2"><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li class="level-2"><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -145,12 +145,12 @@
|
||||
<p>The transfer fee is represented by a setting on the issuing (<strong>cold wallet</strong>) account. The transfer fee has a maximum precision of 9 digits, and cannot be less than 0% or greater than 100%. The TransferRate setting applies to all currencies issued by the same account. If you want to have different transfer fee percentages for different currencies, use different cold wallets to issue each currency.</p>
|
||||
<h2 id="rippleapi">RippleAPI</h2>
|
||||
<p>In RippleAPI, the transfer fee is specified in the <code>transferRate</code> field, as an integer which represents the amount you must send in order for the recipient to get 1 billion units of the same currency. A <code>transferRate</code> of <code>1005000000</code> is equivalent to a transfer fee of 0.5%. By default, the <code>transferRate</code> is set to no fee. The value of <code>transferRate</code> cannot be less than <code>1000000000</code> or more than <code>2000000000</code>. The value <code>null</code> is special: it is equivalent to <code>1000000000</code>, meaning no fee.</p>
|
||||
<p>A gateway can send a <a href="https://ripple.com/build/rippleapi/#settings">Settings transaction</a> with its cold wallet to change the <code>transferRate</code> for its issuances.</p>
|
||||
<p>You can check an account's <code>transferRate</code> with the <a href="https://ripple.com/build/rippleapi/#getsettings">getSettings method</a>.</p>
|
||||
<p>A gateway can send a <a href="reference-rippleapi.html#settings">Settings transaction</a> with its cold wallet to change the <code>transferRate</code> for its issuances.</p>
|
||||
<p>You can check an account's <code>transferRate</code> with the <a href="reference-rippleapi.html#getsettings">getSettings method</a>.</p>
|
||||
<h2 id="rippled">rippled</h2>
|
||||
<p>In <code>rippled</code>'s JSON-RPC and WebSocket APIs, the transfer fee is specified in the <code>TransferRate</code> field, as an integer which represents the amount you must send in order for the recipient to get 1 billion units of the same currency. A <code>TransferRate</code> of <code>1005000000</code> is equivalent to a transfer fee of 0.5%. By default, the <code>TransferRate</code> is set at <code>1000000000</code>, indicating no fee. The value of <code>TransferRate</code> cannot be less than <code>1000000000</code> or more than <code>2000000000</code>. However, value <code>0</code> is special: it is equivalent to <code>1000000000</code>, meaning no fee.</p>
|
||||
<p>A gateway can submit an <a href="https://ripple.com/build/transactions/#accountset">AccountSet transaction</a> from its cold wallet to change the <code>TransferRate</code> for its issuances. </p>
|
||||
<p>You can check an account's <code>TransferRate</code> with the <a href="https://ripple.com/build/rippled-apis/#account-info"><code>account_info</code> command</a>. If the <code>TransferRate</code> is omitted, then that indicates no fee.</p>
|
||||
<p>A gateway can submit an <a href="reference-transaction-format.html#accountset">AccountSet transaction</a> from its cold wallet to change the <code>TransferRate</code> for its issuances. </p>
|
||||
<p>You can check an account's <code>TransferRate</code> with the <a href="reference-rippled.html#account-info"><code>account_info</code> command</a>. If the <code>TransferRate</code> is omitted, then that indicates no fee.</p>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
@@ -33,44 +33,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -135,7 +135,7 @@
|
||||
<script type="text/javascript">
|
||||
// Set some constants for the REST tool script
|
||||
var URL_BASE = 'https://data.ripple.com';
|
||||
var DOC_BASE = 'https://ripple.com/build/data-api-v2/';
|
||||
var DOC_BASE = 'reference-data-api.html';
|
||||
</script>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
72
index.html
72
index.html
@@ -40,44 +40,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -124,44 +124,44 @@ Ripple’s distributed settlement network is built on open-source technology tha
|
||||
<div class="col-md-3">
|
||||
<ul>
|
||||
<li class="top"><h5 class="dev_heading">References</h5></li>
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<ul>
|
||||
<li class="top"><h5 class="dev_heading">Tutorials</h5></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<ul>
|
||||
<li class="top"><h5 class="dev_heading">Concepts</h5></li>
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<ul>
|
||||
<li class="top"><h5 class="dev_heading">Best Practices</h5></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<ul>
|
||||
<li class="top"><h5 class="dev_heading">API Tools</h5></li>
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,11 +110,11 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: References</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li class="level-2"><a href="reference-rippled.html">rippled</a></li>
|
||||
<li class="level-2"><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li class="level-2"><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li class="level-2"><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li class="level-2"><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -437,12 +437,12 @@
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>String</td>
|
||||
<td>Filter transactions to a specific <a href="https://ripple.com/build/transactions/">transaction type</a>.</td>
|
||||
<td>Filter transactions to a specific <a href="reference-transaction-format.html">transaction type</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>result</td>
|
||||
<td>String</td>
|
||||
<td>Filter transactions for a specific <a href="https://ripple.com/build/transactions/#transaction-results">transaction result</a>.</td>
|
||||
<td>Filter transactions for a specific <a href="reference-transaction-format.html#transaction-results">transaction result</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>binary</td>
|
||||
@@ -1499,12 +1499,12 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>All Ripple <a href="https://ripple.com/build/transactions/">transaction types</a>, including <code>Payment</code>, <code>AccountSet</code>, <code>SetRegularKey</code>, <code>OfferCreate</code>, <code>OfferCancel</code>, <code>TrustSet</code>.</td>
|
||||
<td>All Ripple <a href="reference-transaction-format.html">transaction types</a>, including <code>Payment</code>, <code>AccountSet</code>, <code>SetRegularKey</code>, <code>OfferCreate</code>, <code>OfferCancel</code>, <code>TrustSet</code>.</td>
|
||||
<td>Number of transactions of the given type that occurred during the interval.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>result</td>
|
||||
<td>All <a href="https://ripple.com/build/transactions/#transaction-results">transaction result codes</a> (string codes, not the numeric codes), including <code>tesSUCCESS</code>, <code>tecPATH_DRY</code>, and many others.</td>
|
||||
<td>All <a href="reference-transaction-format.html#transaction-results">transaction result codes</a> (string codes, not the numeric codes), including <code>tesSUCCESS</code>, <code>tecPATH_DRY</code>, and many others.</td>
|
||||
<td>Number of transactions that resulted in the given code during the interval.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -2803,12 +2803,12 @@
|
||||
<tr>
|
||||
<td>accounts</td>
|
||||
<td>Array</td>
|
||||
<td>A list of <a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">issuing accounts</a> (cold wallets) used by this gateway. (Gateways may use different issuing accounts for different currencies.)</td>
|
||||
<td>A list of <a href="concept-issuing-and-operational-accounts.html">issuing accounts</a> (cold wallets) used by this gateway. (Gateways may use different issuing accounts for different currencies.)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>hotwallets</td>
|
||||
<td>Array of <a href="#addresses">Address</a>es</td>
|
||||
<td>The addresses of the Ripple accounts this gateway uses as <a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">operational accounts</a>.</td>
|
||||
<td>The addresses of the Ripple accounts this gateway uses as <a href="concept-issuing-and-operational-accounts.html">operational accounts</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>domain</td>
|
||||
@@ -2840,7 +2840,7 @@
|
||||
<tr>
|
||||
<td>address</td>
|
||||
<td>String</td>
|
||||
<td>The <a href="#addresses">Address</a> of an <a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">issuing account</a> (cold wallet) used by this gateway.</td>
|
||||
<td>The <a href="#addresses">Address</a> of an <a href="concept-issuing-and-operational-accounts.html">issuing account</a> (cold wallet) used by this gateway.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>currencies</td>
|
||||
@@ -3576,7 +3576,7 @@ Content-Type: image/svg+xml
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>String</td>
|
||||
<td>Restrict results to a specified <a href="https://ripple.com/build/transactions/">transaction type</a></td>
|
||||
<td>Restrict results to a specified <a href="reference-transaction-format.html">transaction type</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>result</td>
|
||||
@@ -3851,13 +3851,23 @@ Content-Type: image/svg+xml
|
||||
</tr>
|
||||
<tr>
|
||||
<td>currency</td>
|
||||
<td>String</td>
|
||||
<td>Restrict results to specified currency</td>
|
||||
<td>String - <a href="#currency-code">Currency Code</a></td>
|
||||
<td>Filter results to specified currency</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>issuer</td>
|
||||
<td>String</td>
|
||||
<td>Restrict results to specified issuer</td>
|
||||
<td>String - <a href="#addresses">Address</a></td>
|
||||
<td>Filter results to specified issuer</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>source_tag</td>
|
||||
<td>Integer</td>
|
||||
<td>Filter results to specified source tag</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>destination_tag</td>
|
||||
<td>Integer</td>
|
||||
<td>Filter results to specified destination tag</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>descending</td>
|
||||
@@ -3934,7 +3944,6 @@ Content-Type: image/svg+xml
|
||||
"value": "1"
|
||||
}
|
||||
],
|
||||
"transaction_cost": "1.0E-5",
|
||||
"source_balance_changes": [
|
||||
{
|
||||
"counterparty": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
|
||||
@@ -3942,14 +3951,16 @@ Content-Type: image/svg+xml
|
||||
"value": "-1"
|
||||
}
|
||||
],
|
||||
"tx_index": 1,
|
||||
"currency": "USD",
|
||||
"destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
|
||||
"executed_time": "2014-06-02T22:47:50",
|
||||
"executed_time": "2014-06-02T22:47:50Z",
|
||||
"issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
|
||||
"ledger_index": 6979192,
|
||||
"source": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
|
||||
"source_currency": "USD",
|
||||
"tx_hash": "7BF105CFE4EFE78ADB63FE4E03A851440551FE189FD4B51CAAD9279C9F534F0E"
|
||||
"tx_hash": "7BF105CFE4EFE78ADB63FE4E03A851440551FE189FD4B51CAAD9279C9F534F0E",
|
||||
"transaction_cost": "1.0E-5"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -4241,40 +4252,38 @@ Content-Type: image/svg+xml
|
||||
<pre><code>{
|
||||
"result": "success",
|
||||
"count": 3,
|
||||
"marker": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn|20150616212230|000014091020|00003|$",
|
||||
"marker": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn|20160122235211|000018425487|00010|00001",
|
||||
"balance_changes": [
|
||||
{
|
||||
"change": "-0.012",
|
||||
"final_balance": "148.446663",
|
||||
"tx_index": 1,
|
||||
"amount_change": "-0.012",
|
||||
"final_balance": "75.169663",
|
||||
"tx_index": 7,
|
||||
"change_type": "transaction_cost",
|
||||
"currency": "XRP",
|
||||
"executed_time": "2015-06-16T21:32:40",
|
||||
"ledger_index": 14091160,
|
||||
"tx_hash": "0D5FB50FA65C9FE1538FD7E398FFFE9D1908DFA4576D8D7A020040686F93C77D",
|
||||
"node_index": null
|
||||
"executed_time": "2016-01-29T22:57:20Z",
|
||||
"ledger_index": 18555460,
|
||||
"tx_hash": "2B44EBE00728D04658E597A85EC4F71D20503B31ABBF556764AD8F7A80BA72F6"
|
||||
},
|
||||
{
|
||||
"change": "-0.012",
|
||||
"final_balance": "148.458663",
|
||||
"tx_index": 20,
|
||||
"change_type": "transaction_cost",
|
||||
"currency": "XRP",
|
||||
"executed_time": "2015-06-16T21:22:40",
|
||||
"ledger_index": 14091022,
|
||||
"tx_hash": "26C1C876D709380DF7136F307B84E7F16CD74381F82E9B2D352A92069C880D66",
|
||||
"node_index": null
|
||||
},
|
||||
{
|
||||
"change": "-30.0",
|
||||
"final_balance": "148.470663",
|
||||
"node_index": 0,
|
||||
"tx_index": 3,
|
||||
"amount_change": "-25.0",
|
||||
"final_balance": "75.181663",
|
||||
"node_index": 1,
|
||||
"tx_index": 4,
|
||||
"change_type": "payment_source",
|
||||
"currency": "XRP",
|
||||
"executed_time": "2015-06-16T21:22:30",
|
||||
"ledger_index": 14091020,
|
||||
"tx_hash": "73699F26E2A4A8703EB48684FF38CD6362B7ABF217576AB460CBAA64D383D9EC"
|
||||
"executed_time": "2016-01-26T08:32:20Z",
|
||||
"ledger_index": 18489336,
|
||||
"tx_hash": "E5C6DD25B2DCF534056D98A2EFE3B7CFAE4EBC624854DE3FA436F733A56D8BD9"
|
||||
},
|
||||
{
|
||||
"amount_change": "-0.01",
|
||||
"final_balance": "100.181663",
|
||||
"tx_index": 4,
|
||||
"change_type": "transaction_cost",
|
||||
"currency": "XRP",
|
||||
"executed_time": "2016-01-26T08:32:20Z",
|
||||
"ledger_index": 18489336,
|
||||
"tx_hash": "E5C6DD25B2DCF534056D98A2EFE3B7CFAE4EBC624854DE3FA436F733A56D8BD9"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -4704,7 +4713,7 @@ Content-Type: image/svg+xml
|
||||
<tr>
|
||||
<td>rrrrrrrrrrrrrrrrrrrrBZbvji</td>
|
||||
<td>ACCOUNT_ONE</td>
|
||||
<td>An address that is the base-58 encoding of the value <code>1</code>. In the ledger, <a href="https://ripple.com/build/ledger-format/#ripplestate">RippleState entries</a> use this address as a placeholder for the issuer of a trust line balance.</td>
|
||||
<td>An address that is the base-58 encoding of the value <code>1</code>. In the ledger, <a href="reference-ledger-format.html#ripplestate">RippleState entries</a> use this address as a placeholder for the issuer of a trust line balance.</td>
|
||||
<td>Yes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -4758,8 +4767,8 @@ Content-Type: image/svg+xml
|
||||
</ul>
|
||||
<h3 id="account-sequence">Account Sequence</h3>
|
||||
<p>A Sequence number is a 32-bit unsigned integer used to identify a transaction or Offer relative to a specific account.</p>
|
||||
<p>Every <a href="https://ripple.com/build/ledger-format/#accountroot">account object in the Ripple Consensus Ledger</a> has a Sequence number, which starts at 1. For a transaction to be relayed to the network and possibly included in a validated ledger, it must have a <code>Sequence</code> field that matches the sending account's current <code>Sequence</code> number. An account's Sequence field is incremented whenever a transaction from that account is included in a validated ledger (regardless of whether the transaction succeeded or failed). This preserves the order of transactions submitted by an account, and differentiates transactions that would otherwise be identical.</p>
|
||||
<p>Every <a href="https://ripple.com/build/ledger-format/#offer">Offer node in the Ripple Consensus Ledger</a> is marked with the sending <code>Account</code> <a href="#addresses">Address</a> and the <code>Sequence</code> value of the <a href="https://ripple.com/build/transactions/#offercreate">OfferCreate transaction</a> that created it. These two fields, together, uniquely identify the Offer.</p>
|
||||
<p>Every <a href="reference-ledger-format.html#accountroot">account object in the Ripple Consensus Ledger</a> has a Sequence number, which starts at 1. For a transaction to be relayed to the network and possibly included in a validated ledger, it must have a <code>Sequence</code> field that matches the sending account's current <code>Sequence</code> number. An account's Sequence field is incremented whenever a transaction from that account is included in a validated ledger (regardless of whether the transaction succeeded or failed). This preserves the order of transactions submitted by an account, and differentiates transactions that would otherwise be identical.</p>
|
||||
<p>Every <a href="reference-ledger-format.html#offer">Offer node in the Ripple Consensus Ledger</a> is marked with the sending <code>Account</code> <a href="#addresses">Address</a> and the <code>Sequence</code> value of the <a href="reference-transaction-format.html#offercreate">OfferCreate transaction</a> that created it. These two fields, together, uniquely identify the Offer.</p>
|
||||
<h3 id="currency-code">Currency Code</h3>
|
||||
<p>There are two kinds of currency code in the Ripple Consensus Ledger:</p>
|
||||
<ul>
|
||||
@@ -4801,7 +4810,7 @@ Content-Type: image/svg+xml
|
||||
<tr>
|
||||
<td>tx</td>
|
||||
<td>Object</td>
|
||||
<td>The fields of this transaction object, as defined by the <a href="https://ripple.com/build/transactions/">Transaction Format</a></td>
|
||||
<td>The fields of this transaction object, as defined by the <a href="reference-transaction-format.html">Transaction Format</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>meta</td>
|
||||
@@ -5182,7 +5191,7 @@ Content-Type: image/svg+xml
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="payment-objects">Payment Objects</h2>
|
||||
<p>In the Data API, a Payment Object represents an event where one account sent value to another account. This mostly lines up with Ripple transactions of the <code>Payment</code> <a href="https://ripple.com/build/transactions/">transaction type</a>, except that the Data API does not consider a transaction to be a payment if the sending <code>Account</code> and the <code>Destination</code> account are the same, or if the transaction failed.</p>
|
||||
<p>In the Data API, a Payment Object represents an event where one account sent value to another account. This mostly lines up with Ripple transactions of the <code>Payment</code> <a href="reference-transaction-format.html">transaction type</a>, except that the Data API does not consider a transaction to be a payment if the sending <code>Account</code> and the <code>Destination</code> account are the same, or if the transaction failed.</p>
|
||||
<p>Payment objects have the following fields:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -5219,6 +5228,16 @@ Content-Type: image/svg+xml
|
||||
<td>The amount of XRP spent by the <code>source</code> account on the transaction cost. (Prior to <a href="https://github.com/ripple/rippled-historical-database/releases/tag/v2.0.4">v2.0.4</a>, this parameter was called <code>fee</code>.)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>destination_tag</td>
|
||||
<td>Integer</td>
|
||||
<td>(May be omitted) A <a href="tutorial-gateway-guide.html#source-and-destination-tags">destination tag</a> specified in this payment.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>source_tag</td>
|
||||
<td>Integer</td>
|
||||
<td>(May be omitted) A <a href="tutorial-gateway-guide.html#source-and-destination-tags">source tag</a> specified in this payment.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>currency</td>
|
||||
<td>String - <a href="#currency-code">Currency Code</a></td>
|
||||
<td>The currency that the <code>destination</code> account received.</td>
|
||||
@@ -5298,9 +5317,9 @@ Content-Type: image/svg+xml
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>change</td>
|
||||
<td>amount_change</td>
|
||||
<td><a href="#numbers-and-precision">String - Number</a></td>
|
||||
<td>The difference in the amount of currency held before and after this change.</td>
|
||||
<td>The difference in the amount of currency held before and after this change. <em>(Prior to <a href="https://github.com/ripple/rippled-historical-database/releases/tag/v2.0.6">v2.0.6</a>, this field was called <code>change</code>.)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>final_balance</td>
|
||||
@@ -5333,9 +5352,9 @@ Content-Type: image/svg+xml
|
||||
<td>The time the change occurred. (This is based on the close time of the ledger that included the transaction that executed the change.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>issuer</td>
|
||||
<td>counterparty</td>
|
||||
<td>String - <a href="#addresses">Address</a></td>
|
||||
<td>(Omitted for XRP) The <code>currency</code> was issued by this account.</td>
|
||||
<td>(Omitted for XRP) The <code>currency</code> is held in a trust line to or from this account. <em>(Prior to <a href="https://github.com/ripple/rippled-historical-database/releases/tag/v2.0.6">v2.0.6</a>, this field was called <code>issuer</code>.)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ledger_index</td>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,11 +110,11 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: References</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li class="level-2"><a href="reference-rippled.html">rippled</a></li>
|
||||
<li class="level-2"><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li class="level-2"><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li class="level-2"><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li class="level-2"><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -132,7 +132,7 @@
|
||||
<p><img alt="Diagram: A ledger has transactions, a state node, and a header with the close time and validation info" src="img/ledger-components.png"/></p>
|
||||
<ul>
|
||||
<li>A <strong>header</strong> - The ledger's unique index (sequence number), hashes of the other contents, and other metadata.</li>
|
||||
<li>A <strong>transaction tree</strong> - The <a href="https://ripple.com/build/transactions/">transactions</a> that were applied to the previous ledger to make this one. Transactions are the <em>only</em> way to modify the ledger.</li>
|
||||
<li>A <strong>transaction tree</strong> - The <a href="reference-transaction-format.html">transactions</a> that were applied to the previous ledger to make this one. Transactions are the <em>only</em> way to modify the ledger.</li>
|
||||
<li>A <strong>state tree</strong> - All the <a href="#ledger-node-types">ledger nodes</a> that contain the settings, balances, and objects in the ledger as of this version.</li>
|
||||
</ul>
|
||||
<h2 id="tree-format">Tree Format</h2>
|
||||
@@ -142,7 +142,7 @@
|
||||
<p><img alt="Diagram: rippled uses SHA-512Half to generate indexes for ledger nodes. The space key prevents indexes for different node types from colliding." src="img/ledger-indexes.png"/></p>
|
||||
<h2 id="header-format">Header Format</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/5d2d88209f1732a0f8d592012094e345cbe3e675/src/ripple/ledger/ReadView.h#L68" title="Source">[Source]<br/></a></p>
|
||||
<p>Every ledger version has a unique header that describes the contents. You can look up a ledger's header information with the <a href="https://ripple.com/build/rippled-apis/#ledger"><code>ledger</code> command</a>. The contents of the ledger header are as follows:</p>
|
||||
<p>Every ledger version has a unique header that describes the contents. You can look up a ledger's header information with the <a href="reference-rippled.html#ledger"><code>ledger</code> command</a>. The contents of the ledger header are as follows:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -226,7 +226,7 @@
|
||||
<li><a href="#offer"><strong>Offer</strong> - An offer to exchange currencies, known in finance as an <em>order</em>.</a></li>
|
||||
<li><a href="#ripplestate"><strong>RippleState</strong> - Links two accounts, tracking the balance of one currency between them. The concept of a <em>trust line</em> is really an abstraction of this node type.</a></li>
|
||||
</ul>
|
||||
<p>Each ledger node consists of several fields. In the peer protocol that <code>rippled</code> servers use to communicate with each other, ledger nodes are represented in their raw binary format. In other <a href="https://ripple.com/build/rippled-apis/"><code>rippled</code> APIs</a>, ledger nodes are represented as JSON objects.</p>
|
||||
<p>Each ledger node consists of several fields. In the peer protocol that <code>rippled</code> servers use to communicate with each other, ledger nodes are represented in their raw binary format. In other <a href="reference-rippled.html"><code>rippled</code> APIs</a>, ledger nodes are represented as JSON objects.</p>
|
||||
<h2 id="accountroot">AccountRoot</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/5d2d88209f1732a0f8d592012094e345cbe3e675/src/ripple/protocol/impl/LedgerFormats.cpp#L27" title="Source">[Source]<br/></a></p>
|
||||
<p>The <code>AccountRoot</code> node type describes a single <em>account</em> object. Example <code>AccountRoot</code> node:</p>
|
||||
@@ -316,7 +316,7 @@
|
||||
<td>RegularKey</td>
|
||||
<td>String</td>
|
||||
<td>AccountID</td>
|
||||
<td>(Optional) The address of a keypair that can be used to sign transactions for this account instead of the master key. Use a <a href="https://ripple.com/build/transactions/#setregularkey">SetRegularKey transaction</a> to change this value.</td>
|
||||
<td>(Optional) The address of a keypair that can be used to sign transactions for this account instead of the master key. Use a <a href="reference-transaction-format.html#setregularkey">SetRegularKey transaction</a> to change this value.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>EmailHash</td>
|
||||
@@ -357,7 +357,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="accountroot-flags">AccountRoot Flags</h3>
|
||||
<p>There are several options which can be either enabled or disabled for an account. These options can be changed with an <a href="https://ripple.com/build/transactions/#accountset">AccountSet transaction</a>. In the ledger, flags are represented as binary values that can be combined with bitwise-or operations. The bit values for the flags in the ledger are different than the values used to enable or disable those flags in a transaction. Ledger flags have names that begin with <em>lsf</em>.</p>
|
||||
<p>There are several options which can be either enabled or disabled for an account. These options can be changed with an <a href="reference-transaction-format.html#accountset">AccountSet transaction</a>. In the ledger, flags are represented as binary values that can be combined with bitwise-or operations. The bit values for the flags in the ledger are different than the values used to enable or disable those flags in a transaction. Ledger flags have names that begin with <em>lsf</em>.</p>
|
||||
<p>AccountRoot nodes can have the following flag values:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -366,7 +366,7 @@
|
||||
<th>Hex Value</th>
|
||||
<th>Decimal Value</th>
|
||||
<th>Description</th>
|
||||
<th>Corresponding <a href="https://ripple.com/build/transactions/#accountset-flags">AccountSet Flag</a></th>
|
||||
<th>Corresponding <a href="reference-transaction-format.html#accountset-flags">AccountSet Flag</a></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -587,8 +587,8 @@
|
||||
</ul>
|
||||
<h2 id="offer">Offer</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/5d2d88209f1732a0f8d592012094e345cbe3e675/src/ripple/protocol/impl/LedgerFormats.cpp#L57" title="Source">[Source]<br/></a></p>
|
||||
<p>The <code>Offer</code> node type describes an offer to exchange currencies, more traditionally known as an <em>order</em>, which is currently in an order book in Ripple's distributed exchange. An <a href="https://ripple.com/build/transactions/#offercreate">OfferCreate transaction</a> only creates an Offer node in the ledger when the offer cannot be fully executed immediately by consuming other offers already in the ledger.</p>
|
||||
<p>An offer can become unfunded through other activities in the network, while remaining in the ledger. However, <code>rippled</code> will automatically prune any unfunded offers it happens across in the course of transaction processing (and <em>only</em> transaction processing, because the ledger state must only be changed by transactions). For more information, see <a href="https://ripple.com/build/transactions/#lifecycle-of-an-offer">lifecycle of an offer</a>.</p>
|
||||
<p>The <code>Offer</code> node type describes an offer to exchange currencies, more traditionally known as an <em>order</em>, which is currently in an order book in Ripple's distributed exchange. An <a href="reference-transaction-format.html#offercreate">OfferCreate transaction</a> only creates an Offer node in the ledger when the offer cannot be fully executed immediately by consuming other offers already in the ledger.</p>
|
||||
<p>An offer can become unfunded through other activities in the network, while remaining in the ledger. However, <code>rippled</code> will automatically prune any unfunded offers it happens across in the course of transaction processing (and <em>only</em> transaction processing, because the ledger state must only be changed by transactions). For more information, see <a href="reference-transaction-format.html#lifecycle-of-an-offer">lifecycle of an offer</a>.</p>
|
||||
<p>Example Offer node:</p>
|
||||
<pre><code>{
|
||||
"Account": "rBqb89MRQJnMPq8wTwEbtz4kvxrEDfcYvt",
|
||||
@@ -642,7 +642,7 @@
|
||||
<td>Sequence</td>
|
||||
<td>Number</td>
|
||||
<td>UInt32</td>
|
||||
<td>The <code>Sequence</code> value of the <a href="https://ripple.com/build/transactions/#offercreate">OfferCreate</a> transaction that created this Offer node. Used in combination with the <code>Account</code> to identify this Offer.</td>
|
||||
<td>The <code>Sequence</code> value of the <a href="reference-transaction-format.html#offercreate">OfferCreate</a> transaction that created this Offer node. Used in combination with the <code>Account</code> to identify this Offer.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>TakerPays</td>
|
||||
@@ -690,12 +690,12 @@
|
||||
<td>Expiration</td>
|
||||
<td>Number</td>
|
||||
<td>UInt32</td>
|
||||
<td>(Optional) Indicates the time after which this offer will be considered unfunded. See <a href="https://ripple.com/build/rippled-apis/#specifying-time">Specifying Time</a> for details.</td>
|
||||
<td>(Optional) Indicates the time after which this offer will be considered unfunded. See <a href="reference-rippled.html#specifying-time">Specifying Time</a> for details.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="offer-flags">Offer Flags</h3>
|
||||
<p>There are several options which can be either enabled or disabled when an <a href="https://ripple.com/build/transactions/#offercreate">OfferCreate transaction</a> creates an offer node. In the ledger, flags are represented as binary values that can be combined with bitwise-or operations. The bit values for the flags in the ledger are different than the values used to enable or disable those flags in a transaction. Ledger flags have names that begin with <em>lsf</em>.</p>
|
||||
<p>There are several options which can be either enabled or disabled when an <a href="reference-transaction-format.html#offercreate">OfferCreate transaction</a> creates an offer node. In the ledger, flags are represented as binary values that can be combined with bitwise-or operations. The bit values for the flags in the ledger are different than the values used to enable or disable those flags in a transaction. Ledger flags have names that begin with <em>lsf</em>.</p>
|
||||
<p>Offer nodes can have the following flag values:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -704,7 +704,7 @@
|
||||
<th>Hex Value</th>
|
||||
<th>Decimal Value</th>
|
||||
<th>Description</th>
|
||||
<th>Corresponding <a href="https://ripple.com/build/transactions/#offercreate-flags">OfferCreate Flag</a></th>
|
||||
<th>Corresponding <a href="reference-transaction-format.html#offercreate-flags">OfferCreate Flag</a></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -853,7 +853,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="ripplestate-flags">RippleState Flags</h3>
|
||||
<p>There are several options which can be either enabled or disabled for a trust line. These options can be changed with a <a href="https://ripple.com/build/transactions/#trustset">TrustSet transaction</a>. In the ledger, flags are represented as binary values that can be combined with bitwise-or operations. The bit values for the flags in the ledger are different than the values used to enable or disable those flags in a transaction. Ledger flags have names that begin with <em>lsf</em>.</p>
|
||||
<p>There are several options which can be either enabled or disabled for a trust line. These options can be changed with a <a href="reference-transaction-format.html#trustset">TrustSet transaction</a>. In the ledger, flags are represented as binary values that can be combined with bitwise-or operations. The bit values for the flags in the ledger are different than the values used to enable or disable those flags in a transaction. Ledger flags have names that begin with <em>lsf</em>.</p>
|
||||
<p>RippleState nodes can have the following flag values:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -862,7 +862,7 @@
|
||||
<th>Hex Value</th>
|
||||
<th>Decimal Value</th>
|
||||
<th>Description</th>
|
||||
<th>Corresponding <a href="https://ripple.com/build/transactions/#trustset-flags">TrustSet Flag</a></th>
|
||||
<th>Corresponding <a href="reference-transaction-format.html#trustset-flags">TrustSet Flag</a></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -925,7 +925,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="contributing-to-the-owner-reserve">Contributing to the Owner Reserve</h3>
|
||||
<p>If an account modifies a trust line to put it in a non-default state, then that trust line counts towards the account's <a href="https://ripple.com/build/reserves/#owner-reserves">owner reserve</a>. In a RippleState node, the <code>lsfLowReserve</code> and <code>lsfHighReserve</code> flags indicate which account(s) are responsible for the owner reserve. The <code>rippled</code> server automatically sets these flags when it modifies a trust line.</p>
|
||||
<p>If an account modifies a trust line to put it in a non-default state, then that trust line counts towards the account's <a href="concept-reserves.html#owner-reserves">owner reserve</a>. In a RippleState node, the <code>lsfLowReserve</code> and <code>lsfHighReserve</code> flags indicate which account(s) are responsible for the owner reserve. The <code>rippled</code> server automatically sets these flags when it modifies a trust line.</p>
|
||||
<p>The values that count towards a trust line's non-default state are as follows:</p>
|
||||
<table>
|
||||
<thead>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,11 +110,11 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: References</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li class="level-2"><a href="reference-rippled.html">rippled</a></li>
|
||||
<li class="level-2"><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li class="level-2"><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li class="level-2"><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li class="level-2"><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,11 +110,11 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: References</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li class="level-2"><a href="reference-rippled.html">rippled</a></li>
|
||||
<li class="level-2"><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li class="level-2"><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li class="level-2"><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li class="level-2"><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -127,13 +127,13 @@
|
||||
<h1 id="rippled">rippled</h1>
|
||||
<p>The core peer-to-peer server that operates the Ripple Network is called <code>rippled</code>. Each <code>rippled</code> server connects to the Ripple Network, relays cryptographically signed transactions, and maintains a local copy of the complete shared global ledger. The source code for <code>rippled</code> is written in C++, and is <a href="https://github.com/ripple/rippled">available on GitHub under an open-source license</a>.</p>
|
||||
<ul>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/"><code>rippled</code> Setup</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html"><code>rippled</code> Setup</a></li>
|
||||
<li><a href="#api-methods">API Reference</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Reference</a></li>
|
||||
<li>JavaScript Client Library - <a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Reference</a></li>
|
||||
<li>JavaScript Client Library - <a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
</ul>
|
||||
<h1 id="websocket-and-json-rpc-apis">WebSocket and JSON-RPC APIs</h1>
|
||||
<p>If you want to communicate directly with a <code>rippled</code> server, you can use either the WebSocket API or the JSON-RPC API. Both APIs use the same list of commands, with almost entirely the same parameters in each command. Alternatively, you can use <a href="https://ripple.com/build/rippleapi/">RippleAPI</a>, which is a simplified JavaScript client library, which communicates directly with a <code>rippled</code> server from <a href="http://nodejs.org/">Node.js</a> or a web browser.</p>
|
||||
<p>If you want to communicate directly with a <code>rippled</code> server, you can use either the WebSocket API or the JSON-RPC API. Both APIs use the same list of commands, with almost entirely the same parameters in each command. Alternatively, you can use <a href="reference-rippleapi.html">RippleAPI</a>, which is a simplified JavaScript client library, which communicates directly with a <code>rippled</code> server from <a href="http://nodejs.org/">Node.js</a> or a web browser.</p>
|
||||
<ul>
|
||||
<li>The WebSocket API uses the <a href="http://www.html5rocks.com/en/tutorials/websockets/basics/">WebSocket protocol</a>, available in most browsers and Javascript implementations, to achieve persistent two-way communication. There is not a 1:1 correlation between requests and responses. Some requests prompt the server to send multiple messages back asynchronously; other times, responses may arrive in a different order than the requests that prompted them. The <code>rippled</code> server can be configured to accept secured (wss:), unsecured (ws:) WebSocket connections, or both.</li>
|
||||
<li>The JSON-RPC API relies on simple request-response communication via HTTP or HTTPS. (The <code>rippled</code> server can be configured to accept HTTP, HTTPS, or both.) For commands that prompt multiple responses, you can provide a callback URL.</li>
|
||||
@@ -145,10 +145,10 @@
|
||||
<p><a href="https://groups.google.com/forum/#!forum/ripple-server">https://groups.google.com/forum/#!forum/ripple-server</a></p>
|
||||
<h2 id="connecting-to-rippled">Connecting to rippled</h2>
|
||||
<p>Before you can run any commands against a <code>rippled</code> server, you must know which server you are connecting to. Most servers are configured not to accept requests directly from the outside network.</p>
|
||||
<p>Alternatively, you can <a href="https://ripple.com/build/rippled-setup/">run your own local copy of <code>rippled</code></a>. This is required if you want to access any of the <a href="#list-of-admin-commands">Admin Commands</a>. In this case, you should use whatever IP and port you configured the server to bind. (For example, <code>127.0.0.1:54321</code>) Additionally, in order to access admin functionality, you must connect from a port/IP address marked as admin in the config file.</p>
|
||||
<p>Alternatively, you can <a href="tutorial-rippled-setup.html">run your own local copy of <code>rippled</code></a>. This is required if you want to access any of the <a href="#list-of-admin-commands">Admin Commands</a>. In this case, you should use whatever IP and port you configured the server to bind. (For example, <code>127.0.0.1:54321</code>) Additionally, in order to access admin functionality, you must connect from a port/IP address marked as admin in the config file.</p>
|
||||
<p>The <a href="https://github.com/ripple/rippled/blob/d7def5509d8338b1e46c0adf309b5912e5168af0/doc/rippled-example.cfg#L831-L854">example config file</a> listens for connections on the local loopback network (127.0.0.1), with JSON-RPC (HTTP) on port 5005 and WebSocket (WS) on port 6006, and treats all connected clients as admin.</p>
|
||||
<h3 id="websocket-api">WebSocket API</h3>
|
||||
<p>If you are just looking to try out some methods on the Ripple network, you can skip writing your own WebSocket code and go straight to using the API at the <a href="https://ripple.com/build/websocket-tool/">Ripple WebSocket API Tool</a>. Later on, when you want to connect to your own <code>rippled</code> server, you can build your own client in Javascript to run in a browser (See <a href="http://www.websocket.org/echo.html">this example</a> ) or possibly <a href="https://github.com/einaros/ws">Node.js</a>.</p>
|
||||
<p>If you are just looking to try out some methods on the Ripple network, you can skip writing your own WebSocket code and go straight to using the API at the <a href="ripple-api-tool.html">Ripple WebSocket API Tool</a>. Later on, when you want to connect to your own <code>rippled</code> server, you can build your own client in Javascript to run in a browser (See <a href="http://www.websocket.org/echo.html">this example</a> ) or possibly <a href="https://github.com/einaros/ws">Node.js</a>.</p>
|
||||
<h4 id="request-formatting">Request Formatting</h4>
|
||||
<p>After you open a WebSocket to the <code>rippled</code> server, you can send commands as a <a href="http://www.w3schools.com/json/">JSON</a> object, with the following attributes:</p>
|
||||
<ul>
|
||||
@@ -530,7 +530,7 @@ Null method
|
||||
<tr>
|
||||
<td>rrrrrrrrrrrrrrrrrrrrBZbvji</td>
|
||||
<td>ACCOUNT_ONE</td>
|
||||
<td>An address that is the base-58 encoding of the value <code>1</code>. In the ledger, <a href="https://ripple.com/build/ledger-format/#ripplestate">RippleState entries</a> use this address as a placeholder for the issuer of a trust line balance.</td>
|
||||
<td>An address that is the base-58 encoding of the value <code>1</code>. In the ledger, <a href="reference-ledger-format.html#ripplestate">RippleState entries</a> use this address as a placeholder for the issuer of a trust line balance.</td>
|
||||
<td>Yes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -564,8 +564,8 @@ Null method
|
||||
<p><strong>Note:</strong> SHA-512Half has similar security to the officially-defined <em>SHA-512/256</em> hash function. However, Ripple's usage predates SHA-512/256 and is also easier to implement on top of an existing SHA-512 function. (As of this writing, SHA-512 support in cryptographic libraries is much more common than for SHA-512/256.)</p>
|
||||
<h3 id="account-sequence">Account Sequence</h3>
|
||||
<p>A Sequence number is a 32-bit unsigned integer used to identify a transaction or Offer relative to a specific account.</p>
|
||||
<p>Every <a href="https://ripple.com/build/ledger-format/#accountroot">account object in the Ripple Consensus Ledger</a> has a Sequence number, which starts at 1. For a transaction to be relayed to the network and possibly included in a validated ledger, it must have a <code>Sequence</code> field that matches the sending account's current <code>Sequence</code> number. An account's Sequence field is incremented whenever a transaction from that account is included in a validated ledger (regardless of whether the transaction succeeded or failed). This preserves the order of transactions submitted by an account, and differentiates transactions that would otherwise be identical.</p>
|
||||
<p>Every <a href="https://ripple.com/build/ledger-format/#offer">Offer node in the Ripple Consensus Ledger</a> is marked with the sending <code>Account</code> <a href="#addresses">Address</a> and the <code>Sequence</code> value of the <a href="https://ripple.com/build/transactions/#offercreate">OfferCreate transaction</a> that created it. These two fields, together, uniquely identify the Offer.</p>
|
||||
<p>Every <a href="reference-ledger-format.html#accountroot">account object in the Ripple Consensus Ledger</a> has a Sequence number, which starts at 1. For a transaction to be relayed to the network and possibly included in a validated ledger, it must have a <code>Sequence</code> field that matches the sending account's current <code>Sequence</code> number. An account's Sequence field is incremented whenever a transaction from that account is included in a validated ledger (regardless of whether the transaction succeeded or failed). This preserves the order of transactions submitted by an account, and differentiates transactions that would otherwise be identical.</p>
|
||||
<p>Every <a href="reference-ledger-format.html#offer">Offer node in the Ripple Consensus Ledger</a> is marked with the sending <code>Account</code> <a href="#addresses">Address</a> and the <code>Sequence</code> value of the <a href="reference-transaction-format.html#offercreate">OfferCreate transaction</a> that created it. These two fields, together, uniquely identify the Offer.</p>
|
||||
<h3 id="ledger-index">Ledger Index</h3>
|
||||
<p>A ledger index is a 32-bit unsigned integer used to identify a ledger. The ledger index is also known as the ledger's sequence number. The very first ledger was ledger index 1, and each subsequent ledger has a ledger index 1 higher than that of the ledger immediately before it.</p>
|
||||
<p>The ledger index indicates the order of the ledgers; the <a href="#hashes">Hash</a> value identifies the exact contents of the ledger. Two ledgers with the same hash are always identical. For closed ledgers, hash values and sequence numbers are equally valid and correlate 1:1. However, this is not true for in-progress ledgers:</p>
|
||||
@@ -606,8 +606,8 @@ Null method
|
||||
<td>Specified as an object</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tracked in <a href="https://ripple.com/build/ledger-format/#accountroot">accounts</a></td>
|
||||
<td>Tracked in <a href="https://ripple.com/build/ledger-format/#ripplestate">trust lines</a></td>
|
||||
<td>Tracked in <a href="reference-ledger-format.html#accountroot">accounts</a></td>
|
||||
<td>Tracked in <a href="reference-ledger-format.html#ripplestate">trust lines</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Can never be created; can only be destroyed</td>
|
||||
@@ -726,7 +726,7 @@ Null method
|
||||
<p>The format of the <code>marker</code> field is intentionally undefined. Each server can define a <code>marker</code> field as desired, so it may take the form of a string, a nested object, or another type. Different servers, and different methods provided by the same server, can have different <code>marker</code> definitions. Each <code>marker</code> is ephemeral, and may not work as expected after 10 minutes.</p>
|
||||
<h2 id="modifying-the-ledger">Modifying the Ledger</h2>
|
||||
<p>All changes to Ripple's global shared ledger happen as the result of transactions. Consequently, this means that there is <em>only one</em> public API method that causes a change in the state of the Ripple Network at all: the <a href="#submit"><em>submit</em></a> command. Most of the other methods represent different ways to view the data represented in the Ripple Network, and the remaining ones just generate data for your convenience. (The <a href="#wallet-propose">wallet_propose</a>, <a href="#path-find">path_find</a>, and <a href="#random">random</a> commands fall into this category.)</p>
|
||||
<p>For more information on the various transactions you can submit, consult the <a href="https://ripple.com/build/transactions/">Transaction Format</a>.</p>
|
||||
<p>For more information on the various transactions you can submit, consult the <a href="reference-transaction-format.html">Transaction Format</a>.</p>
|
||||
<h1 id="api-methods">API Methods</h1>
|
||||
<p>API methods for the Websocket and JSON-RPC APIs are defined by command names, and are divided into Public Commands and Admin Commands. Public Commands are not necessarily meant for the general public, but they are used by any client attached to the server. (Think of Public Commands as being for members or customers of the organization running the server, while the Admin Commands are for the personnel in charge of keeping the server operational.) Public Commands include the general operations for Ripple use, including checking the state of the ledger, finding a path to connecting users, and submitting a transaction, among others. Admin Commands, on the other hand, are meant only for the operators of the server, and include commands for managing the state of the server, the nodes it uses for validation, and other administrative features.</p>
|
||||
<h2 id="list-of-public-commands">List of Public Commands</h2>
|
||||
@@ -791,7 +791,7 @@ Null method
|
||||
<li><a href="#json"><code>json</code> - Pass JSON through the commandline</a></li>
|
||||
</ul>
|
||||
<h1 id="account-information">Account Information</h1>
|
||||
<p>Accounts are the core unit of authentication in the Ripple Network. Each account can hold balances in multiple currencies, and all transactions must be signed by an account's secret key. In order for an account to exist in a validated ledger version, it must hold a minimum reserve amount of XRP. (The <a href="https://ripple.com/build/reserves/">reserve for an account</a> increases with the amount of data it is responsible for in the shared ledger.) It is expected that accounts will correspond loosely to individual users. </p>
|
||||
<p>Accounts are the core unit of authentication in the Ripple Network. Each account can hold balances in multiple currencies, and all transactions must be signed by an account's secret key. In order for an account to exist in a validated ledger version, it must hold a minimum reserve amount of XRP. (The <a href="concept-reserves.html">reserve for an account</a> increases with the amount of data it is responsible for in the shared ledger.) It is expected that accounts will correspond loosely to individual users. </p>
|
||||
<h2 id="account-currencies">account_currencies</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/df966a9ac6dd986585ecccb206aff24452e41a30/src/ripple/rpc/handlers/AccountCurrencies.cpp" title="Source">[Source]<br/></a></p>
|
||||
<p>The <code>account_currencies</code> command retrieves a simple list of currencies that an account can send or receive, based on its trust lines. (This is not a thoroughly confirmed list, but it can be used to populate user interfaces.)</p>
|
||||
@@ -820,7 +820,7 @@ Null method
|
||||
}
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#account_currencies">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#account_currencies">Try it! ></a></p>
|
||||
<p>The request includes the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -959,7 +959,7 @@ Null method
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>Note:</em> The currencies that an account can send or receive are defined based on a simple check of its trust lines. If an account has a trust line for a currency and enough room to increase its balance, it can receive that currency. If the trust line's balance can go down, the account can send that currency. This method <em>doesn't</em> check whether the trust line is <a href="https://ripple.com/build/freeze/">frozen</a> or authorized.</p>
|
||||
<p><em>Note:</em> The currencies that an account can send or receive are defined based on a simple check of its trust lines. If an account has a trust line for a currency and enough room to increase its balance, it can receive that currency. If the trust line's balance can go down, the account can send that currency. This method <em>doesn't</em> check whether the trust line is <a href="concept-freeze.html">frozen</a> or authorized.</p>
|
||||
<h4 id="possible-errors">Possible Errors</h4>
|
||||
<ul>
|
||||
<li>Any of the <a href="#universal-errors">universal error types</a>.</li>
|
||||
@@ -999,7 +999,7 @@ Null method
|
||||
rippled account_info r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 true
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#account_info">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#account_info">Try it! ></a></p>
|
||||
<p>The request contains the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -1071,7 +1071,7 @@ rippled account_info r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 true
|
||||
<tr>
|
||||
<td>account_data</td>
|
||||
<td>Object</td>
|
||||
<td>The <a href="https://ripple.com/build/ledger-format/#accountroot">AccountRoot ledger node</a> with this account's information, as stored in the ledger.</td>
|
||||
<td>The <a href="reference-ledger-format.html#accountroot">AccountRoot ledger node</a> with this account's information, as stored in the ledger.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ledger_current_index</td>
|
||||
@@ -1123,7 +1123,7 @@ rippled account_info r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 true
|
||||
}
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#account_lines">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#account_lines">Try it! ></a></p>
|
||||
<p>The request accepts the following paramters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -1354,12 +1354,12 @@ rippled account_info r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 true
|
||||
<tr>
|
||||
<td>freeze</td>
|
||||
<td>Boolean</td>
|
||||
<td>(May be omitted) <code>true</code> if this account has <a href="https://ripple.com/build/freeze/">frozen</a> this trust line. If omitted, that is the same as <code>false</code>.</td>
|
||||
<td>(May be omitted) <code>true</code> if this account has <a href="concept-freeze.html">frozen</a> this trust line. If omitted, that is the same as <code>false</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>freeze_peer</td>
|
||||
<td>Boolean</td>
|
||||
<td>(May be omitted) <code>true</code> if the peer account has <a href="https://ripple.com/build/freeze/">frozen</a> this trust line. If omitted, that is the same as <code>false</code>.</td>
|
||||
<td>(May be omitted) <code>true</code> if the peer account has <a href="concept-freeze.html">frozen</a> this trust line. If omitted, that is the same as <code>false</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -1401,7 +1401,7 @@ rippled account_info r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 true
|
||||
rippled account_offers r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 current
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#account_offers">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#account_offers">Try it! ></a></p>
|
||||
<p>A request can include the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -1614,7 +1614,7 @@ rippled account_offers r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 current
|
||||
<tr>
|
||||
<td>expiration</td>
|
||||
<td>Unsigned integer</td>
|
||||
<td>(May be omitted) A time after which this offer is considered unfunded, as <a href="#specifying-time">the number of seconds since the Ripple Epoch</a>. See also: <a href="https://ripple.com/build/transactions/#expiration">Offer Expiration</a>. <em>(New in <a href="https://wiki.ripple.com/Rippled-0.30.1">version 0.30.1</a>)</em></td>
|
||||
<td>(May be omitted) A time after which this offer is considered unfunded, as <a href="#specifying-time">the number of seconds since the Ripple Epoch</a>. See also: <a href="reference-transaction-format.html#expiration">Offer Expiration</a>. <em>(New in <a href="https://wiki.ripple.com/Rippled-0.30.1">version 0.30.1</a>)</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -1628,7 +1628,7 @@ rippled account_offers r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 current
|
||||
</ul>
|
||||
<h2 id="account-objects">account_objects</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/399c43cae6e90a428e9ce6a988123972b0f03c99/src/ripple/rpc/handlers/AccountObjects.cpp" title="Source">[Source]<br/></a></p>
|
||||
<p>The <code>account_objects</code> command returns the raw <a href="https://ripple.com/build/ledger-format/">ledger format</a> for all objects owned by an account, such as <a href="https://ripple.com/build/transactions/#lifecycle-of-an-offer">outstanding offers</a>, trust lines in non-default state, and tickets (which are part of forthcoming multi-sign code). For getting the balance of an account's trust lines, we recommend <a href="#account-lines"><code>account_lines</code></a> instead.</p>
|
||||
<p>The <code>account_objects</code> command returns the raw <a href="reference-ledger-format.html">ledger format</a> for all objects owned by an account, such as <a href="reference-transaction-format.html#lifecycle-of-an-offer">outstanding offers</a>, trust lines in non-default state, and tickets (which are part of forthcoming multi-sign code). For getting the balance of an account's trust lines, we recommend <a href="#account-lines"><code>account_lines</code></a> instead.</p>
|
||||
<h4 id="request-format-4">Request Format</h4>
|
||||
<p>An example of the request format:</p>
|
||||
<div class="multicode">
|
||||
@@ -2237,7 +2237,7 @@ rippled account_objects r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 validated
|
||||
<tr>
|
||||
<td>account_objects</td>
|
||||
<td>Array</td>
|
||||
<td>Array of objects owned by this account. Each object is in its raw <a href="https://ripple.com/build/ledger-format/">ledger format</a>.</td>
|
||||
<td>Array of objects owned by this account. Each object is in its raw <a href="reference-ledger-format.html">ledger format</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ledger_hash</td>
|
||||
@@ -2320,7 +2320,7 @@ rippled account_objects r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 validated
|
||||
rippled account_tx r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59 -1 -1 2 false false false
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#account_tx">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#account_tx">Try it! ></a></p>
|
||||
<p>The request includes the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -3008,7 +3008,7 @@ There is also a deprecated legacy variation of the <code>account_tx</code> metho
|
||||
<tr>
|
||||
<td>transactions</td>
|
||||
<td>Boolean</td>
|
||||
<td>(Optional) If <code>true</code>, include an array of suggested <a href="https://ripple.com/build/transactions/">transactions</a>, as JSON objects, that you can sign and submit to fix the problems. Defaults to false.</td>
|
||||
<td>(Optional) If <code>true</code>, include an array of suggested <a href="reference-transaction-format.html">transactions</a>, as JSON objects, that you can sign and submit to fix the problems. Defaults to false.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>limit</td>
|
||||
@@ -3151,7 +3151,7 @@ There is also a deprecated legacy variation of the <code>account_tx</code> metho
|
||||
<tr>
|
||||
<td>transactions</td>
|
||||
<td>Array</td>
|
||||
<td>(May be omitted) If the request specified <code>transactions</code> as <code>true</code>, this is an array of JSON objects, each of which is the JSON form of a <a href="https://ripple.com/build/transactions/">transaction</a> that should fix one of the described problems. The length of this array is the same as the <code>problems</code> array, and each entry is intended to fix the problem described at the same index into that array.</td>
|
||||
<td>(May be omitted) If the request specified <code>transactions</code> as <code>true</code>, this is an array of JSON objects, each of which is the JSON form of a <a href="reference-transaction-format.html">transaction</a> that should fix one of the described problems. The length of this array is the same as the <code>problems</code> array, and each entry is intended to fix the problem described at the same index into that array.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -3520,7 +3520,7 @@ rippled wallet_propose test
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The key generated by this method can also be used as a regular key for an account if you use the <a href="https://ripple.com/build/transactions/#setregularkey">SetRegularKey transaction type</a> to do so.</p>
|
||||
<p>The key generated by this method can also be used as a regular key for an account if you use the <a href="reference-transaction-format.html#setregularkey">SetRegularKey transaction type</a> to do so.</p>
|
||||
<h4 id="possible-errors-8">Possible Errors</h4>
|
||||
<ul>
|
||||
<li>Any of the <a href="#universal-errors">universal error types</a>.</li>
|
||||
@@ -3568,7 +3568,7 @@ rippled wallet_propose test
|
||||
rippled ledger current
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#ledger">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#ledger">Try it! ></a></p>
|
||||
<p>The request can contain the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -3708,7 +3708,7 @@ rippled ledger current
|
||||
<tr>
|
||||
<td>ledger.accounts</td>
|
||||
<td>Array</td>
|
||||
<td>(Omitted unless requested) All the <a href="https://ripple.com/build/ledger-format/">account-state information</a> in this ledger.</td>
|
||||
<td>(Omitted unless requested) All the <a href="reference-ledger-format.html">account-state information</a> in this ledger.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ledger.close_time</td>
|
||||
@@ -3773,7 +3773,7 @@ rippled ledger current
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The following fields are deprecated and may be removed without further notice: <code>accepted</code>, <code>hash</code>, <code>seqNum</code>, <code>totalCoins</code>.</p>
|
||||
<p><strong>Note on <code>owner_funds</code>:</strong> If the request specified <code>"owner_funds": true</code> and expanded transactions, the response has a field <code>owner_funds</code> in the <code>metaData</code> object of each <a href="https://ripple.com/build/transactions/#offercreate">OfferCreate-type transaction</a>. The purpose of this field is to make it easier to track the <a href="https://ripple.com/build/transactions/#lifecycle-of-an-offer">funding status of offers</a> with each new validated ledger. This field is defined slightly different than the version of this field in <a href="#order-book-streams">Order Book subscription streams</a>:</p>
|
||||
<p><strong>Note on <code>owner_funds</code>:</strong> If the request specified <code>"owner_funds": true</code> and expanded transactions, the response has a field <code>owner_funds</code> in the <code>metaData</code> object of each <a href="reference-transaction-format.html#offercreate">OfferCreate-type transaction</a>. The purpose of this field is to make it easier to track the <a href="reference-transaction-format.html#lifecycle-of-an-offer">funding status of offers</a> with each new validated ledger. This field is defined slightly different than the version of this field in <a href="#order-book-streams">Order Book subscription streams</a>:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -3786,7 +3786,7 @@ rippled ledger current
|
||||
<tr>
|
||||
<td>owner_funds</td>
|
||||
<td>String</td>
|
||||
<td>Numeric amount of the <code>TakerGets</code> currency that the <code>Account</code> sending this OfferCreate transaction has after the execution of all transactions in this ledger. This does not check whether the currency amount is <a href="https://ripple.com/build/freeze/">frozen</a>.</td>
|
||||
<td>Numeric amount of the <code>TakerGets</code> currency that the <code>Account</code> sending this OfferCreate transaction has after the execution of all transactions in this ledger. This does not check whether the currency amount is <a href="concept-freeze.html">frozen</a>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -3822,7 +3822,7 @@ rippled ledger current
|
||||
rippled ledger_closed
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#ledger_closed">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#ledger_closed">Try it! ></a></p>
|
||||
<p>This method accepts no parameters.</p>
|
||||
<h4 id="response-format-10">Response Format</h4>
|
||||
<p>An example of a successful response:</p>
|
||||
@@ -3900,7 +3900,7 @@ rippled ledger_closed
|
||||
rippled ledger_current
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#ledger_current">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#ledger_current">Try it! ></a></p>
|
||||
<p>The request contains no parameters.</p>
|
||||
<h4 id="response-format-11">Response Format</h4>
|
||||
<p>An example of a successful response:</p>
|
||||
@@ -4236,7 +4236,7 @@ rippled ledger_current
|
||||
<tr>
|
||||
<td>LedgerEntryType</td>
|
||||
<td>String</td>
|
||||
<td>(Only included if <code>"binary":false</code>) String indicating what type of ledger node this object represents. See <a href="https://ripple.com/build/ledger-format/">ledger format</a> for the full list.</td>
|
||||
<td>(Only included if <code>"binary":false</code>) String indicating what type of ledger node this object represents. See <a href="reference-ledger-format.html">ledger format</a> for the full list.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>(Additional fields)</td>
|
||||
@@ -4258,7 +4258,7 @@ rippled ledger_current
|
||||
</ul>
|
||||
<h2 id="ledger-entry">ledger_entry</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/LedgerEntry.cpp" title="Source">[Source]<br/></a></p>
|
||||
<p>The <code>ledger_entry</code> method returns a single ledger node from the Ripple Consensus Ledger in its raw format. See <a href="https://ripple.com/build/ledger-format/">ledger format</a> for information on the different types of objects you can retrieve.</p>
|
||||
<p>The <code>ledger_entry</code> method returns a single ledger node from the Ripple Consensus Ledger in its raw format. See <a href="reference-ledger-format.html">ledger format</a> for information on the different types of objects you can retrieve.</p>
|
||||
<p><strong><em>Note:</em></strong> There is no commandline version of this method. You can use the <a href="#json"><code>json</code> command</a> to access this method from the commandline instead.</p>
|
||||
<h4 id="request-format-13">Request Format</h4>
|
||||
<p>An example of the request format:</p>
|
||||
@@ -4285,14 +4285,14 @@ rippled ledger_current
|
||||
}
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#ledger_entry">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#ledger_entry">Try it! ></a></p>
|
||||
<p>This method can retrieve several different types of data. You can select which type of item to retrieve by passing the appropriate parameters. Specifically, you should provide exactly one of the following fields:</p>
|
||||
<ol>
|
||||
<li><code>index</code> - Retrieve any type of ledger node by its unique index</li>
|
||||
<li><code>account_root</code> - Retrieve an <a href="https://ripple.com/build/ledger-format/#accountroot">AccountRoot node</a>, similar to the <a href="#account-info">account_info</a> command</li>
|
||||
<li><code>directory</code> - Retrieve a <a href="https://ripple.com/build/ledger-format/#directorynode">DirectoryNode</a>, which contains a list of other nodes</li>
|
||||
<li><code>offer</code> - Retrieve an <a href="https://ripple.com/build/ledger-format/#offer">Offer node</a>, which defines an offer to exchange currency</li>
|
||||
<li><code>ripple_state</code> - Retrieve a <a href="https://ripple.com/build/ledger-format/#ripplestate">RippleState node</a>, which tracks a (non-XRP) currency balance between two accounts.</li>
|
||||
<li><code>account_root</code> - Retrieve an <a href="reference-ledger-format.html#accountroot">AccountRoot node</a>, similar to the <a href="#account-info">account_info</a> command</li>
|
||||
<li><code>directory</code> - Retrieve a <a href="reference-ledger-format.html#directorynode">DirectoryNode</a>, which contains a list of other nodes</li>
|
||||
<li><code>offer</code> - Retrieve an <a href="reference-ledger-format.html#offer">Offer node</a>, which defines an offer to exchange currency</li>
|
||||
<li><code>ripple_state</code> - Retrieve a <a href="reference-ledger-format.html#ripplestate">RippleState node</a>, which tracks a (non-XRP) currency balance between two accounts.</li>
|
||||
</ol>
|
||||
<p>If you specify more than one of the above items, the server will retrieve only of them; it is undefined which one will be chosen.</p>
|
||||
<p>The full list of parameters recognized by this method is as follows:</p>
|
||||
@@ -4313,17 +4313,17 @@ rippled ledger_current
|
||||
<tr>
|
||||
<td>account_root</td>
|
||||
<td>String - <a href="#addresses">Address</a></td>
|
||||
<td>(Optional) Specify an <a href="https://ripple.com/build/ledger-format/#accountroot">AccountRoot node</a> to retrieve.</td>
|
||||
<td>(Optional) Specify an <a href="reference-ledger-format.html#accountroot">AccountRoot node</a> to retrieve.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>directory</td>
|
||||
<td>Object or String</td>
|
||||
<td>(Optional) Specify a <a href="https://ripple.com/build/ledger-format/#directorynode">DirectoryNode</a>. (Directory nodes each contain a list of IDs for things contained in them.) If a string, interpret as the <a href="https://ripple.com/build/ledger-format/#tree-format">unique index</a> to the directory, in hex. If an object, requires either <code>dir_root</code> or <code>owner</code> as a sub-field, plus optionally a <code>sub_index</code> sub-field.</td>
|
||||
<td>(Optional) Specify a <a href="reference-ledger-format.html#directorynode">DirectoryNode</a>. (Directory nodes each contain a list of IDs for things contained in them.) If a string, interpret as the <a href="reference-ledger-format.html#tree-format">unique index</a> to the directory, in hex. If an object, requires either <code>dir_root</code> or <code>owner</code> as a sub-field, plus optionally a <code>sub_index</code> sub-field.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>directory.sub_index</td>
|
||||
<td>Unsigned Integer</td>
|
||||
<td>(Optional) If provided, jumps to a further sub-node in the <a href="https://ripple.com/build/ledger-format/#directorynode">DirectoryNode</a>.</td>
|
||||
<td>(Optional) If provided, jumps to a further sub-node in the <a href="reference-ledger-format.html#directorynode">DirectoryNode</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>directory.dir_root</td>
|
||||
@@ -4338,7 +4338,7 @@ rippled ledger_current
|
||||
<tr>
|
||||
<td>offer</td>
|
||||
<td>Object or String</td>
|
||||
<td>(Optional) Specify an <a href="https://ripple.com/build/ledger-format/#offer">Offer node</a> to retrieve. If a string, interpret as the <a href="https://ripple.com/build/ledger-format/#tree-format">unique index</a> to the Offer. If an object, requires the sub-fields <code>account</code> and <code>seq</code> to uniquely identify the offer.</td>
|
||||
<td>(Optional) Specify an <a href="reference-ledger-format.html#offer">Offer node</a> to retrieve. If a string, interpret as the <a href="reference-ledger-format.html#tree-format">unique index</a> to the Offer. If an object, requires the sub-fields <code>account</code> and <code>seq</code> to uniquely identify the offer.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>offer.account</td>
|
||||
@@ -4358,12 +4358,12 @@ rippled ledger_current
|
||||
<tr>
|
||||
<td>ripple_state.accounts</td>
|
||||
<td>Array</td>
|
||||
<td>(Required if <code>ripple_state</code> specified) 2-length array of account <a href="#addresses">Address</a>es, defining the two accounts linked by this <a href="https://ripple.com/build/ledger-format/#ripplestate">RippleState node</a></td>
|
||||
<td>(Required if <code>ripple_state</code> specified) 2-length array of account <a href="#addresses">Address</a>es, defining the two accounts linked by this <a href="reference-ledger-format.html#ripplestate">RippleState node</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ripple_state.currency</td>
|
||||
<td>String</td>
|
||||
<td>(Required if <code>ripple_state</code> specified) <a href="#currency-codes">Currency Code</a> of the <a href="https://ripple.com/build/ledger-format/#ripplestate">RippleState node</a> to retrieve.</td>
|
||||
<td>(Required if <code>ripple_state</code> specified) <a href="#currency-codes">Currency Code</a> of the <a href="reference-ledger-format.html#ripplestate">RippleState node</a> to retrieve.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>binary</td>
|
||||
@@ -4453,7 +4453,7 @@ rippled ledger_current
|
||||
<tr>
|
||||
<td>node</td>
|
||||
<td>Object</td>
|
||||
<td>(Omitted if <code>"binary": true</code> specified.) Object containing the data of this ledger node, according to the <a href="https://ripple.com/build/ledger-format/">ledger format</a>.</td>
|
||||
<td>(Omitted if <code>"binary": true</code> specified.) Object containing the data of this ledger node, according to the <a href="reference-ledger-format.html">ledger format</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>node_binary</td>
|
||||
@@ -4611,7 +4611,7 @@ Connecting to 127.0.0.1:5005
|
||||
<ol>
|
||||
<li>When returning a <code>lgrNotFound</code> error, the response has a field, <code>acquiring</code> with a <a href="#ledger-request-object">Ledger Request Object</a> indicating the progress of fetching the ledger from the peer-to-peer network.</li>
|
||||
<li>When the response represents an in-progress attempt to acquire the ledger, the body of the result is a <a href="#ledger-request-object">Ledger Request Object</a> indicating the progress of fetching the ledger from the peer-to-peer network.</li>
|
||||
<li>When the ledger is fully available, the response is a representation of the <a href="https://ripple.com/build/ledger-format/#header-format">ledger header</a>.</li>
|
||||
<li>When the ledger is fully available, the response is a representation of the <a href="reference-ledger-format.html#header-format">ledger header</a>.</li>
|
||||
</ol>
|
||||
<h4 id="ledger-request-object">Ledger Request Object</h4>
|
||||
<p>When the server is in the progress of fetching a ledger, but has not yet finished, the <code>rippled</code> server returns a ledger request object indicating its progress towards fetching the ledger. This object has the following fields:</p>
|
||||
@@ -4637,7 +4637,7 @@ Connecting to 127.0.0.1:5005
|
||||
<tr>
|
||||
<td>have_state</td>
|
||||
<td>Boolean</td>
|
||||
<td>(May be omitted) Whether the server has the <a href="https://ripple.com/build/ledger-format/#tree-format">account-state section</a> of the requested ledger.</td>
|
||||
<td>(May be omitted) Whether the server has the <a href="reference-ledger-format.html#tree-format">account-state section</a> of the requested ledger.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>have_transactions</td>
|
||||
@@ -4647,7 +4647,7 @@ Connecting to 127.0.0.1:5005
|
||||
<tr>
|
||||
<td>needed_state_hashes</td>
|
||||
<td>Array of Strings</td>
|
||||
<td>(May be omitted) Up to 16 hashes of nodes in the <a href="https://ripple.com/build/ledger-format/#tree-format">state tree</a> that the server still needs to retrieve.</td>
|
||||
<td>(May be omitted) Up to 16 hashes of nodes in the <a href="reference-ledger-format.html#tree-format">state tree</a> that the server still needs to retrieve.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>needed_transaction_hashes</td>
|
||||
@@ -4758,7 +4758,7 @@ rippled ledger_accept
|
||||
rippled tx E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7 false
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#tx">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#tx">Try it! ></a></p>
|
||||
<p>The request includes the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -4910,7 +4910,7 @@ rippled tx E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7 fals
|
||||
}
|
||||
</code></pre>
|
||||
</div>
|
||||
<p>The response follows the <a href="#response-formatting">standard format</a>, with a successful result containing the fields of the <a href="https://ripple.com/build/transactions/">Transaction object</a> as well as the following additional fields:</p>
|
||||
<p>The response follows the <a href="#response-formatting">standard format</a>, with a successful result containing the fields of the <a href="reference-transaction-format.html">Transaction object</a> as well as the following additional fields:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -4948,7 +4948,7 @@ rippled tx E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7 fals
|
||||
<tr>
|
||||
<td>(Various)</td>
|
||||
<td>(Various)</td>
|
||||
<td>Other fields from the <a href="https://ripple.com/build/transactions/">Transaction object</a></td>
|
||||
<td>Other fields from the <a href="reference-transaction-format.html">Transaction object</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -4988,7 +4988,7 @@ rippled tx E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7 fals
|
||||
rippled transaction_entry E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7 348734
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#transaction_entry">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#transaction_entry">Try it! ></a></p>
|
||||
<p>The request includes the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -5176,7 +5176,7 @@ rippled transaction_entry E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDA
|
||||
<tr>
|
||||
<td>tx_json</td>
|
||||
<td>Object</td>
|
||||
<td>JSON representation of the <a href="https://ripple.com/build/transactions/">Transaction object</a></td>
|
||||
<td>JSON representation of the <a href="reference-transaction-format.html">Transaction object</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -5224,7 +5224,7 @@ rippled transaction_entry E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDA
|
||||
rippled tx_history 0
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#tx_history">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#tx_history">Try it! ></a></p>
|
||||
<p>The request includes the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -6082,7 +6082,7 @@ rippled tx_history 0
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The fields included in each transaction object vary slightly depending on the type of transaction. See <a href="https://ripple.com/build/transactions/">Transaction Format</a> for details.</p>
|
||||
<p>The fields included in each transaction object vary slightly depending on the type of transaction. See <a href="reference-transaction-format.html">Transaction Format</a> for details.</p>
|
||||
<h4 id="possible-errors-18">Possible Errors</h4>
|
||||
<ul>
|
||||
<li>Any of the <a href="#universal-errors">universal error types</a>.</li>
|
||||
@@ -6091,7 +6091,7 @@ rippled tx_history 0
|
||||
</ul>
|
||||
<h2 id="path-find">path_find</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/PathFind.cpp" title="Source">[Source]<br/></a></p>
|
||||
<p><em>WebSocket API only!</em> The <code>path_find</code> method searches for a <a href="https://ripple.com/build/paths/">path</a> along which a transaction can possibly be made, and periodically sends updates when the path changes over time. For a simpler version that is supported by JSON-RPC, see <a href="#ripple-path-find"><code>ripple_path_find</code></a>. For payments occurring strictly in XRP, it is not necessary to find a path, because XRP can be sent directly to any account. </p>
|
||||
<p><em>WebSocket API only!</em> The <code>path_find</code> method searches for a <a href="concept-paths.html">path</a> along which a transaction can possibly be made, and periodically sends updates when the path changes over time. For a simpler version that is supported by JSON-RPC, see <a href="#ripple-path-find"><code>ripple_path_find</code></a>. For payments occurring strictly in XRP, it is not necessary to find a path, because XRP can be sent directly to any account. </p>
|
||||
<p>There are three different modes, or sub-commands, of the path_find command. Specify which one you want with the <code>subcommand</code> parameter:</p>
|
||||
<ul>
|
||||
<li><code>create</code> - Start sending pathfinding information </li>
|
||||
@@ -6121,7 +6121,7 @@ rippled tx_history 0
|
||||
}
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#path_find">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#path_find">Try it! ></a></p>
|
||||
<p>The request includes the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -6160,7 +6160,7 @@ rippled tx_history 0
|
||||
<tr>
|
||||
<td>paths</td>
|
||||
<td>Array</td>
|
||||
<td>(Optional) Array of arrays of objects, representing <a href="https://ripple.com/build/paths/">payment paths</a> to check. You can use this to keep updated on changes to particular paths you already know about, or to check the overall cost to make a payment along a certain path.</td>
|
||||
<td>(Optional) Array of arrays of objects, representing <a href="concept-paths.html">payment paths</a> to check. You can use this to keep updated on changes to particular paths you already know about, or to check the overall cost to make a payment along a certain path.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -6547,7 +6547,7 @@ rippled tx_history 0
|
||||
<tr>
|
||||
<td>alternatives</td>
|
||||
<td>Array</td>
|
||||
<td>Array of objects with suggested <a href="https://ripple.com/build/paths/">paths</a> to take, as described below. If empty, then no paths were found connecting the source and destination accounts.</td>
|
||||
<td>Array of objects with suggested <a href="concept-paths.html">paths</a> to take, as described below. If empty, then no paths were found connecting the source and destination accounts.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>destination_account</td>
|
||||
@@ -6589,7 +6589,7 @@ rippled tx_history 0
|
||||
<tr>
|
||||
<td>paths_computed</td>
|
||||
<td>Array</td>
|
||||
<td>Array of arrays of objects defining <a href="https://ripple.com/build/paths/">payment paths</a></td>
|
||||
<td>Array of arrays of objects defining <a href="concept-paths.html">payment paths</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>source_amount</td>
|
||||
@@ -6605,7 +6605,7 @@ rippled tx_history 0
|
||||
<li><code>noEvents</code> - You are using a protocol that does not support asynchronous callbacks, for example JSON-RPC. (See <a href="#ripple-path-find">ripple_path_find</a> for a pathfinding method that <em>is</em> compatible with JSON-RPC.)</li>
|
||||
</ul>
|
||||
<h4 id="asynchronous-follow-ups">Asynchronous Follow-ups</h4>
|
||||
<p>In addition to the initial response, the server sends more messages in a similar format to update on the status of <a href="https://ripple.com/build/paths/">payment paths</a> over time. These messages include the <code>id</code> of the original WebSocket request so you can tell which request prompted them, and the field <code>"type": "path_find"</code> at the top level to indicate that they are additional responses. The other fields are defined in the same way as the initial response.</p>
|
||||
<p>In addition to the initial response, the server sends more messages in a similar format to update on the status of <a href="concept-paths.html">payment paths</a> over time. These messages include the <code>id</code> of the original WebSocket request so you can tell which request prompted them, and the field <code>"type": "path_find"</code> at the top level to indicate that they are additional responses. The other fields are defined in the same way as the initial response.</p>
|
||||
<p>If the follow-up includes <code>"full_reply": true</code>, then this is the best path that rippled can find as of the current ledger.</p>
|
||||
<p>Here is an example of an asychronous follow-up from a path_find create request:</p>
|
||||
<div class="multicode">
|
||||
@@ -6742,7 +6742,7 @@ rippled tx_history 0
|
||||
</ul>
|
||||
<h2 id="ripple-path-find">ripple_path_find</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/RipplePathFind.cpp" title="Source">[Source]<br/></a></p>
|
||||
<p>The <code>ripple_path_find</code> method is a simplified version of <a href="#path-find"><code>path_find</code></a> that provides a single response with a <a href="https://ripple.com/build/paths/">payment path</a> you can use right away. It is available in both the WebSocket and JSON-RPC APIs. However, the results tend to become outdated as time passes. Instead of making many subsequent calls, you should use <a href="#path-find"><code>path_find</code></a> instead where possible.</p>
|
||||
<p>The <code>ripple_path_find</code> method is a simplified version of <a href="#path-find"><code>path_find</code></a> that provides a single response with a <a href="concept-paths.html">payment path</a> you can use right away. It is available in both the WebSocket and JSON-RPC APIs. However, the results tend to become outdated as time passes. Instead of making many subsequent calls, you should use <a href="#path-find"><code>path_find</code></a> instead where possible.</p>
|
||||
<p>Although the <code>rippled</code> server attempts to find the cheapest path or combination of paths for making a payment, it is not guaranteed that the paths returned by this method are, in fact, the best paths. Due to server load, pathfinding may not find the best results. Additionally, you should be careful with the pathfinding results from untrusted servers. A server could be modified to return less-than-optimal paths in order to earn money for its operators. If you do not have your own server that you can trust with pathfinding, you should compare the results of pathfinding from multiple servers operated by different parties, to minimize the risk of a single server returning poor results. (<strong><em>Note:</em></strong> A server returning less-than-optimal results is not necessarily proof of malicious behavior; it could also be a symptom of heavy server load.)</p>
|
||||
<h4 id="request-format-22">Request Format</h4>
|
||||
<p>An example of the request format:</p>
|
||||
@@ -6797,7 +6797,7 @@ rippled tx_history 0
|
||||
rippled ripple_path_find '{"source_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "source_currencies": [ { "currency": "XRP" }, { "currency": "USD" } ], "destination_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "destination_amount": { "value": "0.001", "currency": "USD", "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B" } }'
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#ripple_path_find">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#ripple_path_find">Try it! ></a></p>
|
||||
<p>The request includes the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -7100,7 +7100,7 @@ rippled ripple_path_find '{"source_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59
|
||||
<tr>
|
||||
<td>paths_computed</td>
|
||||
<td>Array</td>
|
||||
<td>Array of arrays of objects defining <a href="https://ripple.com/build/paths/">payment paths</a></td>
|
||||
<td>Array of arrays of objects defining <a href="concept-paths.html">payment paths</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>source_amount</td>
|
||||
@@ -7173,7 +7173,7 @@ rippled ripple_path_find '{"source_account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59
|
||||
rippled sign sssssssssssssssssssssssssssss '{"TransactionType": "Payment", "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", "Destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX", "Amount": { "currency": "USD", "value": "1", "issuer" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn" }}' false
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#sign">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#sign">Try it! ></a></p>
|
||||
<p>The request includes the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -7187,7 +7187,7 @@ rippled sign sssssssssssssssssssssssssssss '{"TransactionType": "Payment", "Acco
|
||||
<tr>
|
||||
<td>tx_json</td>
|
||||
<td>Object</td>
|
||||
<td><a href="https://ripple.com/build/transactions/">Transaction definition</a> in JSON format</td>
|
||||
<td><a href="reference-transaction-format.html">Transaction definition</a> in JSON format</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>secret</td>
|
||||
@@ -7207,19 +7207,19 @@ rippled sign sssssssssssssssssssssssssssss '{"TransactionType": "Payment", "Acco
|
||||
<tr>
|
||||
<td>fee_mult_max</td>
|
||||
<td>Integer</td>
|
||||
<td>(Optional) If the <code>Fee</code> parameter (<a href="https://ripple.com/build/transaction-cost/">transaction cost</a>) is omitted, this field limits the automatically-provided value so that it is less than or equal to the base transaction cost times this value.</td>
|
||||
<td>(Optional) If the <code>Fee</code> parameter (<a href="concept-transaction-cost.html">transaction cost</a>) is omitted, this field limits the automatically-provided value so that it is less than or equal to the base transaction cost times this value.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>fee_div_max</td>
|
||||
<td>Integer</td>
|
||||
<td>(Optional) Used with <code>fee_mult_max</code> to create a fractional multiplier for the limit. Specifically, the server multiplies its base <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> by <code>fee_mult_max</code>, then divides by this value (rounding down to an integer) to get a limit. If the automatically-provided <code>Fee</code> value would be over the limit, signing fails. <em>(New in <a href="https://wiki.ripple.com/Rippled-0.30.1">version 0.30.1</a>)</em></td>
|
||||
<td>(Optional) Used with <code>fee_mult_max</code> to create a fractional multiplier for the limit. Specifically, the server multiplies its base <a href="concept-transaction-cost.html">transaction cost</a> by <code>fee_mult_max</code>, then divides by this value (rounding down to an integer) to get a limit. If the automatically-provided <code>Fee</code> value would be over the limit, signing fails. <em>(New in <a href="https://wiki.ripple.com/Rippled-0.30.1">version 0.30.1</a>)</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The server automatically attempts to fill in certain fields from the <code>tx_json</code> object if they are omitted, unless you specified <code>offline</code> as true. Otherwise, the following fields from the <a href="https://ripple.com/build/transactions/">transaction format</a> are automatically filled in:</p>
|
||||
<p>The server automatically attempts to fill in certain fields from the <code>tx_json</code> object if they are omitted, unless you specified <code>offline</code> as true. Otherwise, the following fields from the <a href="reference-transaction-format.html">transaction format</a> are automatically filled in:</p>
|
||||
<ul>
|
||||
<li><code>Sequence</code> - The server automatically uses the next Sequence number from the sender's account information. Be careful: the next sequence number for the account is not incremented until this transaction is applied. If you sign multiple transactions without submitting and waiting for the response to each one, you must provide the correct sequence numbers in the request. Automatically filled unless <code>offline</code> is true.</li>
|
||||
<li><code>Fee</code> - If you omit the <code>Fee</code> parameter, the server <a href="https://ripple.com/build/transaction-cost/#automatically-specifying-the-transaction-cost">automatically provides an appropriate transaction cost</a> unless you specified <code>offline</code> as true. If you specify <code>offline</code> as true, you must fill in the transaction cost in the <code>Fee</code> parameter. Be careful: a malicious server can specify an excessively high transaction cost.<ul>
|
||||
<li><code>Fee</code> - If you omit the <code>Fee</code> parameter, the server <a href="concept-transaction-cost.html#automatically-specifying-the-transaction-cost">automatically provides an appropriate transaction cost</a> unless you specified <code>offline</code> as true. If you specify <code>offline</code> as true, you must fill in the transaction cost in the <code>Fee</code> parameter. Be careful: a malicious server can specify an excessively high transaction cost.<ul>
|
||||
<li>If <code>fee_mult_max</code> is included, and the automatically provided <code>Fee</code> value is greater than the long-term base transaction cost times <code>fee_mult_max</code>, then the transaction fails with the error <code>rpcHIGH_FEE</code>. This way, you can let the server fill in the current minimum <code>Fee</code> value as long as the current load-based transaction cost is not too high.</li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -7298,7 +7298,7 @@ rippled sign sssssssssssssssssssssssssssss '{"TransactionType": "Payment", "Acco
|
||||
<tr>
|
||||
<td>tx_json</td>
|
||||
<td>Object</td>
|
||||
<td>JSON specification of the <a href="https://ripple.com/build/transactions/">complete transaction</a> as signed, including any fields that were automatically filled in</td>
|
||||
<td>JSON specification of the <a href="reference-transaction-format.html">complete transaction</a> as signed, including any fields that were automatically filled in</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -7318,7 +7318,7 @@ rippled sign sssssssssssssssssssssssssssss '{"TransactionType": "Payment", "Acco
|
||||
</ul>
|
||||
<h2 id="submit">submit</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/Submit.cpp" title="Source">[Source]<br/></a></p>
|
||||
<p>The <code>submit</code> method sends a <a href="https://ripple.com/build/transactions/">transaction</a> to the network to be confirmed and included in future ledgers. </p>
|
||||
<p>The <code>submit</code> method sends a <a href="reference-transaction-format.html">transaction</a> to the network to be confirmed and included in future ledgers. </p>
|
||||
<p>This command has two modes:</p>
|
||||
<ul>
|
||||
<li>Submit-only mode takes a signed, serialized transaction as a binary blob, and submits it to the network as-is. Since signed transaction objects are immutable, no portion of the transaction can be modified or automatically filled in after submission.</li>
|
||||
@@ -7372,7 +7372,7 @@ rippled sign sssssssssssssssssssssssssssss '{"TransactionType": "Payment", "Acco
|
||||
submit 1200002280000000240000000361D4838D7EA4C6800000000000000000000000000055534400000000004B4E9C06F24296074F7BC48F92A97916C6DC5EA968400000000000000A732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB74473045022100D184EB4AE5956FF600E7536EE459345C7BBCF097A84CC61A93B9AF7197EDB98702201CEA8009B7BEEBAA2AACC0359B41C427C1C5B550A4CA4B80CF2174AF2D6D5DCE81144B4E9C06F24296074F7BC48F92A97916C6DC5EA983143E9D4A2B8AA0780F682D136F7A56D6724EF53754
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#submit">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#submit">Try it! ></a></p>
|
||||
<h3 id="sign-and-submit-mode">Sign-and-Submit Mode</h3>
|
||||
<p>A sign-and-submit request includes the following parameters:</p>
|
||||
<table>
|
||||
@@ -7387,7 +7387,7 @@ submit 1200002280000000240000000361D4838D7EA4C6800000000000000000000000000055534
|
||||
<tr>
|
||||
<td>tx_json</td>
|
||||
<td>Object</td>
|
||||
<td><a href="https://ripple.com/build/transactions/">Transaction definition</a> in JSON format, optionally omitting any auto-fillable fields.</td>
|
||||
<td><a href="reference-transaction-format.html">Transaction definition</a> in JSON format, optionally omitting any auto-fillable fields.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>secret</td>
|
||||
@@ -7417,7 +7417,7 @@ submit 1200002280000000240000000361D4838D7EA4C6800000000000000000000000000055534
|
||||
<tr>
|
||||
<td>fee_div_max</td>
|
||||
<td>Integer</td>
|
||||
<td>(Optional) Used with <code>fee_mult_max</code> to create a fractional multiplier for the limit. Specifically, the server multiplies its base <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> by <code>fee_mult_max</code>, then divides by this value (rounding down to an integer) to get a limit. If the automatically-provided <code>Fee</code> value would be over the limit, the submit command fails. <em>(New in <a href="https://wiki.ripple.com/Rippled-0.30.1">version 0.30.1</a>)</em></td>
|
||||
<td>(Optional) Used with <code>fee_mult_max</code> to create a fractional multiplier for the limit. Specifically, the server multiplies its base <a href="concept-transaction-cost.html">transaction cost</a> by <code>fee_mult_max</code>, then divides by this value (rounding down to an integer) to get a limit. If the automatically-provided <code>Fee</code> value would be over the limit, the submit command fails. <em>(New in <a href="https://wiki.ripple.com/Rippled-0.30.1">version 0.30.1</a>)</em></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -7467,7 +7467,7 @@ submit 1200002280000000240000000361D4838D7EA4C6800000000000000000000000000055534
|
||||
submit sssssssssssssssssssssssssssss '{"TransactionType":"Payment", "Account":"rJYMACXJd1eejwzZA53VncYmiK2kZSBxyD", "Amount":"200000000","Destination":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV" }'
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#submit">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#submit">Try it! ></a></p>
|
||||
<h4 id="response-format-24">Response Format</h4>
|
||||
<p>An example of a successful response:</p>
|
||||
<div class="multicode">
|
||||
@@ -7565,7 +7565,7 @@ submit sssssssssssssssssssssssssssss '{"TransactionType":"Payment", "Account":"r
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><strong><em>Caution:</em></strong> Even if the WebSocket response has <code>"status":"success"</code>, indicating that the command was successfully received, that does not necessarily indicate that the transaction has taken place. There are many cases that can prevent a transaction from processing successfully, such as a lack of trust lines connecting the two accounts in a payment, or changes in the state of the network since the time the transaction was constructed. Even if nothing is wrong, it may take several seconds to close and validate the ledger version that includes the transaction. See the <a href="https://ripple.com/build/transactions/#full-transaction-response-list">full list of transaction responses</a> for details, and do not consider the transaction's results final until they appear in a validated ledger version.</p>
|
||||
<p><strong><em>Caution:</em></strong> Even if the WebSocket response has <code>"status":"success"</code>, indicating that the command was successfully received, that does not necessarily indicate that the transaction has taken place. There are many cases that can prevent a transaction from processing successfully, such as a lack of trust lines connecting the two accounts in a payment, or changes in the state of the network since the time the transaction was constructed. Even if nothing is wrong, it may take several seconds to close and validate the ledger version that includes the transaction. See the <a href="reference-transaction-format.html#full-transaction-response-list">full list of transaction responses</a> for details, and do not consider the transaction's results final until they appear in a validated ledger version.</p>
|
||||
<p><strong><em>Caution:</em></strong> If this command results in an error messages, the message can contain an account secret, if one was provided in the request. (This is not a problem if the request contained a signed tx_blob instead.) Make sure that these errors are not visible to others, including:</p>
|
||||
<ul>
|
||||
<li>Do not write an error including your secret to a log file that can be seen by multiple people</li>
|
||||
@@ -7628,7 +7628,7 @@ submit sssssssssssssssssssssssssssss '{"TransactionType":"Payment", "Account":"r
|
||||
rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B'
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#book_offers">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#book_offers">Try it! ></a></p>
|
||||
<p>The request includes the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -7773,7 +7773,7 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
|
||||
<tr>
|
||||
<td>offers</td>
|
||||
<td>Array</td>
|
||||
<td>Array of offer objects, each of which has the fields of an <a href="https://ripple.com/build/transactions/#offercreate">OfferCreate transaction</a></td>
|
||||
<td>Array of offer objects, each of which has the fields of an <a href="reference-transaction-format.html#offercreate">OfferCreate transaction</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -7857,7 +7857,7 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
|
||||
}
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#subscribe">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#subscribe">Try it! ></a></p>
|
||||
<p>The request includes the following parameters:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -7911,7 +7911,7 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
|
||||
<li><code>server</code> - Sends a message whenever the status of the <code>rippled</code> server (for example, network connectivity) changes</li>
|
||||
<li><code>ledger</code> - Sends a message whenever the consensus process declares a new validated ledger</li>
|
||||
<li><code>transactions</code> - Sends a message whenever a transaction is included in a closed ledger</li>
|
||||
<li><code>transactions_proposed</code> - Sends a message whenever a transaction is included in a closed ledger, as well as some transactions that have not yet been included in a validated ledger and may never be. Not all proposed transactions appear before validation, however. (<strong><em>Note:</em></strong> <a href="https://ripple.com/build/transactions/#result-categories">Even some transactions that don't succeed are included</a> in validated ledgers, because they take the anti-spam transaction fee.)</li>
|
||||
<li><code>transactions_proposed</code> - Sends a message whenever a transaction is included in a closed ledger, as well as some transactions that have not yet been included in a validated ledger and may never be. Not all proposed transactions appear before validation, however. (<strong><em>Note:</em></strong> <a href="reference-transaction-format.html#result-categories">Even some transactions that don't succeed are included</a> in validated ledgers, because they take the anti-spam transaction fee.)</li>
|
||||
<li><code>validations</code> - Sends a message whenever the server receives a validation message from a server it trusts. (An individual <code>rippled</code> declares a ledger validated when the server receives validation messages from at least a quorum of trusted validators.)</li>
|
||||
<li><code>peer_status</code> - <strong>(Admin only)</strong> Information about connected peer <code>rippled</code> servers, especially with regards to the consensus process.</li>
|
||||
</ul>
|
||||
@@ -8020,7 +8020,7 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
|
||||
<tr>
|
||||
<td>fee_base</td>
|
||||
<td>Unsigned Integer</td>
|
||||
<td>Cost of the 'reference transaction' in drops of XRP. (See <a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a> If the ledger includes a <a href="https://ripple.com/build/transactions/#setfee">SetFee pseudo-transaction</a> the new transaction cost applies to all transactions after this ledger.</td>
|
||||
<td>Cost of the 'reference transaction' in drops of XRP. (See <a href="concept-transaction-cost.html">Transaction Cost</a> If the ledger includes a <a href="reference-transaction-format.html#setfee">SetFee pseudo-transaction</a> the new transaction cost applies to all transactions after this ledger.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>fee_ref</td>
|
||||
@@ -8045,12 +8045,12 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
|
||||
<tr>
|
||||
<td>reserve_base</td>
|
||||
<td>Unsigned Integer</td>
|
||||
<td>The minimum reserve, in drops of XRP, that is required for an account. If the ledger includes a <a href="https://ripple.com/build/transactions/#setfee">SetFee pseudo-transaction</a> the new base reserve applies after this ledger.</td>
|
||||
<td>The minimum reserve, in drops of XRP, that is required for an account. If the ledger includes a <a href="reference-transaction-format.html#setfee">SetFee pseudo-transaction</a> the new base reserve applies after this ledger.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>reserve_inc</td>
|
||||
<td>Unsigned Integer</td>
|
||||
<td>The increase in account reserve that is added for each item the account owns, such as offers or trust lines. If the ledger includes a <a href="https://ripple.com/build/transactions/#setfee">SetFee pseudo-transaction</a> the new owner reserve applies after this ledger.</td>
|
||||
<td>The increase in account reserve that is added for each item the account owns, such as offers or trust lines. If the ledger includes a <a href="reference-transaction-format.html#setfee">SetFee pseudo-transaction</a> the new owner reserve applies after this ledger.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>txn_count</td>
|
||||
@@ -8239,12 +8239,12 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
|
||||
<tr>
|
||||
<td>engine_result</td>
|
||||
<td>String</td>
|
||||
<td>String <a href="https://ripple.com/build/transactions/#result-categories">Transaction result code</a></td>
|
||||
<td>String <a href="reference-transaction-format.html#result-categories">Transaction result code</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>engine_result_code</td>
|
||||
<td>Number</td>
|
||||
<td>Numeric <a href="https://ripple.com/build/transactions/#result-categories">transaction response code</a>, if applicable.</td>
|
||||
<td>Numeric <a href="reference-transaction-format.html#result-categories">transaction response code</a>, if applicable.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>engine_result_message</td>
|
||||
@@ -8274,7 +8274,7 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
|
||||
<tr>
|
||||
<td>transaction</td>
|
||||
<td>Object</td>
|
||||
<td>The <a href="https://ripple.com/build/transactions/">definition of the transaction</a> in JSON format</td>
|
||||
<td>The <a href="reference-transaction-format.html">definition of the transaction</a> in JSON format</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>validated</td>
|
||||
@@ -8510,7 +8510,7 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
|
||||
<tr>
|
||||
<td>transaction.owner_funds</td>
|
||||
<td>String</td>
|
||||
<td>Numeric amount of the <code>TakerGets</code> currency that the <code>Account</code> sending this OfferCreate transaction has after executing this transaction. This does not check whether the currency amount is <a href="https://ripple.com/build/freeze/">frozen</a>.</td>
|
||||
<td>Numeric amount of the <code>TakerGets</code> currency that the <code>Account</code> sending this OfferCreate transaction has after executing this transaction. This does not check whether the currency amount is <a href="concept-freeze.html">frozen</a>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -8542,7 +8542,7 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
|
||||
}
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#unsubscribe">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#unsubscribe">Try it! ></a></p>
|
||||
<p>The parameters in the request are specified almost exactly like the parameters to <a href="#subscribe"><code>subscribe</code></a>, except that they are used to define which subscriptions to end instead. The parameters are:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -8656,7 +8656,7 @@ rippled book_offers 'USD/rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' 'EUR/rvYAfWj5gh67oV6
|
||||
rippled server_info
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#server_info">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#server_info">Try it! ></a></p>
|
||||
<p>The request does not takes any parameters.</p>
|
||||
<h4 id="response-format-28">Response Format</h4>
|
||||
<p>An example of a successful response:</p>
|
||||
@@ -9016,7 +9016,7 @@ rippled server_info
|
||||
rippled server_state
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#server_state">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#server_state">Try it! ></a></p>
|
||||
<p>The request does not takes any parameters.</p>
|
||||
<h4 id="response-format-29">Response Format</h4>
|
||||
<p>An example of a successful response:</p>
|
||||
@@ -10307,7 +10307,7 @@ Connecting to 127.0.0.1:5005
|
||||
</ul>
|
||||
<h2 id="validation-create">validation_create</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/315a8b6b602798a4cff4d8e1911936011e12abdb/src/ripple/rpc/handlers/ValidationCreate.cpp" title="Source">[Source]<br/></a></p>
|
||||
<p>Use the <code>validation_create</code> command to generate the keys for a rippled <a href="https://ripple.com/build/rippled-setup/#validator-setup">validating node</a>. Similar to the <a href="#wallet-propose">wallet_propose</a> command, this command makes no real changes, but only generates a set of keys in the proper format.</p>
|
||||
<p>Use the <code>validation_create</code> command to generate the keys for a rippled <a href="tutorial-rippled-setup.html#validator-setup">validating node</a>. Similar to the <a href="#wallet-propose">wallet_propose</a> command, this command makes no real changes, but only generates a set of keys in the proper format.</p>
|
||||
<p><em>The <code>validation_create</code> method is an <a href="#connecting-to-rippled">admin command</a> that cannot be run by unpriviledged users.</em></p>
|
||||
<h4 id="request-format-38">Request Format</h4>
|
||||
<p>An example of the request format:</p>
|
||||
@@ -10865,7 +10865,7 @@ Connecting to 127.0.0.1:5005
|
||||
<tr>
|
||||
<td>cluster</td>
|
||||
<td>Object</td>
|
||||
<td>Summary of other <code>rippled</code> servers in the same cluster, if <a href="https://ripple.com/build/rippled-setup/#clustering">configured as a cluster</a>. <em>(New in <a href="https://wiki.ripple.com/Rippled-0.30.1">version 0.30.1</a>)</em></td>
|
||||
<td>Summary of other <code>rippled</code> servers in the same cluster, if <a href="tutorial-rippled-setup.html#clustering">configured as a cluster</a>. <em>(New in <a href="https://wiki.ripple.com/Rippled-0.30.1">version 0.30.1</a>)</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>peers</td>
|
||||
@@ -10892,7 +10892,7 @@ Connecting to 127.0.0.1:5005
|
||||
<tr>
|
||||
<td>fee</td>
|
||||
<td>Number</td>
|
||||
<td>(May be omitted) The load multiplier this cluster member is applying to the <a href="https://ripple.com/build/transaction-cost/">transaction cost</a></td>
|
||||
<td>(May be omitted) The load multiplier this cluster member is applying to the <a href="concept-transaction-cost.html">transaction cost</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>age</td>
|
||||
@@ -11225,7 +11225,7 @@ Connecting to 127.0.0.1:5005
|
||||
rippled ping
|
||||
</code></pre>
|
||||
</div>
|
||||
<p><a class="button" href="https://ripple.com/build/websocket-tool/#ping">Try it! ></a></p>
|
||||
<p><a class="button" href="ripple-api-tool.html#ping">Try it! ></a></p>
|
||||
<p>The request includes no parameters.</p>
|
||||
<h4 id="response-format-40">Response Format</h4>
|
||||
<p>An example of a successful response:</p>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,11 +110,11 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: References</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li class="level-2"><a href="reference-rippled.html">rippled</a></li>
|
||||
<li class="level-2"><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li class="level-2"><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li class="level-2"><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li class="level-2"><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -171,22 +171,22 @@
|
||||
<p>After doing that, you generate the signed binary format for the transaction. There are two ways to do this:</p>
|
||||
<ol>
|
||||
<li>Convert it to a binary blob and sign it offline. This is preferable, since it means that the account secret used for signing the transaction is never transmitted over any network connection.<ul>
|
||||
<li>You can use <a href="https://ripple.com/build/rippleapi/#sign">RippleAPI</a> to perform offline signing.</li>
|
||||
<li>You can use <a href="reference-rippleapi.html#sign">RippleAPI</a> to perform offline signing.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Have a <code>rippled</code> server sign the transaction for you. The <a href="https://ripple.com/build/rippled-apis/#sign">sign command</a> takes a JSON-format transaction and secret and returns the signed binary transaction format ready for submission. (Transmitting your account secret is dangerous, so you should only do this from within a trusted and encrypted sub-net, to a server you control.)<ul>
|
||||
<li>As a shortcut, you can use the <a href="https://ripple.com/build/rippled-apis/#submit">submit command</a> with a <code>tx_json</code> object to sign and submit a transaction all at once. This is only recommended for testing and development purposes.</li>
|
||||
<li>Have a <code>rippled</code> server sign the transaction for you. The <a href="reference-rippled.html#sign">sign command</a> takes a JSON-format transaction and secret and returns the signed binary transaction format ready for submission. (Transmitting your account secret is dangerous, so you should only do this from within a trusted and encrypted sub-net, to a server you control.)<ul>
|
||||
<li>As a shortcut, you can use the <a href="reference-rippled.html#submit">submit command</a> with a <code>tx_json</code> object to sign and submit a transaction all at once. This is only recommended for testing and development purposes.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<p>In either case, signing a transaction generates a binary blob that can be submitted to the network. This means using <code>rippled</code>'s <a href="https://ripple.com/build/rippled-apis/#submit">submit command</a>. Here is an example of the same transaction, as a signed blob, being submitted with the WebSocket API:</p>
|
||||
<p>In either case, signing a transaction generates a binary blob that can be submitted to the network. This means using <code>rippled</code>'s <a href="reference-rippled.html#submit">submit command</a>. Here is an example of the same transaction, as a signed blob, being submitted with the WebSocket API:</p>
|
||||
<pre><code>{
|
||||
"id": 2,
|
||||
"command": "submit",
|
||||
"tx_blob" : "120000240000000461D4838D7EA4C6800000000000000000000000000055534400000000004B4E9C06F24296074F7BC48F92A97916C6DC5EA968400000000000000F732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB74483046022100982064CDD3F052D22788DB30B52EEA8956A32A51375E72274E417328EBA31E480221008F522C9DB4B0F31E695AA013843958A10DE8F6BA7D6759BEE645F71A7EB240BE81144B4E9C06F24296074F7BC48F92A97916C6DC5EA983143E9D4A2B8AA0780F682D136F7A56D6724EF53754"
|
||||
}
|
||||
</code></pre>
|
||||
<p>After a transaction has been submitted, if it gets accepted into a validated ledger, you can view the final transaction using the API. For example, here is what the WebSocket API <a href="https://ripple.com/build/rippled-apis/#tx">tx command</a> shows for the same transaction. The field names that begin with capital letters are part of the ledger object; the fields that begin with lower-case letters are additional information generated by the server for the request:</p>
|
||||
<p>After a transaction has been submitted, if it gets accepted into a validated ledger, you can view the final transaction using the API. For example, here is what the WebSocket API <a href="reference-rippled.html#tx">tx command</a> shows for the same transaction. The field names that begin with capital letters are part of the ledger object; the fields that begin with lower-case letters are additional information generated by the server for the request:</p>
|
||||
<pre><code>{
|
||||
"id": 6,
|
||||
"status": "success",
|
||||
@@ -287,9 +287,9 @@
|
||||
<li>Confirm that the transaction was either included in a validated ledger, or that it has expired due to <code>LastLedgerSequence</code>. </li>
|
||||
<li>If a transaction fails or expires, you can modify and resubmit it.</li>
|
||||
</ol>
|
||||
<p>Main article: <a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></p>
|
||||
<p>Main article: <a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></p>
|
||||
<h3 id="identifying-transactions">Identifying Transactions</h3>
|
||||
<p>The <code>"hash"</code> is the unique value that identifies a particular transaction. The server provides the hash in the response when you submit the transaction; you can also look up a transaction in an account's transaction history with the <a href="https://ripple.com/build/rippled-apis/#account-tx">account_tx command</a>.</p>
|
||||
<p>The <code>"hash"</code> is the unique value that identifies a particular transaction. The server provides the hash in the response when you submit the transaction; you can also look up a transaction in an account's transaction history with the <a href="reference-rippled.html#account-tx">account_tx command</a>.</p>
|
||||
<p>The transaction hash can be used as a "proof of payment" since anyone can <a href="#looking-up-transaction-results">look up the transaction by its hash</a> in order to verify its final status.</p>
|
||||
<h2 id="common-fields">Common Fields</h2>
|
||||
<p>Every transaction type has the same set of fundamental fields:</p>
|
||||
@@ -375,14 +375,14 @@
|
||||
<h3 id="auto-fillable-fields">Auto-fillable Fields</h3>
|
||||
<p>Some fields can be automatically filled in before the transaction is signed, either by a <code>rippled</code> server or by the library used for offline signing. Both <a href="https://github.com/ripple/ripple-lib">ripple-lib</a> and <code>rippled</code> can automatically provide the following values:</p>
|
||||
<ul>
|
||||
<li><code>Fee</code> - Automatically fill in the <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> based on the network. (<em>Note:</em> <code>rippled</code>'s <a href="https://ripple.com/build/rippled-apis/#sign">sign command</a> supports limits on how high the filled-in-value is, using the <code>fee_mult_max</code> parameter.)</li>
|
||||
<li><code>Fee</code> - Automatically fill in the <a href="concept-transaction-cost.html">transaction cost</a> based on the network. (<em>Note:</em> <code>rippled</code>'s <a href="reference-rippled.html#sign">sign command</a> supports limits on how high the filled-in-value is, using the <code>fee_mult_max</code> parameter.)</li>
|
||||
<li><code>Sequence</code> - Automatically use the next sequence number for the account sending the transaction.</li>
|
||||
</ul>
|
||||
<p>For a production system, we recommend <em>not</em> leaving these fields to be filled by the server. For example, if transaction costs become high due to a temporary spike in network load, you may want to wait for the cost to decrease before sending some transactions, instead of paying the temporarily-high cost.</p>
|
||||
<p>The <a href="#paths"><code>Paths</code> field</a> of the <a href="#payment">Payment</a> transaction type can also be automatically filled in. </p>
|
||||
<h3 id="transaction-cost">Transaction Cost</h3>
|
||||
<p>In order to protect the Ripple Consensus Ledger from being disrupted by spam and denial-of-service attacks, each transaction must destroy a small amount of XRP. This transaction cost is designed to increase along with the load on the network, making it very expensive to deliberately or inadvertently overload the network.</p>
|
||||
<p>The <code>Fee</code> field specifies an amount, in <a href="https://ripple.com/build/rippled-apis/#specifying-currency-amounts">drops of XRP</a>, to destroy as the cost for this transaction. If the transaction is included in a validated leger (whether or not it achieves its intended purpose), then the amount of XRP specified in the <code>Fee</code> parameter is destroyed forever. You can <a href="https://ripple.com/build/transaction-cost/#querying-the-transaction-cost">look up the transaction cost</a> in advance, or <a href="https://ripple.com/build/transaction-cost/#automatically-specifying-the-transaction-cost">let <code>rippled</code> set it automatically</a> when you sign a transaction.</p>
|
||||
<p>The <code>Fee</code> field specifies an amount, in <a href="reference-rippled.html#specifying-currency-amounts">drops of XRP</a>, to destroy as the cost for this transaction. If the transaction is included in a validated leger (whether or not it achieves its intended purpose), then the amount of XRP specified in the <code>Fee</code> parameter is destroyed forever. You can <a href="concept-transaction-cost.html#querying-the-transaction-cost">look up the transaction cost</a> in advance, or <a href="concept-transaction-cost.html#automatically-specifying-the-transaction-cost">let <code>rippled</code> set it automatically</a> when you sign a transaction.</p>
|
||||
<h3 id="canceling-or-skipping-a-transaction">Canceling or Skipping a Transaction</h3>
|
||||
<p>An important and intentional feature of the Ripple Network is that a transaction is final as soon as it has been incorporated in a validated ledger.</p>
|
||||
<p>However, if a transaction has not yet been included in a validated ledger, you can effectively cancel it by rendering it invalid. Typically, this means sending another transaction with the same <code>Sequence</code> value from the same account. If you do not want to perform the same transaction again, you can perform an <a href="#accountset">AccountSet</a> transaction with no options.</p>
|
||||
@@ -390,7 +390,7 @@
|
||||
<p>This approach is preferable to renumbering and resubmitting transactions 12 and 13, because it prevents transactions from being effectively duplicated under different sequence numbers.</p>
|
||||
<p>In this way, an AccountSet transaction with no options is the canonical "<a href="http://en.wikipedia.org/wiki/NOP">no-op</a>" transaction.</p>
|
||||
<h3 id="lastledgersequence">LastLedgerSequence</h3>
|
||||
<p>We strongly recommend that you specify the <code>LastLedgerSequence</code> parameter on every transaction. Provide a value of about 3 higher than <a href="https://ripple.com/build/rippled-apis/#ledger">the most recent ledger index</a> to ensure that your transaction is either validated or rejected within a matter of seconds.</p>
|
||||
<p>We strongly recommend that you specify the <code>LastLedgerSequence</code> parameter on every transaction. Provide a value of about 3 higher than <a href="reference-rippled.html#ledger">the most recent ledger index</a> to ensure that your transaction is either validated or rejected within a matter of seconds.</p>
|
||||
<p>Without the <code>LastLedgerSequence</code> parameter, there is a particular situation that can occur and cause your transaction to be stuck in an undesirable state where it is neither validated nor rejected for a long time. Specifically, if the load-based <a href="#transaction-cost">transaction cost</a> of the network increases after you send a transaction, your transaction may not get propagated enough to be included in a validated ledger, but you would have to pay the (increased) transaction cost in order to send another transaction canceling it. Later, if the transaction cost decreases again, the transaction may become viable again. The <code>LastLedgerSequence</code> places a hard upper limit on how long the transaction can wait to be validated or rejected.</p>
|
||||
<h3 id="accounttxnid">AccountTxnID</h3>
|
||||
<p>The <code>AccountTxnID</code> field lets you chain your transactions together, so that a current transaction is not valid unless the previous one (by Sequence Number) is also valid and matches the transaction you expected.</p>
|
||||
@@ -501,7 +501,7 @@
|
||||
<td>Amount</td>
|
||||
<td>String (XRP)<br/>Object (Otherwise)</td>
|
||||
<td>Amount</td>
|
||||
<td>The amount of currency to deliver. <em>Note:</em> If the <a href="#payment-flags"><em>tfPartialPayment</em> flag</a> is set, this is not the amount actually received. (Formatted as per <a href="https://ripple.com/build/rippled-apis/#specifying-currency-amounts">Specifying Currency Amounts</a>.)</td>
|
||||
<td>The amount of currency to deliver. <em>Note:</em> If the <a href="#payment-flags"><em>tfPartialPayment</em> flag</a> is set, this is not the amount actually received. (Formatted as per <a href="reference-rippled.html#specifying-currency-amounts">Specifying Currency Amounts</a>.)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Destination</td>
|
||||
@@ -531,7 +531,7 @@
|
||||
<td>SendMax</td>
|
||||
<td>String/Object</td>
|
||||
<td>Amount</td>
|
||||
<td>(Optional) Highest amount of source currency this transaction is allowed to cost, including <a href="https://ripple.com/knowledge_center/transfer-fees/">transfer fees</a>, exchange rates, and <a href="http://en.wikipedia.org/wiki/Slippage_%28finance%29">slippage</a>. Does not include the <a href="#transaction-cost">XRP destroyed as a cost for submitting the transaction</a>. (Also see <a href="https://ripple.com/build/rippled-apis/#specifying-currency-amounts">Specifying Currency Amounts</a>) Must be supplied for cross-currency/cross-issue payments. Must be omitted for XRP-to-XRP payments.</td>
|
||||
<td>(Optional) Highest amount of source currency this transaction is allowed to cost, including <a href="concept-transfer-fees.html">transfer fees</a>, exchange rates, and <a href="http://en.wikipedia.org/wiki/Slippage_%28finance%29">slippage</a>. Does not include the <a href="#transaction-cost">XRP destroyed as a cost for submitting the transaction</a>. (Also see <a href="reference-rippled.html#specifying-currency-amounts">Specifying Currency Amounts</a>) Must be supplied for cross-currency/cross-issue payments. Must be omitted for XRP-to-XRP payments.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>DeliverMin</td>
|
||||
@@ -542,14 +542,14 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="special-issuer-values-for-sendmax-and-amount">Special issuer Values for SendMax and Amount</h3>
|
||||
<p>Most of the time, the <code>issuer</code> field of a non-XRP <a href="https://ripple.com/build/rippled-apis/#specifying-currency-amounts">currency amount</a> indicates the account of the gateway that issues that currency. However, when describing payments, there are special rules for the <code>issuer</code> field in the <code>Amount</code> and <code>SendMax</code> fields of a payment.</p>
|
||||
<p>Most of the time, the <code>issuer</code> field of a non-XRP <a href="reference-rippled.html#specifying-currency-amounts">currency amount</a> indicates the account of the gateway that issues that currency. However, when describing payments, there are special rules for the <code>issuer</code> field in the <code>Amount</code> and <code>SendMax</code> fields of a payment.</p>
|
||||
<ul>
|
||||
<li>There is only ever one balance for the same currency between two accounts. This means that, sometimes, the <code>issuer</code> field of an amount actually refers to a counterparty that is redeeming issuances, instead of the account that created the issuances.</li>
|
||||
<li>When the <code>issuer</code> field of the destination <code>Amount</code> field matches the <code>Destination</code> account address, it is treated as a special case meaning "any issuer that the destination accepts." This includes all accounts to which the destination has extended trust lines, as well as issuances created by the destination which may be held on other trust lines. </li>
|
||||
<li>When the <code>issuer</code> field of the <code>SendMax</code> field matches the source account's address, it is treated as a special case meaning "any issuer that the source can use." This includes creating new issuances on trust lines that other accounts have extended to the source account, as well as issuances from other accounts that the source account possesses.</li>
|
||||
</ul>
|
||||
<h3 id="creating-accounts">Creating Accounts</h3>
|
||||
<p>The Payment transaction type is the only way to create new accounts in the shared Ripple ledger. To do so, send an amount of XRP that is equal or greater than the <a href="https://ripple.com/build/reserves/">account reserve</a> to a mathematically-valid account address that does not exist yet. When the payment is processed, a new <a href="https://ripple.com/build/ledger-format/#accountroot">AccountRoot node</a> will be added to the ledger to reflect the newly-created account.</p>
|
||||
<p>The Payment transaction type is the only way to create new accounts in the shared Ripple ledger. To do so, send an amount of XRP that is equal or greater than the <a href="concept-reserves.html">account reserve</a> to a mathematically-valid account address that does not exist yet. When the payment is processed, a new <a href="reference-ledger-format.html#accountroot">AccountRoot node</a> will be added to the ledger to reflect the newly-created account.</p>
|
||||
<p>If you attempt to send an insufficient amount of XRP, or any other currency, the Payment will fail.</p>
|
||||
<h3 id="paths">Paths</h3>
|
||||
<p>If present, the <code>Paths</code> field must contain a <em>path set</em> - an array of path arrays. Each individual path represents one way value can flow from the sender to receiver through various intermediary accounts and order books. A single transaction can potentially use multiple paths, for example if the transaction exchanges currency using several different order books in order to achieve the best rate.</p>
|
||||
@@ -560,7 +560,7 @@
|
||||
</ul>
|
||||
<p>If the <code>Paths</code> field is provided, the server decides at transaction processing time which paths to use, from the provided set plus a <em>default path</em> (the simplest possible way to connect the specified accounts). This decision is deterministic and attempts to minimize costs, but it is not guaranteed to be perfect.</p>
|
||||
<p>The <code>Paths</code> field must not be an empty array, nor an array whose members are all empty arrays.</p>
|
||||
<p>For more information, see <a href="https://ripple.com/build/paths/">Paths</a>.</p>
|
||||
<p>For more information, see <a href="concept-paths.html">Paths</a>.</p>
|
||||
<h3 id="payment-flags">Payment Flags</h3>
|
||||
<p>Transactions of the Payment type support additional values in the <a href="#flags"><code>Flags</code> field</a>, as follows:</p>
|
||||
<table>
|
||||
@@ -611,7 +611,7 @@
|
||||
<p>In the above example with a ¥95/$15 offer and a ¥5/$2 offer, the situation is different if my transaction has both tfPartialPayment and tfLimitQuality enabled. If we keep my <code>SendMax</code> of 20 USD and a destination <code>Amount</code> of 100 CNY, then the limit quality is still <code>5</code>. However, because I am doing a partial payment, the transaction sends as much as it can instead of failing if the full destination amount cannot be sent. This means that my transaction consumes the ¥95/$15 offer, whose quality is about <code>6.3</code>, but it rejects the ¥5/$2 offer because that offer's quality of <code>2.5</code> is worse than the quality limit of <code>5</code>. In the end, my transaction only delivers ¥95 instead of the full ¥100, but it avoids wasting money on poor exchange rates.</p>
|
||||
<h2 id="accountset">AccountSet</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/f65cea66ef99b1de149c02c15f06de6c61abf360/src/ripple/app/transactors/SetAccount.cpp" title="Source">[Source]<br/></a></p>
|
||||
<p>An AccountSet transaction modifies the properties of an <a href="https://ripple.com/build/ledger-format/#accountroot">account in the Ripple Consensus Ledger</a>.</p>
|
||||
<p>An AccountSet transaction modifies the properties of an <a href="reference-ledger-format.html#accountroot">account in the Ripple Consensus Ledger</a>.</p>
|
||||
<p>Example AccountSet:</p>
|
||||
<pre><code>{
|
||||
"TransactionType": "AccountSet",
|
||||
@@ -741,13 +741,13 @@
|
||||
<tr>
|
||||
<td>asfNoFreeze</td>
|
||||
<td>6</td>
|
||||
<td>Permanently give up the ability to <a href="https://ripple.com/build/freeze/">freeze individual trust lines or disable Global Freeze</a>. This flag can never be disabled after being enabled.</td>
|
||||
<td>Permanently give up the ability to <a href="concept-freeze.html">freeze individual trust lines or disable Global Freeze</a>. This flag can never be disabled after being enabled.</td>
|
||||
<td>lsfNoFreeze</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>asfGlobalFreeze</td>
|
||||
<td>7</td>
|
||||
<td><a href="https://ripple.com/build/freeze/">Freeze</a> all assets issued by this account.</td>
|
||||
<td><a href="concept-freeze.html">Freeze</a> all assets issued by this account.</td>
|
||||
<td>lsfGlobalFreeze</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -845,8 +845,8 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Instead of using an account's master key to sign transactions, you can set an alternate key pair, called the "Regular Key". As long as the public key for this key pair is set in the <code>RegularKey</code> field of an account this way, then the secret of the Regular Key pair can be used to sign transactions. (The master secret can still be used, too, unless you set the <a href="#accountset-flags">asfDisableMaster account flag</a>.)</p>
|
||||
<p>A Regular Key pair is generated in the same way as any other Ripple keys (for example, with <a href="https://ripple.com/build/rippled-apis/#wallet-propose">wallet_propose</a>), but it can be changed. A Master Key pair is an intrinsic part of the account's identity (the address is derived from the master public key) so the Master Key cannot be changed. Therefore, using a Regular Key to sign transactions instead of the master key whenever possible is beneficial to security.</p>
|
||||
<p>If your regular key is compromised, but the master key is not, you can use this method to regain control of your account. In some cases, you can even send a <a href="https://ripple.com/build/transaction-cost/#key-reset-transaction">key reset transaction</a> without paying the <a href="#transaction-cost">transaction cost</a>.</p>
|
||||
<p>A Regular Key pair is generated in the same way as any other Ripple keys (for example, with <a href="reference-rippled.html#wallet-propose">wallet_propose</a>), but it can be changed. A Master Key pair is an intrinsic part of the account's identity (the address is derived from the master public key) so the Master Key cannot be changed. Therefore, using a Regular Key to sign transactions instead of the master key whenever possible is beneficial to security.</p>
|
||||
<p>If your regular key is compromised, but the master key is not, you can use this method to regain control of your account. In some cases, you can even send a <a href="concept-transaction-cost.html#key-reset-transaction">key reset transaction</a> without paying the <a href="#transaction-cost">transaction cost</a>.</p>
|
||||
<h2 id="offercreate">OfferCreate</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/CreateOffer.cpp" title="Source">[Source]<br/></a></p>
|
||||
<p>An OfferCreate transaction is effectively a <a href="http://en.wikipedia.org/wiki/limit_order">limit order</a>. It defines an intent to exchange currencies, and creates an Offer node in the Ripple Consensus Ledger if not completely fulfilled when placed. Offers can be partially fulfilled.</p>
|
||||
@@ -879,7 +879,7 @@
|
||||
<td><a href="#expiration">Expiration</a></td>
|
||||
<td>Unsigned Integer</td>
|
||||
<td>UInt32</td>
|
||||
<td>(Optional) Time after which the offer is no longer active, in <a href="https://ripple.com/build/rippled-apis/#specifying-time">seconds since the Ripple Epoch</a>.</td>
|
||||
<td>(Optional) Time after which the offer is no longer active, in <a href="reference-rippled.html#specifying-time">seconds since the Ripple Epoch</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>OfferSequence</td>
|
||||
@@ -909,7 +909,7 @@
|
||||
<ul>
|
||||
<li>If the creator no longer has any of the <code>TakerGets</code> currency.</li>
|
||||
<li>The offer becomes funded again when the creator obtains more of that currency.</li>
|
||||
<li>If the currency required to fund the offer is held in a <a href="https://ripple.com/build/freeze/">frozen trust line</a>.</li>
|
||||
<li>If the currency required to fund the offer is held in a <a href="concept-freeze.html">frozen trust line</a>.</li>
|
||||
<li>The offer becomes funded again when the trust line is no longer frozen.</li>
|
||||
<li>If the creator does not have enough XRP for the reserve amount of a new trust line required by the offer. (See <a href="#offers-and-trust">Offers and Trust</a>.)</li>
|
||||
<li>The offer becomes funded again when the creator obtains more XRP, or the reserve requirements decrease.</li>
|
||||
@@ -926,10 +926,10 @@
|
||||
</ul>
|
||||
<h4 id="tracking-unfunded-offers">Tracking Unfunded Offers</h4>
|
||||
<p>Tracking the funding status of all offers can be computationally taxing. In particular, accounts that are actively trading may have a large number of offers open and be frequently involved in transactions that affect the funding status of their offers. Because of this, <code>rippled</code> does not proactively find and remove offers.</p>
|
||||
<p>A client application can locally track the funding status of offers. To do this, first retreive an order book using the <a href="https://ripple.com/build/rippled-apis/#book-offers"><code>book_offers</code> command</a> and check the <code>taker_gets_funded</code> field of offers. Then, <a href="https://ripple.com/build/rippled-apis/#subscribe">subscribe</a> to the <code>transactions</code> stream and watch the transaction metadata to see which offers are modified.</p>
|
||||
<p>A client application can locally track the funding status of offers. To do this, first retreive an order book using the <a href="reference-rippled.html#book-offers"><code>book_offers</code> command</a> and check the <code>taker_gets_funded</code> field of offers. Then, <a href="reference-rippled.html#subscribe">subscribe</a> to the <code>transactions</code> stream and watch the transaction metadata to see which offers are modified.</p>
|
||||
<h3 id="offers-and-trust">Offers and Trust</h3>
|
||||
<p>The limit values of trust lines (See <a href="#trustset">TrustSet</a>) do not affect offers. In other words, you can use an offer to acquire more than the maximum amount you trust an issuing gateway to redeem.</p>
|
||||
<p>However, possessing non-XRP balances still requires a trust line to the account issuing those balances. When an offer is taken, it automatically creates any necessary trust lines, setting their limits to 0. Because <a href="https://ripple.com/build/reserves/">trust lines increase the reserve an account must hold</a>, any offers that would require a new trust line also require the account to have the necessary XRP to pay the reserve for that trust line.</p>
|
||||
<p>However, possessing non-XRP balances still requires a trust line to the account issuing those balances. When an offer is taken, it automatically creates any necessary trust lines, setting their limits to 0. Because <a href="concept-reserves.html">trust lines increase the reserve an account must hold</a>, any offers that would require a new trust line also require the account to have the necessary XRP to pay the reserve for that trust line.</p>
|
||||
<p>A trust line indicates an issuer you trust enough to accept their issuances as payment, within limits. Offers are explicit instructions to acquire certain issuances, so they are allowed to go beyond those limits.</p>
|
||||
<h3 id="offer-preference">Offer Preference</h3>
|
||||
<p>Existing offers are grouped by "quality", which is measured as the ratio between <code>TakerGets</code> and <code>TakerPays</code>. Offers with a higher quality are taken preferentially. (That is, the person accepting the offer receives as much as possible for the amount of currency they pay out.) Offers with the same quality are taken on the basis of which offer was placed in the earliest ledger version.</p>
|
||||
@@ -937,7 +937,7 @@
|
||||
<h3 id="expiration">Expiration</h3>
|
||||
<p>Since transactions can take time to propagate and confirm, the timestamp of a ledger is used to determine offer validity. An offer only expires when its Expiration time occurs prior to the most-recently validated ledger. In other words, an offer with an <code>Expiration</code> field is still considered "active" if its expiration time is later than the timestamp of the most-recently validated ledger, regardless of what your local clock says.</p>
|
||||
<p>You can determine the final disposition of an offer with an <code>Expiration</code> as soon as you see a fully-validated ledger with a close time equal to or greater than the expiration time.</p>
|
||||
<p><em>Note:</em> Since only new transactions can modify the ledger, an expired offer can remain on the ledger after it becomes inactive. The offer is treated as unfunded and has no effect, but it can continue to appear in results (for example, from the <a href="https://ripple.com/build/rippled-apis/#ledger-entry">ledger_entry</a> command). Later on, the expired offer can get finally deleted as a result of another transaction (such as another OfferCreate) if the server encounters it while processing.</p>
|
||||
<p><em>Note:</em> Since only new transactions can modify the ledger, an expired offer can remain on the ledger after it becomes inactive. The offer is treated as unfunded and has no effect, but it can continue to appear in results (for example, from the <a href="reference-rippled.html#ledger-entry">ledger_entry</a> command). Later on, the expired offer can get finally deleted as a result of another transaction (such as another OfferCreate) if the server encounters it while processing.</p>
|
||||
<h3 id="auto-bridging">Auto-Bridging</h3>
|
||||
<p>Any OfferCreate that would exchange two non-XRP currencies could potentially use XRP as an intermediary currency in a synthetic order book. This is because of auto-bridging, which serves to improve liquidity across all currency pairs by using XRP as a vehicle currency. This works because of XRP's nature as a native cryptocurrency to the Ripple Consensus Ledger. Offer execution can use a combination of direct and auto-bridged offers to achieve the best total exchange rate.</p>
|
||||
<p>Example: <em>Anita places an offer to sell GBP and buy BRL. She might fund that this uncommon currency market has few offers. There is one offer with a good rate, but it has insufficient quantity to satisfy Anita's trade. However, both GBP and BRL have active, competitive markets to XRP. Auto-bridging software finds a way to complete Anita's offer by purchasing XRP with GBP from one trader, then selling the XRP to another trader in order to buy BRL. Anita automatically gets the best rate possible by combining the small offer in the direct GBP:BRL market with the better composite rates created by pairing GBP:XRP and XRP:BRL offers.</em></p>
|
||||
@@ -1048,7 +1048,7 @@
|
||||
<td><a href="#trust-limits">LimitAmount</a></td>
|
||||
<td>Object</td>
|
||||
<td>Amount</td>
|
||||
<td>Object defining the trust line to create or modify, in the same format as <a href="https://ripple.com/build/rippled-apis/#specifying-currency-amounts">currency amounts</a>.</td>
|
||||
<td>Object defining the trust line to create or modify, in the same format as <a href="reference-rippled.html#specifying-currency-amounts">currency amounts</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>LimitAmount.currency</td>
|
||||
@@ -1086,7 +1086,7 @@
|
||||
<p>All balances on the Ripple Network, except for XRP, represent value owed in the world outside the Ripple Ledger. The account that issues those funds in Ripple (identified by the <code>issuer</code> field of the <code>LimitAmount</code> object) is responsible for paying the balance back, outside of the Ripple Network, when users redeem their Ripple balances by returning them to the issuing account.</p>
|
||||
<p>Since a computer program cannot force the gateway to keep its promise and not default in real life, trust lines represent a way of configuring how much you are willing to trust the issuing account to hold on your behalf. Since a large, reputable issuing gateway is more likely to be able to pay you back than, say, your broke roommate, you can set different limits on each trust line, to indicate the maximum amount you are willing to let the issuing account "owe" you (off the network) for the funds that you hold on the network. In the case that the issuing gateway defaults or goes out of business, you can lose up to that much money because the balances you hold in the Ripple Network can no longer be exchanged for equivalent balances off the network. (The Ripple Ledger will still reflect that you possess the same balance with that issuing gateway, but you won't be able to redeem, making it unlikely to be worth anything.)</p>
|
||||
<p>There are two cases where you can hold a balance on a trust line that is <em>greater</em> than your limit: when you acquire more of that currency through <a href="#offercreate">trading</a>, or when you decrease the limit on your trust line.</p>
|
||||
<p>Since a trust line occupies space in the ledger, <a href="https://ripple.com/build/reserves/">a trust line increases the XRP your account must hold in reserve</a>. This applies to the account extending trust, not to the account receiving it.</p>
|
||||
<p>Since a trust line occupies space in the ledger, <a href="concept-reserves.html">a trust line increases the XRP your account must hold in reserve</a>. This applies to the account extending trust, not to the account receiving it.</p>
|
||||
<p>A trust line with settings in the default state is equivalent to no trust line.</p>
|
||||
<p>The default state of all flags is off, except for the <a href="https://ripple.com/knowledge_center/understanding-the-noripple-flag/">NoRipple flag</a>, whose default state depends on the DefaultRipple flag.</p>
|
||||
<p>The Auth flag of a trust line does not determine whether the trust line counts towards its owner's XRP reserve requirement. However, an enabled Auth flag prevents the trust line from being in its default state. An authorized trust line can never be deleted. <em>(New in <a href="https://github.com/ripple/rippled/releases/tag/0.30.0">rippled 0.30.0</a>)</em>: You can pre-authorize a trust line with the <code>tfSetfAuth</code> flag only, even if the limit and balance of the trust line are 0.</p>
|
||||
@@ -1124,13 +1124,13 @@
|
||||
<td>tfSetFreeze</td>
|
||||
<td>0x00100000</td>
|
||||
<td>1048576</td>
|
||||
<td><a href="https://ripple.com/build/freeze/">Freeze</a> the trustline.</td>
|
||||
<td><a href="concept-freeze.html">Freeze</a> the trustline.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tfClearFreeze</td>
|
||||
<td>0x00200000</td>
|
||||
<td>2097152</td>
|
||||
<td><a href="https://ripple.com/build/freeze/">Unfreeze</a> the trustline.</td>
|
||||
<td><a href="concept-freeze.html">Unfreeze</a> the trustline.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -1168,7 +1168,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="setfee">SetFee</h2>
|
||||
<p>A change in <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> or <a href="https://ripple.com/build/reserves/">account reserve</a> requirements. This is typically in response to changes in the load on the network.</p>
|
||||
<p>A change in <a href="concept-transaction-cost.html">transaction cost</a> or <a href="concept-reserves.html">account reserve</a> requirements. This is typically in response to changes in the load on the network.</p>
|
||||
<p><em>Note:</em> You cannot send a pseudo-transaction, but you may encounter one when processing ledgers.</p>
|
||||
<pre><code>{
|
||||
"Account": "rrrrrrrrrrrrrrrrrrrrrhoLvTp",
|
||||
@@ -1199,7 +1199,7 @@
|
||||
<td>BaseFee</td>
|
||||
<td>String</td>
|
||||
<td>UInt64</td>
|
||||
<td>The charge, in drops of XRP, for the reference transaction, as hex. (This is the <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> before scaling for load.)</td>
|
||||
<td>The charge, in drops of XRP, for the reference transaction, as hex. (This is the <a href="concept-transaction-cost.html">transaction cost</a> before scaling for load.)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ReferenceFeeUnits</td>
|
||||
@@ -1223,7 +1223,7 @@
|
||||
</table>
|
||||
<h1 id="transaction-results">Transaction Results</h1>
|
||||
<h2 id="immediate-response">Immediate Response</h2>
|
||||
<p>The response from the <a href="https://ripple.com/build/rippled-apis/#submit"><code>submit</code> command</a> contains a provisional result from the <code>rippled</code> server indicating what happened during local processing of the transaction. </p>
|
||||
<p>The response from the <a href="reference-rippled.html#submit"><code>submit</code> command</a> contains a provisional result from the <code>rippled</code> server indicating what happened during local processing of the transaction. </p>
|
||||
<p>The response from <code>submit</code> contains the following fields:</p>
|
||||
<table>
|
||||
<thead>
|
||||
@@ -1258,7 +1258,7 @@
|
||||
</code></pre>
|
||||
<p><strong><em>Note:</em></strong> A successful result at this stage does not indicate that the transaction has completely succeeded; only that it was successfully applied to the provisional version of the ledger kept by the local server. See <a href="#finality-of-results">Finality of Results</a> for details.</p>
|
||||
<h2 id="looking-up-transaction-results">Looking up Transaction Results</h2>
|
||||
<p>To see the final result of a transaction, use the <a href="https://ripple.com/build/rippled-apis/#tx"><code>tx</code> command</a>, <a href="https://ripple.com/build/rippled-apis/#account-tx"><code>account_tx</code> command</a>, or other response from <code>rippled</code>. Look for <code>"validated": true</code> to indicate that this response uses a ledger version that has been validated by consensus. </p>
|
||||
<p>To see the final result of a transaction, use the <a href="reference-rippled.html#tx"><code>tx</code> command</a>, <a href="reference-rippled.html#account-tx"><code>account_tx</code> command</a>, or other response from <code>rippled</code>. Look for <code>"validated": true</code> to indicate that this response uses a ledger version that has been validated by consensus. </p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -1326,7 +1326,7 @@
|
||||
<tr>
|
||||
<td>Claimed cost only</td>
|
||||
<td><a href="#tec-codes">tec</a></td>
|
||||
<td>The transaction did not achieve its intended purpose, but the <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> was destroyed. This result is not final unless it appears in a validated ledger.</td>
|
||||
<td>The transaction did not achieve its intended purpose, but the <a href="concept-transaction-cost.html">transaction cost</a> was destroyed. This result is not final unless it appears in a validated ledger.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Client library error</td>
|
||||
@@ -1338,7 +1338,7 @@
|
||||
<p>The distinction between a local error (<code>tel</code>) and a malformed transaction (<code>tem</code>) is a matter of protocol-level rules. For example, the protocol sets no limit on the maximum number of paths that can be included in a transaction. However, a server may define a finite limit of paths it can process. If two different servers are configured differently, then one of them may return a <code>tel</code> error for a transaction with many paths, while the other server could successfully process the transaction. If enough servers are able to process the transaction that it survives consensus, then it can still be included in a validated ledger.</p>
|
||||
<p>By contrast, a <code>tem</code> error implies that no server anywhere can apply the transaction, regardless of settings. Either the transaction breaks the rules of the protocol, it is unacceptably ambiguous, or it is completely nonsensical. The only way a malformed transaction could become valid is through changes in the protocol; for example, if a new feature is adopted, then transactions using that feature could be considered malformed by servers that are running older software which predates that feature.</p>
|
||||
<h2 id="claimed-cost-justification">Claimed Cost Justification</h2>
|
||||
<p>Although it may seem unfair to charge a <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> for a failed transaction, the <code>tec</code> class of errors exists for good reasons:</p>
|
||||
<p>Although it may seem unfair to charge a <a href="concept-transaction-cost.html">transaction cost</a> for a failed transaction, the <code>tec</code> class of errors exists for good reasons:</p>
|
||||
<ul>
|
||||
<li>Transactions submitted after the failed one do not have to have their Sequence values renumbered. Incorporating the failed transaction into a ledger uses up the transaction's sequence number, preserving the expected sequence.</li>
|
||||
<li>Distributing the transaction throughout the network increases network load. Enforcing a cost makes it harder for attackers to abuse the network with failed transactions.</li>
|
||||
@@ -1414,7 +1414,7 @@
|
||||
<tr>
|
||||
<td><a href="#delivered-amount">delivered_amount</a></td>
|
||||
<td>Object or String</td>
|
||||
<td>(New in <a href="https://github.com/ripple/rippled/releases/tag/0.27.0">rippled 0.27.0</a>) The <a href="https://ripple.com/build/rippled-apis/#specifying-currency-amounts">amount</a> actually received by the <code>Destination</code> account. Use this field to determine how much was delivered, regardless of whether the transaction is a <a href="#partial-payments">partial payment</a>.</td>
|
||||
<td>(New in <a href="https://github.com/ripple/rippled/releases/tag/0.27.0">rippled 0.27.0</a>) The <a href="reference-rippled.html#specifying-currency-amounts">amount</a> actually received by the <code>Destination</code> account. Use this field to determine how much was delivered, regardless of whether the transaction is a <a href="#partial-payments">partial payment</a>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -1460,7 +1460,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>telINSUF_FEE_P</td>
|
||||
<td>The <code>Fee</code> from the transaction is not high enough to meet the server's current <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> requirement, which is derived from its load level.</td>
|
||||
<td>The <code>Fee</code> from the transaction is not high enough to meet the server's current <a href="concept-transaction-cost.html">transaction cost</a> requirement, which is derived from its load level.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>telNO_DST_PARTIAL</td>
|
||||
@@ -1492,7 +1492,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>temBAD_CURRENCY</td>
|
||||
<td>The transaction improperly specified a currency field. See <a href="https://ripple.com/build/rippled-apis/#specifying-currency-amounts">Specifying Currency Amounts</a> for the correct format.</td>
|
||||
<td>The transaction improperly specified a currency field. See <a href="reference-rippled.html#specifying-currency-amounts">Specifying Currency Amounts</a> for the correct format.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>temBAD_EXPIRATION</td>
|
||||
@@ -1721,7 +1721,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="tec-codes">tec Codes</h3>
|
||||
<p>These codes indicate that the transaction failed, but it was applied to a ledger in order to apply the <a href="https://ripple.com/build/transaction-cost/">transaction cost</a>. They have numerical values in the range 100 to 199. The exact codes sometimes appear in ledger data, so they do not change, but we recommend not relying on the numeric value regardless.</p>
|
||||
<p>These codes indicate that the transaction failed, but it was applied to a ledger in order to apply the <a href="concept-transaction-cost.html">transaction cost</a>. They have numerical values in the range 100 to 199. The exact codes sometimes appear in ledger data, so they do not change, but we recommend not relying on the numeric value regardless.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -1754,7 +1754,7 @@
|
||||
<tr>
|
||||
<td>tecUNFUNDED_PAYMENT</td>
|
||||
<td>104</td>
|
||||
<td>The transaction failed because the sending account is trying to send more XRP than it holds, not counting the reserve. (See: <a href="https://ripple.com/build/reserves/">Reserves</a>)</td>
|
||||
<td>The transaction failed because the sending account is trying to send more XRP than it holds, not counting the reserve. (See: <a href="concept-reserves.html">Reserves</a>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tecFAILED_PROCESSING</td>
|
||||
@@ -1769,12 +1769,12 @@
|
||||
<tr>
|
||||
<td>tecINSUF_RESERVE_LINE</td>
|
||||
<td>122</td>
|
||||
<td>The transaction failed because the sending account does not have enough XRP to create a new trust line. (See: <a href="https://ripple.com/build/reserves/">Reserves</a>) This error occurs when the counterparty already has a trust line in a non-default state to the sending account for the same currency. (See tecNO_LINE_INSUF_RESERVE for the other case.)</td>
|
||||
<td>The transaction failed because the sending account does not have enough XRP to create a new trust line. (See: <a href="concept-reserves.html">Reserves</a>) This error occurs when the counterparty already has a trust line in a non-default state to the sending account for the same currency. (See tecNO_LINE_INSUF_RESERVE for the other case.)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tecINSUF_RESERVE_OFFER</td>
|
||||
<td>123</td>
|
||||
<td>The transaction failed because the sending account does not have enough XRP to create a new Offer. (See: <a href="https://ripple.com/build/reserves/">Reserves</a>)</td>
|
||||
<td>The transaction failed because the sending account does not have enough XRP to create a new Offer. (See: <a href="concept-reserves.html">Reserves</a>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tecNO_DST</td>
|
||||
@@ -1789,7 +1789,7 @@
|
||||
<tr>
|
||||
<td>tecNO_LINE_INSUF_RESERVE</td>
|
||||
<td>126</td>
|
||||
<td>The transaction failed because the sending account does not have enough XRP to create a new trust line. (See: <a href="https://ripple.com/build/reserves/">Reserves</a>) This error occurs when the counterparty does not have a trust line to this account for the same currency. (See tecINSUF_RESERVE_LINE for the other case.)</td>
|
||||
<td>The transaction failed because the sending account does not have enough XRP to create a new trust line. (See: <a href="concept-reserves.html">Reserves</a>) This error occurs when the counterparty does not have a trust line to this account for the same currency. (See tecINSUF_RESERVE_LINE for the other case.)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tecNO_LINE_REDUNDANT</td>
|
||||
@@ -1844,7 +1844,7 @@
|
||||
<tr>
|
||||
<td>tecFROZEN</td>
|
||||
<td>137</td>
|
||||
<td>The <a href="#offercreate">OfferCreate transaction</a> failed because one or both of the assets involved are subject to a <a href="https://ripple.com/build/freeze/">global freeze</a>.</td>
|
||||
<td>The <a href="#offercreate">OfferCreate transaction</a> failed because one or both of the assets involved are subject to a <a href="concept-freeze.html">global freeze</a>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tecNO_TARGET</td>
|
||||
@@ -1916,11 +1916,11 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tejMaxFeeExceeded</td>
|
||||
<td>The <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> that would be necessary to send the transaction is higher than the maximum transaction cost setting, which is either the <code>_MaxFee</code> parameter of the Transaction (if provided) or the maximum transaction cost configured for the remote. The default value is 1 XRP (100000 drops).</td>
|
||||
<td>The <a href="concept-transaction-cost.html">transaction cost</a> that would be necessary to send the transaction is higher than the maximum transaction cost setting, which is either the <code>_MaxFee</code> parameter of the Transaction (if provided) or the maximum transaction cost configured for the remote. The default value is 1 XRP (100000 drops).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tejMaxLedger</td>
|
||||
<td>Currently-validated ledgers have surpassed the <code>LastLedgerSequence</code> parameter of the transaction without including it, so it can no longer succeed. (Also see <a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a>.) When using ripple-lib, this error effectively replaces all non-final errors, including tel-, tef-, and ter-class response codes.</td>
|
||||
<td>Currently-validated ledgers have surpassed the <code>LastLedgerSequence</code> parameter of the transaction without including it, so it can no longer succeed. (Also see <a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a>.) When using ripple-lib, this error effectively replaces all non-final errors, including tel-, tef-, and ter-class response codes.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tejSecretInvalid</td>
|
||||
|
||||
@@ -33,44 +33,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
|
||||
@@ -33,44 +33,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -135,7 +135,7 @@
|
||||
<script type="text/javascript">
|
||||
// Set some constants for the REST tool script
|
||||
var URL_BASE = 'http://localhost/rippled';
|
||||
var DOC_BASE = 'https://ripple.com/build/rippled-apis/';
|
||||
var DOC_BASE = 'reference-rippled.html';
|
||||
</script>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,8 +110,8 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Best Practices</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li class="level-2"><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li class="level-2"><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -170,7 +170,7 @@
|
||||
<li>One or more <strong>operational accounts</strong> (also known as a "hot wallets") with low value, used frequently by automated processes.</li>
|
||||
<li>Optional <strong>standby accounts</strong> (also known as "warm wallets"), used infrequently by human operators.</li>
|
||||
</ul>
|
||||
<p>For more information, see <a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Accounts</a></p>
|
||||
<p>For more information, see <a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Accounts</a></p>
|
||||
<h3 id="funds-lifecycle">Funds Lifecycle</h3>
|
||||
<p>Funds in Ripple tend to flow in a cycle, from the cold wallet to the warm wallets, then the warm wallets, to customers, and eventually from customers back to the cold wallet. Issuances (any non-XRP balance in Ripple) are always tied to a trust line, so each payment "ripples" through ACME's issuing account on the trust lines connected to it. Ultimately, the lifecycle of issuances in Ripple looks something like this:</p>
|
||||
<p><img alt="Funds flow diagram" src="img/e2g-funds_flow.png"/></p>
|
||||
@@ -265,7 +265,7 @@
|
||||
<li>Before sending a payment into Ripple, double check the cost of the payment. A simple payment from your hot wallet to a customer should not cost more than the destination amount plus any <a href="#transferrate">transfer fee</a> you have set.</li>
|
||||
<li>Before processing a payment out of Ripple, make sure you know the customer's identity. This makes it harder for anonymous attackers to scam you, and it is also an important element of most anti-money-laundering regulations. This is especially important because the users sending money from Ripple could be different than the ones that initially received the money in Ripple.</li>
|
||||
<li>Follow the guidelines for <a href="#reliable-transaction-submission">reliable transaction submission</a> when sending Ripple transactions.</li>
|
||||
<li><a href="#robustly-monitoring-for-payments">Robustly monitor for incoming payments</a>, and read the correct amount. Don't mistakenly credit someone the full amount if they only sent a <a href="https://ripple.com/build/transactions/#partial-payments">partial payment</a>.</li>
|
||||
<li><a href="#robustly-monitoring-for-payments">Robustly monitor for incoming payments</a>, and read the correct amount. Don't mistakenly credit someone the full amount if they only sent a <a href="reference-transaction-format.html#partial-payments">partial payment</a>.</li>
|
||||
<li>Track your obligations and balances within the Ripple network, and compare with your assets off the network. If they do not match up, stop processing withdrawals and deposits until you resolve the discrepancy.</li>
|
||||
<li>Proactively avoid ambiguous situations. We recommend the following:<ul>
|
||||
<li>Enable the <a href="#disallowxrp"><code>DisallowXRP</code> flag</a> for the cold wallet account and all hot wallet accounts, so users do not accidentally send you XRP. (Private exchanges should <em>not</em> set this flag, since they trade XRP normally.)</li>
|
||||
@@ -300,7 +300,7 @@
|
||||
<li>Gateways can freeze all issuances created by their cold wallet, in case of a compromised gateway account or for migrating cold wallets.</li>
|
||||
<li>Furthermore, gateways can permanently opt out of their ability to freeze issuances at all. This allows a gateway to assure its users that it will continue to provide "physical-money-like" services.</li>
|
||||
</ul>
|
||||
<p>For more information, see the <a href="https://ripple.com/build/freeze/">Freeze article</a>.</p>
|
||||
<p>For more information, see the <a href="concept-freeze.html">Freeze article</a>.</p>
|
||||
<h2 id="authorized-accounts">Authorized Accounts</h2>
|
||||
<p>Ripple's Authorized Accounts feature enables a gateway to limit who can hold that gateway's issuances, so that unknown Ripple accounts cannot hold the currency your gateway issues. We feel this is <em>not necessary</em> in most cases, since gateways have full control over the process of redeeming Ripple balances for value in the outside world. (You can collect customer information and impose limits on withdrawals at that stage without worrying about what happens within the Ripple network.)</p>
|
||||
<p>To use the Authorized Accounts feature, a gateway enables the <code>RequireAuth</code> flag for its cold wallet account, and then individually approves each user account's trust line before sending issuances in Ripple to that account.</p>
|
||||
@@ -329,16 +329,16 @@
|
||||
<h3 id="apis-and-middleware">APIs and Middleware</h3>
|
||||
<p>There are several interfaces you can use to connect to Ripple, depending on your needs and your existing software:</p>
|
||||
<ul>
|
||||
<li><a href="https://ripple.com/build/rippled-apis/"><code>rippled</code></a> provides JSON-RPC and WebSocket APIs that can be used as a low-level interface to all core Ripple functionality.</li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a> provides a simple API for JavaScript applications.</li>
|
||||
<li><a href="reference-rippled.html"><code>rippled</code></a> provides JSON-RPC and WebSocket APIs that can be used as a low-level interface to all core Ripple functionality.</li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a> provides a simple API for JavaScript applications.</li>
|
||||
</ul>
|
||||
<h2 id="tool-security">Tool Security</h2>
|
||||
<p>Any time you submit a Ripple transaction, it must be signed using your secret. However, having your secret means having full control over your account. Therefore, you should never transmit your secret to a server operated by someone else. Instead, use your own server or client application to sign the transactions before sending them out.</p>
|
||||
<p>The examples in this document show API methods that include an account secret. This is only safe if you control <code>rippled</code> server yourself, <em>and</em> you connect to it over a connection that is secure from outside listeners. (For example, you could connect over a loopback (localhost) network, a private subnet, or an encrypted VPN.) Alternatively, you could use <a href="https://ripple.com/build/rippleapi/">RippleAPI</a> to perform local signing before submitting your transactions to a third-party server.</p>
|
||||
<p>The examples in this document show API methods that include an account secret. This is only safe if you control <code>rippled</code> server yourself, <em>and</em> you connect to it over a connection that is secure from outside listeners. (For example, you could connect over a loopback (localhost) network, a private subnet, or an encrypted VPN.) Alternatively, you could use <a href="reference-rippleapi.html">RippleAPI</a> to perform local signing before submitting your transactions to a third-party server.</p>
|
||||
<h2 id="defaultripple">DefaultRipple</h2>
|
||||
<p>The DefaultRipple flag controls whether the balances held in an account's trust lines are <a href="https://ripple.com/knowledge_center/understanding-the-noripple-flag/">allowed to ripple</a> by default. Rippling is what allows users to trade issuances, so a gateway must allow rippling on all the trust lines connected to its issuing (cold wallet) account.</p>
|
||||
<p>Before asking users to trust its issuing account, a gateway should enable the DefaultRipple flag on that account. Otherwise, the gateway must individually disable the NoRipple flag for each trust line that other accounts extend to it.</p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="https://ripple.com/build/rippled-apis/#submit"><code>submit</code> command</a> to send an AccountSet transaction to enable the DefaultRipple flag:</p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="reference-rippled.html#submit"><code>submit</code> command</a> to send an AccountSet transaction to enable the DefaultRipple flag:</p>
|
||||
<p>Request:</p>
|
||||
<pre><code>POST http://localhost:8088/
|
||||
{
|
||||
@@ -380,7 +380,7 @@
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<p>To confirm that an account has DefaultRipple enabled, look up the account using the <a href="https://ripple.com/build/rippled-apis/#account-info">account_info command</a>, specifying a validated ledger version. Use <a href="https://en.wikipedia.org/wiki/Bitwise_operation#AND">a bitwise-AND operator</a> to compare the <code>Flags</code> field with 0x00800000 (the <a href="https://ripple.com/build/ledger-format/#accountroot-flags">ledger flag lsfDefaultRipple</a>). If the result of the bitwise-AND operation is nonzero, then the account has DefaultRipple enabled.</p>
|
||||
<p>To confirm that an account has DefaultRipple enabled, look up the account using the <a href="reference-rippled.html#account-info">account_info command</a>, specifying a validated ledger version. Use <a href="https://en.wikipedia.org/wiki/Bitwise_operation#AND">a bitwise-AND operator</a> to compare the <code>Flags</code> field with 0x00800000 (the <a href="reference-ledger-format.html#accountroot-flags">ledger flag lsfDefaultRipple</a>). If the result of the bitwise-AND operation is nonzero, then the account has DefaultRipple enabled.</p>
|
||||
<h2 id="generating-source-and-destination-tags">Generating Source and Destination Tags</h2>
|
||||
<p>You need a scheme to create Source and Destination tags for your users and payments. (See <a href="#source-and-destination-tags">Source and Destination Tags</a> for an explanation of what Source and Destination Tags are.)</p>
|
||||
<p>For greater privacy and security, we recommend <em>not</em> using monotonically-incrementing numbers as destination tags that correlate 1:1 with users. Instead, we recommend using convenient internal IDs, but mapping those to destination tags through the use of a quick hash or cipher function such as <a href="http://en.wikipedia.org/wiki/Hasty_Pudding_cipher">Hasty Pudding</a>. You should set aside ranges of internal numbers for different uses of destination tags.</p>
|
||||
@@ -390,7 +390,7 @@
|
||||
<h2 id="disallowxrp">DisallowXRP</h2>
|
||||
<p>The DisallowXRP setting (<code>disallowIncomingXRP</code> in RippleAPI) is designed to discourage users from sending XRP to an account by accident. This reduces the costs and effort of bouncing undesired payments, if you operate a gateway that does not trade XRP. The DisallowXRP flag is not strictly enforced, because doing so could allow accounts to become permanently unusable if they run out of XRP. Client applications should honor the DisallowXRP flag, but it is intentionally possible to work around.</p>
|
||||
<p>An issuing gateway that does not trade XRP should enable the DisallowXRP flag on all gateway hot and cold wallets. A private exchange that trades in XRP should only enable the DisallowXRP flag on accounts that are not expected to receive XRP.</p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="https://ripple.com/build/rippled-apis/#submit"><code>submit</code> command</a> to send an AccountSet transaction to enable the DisallowXRP flag:</p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="reference-rippled.html#submit"><code>submit</code> command</a> to send an AccountSet transaction to enable the DisallowXRP flag:</p>
|
||||
<p>Request:</p>
|
||||
<pre><code>POST http://localhost:8088/
|
||||
{
|
||||
@@ -435,7 +435,7 @@
|
||||
<h2 id="requiredest">RequireDest</h2>
|
||||
<p>The <code>RequireDest</code> setting (<code>requireDestinationTag</code> in RippleAPI) is designed to prevent users from sending payments to your account while accidentally forgetting the <a href="#source-and-destination-tags">destination tag</a> that identifies who should be credited for the payment. When enabled, the Ripple Consensus Ledger rejects any payment to your account that does not specify a destination tag.</p>
|
||||
<p>We recommend enabling the <code>RequireDest</code> flag on all gateway hot and cold wallets.</p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="https://ripple.com/build/rippled-apis/#submit"><code>submit</code> command</a> to send an AccountSet transaction to enable the <code>RequireDest</code> flag:</p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="reference-rippled.html#submit"><code>submit</code> command</a> to send an AccountSet transaction to enable the <code>RequireDest</code> flag:</p>
|
||||
<p>Request:</p>
|
||||
<pre><code>POST http://localhost:5005/
|
||||
Content-Type: application/json
|
||||
@@ -485,7 +485,7 @@ Content-Type: application/json
|
||||
<p>If you want to use the <a href="#authorized-accounts">Authorized Accounts</a> feature, you must also enable <code>RequireAuth</code> on your cold wallet. When using Authorized Accounts, your cold wallet must <a href="#authorizing-trust-lines">submit a <code>TrustSet</code> transaction to approve each trust line</a> that customers open to your cold wallet.</p>
|
||||
<p>You can only enable <code>RequireAuth</code> if the account owns no trust lines and no offers in the Ripple ledger, so you must decide whether or not to use it before you start doing business in the Ripple Consensus Ledger.</p>
|
||||
<h3 id="enabling-requireauth">Enabling RequireAuth</h3>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="https://ripple.com/build/rippled-apis/#submit"><code>submit</code> command</a> to send an AccountSet transaction to enable the RequireAuth flag: (This method works the same way regardless of whether the account is used as a hot wallet or cold wallet.)</p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="reference-rippled.html#submit"><code>submit</code> command</a> to send an AccountSet transaction to enable the RequireAuth flag: (This method works the same way regardless of whether the account is used as a hot wallet or cold wallet.)</p>
|
||||
<p>Request:</p>
|
||||
<pre><code>POST http://localhost:5005/
|
||||
{
|
||||
@@ -507,8 +507,8 @@ Content-Type: application/json
|
||||
<p><em>(<strong>Reminder:</strong> Don't send your secret to a server you do not control.)</em></p>
|
||||
<h3 id="authorizing-trust-lines">Authorizing Trust Lines</h3>
|
||||
<p>If you are using the <a href="#authorized-accounts">Authorized Accounts</a> feature, then after enabling the <code>RequireAuth</code> setting for your cold wallet, users cannot hold balances issued by your cold wallet unless you first authorize their trust lines.</p>
|
||||
<p>To authorize a trust line, submit a TrustSet transaction from your cold wallet, with the user to trust as the <code>issuer</code> of the <code>LimitAmount</code>. Leave the <code>value</code> (the amount to trust them for) as <strong>0</strong>, and enable the <a href="https://ripple.com/build/transactions/#trustset-flags">tfSetfAuth</a> flag for the transaction.</p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="https://ripple.com/build/rippled-apis/#submit"><code>submit</code> command</a> to send a TrustSet transaction authorizing the (customer) account rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn to hold issuances of USD from the (cold wallet) account rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW:</p>
|
||||
<p>To authorize a trust line, submit a TrustSet transaction from your cold wallet, with the user to trust as the <code>issuer</code> of the <code>LimitAmount</code>. Leave the <code>value</code> (the amount to trust them for) as <strong>0</strong>, and enable the <a href="reference-transaction-format.html#trustset-flags">tfSetfAuth</a> flag for the transaction.</p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="reference-rippled.html#submit"><code>submit</code> command</a> to send a TrustSet transaction authorizing the (customer) account rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn to hold issuances of USD from the (cold wallet) account rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW:</p>
|
||||
<p>Request:</p>
|
||||
<pre><code>POST http://localhost:8088/
|
||||
{
|
||||
@@ -547,12 +547,12 @@ Content-Type: application/json
|
||||
<p>To make things simpler for your users, we recommend monitoring for incoming payments to hot wallets and the cold wallet, and treating the two equivalently.</p>
|
||||
<p>As an added precaution, we recommend comparing the balances of your Ripple cold wallet account with the Ripple-backing funds in your internal accounting system each time there is a new Ripple ledger. The cold wallet shows all outstanding issuances as negative balances, which should match the positive assets you have allocated to Ripple outside the network. If the two do not match up, then you should suspend processing payments in and out of Ripple until you have resolved the discrepancy. </p>
|
||||
<ul>
|
||||
<li>Use <a href="https://ripple.com/build/rippled-apis/#account-lines"><code>rippled</code>'s <code>account_lines</code> command</a> or <a href="https://ripple.com/build/rippleapi/#gettrustlines">RippleAPI's <code>getTrustlines</code> method</a> to check your balances.</li>
|
||||
<li>Use <a href="reference-rippled.html#account-lines"><code>rippled</code>'s <code>account_lines</code> command</a> or <a href="reference-rippleapi.html#gettrustlines">RippleAPI's <code>getTrustlines</code> method</a> to check your balances.</li>
|
||||
<li>If you have a <a href="#transferrate">TransferRate</a> set, then your obligations within the Ripple network decrease slightly whenever other users transfer your issuances among themselves.</li>
|
||||
</ul>
|
||||
<h2 id="transferrate">TransferRate</h2>
|
||||
<p>The <em>TransferRate</em> setting (<code>transferRate</code> in RippleAPI) defines a fee to charge for transferring issuances from one Ripple account to another. See <a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a> in the Knowledge Center for more information.</p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="https://ripple.com/build/rippled-apis/#submit"><code>submit</code> command</a> to send an AccountSet transaction for cold wallet account rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW, setting the TransferRate to charge a fee of 0.5%.</p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="reference-rippled.html#submit"><code>submit</code> command</a> to send an AccountSet transaction for cold wallet account rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW, setting the TransferRate to charge a fee of 0.5%.</p>
|
||||
<p>Request:</p>
|
||||
<pre><code>
|
||||
{
|
||||
@@ -596,14 +596,14 @@ Content-Type: application/json
|
||||
<h3 id="transferrate-with-hot-and-warm-wallets">TransferRate with Hot and Warm Wallets</h3>
|
||||
<p>All Ripple Accounts, including the hot wallet, are subject to the TransferRate. If you set a nonzero TransferRate, then you must send extra (to pay the TransferRate) when making payments to users from your hot wallet. In other words, your hot wallet must pay back a little of the money your cold wallet issued it each time you make a payment.</p>
|
||||
<ul>
|
||||
<li>In <code>rippled</code>'s APIs, you can accomplish this by setting the <a href="https://ripple.com/build/transactions/#payment"><code>SendMax</code> transaction parameter</a> higher than the destination <code>Amount</code> parameter.</li>
|
||||
<li>In <code>rippled</code>'s APIs, you can accomplish this by setting the <a href="reference-transaction-format.html#payment"><code>SendMax</code> transaction parameter</a> higher than the destination <code>Amount</code> parameter.</li>
|
||||
<li>In RippleAPI, you can accomplish this by setting the <code>source.maxAmount</code> parameter higher than the <code>destination.amount</code> parameter; or, by setting the <code>source.amount</code> parameter higher than the <code>destination.minAmount</code> parameter.</li>
|
||||
</ul>
|
||||
<p><strong>Note:</strong> The TransferRate does not apply when sending issuances back to the account that created them. The account that created issuances must always accept them at face value on Ripple. This means that users don't have to pay the TransferRate if they send payments to the cold wallet directly, but they do when sending to the hot wallet. (For example, if ACME sets a TransferRate of 1%, a Ripple payment to deliver 5 EUR.ACME from a user account to ACME's cold wallet would still only cost 5 EUR.ACME. However, the user would need to send 5.05 EUR.ACME in order to deliver 5 EUR.ACME to the hot wallet.) If you accept payments out of Ripple through both accounts, you may want to adjust the amount you credit users in your external system when customers send payments through the hot wallet, to compensate for the TransferRate the customer pays.</p>
|
||||
<h2 id="sending-payments-to-users">Sending Payments to Users</h2>
|
||||
<p>When you build an automated system to send payments into Ripple for your users, you must ensure that it constructs payments carefully. Malicious users are constantly trying to find ways to trick a system into paying them more money than it should.</p>
|
||||
<p>One common pitfall is performing pathfinding before sending sending a payment to users in Ripple. If you specify the issuers correctly, the <a href="https://ripple.com/build/paths/#default-paths">default paths</a> are sufficient to deliver the currency as intended. </p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="https://ripple.com/build/rippled-apis/#submit"><code>submit</code> command</a> to send a payment from the hot wallet rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn to the user account raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n, sending and delivering funds issued by the cold wallet rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW.</p>
|
||||
<p>One common pitfall is performing pathfinding before sending sending a payment to users in Ripple. If you specify the issuers correctly, the <a href="concept-paths.html#default-paths">default paths</a> are sufficient to deliver the currency as intended. </p>
|
||||
<p>The following is an example of using a locally-hosted <code>rippled</code>'s <a href="reference-rippled.html#submit"><code>submit</code> command</a> to send a payment from the hot wallet rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn to the user account raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n, sending and delivering funds issued by the cold wallet rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW.</p>
|
||||
<p>Request:</p>
|
||||
<pre><code>{
|
||||
"method": "submit",
|
||||
@@ -661,9 +661,9 @@ Content-Type: application/json
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<p>In particular, note the following features of the <a href="https://ripple.com/build/transactions/#payment">Payment Transaction</a>:</p>
|
||||
<p>In particular, note the following features of the <a href="reference-transaction-format.html#payment">Payment Transaction</a>:</p>
|
||||
<ul>
|
||||
<li>No <code>Paths</code> field. The payment will only succeed if it can use a <a href="https://ripple.com/build/paths/#default-paths">default path</a>, which is preferable. Using less direct paths can become much more expensive.</li>
|
||||
<li>No <code>Paths</code> field. The payment will only succeed if it can use a <a href="concept-paths.html#default-paths">default path</a>, which is preferable. Using less direct paths can become much more expensive.</li>
|
||||
<li>The <code>issuer</code> of both the <code>SendMax</code> and the <code>Amount</code> is the cold wallet. This ensures that the transaction sends and delivers issuances from the cold wallet account, and not from some other gateway.</li>
|
||||
<li>The <code>value</code> of the <code>SendMax</code> amount is slightly higher than the destination <code>Amount</code>, in order to compensate for the <a href="#transferrate">transfer fee</a>. In this case, the transfer fee is 0.5%, so the <code>SendMax</code> amount is exactly 1.005 times the destination <code>Amount</code>.</li>
|
||||
</ul>
|
||||
@@ -672,8 +672,8 @@ Content-Type: application/json
|
||||
<p>The first requirement to bouncing payments is <a href="#robustly-monitoring-for-payments">robustly monitoring for incoming payments</a>. You do not want to accidentally refund a user for more than they sent you! (This is particularly important if your bounce process is automated.) The <a href="https://ripple.com/knowledge_center/partial-payment-flag/">Partial Payment Flag Gateway Bulletin</a> explains how to avoid a common problem.</p>
|
||||
<p>Second, you should send bounced payments as Partial Payments. Since other Ripple users can manipulate the cost of pathways between your accounts, Partial Payments allow you to divest yourself of the full amount without being concerned about exchange rates within the Ripple Consensus Ledger. You should publicize your bounced payments policy as part of your terms of use. Send the bounced payment from an automated hot wallet or a human-operated warm wallet.</p>
|
||||
<ul>
|
||||
<li>To send a Partial Payment using <code>rippled</code>, enable the <a href="https://ripple.com/build/transactions/#payment-flags">tfPartialPayment flag</a> on the transaction. Set the <code>Amount</code> field to the amount you received and omit the <code>SendMax</code> field.</li>
|
||||
<li>To send a Partial Payment using RippleAPI, set the <code>allowPartialPayment</code> field of the <a href="https://ripple.com/build/rippleapi/#payment">Payment object</a> to <code>true</code>. Set the <code>source.maxAmount</code> and <code>destination.amount</code> both equal to the amount you received.</li>
|
||||
<li>To send a Partial Payment using <code>rippled</code>, enable the <a href="reference-transaction-format.html#payment-flags">tfPartialPayment flag</a> on the transaction. Set the <code>Amount</code> field to the amount you received and omit the <code>SendMax</code> field.</li>
|
||||
<li>To send a Partial Payment using RippleAPI, set the <code>allowPartialPayment</code> field of the <a href="reference-rippleapi.html#payment">Payment object</a> to <code>true</code>. Set the <code>source.maxAmount</code> and <code>destination.amount</code> both equal to the amount you received.</li>
|
||||
</ul>
|
||||
<p>It is conventional that you take the <code>SourceTag</code> field from the incoming payment (<code>source.tag</code> in RippleAPI) and use that value as the <code>DestinationTag</code> field (<code>destination.tag</code> in RippleAPI) for the return payment.</p>
|
||||
<p>To prevent two systems from bouncing payments back and forth indefinitely, you can set a new Source Tag for the outgoing return payment. If you receive an unexpected payment whose Destination Tag matches the Source Tag of a return you sent, then do not bounce it back again. </p>
|
||||
@@ -689,7 +689,7 @@ Content-Type: application/json
|
||||
<li>Use the <code>LastLedgerSequence</code> parameter. (RippleAPI does this by default.)</li>
|
||||
<li>Resubmit a transaction if it has not appeared in a validated ledger whose sequence number is less than or equal to the transaction's <code>LastLedgerSequence</code> parameter.</li>
|
||||
</ul>
|
||||
<p>For additional information, consult the <a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a> guide.</p>
|
||||
<p>For additional information, consult the <a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a> guide.</p>
|
||||
<h2 id="rippletxt">ripple.txt</h2>
|
||||
<p>The <a href="https://wiki.ripple.com/Ripple.txt">ripple.txt</a> standard provides a way to publish information about your gateway so that automated tools and applications can read and understand it.</p>
|
||||
<p>For example, if you run a validating <code>rippled</code> server, you can use ripple.txt to publish the public key of your validating server. You can also publish information about what currencies your gateway issues, and which Ripple account addresses you control, to protect against impostors or confusion.</p>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,9 +110,9 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Tutorials</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li class="level-2"><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li class="level-2"><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li class="level-2"><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -138,10 +138,10 @@
|
||||
<p>These types of errors can potentially lead to serious problems. For example, an application that fails to find a prior successful payment transaction might erroneously submit another transaction, duplicating the original payment. This underscores the importance that applications base their actions on authoritive transaction results, using the techniques described in this document.</p>
|
||||
<h2 id="background">Background</h2>
|
||||
<p>The Ripple protocol provides a ledger shared across all nodes in the network. Through a <a href="https://ripple.com/knowledge_center/the-ripple-ledger-consensus-process/">process of consensus and validation</a>, the network agrees on order in which transactions are applied to (or omitted from) the ledger.</p>
|
||||
<p>Well-formed transactions submitted to trusted Ripple network nodes are usually validated or rejected in a matter of seconds. There are cases, however, in which a well-formed transaction is neither validated nor rejected this quickly. One specific case can occur if the global <a href="https://ripple.com/build/transaction-cost/">transaction cost</a> increases after an application sends a transaction. If the transaction cost increases above what has been specified in the transaction, the transaction will not be included in the next validated ledger. If at some later date the global transaction cost decreases, the transaction may become viable again. If the transaction does not include expiration, there is no limit to how much later this can occur.</p>
|
||||
<p>Well-formed transactions submitted to trusted Ripple network nodes are usually validated or rejected in a matter of seconds. There are cases, however, in which a well-formed transaction is neither validated nor rejected this quickly. One specific case can occur if the global <a href="concept-transaction-cost.html">transaction cost</a> increases after an application sends a transaction. If the transaction cost increases above what has been specified in the transaction, the transaction will not be included in the next validated ledger. If at some later date the global transaction cost decreases, the transaction may become viable again. If the transaction does not include expiration, there is no limit to how much later this can occur.</p>
|
||||
<p>Applications face additional challenges, in the event of power or network loss, ascertaining the status of submitted transactions. Applications must take care both to properly submit a transaction and later to properly ascertain its authoritative results.</p>
|
||||
<h3 id="transaction-timeline">Transaction Timeline</h3>
|
||||
<p>Ripple provides several APIs for submitting transactions, including <a href="https://ripple.com/build/rippled-apis/"><code>rippled</code></a>, and <a href="https://ripple.com/build/rippleapi/">RippleAPI</a>. Regardless of the API used, the transaction is applied to the ledger as follows.</p>
|
||||
<p>Ripple provides several APIs for submitting transactions, including <a href="reference-rippled.html"><code>rippled</code></a>, and <a href="reference-rippleapi.html">RippleAPI</a>. Regardless of the API used, the transaction is applied to the ledger as follows.</p>
|
||||
<ol>
|
||||
<li>An account owner creates and signs a transaction.</li>
|
||||
<li>The owner submits the transaction to the network as a candidate transaction.</li>
|
||||
@@ -159,9 +159,9 @@
|
||||
<p>Each validated ledger instance has a sequence number, which is one greater than the sequence number of the preceding instance. Each ledger also has an identifying hash value, which is uniquely determined from its contents. There may be many different versions of in-progress ledgers, which have the same sequence number but different hash values. Only one version can ever be validated.</p>
|
||||
<p>Each validated ledger has a canonical order in which transactions apply. This order is deterministic based on the final transaction set of the ledger. In contrast, each <code>rippled</code> server's in-progress ledger is calculated incrementally, as transactions are received. The order in which transactions execute provisionally is usually not the same as the order in which transactions execute to build a new validated ledger. This is one reason why the provisional outcome of a transaction may be different than the final result. For example, a payment may achieve a different final exchange rate depending on whether it executes before or after another payment that would consume the same offer.</p>
|
||||
<h3 id="lastledgersequence">LastLedgerSequence</h3>
|
||||
<p><a href="https://ripple.com/build/transactions/#lastledgersequence"><code>LastLedgerSequence</code></a> is an optional parameter of all transactions. This instructs the Ripple Consensus Ledger that a transaction must be validated on or before a specific ledger instance. The Ripple Consensus Ledger never includes a transaction in a ledger instance whose sequence number is higher than the transaction's <code>LastLedgerSequence</code> parameter.</p>
|
||||
<p><a href="reference-transaction-format.html#lastledgersequence"><code>LastLedgerSequence</code></a> is an optional parameter of all transactions. This instructs the Ripple Consensus Ledger that a transaction must be validated on or before a specific ledger instance. The Ripple Consensus Ledger never includes a transaction in a ledger instance whose sequence number is higher than the transaction's <code>LastLedgerSequence</code> parameter.</p>
|
||||
<p>Use the <code>LastLedgerSequence</code> parameter to prevent undesirable cases where a transaction is not promptly validated yet could become viable at some point in the future. Gateways and other back-end applications should specify the <code>LastLedgerSequence</code> parameter on every transaction. Automated processes should use a value of 4 greater than the sequence number of the last validated ledger[1] to ensure that a transaction is validated or rejected in a predictable and timely fashion.</p>
|
||||
<p>Applications using rippled APIs should explicitly specify a <code>LastLedgerSequence</code> when submitting transactions. RippleAPI uses the <code>maxLedgerVersion</code> field of <a href="https://ripple.com/build/rippleapi/#transaction-instructions">Transaction Instructions</a> to specify the <code>LastLedgerSequence</code>. RippleAPI automatically provides an appropriate value by default. You can specify <code>maxLedgerVersion</code> as <code>null</code> to intentionally omit <code>LastLedgerSequence</code>, in case you want a transaction that can be executed after an unlimited amount of time.</p>
|
||||
<p>Applications using rippled APIs should explicitly specify a <code>LastLedgerSequence</code> when submitting transactions. RippleAPI uses the <code>maxLedgerVersion</code> field of <a href="reference-rippleapi.html#transaction-instructions">Transaction Instructions</a> to specify the <code>LastLedgerSequence</code>. RippleAPI automatically provides an appropriate value by default. You can specify <code>maxLedgerVersion</code> as <code>null</code> to intentionally omit <code>LastLedgerSequence</code>, in case you want a transaction that can be executed after an unlimited amount of time.</p>
|
||||
<h2 id="best-practices">Best Practices</h2>
|
||||
<h3 id="reliable-transactions-submission">Reliable Transactions Submission</h3>
|
||||
<p>Applications submitting transactions should employ the following practices in order to submit reliably even in the event that a process dies or other failure occurs. Application transaction results must be verified so that applications can act on the final, validated results.</p>
|
||||
@@ -231,13 +231,13 @@
|
||||
</ol>
|
||||
<p>An application's means of performing these actions depends on the API the application uses. An application may use any of the following interfaces:</p>
|
||||
<ol>
|
||||
<li><a href="https://ripple.com/build/rippled-apis/"><code>rippled</code>'s internal APIs</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="reference-rippled.html"><code>rippled</code>'s internal APIs</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li>Any number of other software APIs layered on top of <code>rippled</code></li>
|
||||
</ol>
|
||||
<h3 id="rippled-submitting-and-verifying-transactions">rippled - Submitting and Verifying Transactions</h3>
|
||||
<h4 id="determine-the-account-sequence">Determine the Account Sequence</h4>
|
||||
<p><code>rippled</code> provides the <a href="https://ripple.com/build/rippled-apis/#account-info">account_info</a> method to learn an account's sequence number in the last validated ledger.</p>
|
||||
<p><code>rippled</code> provides the <a href="reference-rippled.html#account-info">account_info</a> method to learn an account's sequence number in the last validated ledger.</p>
|
||||
<p>JSON-RPC Request:</p>
|
||||
<pre><code>{
|
||||
"method": "account_info",
|
||||
@@ -272,7 +272,7 @@
|
||||
<p>In this example, the account's sequence is <strong>4</strong> (note <code>"Sequence": 4</code>, in <code>"account_data"</code>) as of the last validated ledger (note <code>"ledger": "validated"</code> in the request, and <code>"validated": "true"</code> in the response).</p>
|
||||
<p>If an application were to submit three transactions signed by this account, they would use sequence numbers 4, 5, and 6. In order to submit multiple transactions without waiting for validation of each, an application should keep a running account sequence number.</p>
|
||||
<h4 id="determine-the-last-validated-ledger">Determine the Last Validated Ledger</h4>
|
||||
<p><code>rippled</code> provides the <a href="https://ripple.com/build/rippled-apis/#server-state">server_state</a> command which returns the ledger sequence number of the last validated ledger.</p>
|
||||
<p><code>rippled</code> provides the <a href="reference-rippled.html#server-state">server_state</a> command which returns the ledger sequence number of the last validated ledger.</p>
|
||||
<p>Request:</p>
|
||||
<pre><code>{
|
||||
"id": "client id 1",
|
||||
@@ -313,7 +313,7 @@
|
||||
</code></pre>
|
||||
<p>In this example the last validated ledger sequence number is 10268596 (found under <code>result.state.validated_ledger</code> in the response). Note also this example indicates a gap in ledger history. The server used here would not be able to provide information about the transactions applied during that gap (ledgers 10256383 through 10256411). If configured to do so, the server will eventually retrieve that portion of the ledger history.</p>
|
||||
<h4 id="construct-the-transaction">Construct the Transaction</h4>
|
||||
<p><code>rippled</code> provides the <a href="https://ripple.com/build/rippled-apis/#sign">sign method</a> to prepare a transaction for submission. This method requires an account secret, which should only be passed to trusted <code>rippled</code> instances. This example issues 10 FOO (a made-up currency) from a gateway to another Ripple account.</p>
|
||||
<p><code>rippled</code> provides the <a href="reference-rippled.html#sign">sign method</a> to prepare a transaction for submission. This method requires an account secret, which should only be passed to trusted <code>rippled</code> instances. This example issues 10 FOO (a made-up currency) from a gateway to another Ripple account.</p>
|
||||
<p>Request:</p>
|
||||
<pre><code>{
|
||||
"method": "sign",
|
||||
@@ -367,7 +367,7 @@
|
||||
</code></pre>
|
||||
<p>Applications should persist the transaction's hash before submitting. The result of the <code>sign</code> method includes the hash under <code>tx_json</code>.</p>
|
||||
<h4 id="submit-the-transaction">Submit the transaction</h4>
|
||||
<p><code>rippled</code> provides the <a href="https://ripple.com/build/rippled-apis/#submit"><code>submit</code> method</a>, allowing us to submit the signed transaction. This uses the <code>tx_blob</code> parameter that was returned by the <code>sign</code> method.</p>
|
||||
<p><code>rippled</code> provides the <a href="reference-rippled.html#submit"><code>submit</code> method</a>, allowing us to submit the signed transaction. This uses the <code>tx_blob</code> parameter that was returned by the <code>sign</code> method.</p>
|
||||
<p>Request:</p>
|
||||
<pre><code>{
|
||||
"method": "submit",
|
||||
@@ -408,7 +408,7 @@
|
||||
</code></pre>
|
||||
<p>This a <strong>preliminary</strong> result. Final results are only available from validated ledgers. The lack of a <code>"validated": true</code> field indicates that this is <strong>not an immutable result</strong>.</p>
|
||||
<h4 id="verify-the-transaction">Verify the Transaction</h4>
|
||||
<p>The transaction hash, generated when the transaction was signed, is passed to the <a href="https://ripple.com/build/rippled-apis/#tx"><code>tx</code> method</a> to retrieve the result of a transaction.</p>
|
||||
<p>The transaction hash, generated when the transaction was signed, is passed to the <a href="reference-rippled.html#tx"><code>tx</code> method</a> to retrieve the result of a transaction.</p>
|
||||
<p>Request:</p>
|
||||
<pre><code>{
|
||||
"method": "tx",
|
||||
@@ -454,7 +454,7 @@
|
||||
<p>This example response shows <code>"validated": true</code>, indicating the transaction has been included in a validated ledger and therefore the result of the transaction is immutable. Further, the metadata includes <code>"TransactionResult": "tesSUCCESS"</code>, indicating the transaction was applied to the ledger.</p>
|
||||
<p>If the response does not include <code>"validated": true</code>, the result is provisional and subject to change. To retrieve a final result, applications must invoke the <code>tx</code> method again, allowing enough time for the network to validate subsequent ledger instances. It may be necessary to wait for the ledger specified in <code>LastLedgerSequence</code> to be validated, although if the transaction is included in an earlier validated ledger the result become immutable at that time.</p>
|
||||
<h4 id="verify-missing-transaction">Verify Missing Transaction</h4>
|
||||
<p>Applications must handle cases where a call to the <a href="https://ripple.com/build/rippled-apis/#tx"><code>tx</code> method</a> returns a <code>txnNotFound</code> error.</p>
|
||||
<p>Applications must handle cases where a call to the <a href="reference-rippled.html#tx"><code>tx</code> method</a> returns a <code>txnNotFound</code> error.</p>
|
||||
<pre><code>{
|
||||
"result": {
|
||||
"status": "error",
|
||||
@@ -470,7 +470,7 @@
|
||||
}
|
||||
</code></pre>
|
||||
<p>The <code>txnNotFound</code> result code occurs in cases where the transaction has failed to be included in any ledger. However, it could also occur when a rippled instance does not have a complete ledger history, or if the transaction has not yet propagated to the rippled instance. Applications should make further queries to determine how to react.</p>
|
||||
<p>The <a href="https://ripple.com/build/rippled-apis/#server-state"><code>server_state</code> method</a> (used earlier to determine the last validated ledger) indicates how complete the ledger history is, under <code>result.state.complete_ledgers</code>.</p>
|
||||
<p>The <a href="reference-rippled.html#server-state"><code>server_state</code> method</a> (used earlier to determine the last validated ledger) indicates how complete the ledger history is, under <code>result.state.complete_ledgers</code>.</p>
|
||||
<pre><code>{
|
||||
"result": {
|
||||
"status": "success",
|
||||
@@ -505,9 +505,9 @@
|
||||
<p>Finally the server state might indicate one or more gaps in the transaction history. The <code>completed_ledgers</code> field shown in the response above indicates that ledgers 10256383 through 10256411 are missing from this rippled instance. Our example transaction can only appear in ledgers 10268597 - 10268600 (based on when it was submitted and <code>LastLedgerSequence</code>), so the gap shown here is not relevant. However, if the gap indicated a ledger in that range was missing, then an application would need to query another rippled server (or wait for this one to retrieve the missing ledgers) in order to determine that a <code>txnNotFound</code> result is immutable.</p>
|
||||
<h2 id="additional-resources">Additional Resources</h2>
|
||||
<ul>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li>Documentation of <a href="https://ripple.com/build/transactions/#lastledgersequence"><code>LastLedgerSequence</code></a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li>Documentation of <a href="reference-transaction-format.html#lastledgersequence"><code>LastLedgerSequence</code></a></li>
|
||||
<li><a href="http://ripple.com/knowledge_center/the-ripple-ledger-consensus-process/">Overview of Ripple Ledger Consensus Process</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/reaching-consensus-in-ripple/">Reaching Consensus in Ripple</a></li>
|
||||
</ul>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,9 +110,9 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Tutorials</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li class="level-2"><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li class="level-2"><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li class="level-2"><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -123,7 +123,7 @@
|
||||
<main class="main" role="main">
|
||||
<div class="content">
|
||||
<h1 id="rippleapi-beginners-guide">RippleAPI Beginners Guide</h1>
|
||||
<p>This tutorial guides you through the basics of building a simple Ripple-connected application using <a href="http://nodejs.org/">Node.js</a> and <a href="https://ripple.com/build/rippleapi/">RippleAPI</a>, a simple JavaScript API for accessing the Ripple Consensus Ledger.</p>
|
||||
<p>This tutorial guides you through the basics of building a simple Ripple-connected application using <a href="http://nodejs.org/">Node.js</a> and <a href="reference-rippleapi.html">RippleAPI</a>, a simple JavaScript API for accessing the Ripple Consensus Ledger.</p>
|
||||
<p>The scripts and configuration files used in this guide are <a href="https://github.com/ripple/ripple-dev-portal/tree/master/content/code_samples/rippleapi_quickstart">available in the Ripple Dev Portal GitHub Repository</a>.</p>
|
||||
<h1 id="environment-setup">Environment Setup</h1>
|
||||
<p>The first step to using RippleAPI successfully is setting up your development environment.</p>
|
||||
@@ -237,17 +237,17 @@ const RippleAPI = require('ripple-lib').RippleAPI;
|
||||
});
|
||||
</code></pre>
|
||||
<p>This section creates a new instance of the RippleAPI class, assigning it to the variable <code>api</code>. (The <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const"><code>const</code> keyword</a> means you can't reassign the value <code>api</code> to some other value. The internal state of the object can still change, though.)</p>
|
||||
<p>The one argument to the constructor is an options object, which has <a href="https://ripple.com/build/rippleapi/#parameters">a variety of options</a>. The <code>server</code> parameter tells it where it should connect to a <code>rippled</code> server.</p>
|
||||
<p>The one argument to the constructor is an options object, which has <a href="reference-rippleapi.html#parameters">a variety of options</a>. The <code>server</code> parameter tells it where it should connect to a <code>rippled</code> server.</p>
|
||||
<ul>
|
||||
<li>The example <code>server</code> setting uses a secure WebSocket connection to connect to one of the public servers that Ripple (the company) operates.</li>
|
||||
<li>If you don't include the <code>server</code> option, RippleAPI runs in <a href="https://ripple.com/build/rippleapi/#offline-functionality">offline mode</a> instead, which only provides methods that don't need network connectivity.</li>
|
||||
<li>If you don't include the <code>server</code> option, RippleAPI runs in <a href="reference-rippleapi.html#offline-functionality">offline mode</a> instead, which only provides methods that don't need network connectivity.</li>
|
||||
<li>You can specify a <a href="https://ripple.com/build/ripple-test-net/">Ripple Test Net</a> server instead to connect to the parallel-world Test Network instead of the production Ripple Consensus Ledger.</li>
|
||||
<li>If you <a href="https://ripple.com/build/rippled-setup/">run your own <code>rippled</code></a>, you can instruct it to connect to your local server. For example, you might say <code>server: 'ws://localhost:5005'</code> instead.</li>
|
||||
<li>If you <a href="tutorial-rippled-setup.html">run your own <code>rippled</code></a>, you can instruct it to connect to your local server. For example, you might say <code>server: 'ws://localhost:5005'</code> instead.</li>
|
||||
</ul>
|
||||
<h3 id="connecting-and-promises">Connecting and Promises</h3>
|
||||
<pre><code>api.connect().then(() => {
|
||||
</code></pre>
|
||||
<p>The <a href="https://ripple.com/build/rippleapi/#connect">connect() method</a> is one of many RippleAPI methods that returns a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise</a>, which is a special kind of JavaScript object. A Promise is designed to perform an asynchronous operation that returns a value later, such as querying the Ripple Consensus Ledger.</p>
|
||||
<p>The <a href="reference-rippleapi.html#connect">connect() method</a> is one of many RippleAPI methods that returns a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise</a>, which is a special kind of JavaScript object. A Promise is designed to perform an asynchronous operation that returns a value later, such as querying the Ripple Consensus Ledger.</p>
|
||||
<p>When you get a Promise back from some expression (like <code>api.connect()</code>), you call the Promise's <code>then</code> method and pass in a callback function. Passing a function as an argument is conventional in JavaScript, taking advantage of how JavaScript functions are <a href="https://en.wikipedia.org/wiki/First-class_function">first-class objects</a>.</p>
|
||||
<p>When a Promise finishes with its asynchronous operations, the Promise runs the callback function you passed it. The return value from the <code>then</code> method is another Promise object, so you can "chain" that into another <code>then</code> method, or the Promise's <code>catch</code> method, which also takes a callback. The callback you provide to <code>catch</code> gets called if something goes wrong.</p>
|
||||
<p>Finally, we have more new ECMAScript 6 syntax - an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions">arrow function</a>. Arrow functions are a shorter way of defining anonymous functions. This is convenient for defining lots of one-off functions as callbacks. The syntax <code>()=> {...}</code> is mostly equivalent to <code>function() {...}</code>. If you want an anonymous function with one parameter, you can use a syntax like <code>info => {...}</code> instead, which is basically just <code>function(info) {...}</code> as well.</p>
|
||||
@@ -267,7 +267,7 @@ const RippleAPI = require('ripple-lib').RippleAPI;
|
||||
<p>This is the part that really defines what this script does, so this is the part you will probably spend the most time customizing.</p>
|
||||
<p>The example code looks up a Ripple account by its address. Try running the code with different addresses to see different results.</p>
|
||||
<p>The <code>console.log()</code> function is built into both Node.js and web browsers, and writes out to the console. This example includes lots of console output to make it easier to understand what the code is doing.</p>
|
||||
<p>Keep in mind that the example code starts in the middle of a callback function (called when RippleAPI finishes connecting). That function calls RippleAPI's <a href="https://ripple.com/build/rippleapi/#getaccountinfo"><code>getAccountInfo</code></a> method, and returns the results.</p>
|
||||
<p>Keep in mind that the example code starts in the middle of a callback function (called when RippleAPI finishes connecting). That function calls RippleAPI's <a href="reference-rippleapi.html#getaccountinfo"><code>getAccountInfo</code></a> method, and returns the results.</p>
|
||||
<p>The <code>getAccountInfo</code> API method returns another Promise, so the line <code>}).then( info => {</code> defines another anonymous callback function to run when this Promise's asynchronous work is done. Unlike the previous case, this callback function takes one argument, called <code>info</code>, which holds the asynchronous return value from the <code>getAccountInfo</code> API method. The rest of this callback function outputs that return value to the console.</p>
|
||||
<h3 id="cleanup">Cleanup</h3>
|
||||
<pre><code>}).then(() => {
|
||||
@@ -276,10 +276,10 @@ const RippleAPI = require('ripple-lib').RippleAPI;
|
||||
console.log('done and disconnected.');
|
||||
}).catch(console.error);
|
||||
</code></pre>
|
||||
<p>The remainder of the sample code is mostly more <a href="https://ripple.com/build/rippleapi/#boilerplate">boilerplate code</a>. The first line ends the previous callback function, then chains to another callback to run when it ends. That method disconnects cleanly from the Ripple Consensus Ledger, and has yet another callback which writes to the console when it finishes. If your script waits on <a href="https://ripple.com/build/rippleapi/#api-events">RippleAPI events</a>, do not disconnect until you are done waiting for events.</p>
|
||||
<p>The remainder of the sample code is mostly more <a href="reference-rippleapi.html#boilerplate">boilerplate code</a>. The first line ends the previous callback function, then chains to another callback to run when it ends. That method disconnects cleanly from the Ripple Consensus Ledger, and has yet another callback which writes to the console when it finishes. If your script waits on <a href="reference-rippleapi.html#api-events">RippleAPI events</a>, do not disconnect until you are done waiting for events.</p>
|
||||
<p>The <code>catch</code> method ends this Promise chain. The callback provided here runs if any of the Promises or their callback functions encounters an error. In this case, we pass the standard <code>console.error</code> function, which writes to the console, instead of defining a custom callback. You could define a smarter callback function here to intelligently catch certain error types.</p>
|
||||
<h1 id="waiting-for-validation">Waiting for Validation</h1>
|
||||
<p>One of the biggest challenges in using the Ripple Consensus Ledger (or any decentralized system) is knowing the final, immutable transaction results. Even if you <a href="https://ripple.com/build/reliable-transaction-submission/">follow the best practices</a> you still have to wait for the <a href="https://ripple.com/knowledge_center/the-ripple-ledger-consensus-process/">consensus process</a> to finally accept or reject your transaction. The following example code demonstrates how to wait for the final outcome of a transaction:</p>
|
||||
<p>One of the biggest challenges in using the Ripple Consensus Ledger (or any decentralized system) is knowing the final, immutable transaction results. Even if you <a href="tutorial-reliable-transaction-submission.html">follow the best practices</a> you still have to wait for the <a href="https://ripple.com/knowledge_center/the-ripple-ledger-consensus-process/">consensus process</a> to finally accept or reject your transaction. The following example code demonstrates how to wait for the final outcome of a transaction:</p>
|
||||
<pre><code>'use strict';
|
||||
/* import RippleAPI and support libraies*/
|
||||
const RippleAPI = require('ripple-lib').RippleAPI;
|
||||
@@ -376,8 +376,8 @@ api.connect().then(() => {
|
||||
</code></pre>
|
||||
<p>This code creates and submits an order transaction, although the same principles apply to other types of transactions as well. After submitting the transaction, the code uses a new Promise, which queries the ledger again after using setTimeout to wait a fixed amount of time, to see if the transaction has been verified. If it hasn't been verified, the process repeats until either the transaction is found in a validated ledger or the returned ledger is higher than the LastLedgerSequence parameter.</p>
|
||||
<p>In rare cases (particularly with a large delay or a loss of power), the <code>rippled</code> server may be missing a ledger version between when you submitted the transaction and when you determined that the network has passed the <code>maxLedgerVersion</code>. In this case, you cannot be definitively sure whether the transaction has failed, or has been included in one of the missing ledger versions. RippleAPI returns <code>MissingLedgerHistoryError</code> in this case.</p>
|
||||
<p>If you are the administrator of the <code>rippled</code> server, you can <a href="https://ripple.com/build/rippled-apis/#ledger-request">manually request the missing ledger(s)</a>. Otherwise, you can try checking the ledger history using a different server. (Ripple runs a public full-history server at <code>s2.ripple.com</code> for this purpose.)</p>
|
||||
<p>See <a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a> for a more thorough explanation.</p>
|
||||
<p>If you are the administrator of the <code>rippled</code> server, you can <a href="reference-rippled.html#ledger-request">manually request the missing ledger(s)</a>. Otherwise, you can try checking the ledger history using a different server. (Ripple runs a public full-history server at <code>s2.ripple.com</code> for this purpose.)</p>
|
||||
<p>See <a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a> for a more thorough explanation.</p>
|
||||
<h1 id="rippleapi-in-web-browsers">RippleAPI in Web Browsers</h1>
|
||||
<p>The process of using RippleAPI in a web browser is slightly different.</p>
|
||||
<h2 id="build-instructions">Build Instructions</h2>
|
||||
|
||||
@@ -47,44 +47,44 @@
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">References <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippled-apis/">rippled</a></li>
|
||||
<li><a href="https://ripple.com/build/transactions/">Transaction Format</a></li>
|
||||
<li><a href="https://ripple.com/build/ledger-format/">Ledger Format</a></li>
|
||||
<li><a href="https://ripple.com/build/rippleapi/">RippleAPI</a></li>
|
||||
<li><a href="https://ripple.com/build/data-api-v2/">Ripple Data API v2</a></li>
|
||||
<li><a href="reference-rippled.html">rippled</a></li>
|
||||
<li><a href="reference-transaction-format.html">Transaction Format</a></li>
|
||||
<li><a href="reference-ledger-format.html">Ledger Format</a></li>
|
||||
<li><a href="reference-rippleapi.html">RippleAPI</a></li>
|
||||
<li><a href="reference-data-api.html">Ripple Data API v2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Concepts <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/paths/">Paths</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/fees-disambiguation/">Fees (Disambiguation)</a></li>
|
||||
<li><a href="https://ripple.com/knowledge_center/transfer-fees/">Transfer Fees</a></li>
|
||||
<li><a href="https://ripple.com/build/transaction-cost/">Transaction Cost</a></li>
|
||||
<li><a href="https://ripple.com/build/fee-voting/">Fee Voting</a></li>
|
||||
<li><a href="https://ripple.com/build/reserves/">Reserves</a></li>
|
||||
<li><a href="https://ripple.com/build/freeze/">Freeze</a></li>
|
||||
<li><a href="concept-paths.html">Paths</a></li>
|
||||
<li><a href="concept-fees.html">Fees (Disambiguation)</a></li>
|
||||
<li><a href="concept-transfer-fees.html">Transfer Fees</a></li>
|
||||
<li><a href="concept-transaction-cost.html">Transaction Cost</a></li>
|
||||
<li><a href="concept-fee-voting.html">Fee Voting</a></li>
|
||||
<li><a href="concept-reserves.html">Reserves</a></li>
|
||||
<li><a href="concept-freeze.html">Freeze</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Best Practices <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/gateway-guide/#hot-and-cold-wallets">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="https://ripple.com/build/gateway-guide/">Gateway Guide</a></li>
|
||||
<li><a href="concept-issuing-and-operational-accounts.html">Issuing and Operational Acounts</a></li>
|
||||
<li><a href="tutorial-gateway-guide.html">Gateway Guide</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">API Tools <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="https://ripple.com/build/websocket-tool/">WebSocket API Tool</a></li>
|
||||
<li><a href="ripple-api-tool.html">WebSocket API Tool</a></li>
|
||||
<li><a href="data-api-v2-tool.html">Data API v2 Tool</a></li>
|
||||
<li><a href="tool-jsonrpc.html">rippled JSON-RPC Tool</a></li>
|
||||
</ul>
|
||||
@@ -110,9 +110,9 @@
|
||||
<div id="cont">
|
||||
<ul class="dev_nav_sidebar">
|
||||
<li class="level-1"><a href="index.html">Category: Tutorials</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippleapi-beginners-guide/">RippleAPI Beginners Guide</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/rippled-setup/">rippled Setup</a></li>
|
||||
<li class="level-2"><a href="https://ripple.com/build/reliable-transaction-submission/">Reliable Transaction Submission</a></li>
|
||||
<li class="level-2"><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li class="level-2"><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li class="level-2"><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
<h5>In this page:</h5>
|
||||
@@ -123,7 +123,7 @@
|
||||
<main class="main" role="main">
|
||||
<div class="content">
|
||||
<h1 id="operating-rippled-servers">Operating rippled Servers</h1>
|
||||
<p>The core server of the Ripple peer-to-peer network is <a href="https://ripple.com/build/rippled-apis/"><code>rippled</code></a>. Anyone can run their own <code>rippled</code> server that follows the network and keeps a complete copy of the Ripple ledger. You can even have your server perform validations and participate in the consensus process.</p>
|
||||
<p>The core server of the Ripple peer-to-peer network is <a href="reference-rippled.html"><code>rippled</code></a>. Anyone can run their own <code>rippled</code> server that follows the network and keeps a complete copy of the Ripple ledger. You can even have your server perform validations and participate in the consensus process.</p>
|
||||
<p>This page contains instructions for:</p>
|
||||
<ul>
|
||||
<li><a href="#installing-rippled">Installing <code>rippled</code></a></li>
|
||||
@@ -136,7 +136,7 @@
|
||||
<li>Validating server, or <em>validator</em> for short - participates in consensus.</li>
|
||||
<li><code>rippled</code> server in stand-alone mode - for basic testing. Does not communicate to other <code>rippled</code> servers.</li>
|
||||
</ul>
|
||||
<p>You can also run the <code>rippled</code> executable as a client application for accessing <a href="https://ripple.com/build/rippled-apis/"><code>rippled</code> APIs</a> locally. (Two instances of the same binary can run side-by-side in this case; one as a server, and the other running briefly as a client and then terminating.)</p>
|
||||
<p>You can also run the <code>rippled</code> executable as a client application for accessing <a href="reference-rippled.html"><code>rippled</code> APIs</a> locally. (Two instances of the same binary can run side-by-side in this case; one as a server, and the other running briefly as a client and then terminating.)</p>
|
||||
<h2 id="reasons-to-run-a-stock-server">Reasons to Run a Stock Server</h2>
|
||||
<p>There are lots of reasons you might want to run your own <code>rippled</code> server, but most of them can be summarized as: you can trust your own server, you have control over its workload, and you're not at the mercy of others to decide when and how you can access it.</p>
|
||||
<p>It is important that you can trust the <code>rippled</code> you use, so you can be certain that the software you are running will behave in the manner specified in its source code. Of course, you must also practice good network security to protect your server from malicious hackers. If you connect to a malicious server, there are myriad ways that it can take advantage of you or cause you to lose money. For example:</p>
|
||||
@@ -214,7 +214,7 @@
|
||||
</li>
|
||||
</ol>
|
||||
<p>It can take several minutes for <code>rippled</code> to sync with the rest of the network, during which time it outputs warnings about missing ledgers. After that, you have a fully functional stock <code>rippled</code> server that you can use for local signing and API access to the Ripple peer-to-peer network.</p>
|
||||
<p><a href="https://ripple.com/build/rippled-apis/#list-of-public-commands">rippled commands</a> can be run with:</p>
|
||||
<p><a href="reference-rippled.html#list-of-public-commands">rippled commands</a> can be run with:</p>
|
||||
<pre><code> $ /opt/ripple/bin/rippled --conf /opt/ripple/etc/rippled.cfg <command>
|
||||
</code></pre>
|
||||
<h2 id="updating-rippled">Updating rippled</h2>
|
||||
@@ -328,7 +328,7 @@ ssdecohJMDPFuUPDkmG1w4objZyp4
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Set the <a href="https://ripple.com/build/transactions/#domain"><code>Domain</code> field</a> of the account to match the domain hosting your ripple.txt</p>
|
||||
<p>Set the <a href="reference-transaction-format.html#domain"><code>Domain</code> field</a> of the account to match the domain hosting your ripple.txt</p>
|
||||
<pre><code>$ /opt/ripple/bin/rippled --conf /opt/ripple/etc/rippled.cfg submit <your-secret-key> '{"TransactionType": "AccountSet", "Account": "<your-account-id>", "Domain": "<your-hex-encoded-domain>", "Fee": "10000"}'
|
||||
</code></pre>
|
||||
</li>
|
||||
@@ -371,7 +371,7 @@ ssdecohJMDPFuUPDkmG1w4objZyp4
|
||||
</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<p>Generate a unique seed (using the <a href="https://ripple.com/build/rippled-apis/#validation-seed"><code>validation_create</code> command</a>) for each of your servers, and configure it under the <code>[node_seed]</code> section. The <code>rippled</code> server uses this key to sign its messages to other servers in the peer-to-peer network. <strong>Note:</strong> This is a different key than the one <code>rippled</code> uses to sign ledger proposals for consensus, but it is in the same format.</p>
|
||||
<p>Generate a unique seed (using the <a href="reference-rippled.html#validation-seed"><code>validation_create</code> command</a>) for each of your servers, and configure it under the <code>[node_seed]</code> section. The <code>rippled</code> server uses this key to sign its messages to other servers in the peer-to-peer network. <strong>Note:</strong> This is a different key than the one <code>rippled</code> uses to sign ledger proposals for consensus, but it is in the same format.</p>
|
||||
</li>
|
||||
<li>Add the public keys (for peer communication) of each of your other servers under the <code>[cluster_nodes]</code> section.</li>
|
||||
</ul>
|
||||
|
||||
Reference in New Issue
Block a user