mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-12-02 17:45:54 +00:00
tx cost - edits for FeeEscalation peer review; moved fee levels discussion out of api reference into tx cost concept article
This commit is contained in:
@@ -7,7 +7,7 @@ Every transaction must [specify how much XRP it will destroy](#specifying-the-tr
|
||||
|
||||
## Current Transaction Cost ##
|
||||
|
||||
The current transaction cost required by the network for a standard transaction is typically **0.01 XRP** (10,000 drops), although it sometimes increases due to network load.
|
||||
The current transaction cost required by the network for a standard transaction is typically **0.01 XRP** (10,000 drops), after load scaling. It sometimes increases due to higher than usual load.
|
||||
|
||||
You can also [query `rippled` for the current transaction cost](#querying-the-transaction-cost).
|
||||
|
||||
@@ -17,7 +17,7 @@ Some transactions have different transaction costs:
|
||||
|
||||
| Transaction | Cost Before Load Scaling |
|
||||
|-----------------------|--------------------------|
|
||||
| Reference Transaction (Standard cost of most transactions) | 10 drops |
|
||||
| [Reference Transaction](#reference-transaction-cost) (Most transactions) | 10 drops |
|
||||
| [Key Reset Transaction](#key-reset-transaction) | 0 |
|
||||
| [Multi-signed transaction](reference-transaction-format.html#multi-signing) | 10 drops × (1 + Number of Signatures Provided) |
|
||||
|
||||
@@ -43,14 +43,13 @@ This divides transactions into roughly three categories:
|
||||
|
||||
## Local Load Cost ##
|
||||
|
||||
Each `rippled` server maintains a cost threshold based on its current load. If you submit a transaction with a `Fee` value that is lower than current load-based transaction cost of the `rippled` server, that server neither applies nor relays the transaction. (**Note:** If you submit a transaction through an [admin connection](reference-rippled.html#connecting-to-rippled), the server applies and relays the transaction as long as the transaction cost meets the overall minimum.) A transaction is very unlikely to survive [the consensus process](https://ripple.com/knowledge_center/the-ripple-ledger-consensus-process/) unless its `Fee` value meets the requirements of a majority of servers.
|
||||
Each `rippled` server maintains a cost threshold based on its current load. If you submit a transaction with a `Fee` value that is lower than current load-based transaction cost of the `rippled` server, that server neither applies nor relays the transaction. (**Note:** If you submit a transaction through an [admin connection](reference-rippled.html#connecting-to-rippled), the server applies and relays the transaction as long as the transaction cost meets the un-scaled minimum.) A transaction is very unlikely to survive [the consensus process](https://ripple.com/knowledge_center/the-ripple-ledger-consensus-process/) unless its `Fee` value meets the requirements of a majority of servers.
|
||||
|
||||
## Open Ledger Cost ##
|
||||
|
||||
A `rippled` server with the [FeeEscalation amendment](concept-amendments.html#feeescalation) enabled has a second mechanism for enforcing the transaction cost, called the _open ledger cost_. The open ledger cost starts out equal to the minimum transaction cost, but increases exponentially when an in-progress ledger has more transactions than the previous one. Only transactions which pay more than the open ledger cost can be included in the current open ledger.
|
||||
Transactions that do not meet the open ledger cost are [queued for a following ledger](#queued-transactions) instead.
|
||||
A `rippled` server with the [FeeEscalation amendment](concept-amendments.html#feeescalation) enabled has a second mechanism for enforcing the transaction cost, called the _open ledger cost_. The open ledger cost starts out equal to the un-scaled minimum transaction cost, but increases exponentially when an in-progress ledger has more transactions than the previous ledger. The open ledger cost also increases if consensus took longer than 5 seconds to approve the previous ledger. A transaction can only be included in the open ledger if it meets the open ledger cost requirement in XRP. Transactions that do not meet the open ledger cost are [queued for a following ledger](#queued-transactions) instead.
|
||||
|
||||
The open ledger cost requirement is proportional to the normal cost of the transaction, not the absolute transaction cost. Transaction types that have a higher-than-normal requirement, such as [multi-signed transactions](reference-transaction-format.html#multi-signing) must pay more to meet the open ledger cost than transactions which have minimum transaction cost requirements.
|
||||
The open ledger cost requirement is [proportional to the normal cost of the transaction](#fee-levels), not the absolute transaction cost. Transaction types that have a higher-than-normal requirement, such as [multi-signed transactions](reference-transaction-format.html#multi-signing) must pay more to meet the open ledger cost than transactions which have minimum transaction cost requirements.
|
||||
|
||||
See also: [Fee Escalation explanation in `rippled` repository](https://github.com/ripple/rippled/blob/release/src/ripple/app/misc/FeeEscalation.md).
|
||||
|
||||
@@ -68,6 +67,19 @@ When the current open ledger closes and the server starts a new open ledger, the
|
||||
|
||||
**Caution:** The current implementation does not allow transactions with an `AccountTxnID` field in the transaction queue.
|
||||
|
||||
## Reference Transaction Cost ##
|
||||
|
||||
The "Reference Transaction" is the cheapest (non-free) transaction, in terms of the necessary [transaction cost](concept-transaction-cost.html) before load scaling. Most transactions have the same cost as the reference transaction. Some transactions, such as [multi-signed transactions](reference-transaction-format.html#multi-signing), require a multiple of this cost instead. When the open ledger cost escalates, the requirement is proportional to the basic cost of the transaction.
|
||||
|
||||
### Fee Levels ###
|
||||
|
||||
_Fee levels_ represent the proportional difference between the minimum cost and the actual cost of a transaction. The [Open Ledger Cost](#open-ledger-cost) is measured in fee levels instead of absolute cost. See the following table for a comparison:
|
||||
|
||||
| Transaction | Minimum cost in drops | Minimum cost in Fee levels | Double cost in drops | Double cost in fee levels |
|
||||
|-------------|-----------------------|----------------------------|----------------------|---------------------------|
|
||||
| Reference transaction (most transactions) | 10 | 256 | 20 | 512 |
|
||||
| [Multi-signed transaction](reference-transaction-format.html#multi-signing) with 4 signatures | 50 | 256 | 100 | 512 |
|
||||
| [Key reset transaction](concept-transaction-cost.html#key-reset-transaction) | 0 | (Effectively infinite) | N/A | (Effectively infinite) |
|
||||
|
||||
|
||||
## Querying the Transaction Cost ##
|
||||
|
||||
@@ -9158,10 +9158,10 @@ The response follows the [standard format](#response-formatting), with a success
|
||||
| current\_ledger\_size | String (Integer) | Number of transactions provisionally included in the in-progress ledger. |
|
||||
| current\_queue\_size | String (Integer) | Number of transactions currently queued for the next ledger. |
|
||||
| drops | Object | Various information about the transaction cost (the `Fee` field of a transaction), in [drops of xrp](#specifying-currency-amounts). |
|
||||
| drops.base\_fee | String (Integer) | The transaction cost required for a [reference transaction](#reference-transaction-cost) to be included in a ledger under minimum load, represented in drops of XRP. |
|
||||
| drops.base\_fee | String (Integer) | The transaction cost required for a [reference transaction](concept-transaction-cost.html#reference-transaction-cost) to be included in a ledger under minimum load, represented in drops of XRP. |
|
||||
| drops.median\_fee | String (Integer) | An approximation of the median transaction cost among transactions included in the previous validated ledger, represented in drops of XRP. |
|
||||
| drops.minimum\_fee | String (Integer) | The minimum transaction cost for a [reference transaction](#reference-transaction-cost) to be queued for a later ledger, represented in drops of XRP. If greater than `base_fee`, the transaction queue is full. |
|
||||
| drops.open\_ledger\_fee | String (Integer) | The minimum transaction cost that a [reference transaction](#reference-transaction-cost) must pay to be included in the current open ledger, represented in drops of XRP. |
|
||||
| drops.minimum\_fee | String (Integer) | The minimum transaction cost for a [reference transaction](concept-transaction-cost.html#reference-transaction-cost) to be queued for a later ledger, represented in drops of XRP. If greater than `base_fee`, the transaction queue is full. |
|
||||
| drops.open\_ledger\_fee | String (Integer) | The minimum transaction cost that a [reference transaction](concept-transaction-cost.html#reference-transaction-cost) must pay to be included in the current open ledger, represented in drops of XRP. |
|
||||
| expected\_ledger\_size | String (Integer) | The approximate number of transactions expected to be included in the current ledger. This is based on the number of transactions in the previous ledger. |
|
||||
| levels | Object | Various information about the transaction cost, in _fee levels_. The ratio in fee levels applies to any transaction relative to the minimum cost of that particular transaction. |
|
||||
| levels.median\_level | String (Integer) | The median transaction cost among transactions in the previous validated ledger, represented in fee levels. |
|
||||
@@ -9170,20 +9170,6 @@ The response follows the [standard format](#response-formatting), with a success
|
||||
| levels.reference\_level | String (Integer) | The equivalent of the minimum transaction cost, represented in fee levels. |
|
||||
| max\_queue\_size | String (Integer) | The maximum number of transactions that the [transaction queue](concept-transaction-cost.html#queued-transactions) can currently hold. |
|
||||
|
||||
### Reference Transaction Cost ###
|
||||
|
||||
The "Reference Transaction" is the cheapest possible transaction, in terms of the necessary [transaction cost](concept-transaction-cost.html). Most transactions have the same cost as the reference transaction. Some transactions, such as [multi-signed transactions](reference-transaction-format.html#multi-signing) require a multiple of this cost instead. When the open ledger cost escalates, the requirement is proportional to the basic cost of the transaction.
|
||||
|
||||
### Fee Levels ###
|
||||
|
||||
_Fee levels_ represent the proportional difference between the minimum cost and the actual cost of a transaction. See the following table for a comparison:
|
||||
|
||||
| Transaction | Minimum cost in drops | Minimum cost in Fee levels | Double cost in drops | Double cost in fee levels |
|
||||
|-------------|-----------------------|----------------------------|----------------------|---------------------------|
|
||||
| Reference transaction (most transactions) | 10 | 256 | 20 | 512 |
|
||||
| [Multi-signed transaction](reference-transaction-format.html#multi-signing) with 4 signatures | 50 | 256 | 100 | 512 |
|
||||
| [Key reset transaction](concept-transaction-cost.html#key-reset-transaction) | 0 | (Effectively infinite) | N/A | (Effectively infinite) |
|
||||
|
||||
#### Possible Errors ####
|
||||
|
||||
* Any of the [universal error types](#universal-errors).
|
||||
|
||||
Reference in New Issue
Block a user