From 3d6ddc150de89b830b4b0421c22675aa3a9fe002 Mon Sep 17 00:00:00 2001 From: Bri Wylde <92327786+briwylde08@users.noreply.github.com> Date: Wed, 27 Mar 2024 10:40:12 -0600 Subject: [PATCH] Combine inclusion fee and resource fee sections (#389) * combine fees documentation * delete previous fees pages * fix a myriad of links * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * diagram* * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * Update docs/learn/fundamentals/fees-resource-limits-metering.mdx Co-authored-by: Elliot Voris * nginx redirects for old fee paths and pages --------- Co-authored-by: Elliot Voris --- .../example-application-tutorial/payment.mdx | 2 +- docs/issuing-assets/how-to-issue-an-asset.mdx | 2 +- docs/learn/encyclopedia/error-handling.mdx | 6 +- .../encyclopedia/fee-bump-transactions.mdx | 2 +- .../fees-surge-pricing-fee-strategies.mdx | 127 ----------- docs/learn/encyclopedia/ledger-headers.mdx | 4 +- ...uidity-on-stellar-sdex-liquidity-pools.mdx | 2 +- .../transaction-lifecycle.mdx | 1 - .../fees-resource-limits-metering.mdx | 210 ++++++++++++++++++ docs/learn/fundamentals/lumens.mdx | 2 +- docs/learn/fundamentals/networks.mdx | 4 +- .../operations-and-transactions.mdx | 2 +- docs/learn/glossary.mdx | 2 +- .../stellar-transaction.mdx | 2 +- .../fees-and-metering.mdx | 131 ----------- .../persisting-data.mdx | 2 +- .../state-archival.mdx | 2 +- docs/reference/resource-limits-fees.mdx | 2 +- docs/tutorials/send-and-receive-payments.mdx | 2 +- nginx/includes/redirects.conf | 3 +- static/assets/soroban_fees.png | Bin 0 -> 99373 bytes 21 files changed, 231 insertions(+), 279 deletions(-) delete mode 100644 docs/learn/encyclopedia/fees-surge-pricing-fee-strategies.mdx rename docs/learn/{fundamentals => encyclopedia}/transaction-lifecycle.mdx (99%) create mode 100644 docs/learn/fundamentals/fees-resource-limits-metering.mdx delete mode 100644 docs/learn/smart-contract-internals/fees-and-metering.mdx create mode 100644 static/assets/soroban_fees.png diff --git a/docs/building-apps/example-application-tutorial/payment.mdx b/docs/building-apps/example-application-tutorial/payment.mdx index 1a2c390e6..9d846cd7e 100644 --- a/docs/building-apps/example-application-tutorial/payment.mdx +++ b/docs/building-apps/example-application-tutorial/payment.mdx @@ -13,7 +13,7 @@ In our BasicPay application, the user will navigate to the Payments page where c The user clicks the "Confirm Transaction" button. If the destination account exists and is properly funded with XLM, this will trigger a Transaction Preview where they can view the transaction details. -All Stellar transactions require a small fee to make it to the ledger. Read more in our [Fees, Surge Pricing, and Fee Strategies section](../../learn/encyclopedia/fees-surge-pricing-fee-strategies.mdx). +All Stellar transactions require a small fee to make it to the ledger. Read more in our [Fees section](../../learn/fundamentals/fees-resource-limits-metering.mdx). In BasicPay, we’ve set it up so that the user always pays a static fee of 100,000 [stroops](../../learn/fundamentals/stellar-data-structures/assets.mdx#amount-precision) (one stroop equals 0.0000001 XLM) per operation. Alternatively, you can add a feature to your application that allows the user to set their own fee. diff --git a/docs/issuing-assets/how-to-issue-an-asset.mdx b/docs/issuing-assets/how-to-issue-an-asset.mdx index ac4655274..b9d7b2d70 100644 --- a/docs/issuing-assets/how-to-issue-an-asset.mdx +++ b/docs/issuing-assets/how-to-issue-an-asset.mdx @@ -16,7 +16,7 @@ If you’d like to avoid your users having to deal with transaction fees, consid Learn about the testnet and mainnet in our [Networks section](../learn/fundamentals/networks.mdx). -Learn more about fees in our [Fees, Surge Pricing, and Fee Strategies section](../learn/encyclopedia/fees-surge-pricing-fee-strategies.mdx). +Learn more about fees in our [Fees, Resource Limits, and Metering section](../learn/fundamentals/fees-resource-limits-metering.mdx). ## 1. Create issuing account and an object to represent the new asset diff --git a/docs/learn/encyclopedia/error-handling.mdx b/docs/learn/encyclopedia/error-handling.mdx index 0465c4e12..0f5918084 100644 --- a/docs/learn/encyclopedia/error-handling.mdx +++ b/docs/learn/encyclopedia/error-handling.mdx @@ -154,7 +154,7 @@ Here, we will cover specific errors commonly encountered during transaction subm | `BAD_AUTH` | -6 | Too few valid signatures / wrong network | | `INSUFFICIENT_BALANCE` | -7 | Fee would bring account below minimum balance; see our section on [Lumens](../fundamentals/lumens#minimum-balance) for more info | | `NO_ACCOUNT` | -8 | Source account not found | -| `INSUFFICIENT_FEE` | -9 | Fee is too small; see our section on [Fees](./fees-surge-pricing-fee-strategies) for more info | +| `INSUFFICIENT_FEE` | -9 | Fee is too small; see our section on [Fees](../fundamentals/fees-resource-limits-metering.mdx) for more info | | `BAD_AUTH_EXTRA` | -10 | Unused signatures attached to transaction | | `INTERNAL_ERROR` | -11 | An unknown error occurred | | `NOT_SUPPORTED` | -12 | The transaction type is not supported | @@ -172,11 +172,11 @@ We’ll do a deeper dive into the following errors: Horizon may send a `504 Timeout` after transaction submission. Timeouts are not errors but warnings that your request hasn’t been fulfilled yet. This can happen because of the relationship between Horizon and Stellar Core- the network may take some time (5-10 mins during congestion) to accept the transaction. At the same time, Horizon needs to provide developers with a response within 30 seconds. -Receiving a 504 for your transaction submission does not mean the transaction didn’t make it to the network. Continue with retries until you get a definitive response. If you continue to face timeouts on retries, consider using a fee-bump transaction to get into the ledger (after the time bounds expire) or increasing the maximum fee you’re willing to pay. Read up on [Surge Pricing and Fee Strategies](./fees-surge-pricing-fee-strategies#surge-pricing) for more details. +Receiving a 504 for your transaction submission does not mean the transaction didn’t make it to the network. Continue with retries until you get a definitive response. If you continue to face timeouts on retries, consider using a fee-bump transaction to get into the ledger (after the time bounds expire) or increasing the maximum fee you’re willing to pay. Read up on [Surge Pricing and Fee Strategies](../fundamentals/fees-resource-limits-metering.mdx) for more details. ### Insufficient fees and surge pricing -See the [Surge Pricing and Fee Strategies Encyclopedia Entry](./fees-surge-pricing-fee-strategies) +See the [Fees section](../fundamentals/fees-resource-limits-metering.mdx) ### Rate limiting diff --git a/docs/learn/encyclopedia/fee-bump-transactions.mdx b/docs/learn/encyclopedia/fee-bump-transactions.mdx index 316ced6e5..834540861 100644 --- a/docs/learn/encyclopedia/fee-bump-transactions.mdx +++ b/docs/learn/encyclopedia/fee-bump-transactions.mdx @@ -31,7 +31,7 @@ The account that will pay the fee for the fee-bump transaction. This account wil The maximum per-operation fee you’re willing to pay for the fee-bump transaction. The fee-bump transaction is one operation. Therefore, the total number of operations is equal to the number of operations in the inner transaction plus one. -Read more about transaction fees in our [Fees section](./fees-surge-pricing-fee-strategies#network-fees-on-stellar). +Read more about transaction fees in our [Fees section](../fundamentals/fees-resource-limits-metering.mdx). ### Replace-by-fee diff --git a/docs/learn/encyclopedia/fees-surge-pricing-fee-strategies.mdx b/docs/learn/encyclopedia/fees-surge-pricing-fee-strategies.mdx deleted file mode 100644 index 65f9c2247..000000000 --- a/docs/learn/encyclopedia/fees-surge-pricing-fee-strategies.mdx +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Fees, Surge Pricing, and Fee Strategies ---- - -import { CodeExample } from "@site/src/components/CodeExample"; - -:::note - -This page only includes information about inclusion fees. Fees for smart contracts differ in that they also include a resource fee. Read more in the [Fees and Metering section](../smart-contract-internals/fees-and-metering.mdx). - -::: - -Stellar requires a small fee for all transactions to prevent ledger spam and prioritize transactions during surge pricing. All fees are paid in lumens (XLM). - -## Network fees on Stellar - -The fee for a given transaction equals the number of operations in the transaction multiplied by the effective base fee for the given ledger (transaction fee = # of operations \* effective base fee). - -**Effective base fee:** the fee required per operation for a transaction to make it to the ledger. This cannot be lower than 100 stroops per operation (the network minimum). - -**Stroop:** the smallest unit of a lumen, one ten-millionth of a lumen (.0000001 XLM). - -When you decide on a base fee for a transaction, you specify the _maximum_ amount that you’re willing to pay per operation in that transaction. That does not necessarily mean that you’ll pay that amount, you will only be charged the lowest amount needed for your transaction to make it to the ledger. If network traffic is light and the number of submitted operations is below the network ledger limit (which is configured by validators, currently 1,000 ops per ledger on the pubnet and 100 ops per ledger on the testnet), you will only pay the network minimum (also configured by validators, currently 100 stroops). - -Alternatively, your transaction may not make it to the ledger if the effective base fee is higher than your base fee bid. When network traffic exceeds the ledger limit, the network enters into surge pricing mode, and your fee becomes a max bid. This amount can vary depending on network activity, but we recommend submitting a base fee of 100,000 stroops for consumer-facing applications. But it's up to you. - -Fees are deducted from the source account unless there is a fee-bump transaction that states otherwise. To learn about fee-bump transactions, see our [Fee-Bump Transaction Encyclopedia Entry](./fee-bump-transactions.mdx) - -The lumens collected from transaction fees go into a locked account and are not given to or used by anyone. - -## Surge pricing - -When the number of operations submitted to a ledger exceeds the network capacity (1,000 ops per ledger on the Pubnet; 100 ops per ledger on the Testnet), the network enters surge pricing mode. During this time, the network uses market dynamics to decide which submissions to include in the ledger — transactions that offer a higher fee per operation make it to the ledger first. - -If multiple transactions offer the same base fee during surge pricing, the transactions are shuffled randomly and the transactions at the top make the ledger. The rest of the transactions are pushed to the next ledger or discarded if they’ve been waiting for too long. If your transaction is discarded, Horizon will return a timeout error. - -The goal of the transaction pricing specification, which you can read in full [here](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0005.md), is to maximize network throughput while minimizing transaction fees. - -## Fee strategies - -There are three primary methods to deal with fee fluctuations and surge pricing: - -- Method 1: Set the highest fee you’re comfortable paying. This does not mean that you’ll pay that amount on every transaction- you will only pay what’s necessary to get you into the ledger. Under normal (non-surge) circumstances, you will only pay the standard fee even if you have a higher maximum fee set. This method is simple, convenient, and efficient but can still potentially fail. - -- Method 2: Track fee fluctuations with the fee_stats endpoint. Use this to make specific, informed choices about the fee you’re comfortable paying. All three of the SDF-maintained SDKs allow you to poll the /fee_stats endpoint: [Go](https://godoc.org/github.com/stellar/go/clients/horizonclient#Client.FeeStats), [Java](https://stellar.github.io/java-stellar-sdk/), [JavaScript](https://stellar.github.io/js-stellar-sdk/Server.html#feeStats). This method provides reliable submissions but is more inefficient. - -- Method 3: Use a fee-bump transaction - -### Set the highest fee you’re comfortable paying - -In general, it’s a good idea to choose the highest fee you’re willing to pay per operation for your transaction to make it to the ledger. - -Wallet developers may want to offer users a chance to specify their own base fee, though it may make more sense to set a persistent global base fee that’s above the market rate since the average user probably doesn’t care if they’re paying 0.8 cents or 0.00008 cents. - -### Track fee fluctuations - -In general, it is important to track fee costs. If network fees surge beyond what you’re willing to pay, consider waiting for activity to die down or periodically trying to resubmit the transaction with the same fee. - -If you want to match a fee error exactly, you may write something like this: - - - -```js -function isFeeError(error) { - return ( - error.response !== undefined && - error.status === 400 && - error.extras && - error.extras.result_codes.transaction === sdk.TX_INSUFFICIENT_FEE - ); -} -``` - - - -There are more streamlined ways to combine errors, which we use below to demonstrate the (very) specific check. - -Example: suppose we want a fairly conservative fee-paying strategy- we’re only willing to pay a 10% higher fee than the average transaction paid. - - - -```js -// when submitting any transaction, first query fee stats -server.feeStats().then(function (response) { - let avgFee = parseFloat(response.fee_charged.p50); - let tx = base.TransactionBuilder(someAccount, { - fee: (avgFee * 1.10).toFixed(0), // bump & convert to int - networkPassphrase: // ... - }); - // ...build the rest of the tx... - tx.sign(someAccount); - return server.submitTransaction(tx); -}); -``` - - - -### Fee-bumps on past transactions - -Even with a liberal fee-paying policy, your transaction may fail to make it into the ledger due to insufficient funds or untimely surges. Fee-bump transactions can solve this problem. The following snippet shows you how to resubmit a transaction with a higher fee (as long as you have the original transaction envelope): - - - -```js -// Let `lastTx` be some transaction that fails submission due to high fees, and -// `lastFee` be the maximum fee (expressed as an int) willing to be paid by -// `account` for `lastTx`. -server.submitTransaction(lastTx).catch(function (error) { - if (isFeeError(error)) { - let bump = sdk.TransactionBuilder.buildFeeBumpTransaction( - account, // account that will PAY the new fee - lastFee * 10, // new fee - lastTx, // the (entire) failing transaction - server.networkPassphrase - ); - bump.sign(someAccount); - return server.submitTransaction(bump); - } - // ...other error conditions... -}).then(...); -``` - - - -Suppose you submit two distinct transactions with the same source account and sequence number, and the second transaction is a fee-bump transaction. In that case, the second transaction will be included in the transaction queue, replacing the first transaction if and only if the fee bid of the second transaction is at least 10x the fee bid of the first transaction. - -This value can typically be found in the `fee_charged` field of the transaction response under the `tx_insufficient_fee` error case. diff --git a/docs/learn/encyclopedia/ledger-headers.mdx b/docs/learn/encyclopedia/ledger-headers.mdx index e69155384..61322b93d 100644 --- a/docs/learn/encyclopedia/ledger-headers.mdx +++ b/docs/learn/encyclopedia/ledger-headers.mdx @@ -64,11 +64,11 @@ The last used global ID. These IDs are used for generating objects. ### Maximum number of transactions -The maximum number of operations validators have agreed to process in a given ledger. If more transactions are submitted than this number, the network will enter into surge pricing mode. For more about surge pricing and fee strategies, see our [Fees, Surge Pricing, and Fee Strategies Encyclopedia Entry](./fees-surge-pricing-fee-strategies#surge-pricing). +The maximum number of operations validators have agreed to process in a given ledger. If more transactions are submitted than this number, the network will enter into surge pricing mode. For more about surge pricing and fee strategies, see our [Fees section](../fundamentals/fees-resource-limits-metering.mdx). ### Base fee -The fee the network charges per operation in a transaction. Calculated in stroops. See the [Fees section](./fees-surge-pricing-fee-strategies#network-fees-on-stellar) for more information. +The fee the network charges per operation in a transaction. Calculated in stroops. See the [Fees section](../fundamentals/fees-resource-limits-metering.mdx) for more information. ### Base reserve diff --git a/docs/learn/encyclopedia/liquidity-on-stellar-sdex-liquidity-pools.mdx b/docs/learn/encyclopedia/liquidity-on-stellar-sdex-liquidity-pools.mdx index d9ed5a606..cfd7cffa7 100644 --- a/docs/learn/encyclopedia/liquidity-on-stellar-sdex-liquidity-pools.mdx +++ b/docs/learn/encyclopedia/liquidity-on-stellar-sdex-liquidity-pools.mdx @@ -68,7 +68,7 @@ An account can place a passive sell order via the Create Passive Sell Offer oper The order price you set is independent of the fee you pay for submitting that order in a transaction. Fees are always paid in XLM, and you specify them as a separate parameter when submitting the order to the network. -To learn more about transaction fees, see our section on [Fees, Surge Pricing, and Fee Strategies](./fees-surge-pricing-fee-strategies#network-fees-on-stellar). +To learn more about transaction fees, see our section on [Fees section](../fundamentals/fees-resource-limits-metering.mdx). ## Liquidity pools diff --git a/docs/learn/fundamentals/transaction-lifecycle.mdx b/docs/learn/encyclopedia/transaction-lifecycle.mdx similarity index 99% rename from docs/learn/fundamentals/transaction-lifecycle.mdx rename to docs/learn/encyclopedia/transaction-lifecycle.mdx index 086aeb435..292a5aa8a 100644 --- a/docs/learn/fundamentals/transaction-lifecycle.mdx +++ b/docs/learn/encyclopedia/transaction-lifecycle.mdx @@ -1,6 +1,5 @@ --- title: Transaction Lifecycle -sidebar_position: 65 --- :::note diff --git a/docs/learn/fundamentals/fees-resource-limits-metering.mdx b/docs/learn/fundamentals/fees-resource-limits-metering.mdx new file mode 100644 index 000000000..89130ec38 --- /dev/null +++ b/docs/learn/fundamentals/fees-resource-limits-metering.mdx @@ -0,0 +1,210 @@ +--- +title: Fees, Resource Limits, and Metering +sidebar_position: 65 +--- + +## Fees overview + +Stellar requires a fee for all transactions to make it to the ledger. This helps prevent spam and prioritizes transactions during traffic surges. All fees are paid using the native Stellar token, the [lumen (or XLM)](./lumens.mdx). + +There are two types of fees on Stellar: + +**Resource fee: _only applies to smart contract transactions_**. The amount the submitter must pay for their transaction to execute. This amount is based on a transaction’s resource consumption and the state of network storage (described in the [Storage Dynamic Pricing section](#dynamic-pricing-for-storage)). Read about resource fees [below](#resource-fee). + +**Inclusion fee:** the maximum amount the submitter is willing to pay for the transaction to be included in the ledger. Read more [below](#inclusion-fee). + +When competing for space on the ledger, smart contract transactions are _only_ competing with other smart contract transactions, and transactions that do not execute a smart contract are _only_ competing with other transactions that do not execute a smart contract. + +The lumens collected from transaction fees go into a locked account and are not given to or used by anyone. + +## Resource fee + +All smart contract transactions require a resource fee in addition to an inclusion fee: + +`Transaction Fee (Tx.fee) = Resource Fee (sorobanData.resourceFee) + Inclusion Fee` + +![Soroban Fees](/assets/soroban_fees.png) _\* Diagram: Solid line boxes are what is actually present in the transaction, while dotted lines are derivable._ + +Smart contracts on Stellar use a multidimensional resource fee model that charges fees for several resource types using [network-defined rates](../../reference/resource-limits-fees.mdx). The resource fee is calculated based on the resource consumption declared in the transaction and can fluctuate based on a mutable storage write fee (more on that in the [Storage Dynamic Pricing section](#dynamic-pricing-for-storage) below). If the transaction attempts to exceed the declared resource limits, it will fail. If the transaction uses fewer resources than declared, there will be no refunds [(with a couple of exceptions)](#refundable-and-non-refundable-resource-fees). + +The resource fee depends on the following resources: + +- **Instructions:** the number of CPU instructions the transaction uses, metered by the host environment; +- **Ledger entry accesses:** reading or writing any single ledger entry (any storage key in the contract context); +- **Ledger I/O:** the number of bytes read from or written to the ledger; +- **Transaction size:** the size of the transaction submitted to the network in bytes; +- **Events & return value size:** the size of the events produced by the contract and the return value of the top-level contract function — both events and return value are included in transaction metadata; +- **Ledger space rent:** the payment for the ledger entry TTL extensions (i.e., rent payments) and rent payments for increasing ledger entry size. Refer to the [state archival](../smart-contract-internals/state-archival.mdx) section for more information about smart contract rent. + +:::note + +Some parameters may contribute to multiple fee components. For example, the transaction size is charged for network propagation (as network bandwidth is limited) and for historical storage (as storing ledger history is not free). + +::: + +The implementation details for fee computation are provided by the following [library](https://github.com/stellar/rs-soroban-env/blob/main/soroban-env-host/src/fees.rs). This library is used by the protocol to compute the fees and thus can be considered canonical. The resource fee rates may be updated based on consensus from the network validators. + +Find current resource fees in the [Resource Limits & Fees](../../reference/resource-limits-fees.mdx) page in the Reference section. + +### Refundable and non-refundable resource fees + +The resource fee is calculated with a non-refundable fees portion and a refundable fees portion: `ResourceFee(sorobanData.resourceFee) = Non-refundable resource fee + Refundable resource fees`. + +**Non-refundable fees:** calculated from CPU instructions, read bytes, write bytes, and bandwidth (transaction size, including its signatures). + +**Refundable fees:** calculated from rent, events, and return value. Refundable fees are charged from the source account before the transaction is executed and then refunded based on actual usage. However, the transaction will fail if `refundableFee` is not enough to cover the actual resource usage. + +### Find a transaction’s resource fee + +The best way to find the required resource fee for any smart contract transaction is to use the [`simulateTransaction` endpoint](../smart-contract-internals/contract-interactions/transaction-simulation.mdx) from the RPC, which enables you to send a preflight transaction that will return the necessary resource values and resource fee. + +### Resource limitations + +:::note + +Only smart contract transactions are subject to resource limitations. + +::: + +Stellar’s ledger close time is constrained to a few seconds, preventing the execution of arbitrarily large transactions, regardless of the resource fees involved. All resources mentioned in the prior section are subject to a per-transaction limit. A transaction’s memory (RAM) is also capped, though not subject to any charge. + +Resource limits are determined by a validator vote and can be adjusted based on network usage and ecosystem needs with a validator consensus. + +Find current resource limits in the [Resource Limits & Fees](../../reference/resource-limits-fees.mdx) page in the Reference section. + +## Inclusion fee + +The inclusion fee is the maximum bid (a bid denotes a dynamic fee, meaning it varies based on certain network conditions) the submitter is willing to pay for the transaction to be included in the ledger. The inclusion fee equals the number of operations in the transaction multiplied by the effective base fee for the given ledger: `inclusion fee = # of operations * effective base fee` + +**Effective base fee:** the fee required per operation for a transaction to make it to the ledger. This cannot be lower than 100 stroops per operation (the network minimum). + +**Stroop:** the smallest unit of a lumen, one ten-millionth of a lumen (.0000001 XLM). + +:::note + +Transactions can have up to 100 operations per transaction except for transactions that execute a smart contract. Smart contract transactions are only allowed one operation per transaction (unless the transaction is getting [fee-bumped](../encyclopedia/fee-bump-transactions.mdx); this would add another operation), and the limits are instead specified in CPU instructions and other resource limits. + +::: + +When you set a base fee for a transaction, you are specifying the maximum amount you are willing to pay per operation in that transaction. This doesn’t necessarily mean you’ll pay that amount. You’ll only be charged the lowest amount needed for your transaction to make it to the ledger. If network traffic is light and the number of submitted operations or transactions is below the network ledger limit (configured by validators: currently 1,000 non-smart-contract operations and 100 smart contract transactions), you will only pay the network minimum (configured by validators, currently 100 stroops). + +Alternatively, your transaction may not make it to the ledger if the effective base fee is higher than your base fee bid. When network traffic exceeds the ledger limit, the network enters into [surge pricing mode](#surge-pricing), and your effective base fee becomes your maximum bid. + +Fees are deducted from the source account unless there is a fee-bump transaction that states otherwise. Learn about fee-bump transactions in the [Fee-Bump Transaction section](../encyclopedia/fee-bump-transactions.mdx). + +## Surge and dynamic pricing + +### Surge pricing + +The network can enter surge pricing mode under two circumstances: 1. when the number of operations submitted to a ledger exceeds the network capacity (1,000 operations for transactions that do not execute smart contracts), or 2. if there is competition between smart contract transactions for a particular resource (instructions, ledger entry accesses (reads and writes), ledger IO (bytes read and bytes written), and the total size of transactions to be applied). During this time, the network uses market dynamics to decide which transactions to include in the ledger. Transactions that offer a higher maximum base fee bid make it to the ledger first. + +During surge pricing mode, transactions are sorted based on their inclusion fee amount, and the user pays the minimum inclusion fee in their transaction set. For example, if there are five transactions with respective inclusion fees of 2, 3, 4, 4, and 5 XLM, and only four of them an make it to the ledger, then all included transactions pay the inclusion fee of 3 XLM. If all five transactions can make it to the ledger (which would mean the network is not in surge pricing mode), each would pay the minimum inclusion fee of 100 stroops (.0001 XLM). + +If there are multiple transactions offering the same inclusion fee, but they cannot all fit into the ledger, transactions are picked randomly so that the total operations for the entire set don’t exceed 1,000. The rest of the transactions are pushed to the next ledger or discarded if they’ve been waiting for too long. If your transaction is discarded, Horizon will return a timeout error. + +:::note + +It is recommended to apply [ledger bounds](./stellar-data-structures/operations-and-transactions.mdx#ledger-bounds) or [time bounds](./stellar-data-structures/operations-and-transactions.mdx#time-bounds) to transactions — either your transaction makes it to the ledger or fails, depending on your time and/or ledger parameters. + +::: + +**You are more likely to pay a higher inclusion fee when submitting smart contract transactions.** Smart contract transactions have tighter ledger limits than transactions that don’t interact with smart contracts and will therefore experience surge pricing more often. You are more likely to pay your maximum inclusion fee bid or, at least, the minimum inclusion fee bid in your transaction set. So, you must plan your fee bidding strategy accordingly. + +### Dynamic pricing for storage + +Stellar’s storage database size is determined by two forces: the rate of additions (writes) and the rate of deletions (evictions). Stellar has set a ledger growth threshold to a constant value (the `BucketListTargetSizeBytes` network parameter, implemented to prevent explosive state growth and subject to change based on validator vote). Because there is a fixed capacity, write fees are based on the ledger size and can alter dynamically based on that size. + +When the ledger size is large, there is a higher demand for storage space, which causes a higher write fee. Over time, entries are archived, reducing the overall ledger size and, thereby, reducing storage pricing. This fee model is designed as if the database size represents the current demand for storage at any given instant. + +Write fees will grow gradually over time when the database size is below the ledger growth threshold and will grow linearly, but with a 1,000x factor after exceeding that threshold. This is a safeguard against spam and is not anticipated under normal circumstances. + +## Metering + +Metering is a mechanism in the host environment that accounts for the resource costs incurred during the execution of a smart contract. The outcomes of metering act as the canonical truth of a smart contract’s execution cost and serve as an input for fee computations. + +Stellar’s smart contract execution environment comprises a host and a guest. The host encapsulates shared functionalities for all contracts, including host objects, functions, and a Wasm interpreter (VM). The guest environment is where the compiled Wasm contract is interpreted and executed. A detailed discussion of these environments can be found in [Environment Concepts](../smart-contract-internals/environment-concepts.mdx). + +The division between the host and guest environments and their shared functionalities necessitates a unique approach to resource accounting. In particular, the resources required for executing Wasm instructions and running host functions must be accounted for uniformly, with costs in terms of CPU instructions and memory bytes. + +Consider two contracts: A and B, both comprising the same number of Wasm instructions. If Contract A repeatedly calls host functions for complex computations while Contract B executes pure arithmetic operations within the VM, Contract A should be more costly, and this difference should be accurately represented in the metering process. + +Metering ensures fairness, thwarts resource manipulation and attacks, and generates a deterministic and reproducible measure of runtime resource costs. + +### Methodology + +To maintain equivalence in metering between the host and guest, computation costs on both sides are expressed in terms of CPU instructions and memory bytes (representing CPU and RAM usage). Metering and limit-checking occur within the host environment, and pre-calibrated numerical models ensure results are deterministic. + +### Cost types + +Metering is segmented into host components, referred to as **cost types**. Each cost type can be viewed as a “meta instruction” symbolizing a specific host operation with a known complexity that depends on a runtime input. For instance, cost type `ComputeSha256Hash` represents the cost of computing the SHA256 hash of a byte array. + +:::info + +Execution of Wasm instructions is accounted for as a host cost type `WasmInsnExec`, which has a constant CPU cost per Wasm instruction. This methodology treats guest instructions and host executions equivalently. + +::: + +Find a complete list of host cost types and their definitions here: [`ContractCostType`](https://github.com/stellar/stellar-xdr/blob/e372df9f677961aac04c5a4cc80a3667f310b29f/Stellar-contract-config-setting.x#L92-L155). + +### Cost parameters + +Cost types are carefully selected to: + +1. Serve as comprehensive building blocks for all significant contract execution costs; +2. Ensure each component cost increases at most linearly (i.e., constant or linear) with respect to its input. That is, `y = a + bx`, where `y` is the cost output, `x` is the input, and `a` & `b` are the constant and linear model parameters, respectively. + +Each cost type has a separate model for both resource types (CPU and memory). + +The parameters for each model, `a` and `b`, are calibrated and fitted offline against inputs of various sizes. The collection of all model cost parameters from the network configurable entries (see [`ConfigSettingsEntry`](https://github.com/stellar/stellar-xdr/blob/e372df9f677961aac04c5a4cc80a3667f310b29f/Stellar-contract-config-setting.x#L223-L226) can be updated through network consensus. + +### Metering process + +Before contract execution, the host environment is prepared with the cost parameters and a budget defining the resource limits. Metering is then implemented to measure the cumulative resource consumption during host execution. + +During execution, whenever a component (a code block defining a cost type) is encountered, the corresponding model computes the resource output from the runtime input and increments the meter accordingly. The meter checks the cumulative consumption against the budget limit. If the limit is exceeded, an error is produced, and execution is terminated. + +If the contract execution concludes within the specified resource limits, the metered total of CPU instructions is recorded and utilized as the input for fee calculation. While memory usage is not included in the fee computation, it is nevertheless subject to the resource limits. + +## Inclusion fee pricing strategies + +There are three primary methods to deal with inclusion fee fluctuations and surge pricing: + +- [**Method 1:**](#set-the-highest-fee-youre-comfortable-paying) set the highest fee you’re comfortable paying. This does not mean that you’ll pay that amount on every transaction — you will only pay what’s necessary to get into the ledger. Under normal (non-surge) circumstances, you will only pay the standard fee even with a higher maximum fee set. This method is simple, convenient, and efficient but can still potentially fail. +- [**Method 2:**](#fee-bumps-on-past-transactions) resubmit a transaction with a higher fee using a fee-bump transaction + +### Set the highest fee you’re comfortable paying​ + +In general, it’s a good idea to choose the highest fee you’re willing to pay per operation for your transaction to make it to the ledger. Wallet developers may want to offer users a chance to specify their own base fee, though it may make more sense to set a persistent global base fee that’s above the market rate since the average user probably doesn’t care if they’re paying 0.8 cents or 0.00008 cents. + +Remember that you’re more likely to pay your maximum fee bid with smart contract transactions. + +### Fee-bumps on past transactions​ + +Even with a liberal fee-paying policy, your transaction may fail to make it into the ledger due to insufficient funds or untimely surges. Fee-bump transactions can solve this problem. The following snippet shows you how to resubmit a transaction with a higher fee (as long as you have the original transaction envelope): + + + +```js +// Let `lastTx` be some transaction that fails submission due to high fees, and +// `lastFee` be the maximum fee (expressed as an int) willing to be paid by +// `account` for `lastTx`. +server.submitTransaction(lastTx).catch(function (error) { + if (isFeeError(error)) { + let bump = sdk.TransactionBuilder.buildFeeBumpTransaction( + account, // account that will PAY the new fee + lastFee * 10, // new fee + lastTx, // the (entire) failing transaction + server.networkPassphrase + ); + bump.sign(someAccount); + return server.submitTransaction(bump); + } + // ...other error conditions... +}).then(...); +``` + + + +Suppose you submit two distinct transactions with the same source account and sequence number; the second transaction is a fee-bump transaction. In that case, the second transaction will be included in the transaction queue, replacing the first transaction if and only if the fee bid of the second transaction is at least 10x the fee bid of the first transaction. + +This value can typically be found in the `fee_charged` field of the transaction response under the `tx_insufficient_fee` error case. diff --git a/docs/learn/fundamentals/lumens.mdx b/docs/learn/fundamentals/lumens.mdx index c75060b3a..aa774c23f 100644 --- a/docs/learn/fundamentals/lumens.mdx +++ b/docs/learn/fundamentals/lumens.mdx @@ -11,7 +11,7 @@ To read up on the basics of lumens, head over to our Stellar Learn site: [Stella Stellar requires a small fee for all transactions to prevent ledger spam and prioritize transactions during surge pricing. Transaction fees are paid in lumens. -To learn about fees on Stellar, see our [Fees, Surge Pricing, and Fee Strategies Encyclopedia Entry](../encyclopedia/fees-surge-pricing-fee-strategies). +To learn about fees on Stellar, see our [Fees section](./fees-resource-limits-metering.mdx). Smart contract transactions on Stellar employ a different fee structure based on an inclusion fee and resource consumption (which includes [rent](#rent)). Read more in the [Fees and Metering section](https://soroban.stellar.org/docs/fundamentals-and-concepts/fees-and-metering) in the Soroban docs. diff --git a/docs/learn/fundamentals/networks.mdx b/docs/learn/fundamentals/networks.mdx index 04d944162..c52183f46 100644 --- a/docs/learn/fundamentals/networks.mdx +++ b/docs/learn/fundamentals/networks.mdx @@ -12,8 +12,8 @@ Stellar has three networks: the public network (Mainnet, also called Pubnet or t - Validator nodes are run by the public - SDF offers a free [Horizon instance](https://horizon.stellar.org/) to interact with the Mainnet with a limited set of history, or you can [run your own](/network/core-node/admin-guide) or use an instance offered by an infrastructure provider. - You need to fund your account with XLM from another account -- Mainnet is limited to 1,000 operations per ledger and will be limited to a maximum of 100 smart contract transactions per ledger (the precise amount of smart contract txs per ledger can vary greatly depending on transaction [resource limits](../smart-contract-internals/fees-and-metering.mdx#resource-limits)) - - See more detailed smart contract network settings in the section on [Fees and Metering](../smart-contract-internals/fees-and-metering.mdx) +- Mainnet is limited to 1,000 operations per ledger and will be limited to a maximum of 100 smart contract transactions per ledger (the precise amount of smart contract txs per ledger can vary greatly depending on transaction [resource limits](./fees-resource-limits-metering#resource-limits)). + - See more detailed smart contract network settings in the section on [Fees and Metering](./fees-resource-limits-metering.mdx). - No publicly available RPC, see RPC service providers [here](/network/soroban-rpc/rpc-providers) ### Testnet diff --git a/docs/learn/fundamentals/stellar-data-structures/operations-and-transactions.mdx b/docs/learn/fundamentals/stellar-data-structures/operations-and-transactions.mdx index f073cace7..c0670c581 100644 --- a/docs/learn/fundamentals/stellar-data-structures/operations-and-transactions.mdx +++ b/docs/learn/fundamentals/stellar-data-structures/operations-and-transactions.mdx @@ -35,7 +35,7 @@ Smart contract transactions also go through a simulation process where developer #### Transaction attributes -- [Fee](../../encyclopedia/fees-surge-pricing-fee-strategies) +- [Fee](../fees-resource-limits-metering.mdx) - [List of operations](../list-of-operations) - [List of signatures](../../encyclopedia/signatures-multisig) - [Memo or muxed account](../../encyclopedia/pooled-accounts-muxed-accounts-memos) diff --git a/docs/learn/glossary.mdx b/docs/learn/glossary.mdx index 4b489e4e1..b1d8c0692 100644 --- a/docs/learn/glossary.mdx +++ b/docs/learn/glossary.mdx @@ -43,7 +43,7 @@ The fee you’re willing to pay per operation in a transaction. This differs from the Effective Base Fee which is the actual fee paid per operation for a transaction to make it to the ledger. When the network is in surge pricing mode, the effective base fee varies based on an auction mechanism. When it's not, the effective base fee defaults to the network minimum currently at 100 stroops per operation. -Learn more in our [Fees, Surge Pricing, and Fee Strategies Encyclopedia Entry](./encyclopedia/fees-surge-pricing-fee-strategies.mdx) +Learn more in our [Fees section](./fundamentals/fees-resource-limits-metering.mdx). ### Base reserve diff --git a/docs/learn/smart-contract-internals/contract-interactions/stellar-transaction.mdx b/docs/learn/smart-contract-internals/contract-interactions/stellar-transaction.mdx index 8b9b75ce2..98d21a2ea 100644 --- a/docs/learn/smart-contract-internals/contract-interactions/stellar-transaction.mdx +++ b/docs/learn/smart-contract-internals/contract-interactions/stellar-transaction.mdx @@ -633,7 +633,7 @@ const signedEntries = simTx.auth.map(async (entry) => ### Transaction resources -Every Soroban transaction has to have a `SorobanTransactionData` transaction [extension] populated. This is needed to compute the [Soroban resource fee](../fees-and-metering.mdx). +Every Soroban transaction has to have a `SorobanTransactionData` transaction [extension] populated. This is needed to compute the [Soroban resource fee](../../fundamentals/fees-resource-limits-metering.mdx). [extension]: https://github.com/stellar/stellar-xdr/blob/c2e702c70951ff59a1eff257f08cf38d47210e5f/Stellar-transaction.x#L874 diff --git a/docs/learn/smart-contract-internals/fees-and-metering.mdx b/docs/learn/smart-contract-internals/fees-and-metering.mdx deleted file mode 100644 index f5fa25778..000000000 --- a/docs/learn/smart-contract-internals/fees-and-metering.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -sidebar_position: 110 -title: Fees and Metering -description: Smart contract fees and metering on Soroban. ---- - - - Smart contract fees and metering on Soroban. - - - - - -# Fee Model - -Executing a Soroban transaction on the Stellar network requires a fee. This measure helps prevent spam and allows multiple parties to compete for inclusion in the ledger in case of traffic surges. The fee is paid using the native Stellar token (Lumens, also known as XLM). - -## Transaction Fee - -The Soroban transaction fee is the sum of two parts: - -- the Resource Fee -- the Inclusion Fee - -`Transaction Fee (Tx.fee) = Resource Fee (sorobanData.resourceFee) + Inclusion Fee` - -![Soroban Fees](/img/soroban_fees.png) _\* Chart: Solid line boxes are what is actually present in the transaction, while dotted lines are derivable._ - -### Inclusion Fee - -- The inclusion fee is the maximum bid the submitter is willing to pay for inclusion of the transaction. The network uses market dynamics to decide which transaction to include in the ledger — transactions that offer a higher fee are included in the ledger before those with lower inclusion fees. Therefore, inclusion fee is used to prioritize transactions. The inclusion fee can be discounted depending on the traffic. If the ledger is not at capacity, only the minimal base inclusion fee is charged (100 stroops or 10^-5 XLM). If the ledger is at capacity, then the lowest inclusion fee bid is charged. In general, the behavior of the inclusion fee and bidding strategies align with the [classic Stellar fees](../encyclopedia/fees-surge-pricing-fee-strategies.mdx). - -### Resource Fee - -- The resource fee is the amount of Lumens the submitter must pay for their transaction to be executed. It depends solely on the amount of resources the transaction needs for execution. There is no auction for the resources fee; it simply must be paid if the transaction is included in the ledger. - -Soroban uses a multi-dimensional resource fee model that charges fees for several resource types using network-defined rates. The resources fee is calculated based on the resources consumption declared in the transaction. If the transaction attempts to exceed the declared resource limits, the transaction will fail. If the transaction uses fewer resources than declared, there will be no refunds, with a few exceptions. - -The resource fee depends on the following: - -- Instructions: The number of CPU instructions the transaction uses, metered by the Soroban host. -- Ledger entry accesses: Reading or writing any single ledger entry (any storage key in the contract context). -- Ledger I/O: The number of bytes read from or written to the ledger. -- Transaction size: The size of the transaction submitted to the network in bytes. -- Events & return value size: The size of the events produced by the contract and the return value of the top-level contract function. Both events and return value are included in transaction metadata. -- Ledger space rent: The payment for the ledger entry TTL extensions (i.e. rent payments) and rent payments for increasing ledger entry size. Refer to the [state archival](./state-archival.mdx) section for more information about rent in Soroban. - -Some parameters may contribute to multiple fee components. For example, the transaction size is charged for network propagation (as network bandwidth is limited) and for historical storage (as storing ledger history is not free). - -The implementation details for fee computation are provided by the following [library](https://github.com/stellar/rs-soroban-env/blob/main/soroban-env-host/src/fees.rs). This library is used by the protocol to compute the fees and thus can be considered canonical. The resource fee rates may be updated based on network validator consensus. - -### Understanding the Resource Fee - -ResourceFee is calculated with a non-refundable fees portion and a refundable fees portion. `Resource Fee(sorobanData.resourceFee) = Non-refundable resource fees + Refundable resource fees` - -#### Non-refundable Fees - -The non-refundable fees is calculated from CPU instructions, Read Bytes, Write Bytes, and Bandwidth (size of transaction including its signatures). - -#### Refundable Fees - -The refundable fees is calculated from rent, events, and return value. Refundable fees are charged from the source account before the transaction is executed and then refunded based on the actual usage. The transaction will fail if `refundableFee` is not enough to cover the actual resource usage though. - -### Where to find Resource Fee Info for the Transaction - -The best way to find the required resource fee for any Soroban transaction is to use the [`simulateTransaction`](./contract-interactions/transaction-simulation.mdx) endpoint from the RPC, which enables you to send a preflight transaction that will return resource fees. - -## Resource limits - -Ledger close time is constrained to a few seconds, thus preventing the execution of arbitrarily large transactions, regardless of the resource fees involved. All the resources referenced in the prior section are subject to a per-transaction limit. Additionally, the memory (RAM) usage by a transaction is capped, though it is not subject to any charge. - -These resource limits may change in the Mainnet release. They can also be updated, usually increased, based on the network validator vote and consensus. - -Currently defined resource limits can be found in [the "Resource Limits & Fees" page](../../reference/resource-limits-fees.mdx) in the Reference section. - -# Metering - -Metering is a crucial mechanism within the host environment that accounts for the resource costs, such as CPU instructions and RAM usage, incurred during the execution of a smart contract. The outcomes of metering act as the canonical truth of a smart contract's execution cost and serve as an input for fee computations. - -## Why Metering - -The Soroban smart contract execution environment comprises a host and a guest. The host encapsulates shared functionalities for all contracts, including host objects, functions, and a Wasm interpreter (VM). The guest environment is where the compiled Wasm contract is interpreted and executed. Detailed discussion about these environments can be found in [Environment Concepts](./environment-concepts.mdx). - -The division between the host and guest environments, and the shared functionalities between them, necessitates a unique approach to resource accounting. In particular, the resources required for executing Wasm instructions and running host functions must be accounted for uniformly, with costs denoted in terms of CPU instructions and memory bytes. Consider two contracts, A and B, both comprising the same number of Wasm instructions. If Contract A repeatedly calls host functions for complex computations while Contract B executes pure arithmetic operations within the VM, Contract A should be more costly. This difference should be accurately represented in the metering process. - -In essence, metering ensures fairness, thwarts resource manipulation and attacks, and generates a deterministic and reproducible measure of runtime resource costs. - -## Methodology - -To maintain equivalence in metering between the host and guest, computation costs on both sides are expressed in terms of cpu instructions and memory bytes (representing CPU and RAM usage). Metering and limit-checking occur within the host environment, and pre-calibrated numerical models are used to ensure results are deterministic. - -### Cost Types - -Metering is segmented into host components, referred to as cost types. Each cost type can be viewed as a "meta instruction" symbolizing a specific host operation, having a known complexity and depends on a runtime input. For instance, cost type `ComputeSha256Hash` represents the cost of computing the SHA256 hash of a byte array. - -:::info - -Execution of Wasm instructions is accounted for as a host cost type `WasmInsnExec`, which has a constant CPU cost per Wasm instruction. This methodology treats guest instructions and host executions equivalently. - -::: - -For a complete list of host cost types and their definitions, please refer to [`ContractCostType`](https://github.com/stellar/stellar-xdr/blob/e372df9f677961aac04c5a4cc80a3667f310b29f/Stellar-contract-config-setting.x#L92-L155). - -### Cost Parameters - -The cost types are carefully selected to: - -1. Serve as comprehensive building blocks for all significant contract execution costs. -2. Ensure each component cost increases at most linearly (i.e., constant or linear) with respect to its input. That is, `y = a + bx`, where `y` is the cost output, `x` is the input, and `a`, `b` are the constant and linear model parameters, respectively. - -Each cost type has a separate model for both resource types (CPU and memory). - -The parameters for each model, `a` and `b`, are calibrated and fitted offline against inputs of various sizes. The collection of all model cost parameters form the network configurable entries (see [ConfigSettingsEntry](https://github.com/stellar/stellar-xdr/blob/e372df9f677961aac04c5a4cc80a3667f310b29f/Stellar-contract-config-setting.x#L223-L226)), which can be updated through network consensus. - -### Metering Process - -Before contract execution, the host environment is prepared with the cost parameters and a budget defining the resource limits. Metering is then implemented to measure the cumulative resource consumption during host execution. - -During execution, whenever a component (a code block defining a cost type) is encountered, the corresponding model computes the resource output from the runtime input and increments the meter accordingly. The meter checks the cumulative consumption against the budget limit. If the limit is exceeded, an error is produced, and execution is terminated. - -If the contract execution concludes within the specified resource limits, the metered total of CPU instructions is recorded and utilized as the input for fee calculation. Note that while memory usage is not included in the fee computation, it is nevertheless subject to the resource limits. - -### Current Fee Rates - -Currently defined fee rates can be found in the [Resource Limits & Fees](../../reference/resource-limits-fees.mdx) page. diff --git a/docs/learn/smart-contract-internals/persisting-data.mdx b/docs/learn/smart-contract-internals/persisting-data.mdx index 11229565c..1c4a0d51e 100644 --- a/docs/learn/smart-contract-internals/persisting-data.mdx +++ b/docs/learn/smart-contract-internals/persisting-data.mdx @@ -72,7 +72,7 @@ In addition to the types of state, it is also helpful to consider the type of co ### Best Practices - Prefer `Temporary` over `Persistent` and `Instance` storage - - Anything that can have a timeout should be `Temporary` with TTL set to the timeout. See the [resource limits table](./fees-and-metering.mdx#resource-limits) for the current maximum TTL/timeout. + - Anything that can have a timeout should be `Temporary` with TTL set to the timeout. See the [resource limits table](../../reference/resource-limits-fees.mdx) for the current maximum TTL/timeout. - Ideally, `Temporary` entries should be associated with an absolute ledger boundary and thus never need a TTL extension - Example: Soroban Auth signatures have an absolute expiration ledger, so nonces can be stored in `Temporary` entries without security risks - Example: SAC allowance that lives only until a given ledger (so that some old allowance signature can not be used in the future if not exhausted) diff --git a/docs/learn/smart-contract-internals/state-archival.mdx b/docs/learn/smart-contract-internals/state-archival.mdx index 829e33c9f..d11bc5fa2 100644 --- a/docs/learn/smart-contract-internals/state-archival.mdx +++ b/docs/learn/smart-contract-internals/state-archival.mdx @@ -85,7 +85,7 @@ For each entry type, there is a minimum TTL that the entry must have when being ### Maximum TTL -On any given ledger, an entry's TTL can be extended up to the maximum TTL. This is a network parameter (see the [resource limits table](./fees-and-metering.mdx#resource-limits) for the current maximum TTL). Maximum TTL is not enforced based on when an entry was created, but based on the current ledger. For example, if an entry is created on January 1st, 2024, its TTL could initially be extended up to January 1st, 2025. After this initial TTL extension, if the entry received another TTL extension later on January 10th, 2024, the TTL could be extended up to January 10th, 2025. The `max_ttl()` function can be used to determine the current maximum allowed TTL. +On any given ledger, an entry's TTL can be extended up to the maximum TTL. This is a network parameter (see the [resource limits table](../../reference/resource-limits-fees.mdx) for the current maximum TTL). Maximum TTL is not enforced based on when an entry was created, but based on the current ledger. For example, if an entry is created on January 1st, 2024, its TTL could initially be extended up to January 1st, 2025. After this initial TTL extension, if the entry received another TTL extension later on January 10th, 2024, the TTL could be extended up to January 10th, 2025. The `max_ttl()` function can be used to determine the current maximum allowed TTL. ## Operations diff --git a/docs/reference/resource-limits-fees.mdx b/docs/reference/resource-limits-fees.mdx index 1b15034e8..d4e690760 100644 --- a/docs/reference/resource-limits-fees.mdx +++ b/docs/reference/resource-limits-fees.mdx @@ -5,7 +5,7 @@ title: Resource Limits & Fees :::note -Resource limitations and fees only apply to smart contract transactions. Read more about the inner workings of inclusion fees in the [Fees section](../learn/encyclopedia/fees-surge-pricing-fee-strategies.mdx) and more about smart contract fees, which include resource fees, in the [Fees and Metering section](../learn/smart-contract-internals/fees-and-metering.mdx). +Resource limitations and fees only apply to smart contract transactions. Read more about the inner workings of fees on Stellar in the [Fees section](../learn/fundamentals/fees-resource-limits-metering.mdx). ::: diff --git a/docs/tutorials/send-and-receive-payments.mdx b/docs/tutorials/send-and-receive-payments.mdx index 3a78f3dae..8dfb6ddf0 100644 --- a/docs/tutorials/send-and-receive-payments.mdx +++ b/docs/tutorials/send-and-receive-payments.mdx @@ -14,7 +14,7 @@ Actions that do things on Stellar — like sending payments or making buy or sel Transactions are atomic, meaning that if any operation in a transaction fails, they all fail. Let’s say you have 100 lumens and you make two payment operations of 60 lumens each. If you make two transactions (each with one operation), the first will succeed and the second will fail because you don’t have enough lumens. You’ll be left with 40 lumens. However, if you group the two payments into a single transaction, they will both fail and you’ll be left with the full 100 lumens still in your account. -Every transaction also incurs a small fee. Like the minimum balance on accounts, this fee deters spam and prevents people from overloading the system. This [base fee](../learn/encyclopedia/fees-surge-pricing-fee-strategies.mdx#network-fees-on-stellar) is very small — 100 stroops per operation where a stroop equals 1 \* 10 ^-7 XLM — and it's charged for each operation in a transaction. A transaction with two operations, for instance, would cost 200 stroops. +Every transaction also incurs a small fee. Like the minimum balance on accounts, this fee deters spam and prevents people from overloading the system. This [base fee](../learn/fundamentals/fees-resource-limits-metering.mdx) is very small — 100 stroops per operation where a stroop equals 1 \* 10 ^-7 XLM — and it's charged for each operation in a transaction. A transaction with two operations, for instance, would cost 200 stroops. diff --git a/nginx/includes/redirects.conf b/nginx/includes/redirects.conf index 1a7c1be50..e4a82121c 100644 --- a/nginx/includes/redirects.conf +++ b/nginx/includes/redirects.conf @@ -6,7 +6,8 @@ rewrite ^/docs/glossary/clawback$ "/docs/learn/encyclopedia/clawbacks" permanent rewrite ^/docs/glossary/decentralized-exchange$ "/docs/learn/encyclopedia/liquidity-on-stellar-sdex-and-liquidity-pools#sdex" permanent; rewrite ^/docs/glossary/federation$ "/docs/learn/encyclopedia/federation" permanent; rewrite ^/docs/glossary/fee-bumps$ "/docs/learn/encyclopedia/fee-bump-transactions" permanent; -rewrite ^/docs/glossary/fees$ "/docs/learn/encyclopedia/fees-surge-pricing-fee-strategies" permanent; +rewrite ^/docs/glossary/fees$ "/docs/learn/fundamentals/fees-resource-limits-metering" permanent; +rewrite ^/docs/(learn/)?encyclopedia/fees-surge-pricing-fee-strategies$ "/docs/learn/fundamentals/fees-resource-limits-metering" permanent; rewrite ^/docs/glossary/inflation$ "/docs/learn/encyclopedia/inflation" permanent; rewrite ^/docs/glossary/ledger$ "/docs/learn/fundamentals/stellar-data-structures/ledgers" permanent; rewrite ^/docs/glossary/liquidity-pools$ "/docs/learn/encyclopedia/liquidity-on-stellar-sdex-and-liquidity-pools#liquidity-pools" permanent; diff --git a/static/assets/soroban_fees.png b/static/assets/soroban_fees.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9c864d52955a9202adbefc67c2ebc873a68489 GIT binary patch literal 99373 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%0AA~ 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 literal 0 HcmV?d00001