Skip to content

Commit ea3c9ee

Browse files
authored
Merge pull request #1140 from multiversx/merge-dev-in-main
Merge dev in main
2 parents 2bdfe1b + 89a6c0c commit ea3c9ee

File tree

1 file changed

+40
-4
lines changed

1 file changed

+40
-4
lines changed

docs/sdk-and-tools/rest-api/transactions.mdx

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,36 @@ Example response for cross-shard transactions:
347347

348348
`https://gateway.multiversx.com/transaction/cost`
349349

350-
This endpoint allows one to estimate the cost of a transaction.
350+
This endpoint is used to estimate the gas cost of a given transaction.
351+
352+
It performs a read-only simulation of the transaction against the current on-chain state, returning the number of gas units the transaction would consume if executed in that exact state.
353+
354+
#### How it works:
355+
- The endpoint takes all transaction input fields (value, sender, receiver, data, chainID, etc.).
356+
- It executes the transaction in a sandboxed, non-persistent environment, meaning it simulates execution without affecting the actual blockchain.
357+
- It uses the current state of the network (including smart contract storage, balances, etc.).
358+
- It returns the estimated gas (txGasUnits) and may also return smart contract results and events triggered by the simulation.
359+
360+
#### How does it apply to smart contracts?
361+
362+
For smart contracts, the endpoint simulates the contract call exactly as if it were executed live, including processing all logic, branches, and emitted events.
363+
The gas estimate reflects the computation and storage impact that would occur if the state remained unchanged at the time of actual execution.
364+
365+
#### How does it approximate the cost if the contract logic has variable gas usage?
366+
367+
If a smart contract’s logic has branches or conditional execution that result in variable gas usage (e.g., depending on internal storage state, previous executions, etc.),
368+
the estimation will only reflect the gas used by the path taken during this particular simulation.
369+
370+
#### Why is providing the correct nonce important?
371+
372+
Because the simulation engine mirrors real transaction behavior, it requires a valid and correct nonce to properly simulate the transaction. Using an outdated or incorrect
373+
nonce may lead to simulation failure.
374+
375+
#### Can the estimated gas differ from the actual cost?
376+
377+
Yes. Since the blockchain state may change between the moment you call /transaction/cost and when the transaction is actually sent to the network, the real gas usage can differ.
378+
This is especially true for smart contract calls that depend on dynamic or mutable state.
379+
351380

352381
<Tabs
353382
defaultValue="Request"
@@ -364,10 +393,12 @@ Body Parameters
364393
| value | <span class="text-danger">REQUIRED</span> | `string` | The Value to transfer, as a string representation of a Big Integer (can be "0"). |
365394
| receiver | <span class="text-danger">REQUIRED</span> | `string` | The Address (bech32) of the Receiver. |
366395
| sender | <span class="text-danger">REQUIRED</span> | `string` | The Address (bech32) of the Sender. |
367-
| data | <span class="text-normal">OPTIONAL</span> | `string` | The base64 string representation of the Transaction's message (data). |
368396
| chainID | <span class="text-danger">REQUIRED</span> | `string` | The Chain identifier. |
369397
| version | <span class="text-danger">REQUIRED</span> | `number` | The Version of the Transaction (e.g. 1). |
370-
| nonce | <span class="text-normal">OPTIONAL</span> | `number` | The Sender nonce. |
398+
| nonce | <span class="text-danger">REQUIRED</span> | `number` | The Sender nonce. |
399+
| options | <span class="text-normal">OPTIONAL</span> | `number` | The Options of the Transaction (e.g. 1). |
400+
| data | <span class="text-normal">OPTIONAL</span> | `string` | The base64 string representation of the Transaction's message (data). |
401+
371402

372403
</TabItem>
373404
<TabItem value="Response">
@@ -390,7 +421,12 @@ The cost is estimated successfully.
390421
</Tabs>
391422

392423
:::tip
393-
This endpoint returns the cost on the transaction in **gas units**. The returned value can be used to fill in **gasLimit** field of the transaction.
424+
- Use the returned `txGasUnits` value as the `gasLimit` in your actual transaction.
425+
- Make sure to provide the correct `nonce` of the transaction
426+
:::
427+
428+
:::tip
429+
**Best practice:** when sending the transaction, add ~10% extra gas to the estimated value to avoid underestimation and failure due to insufficient gas.
394430
:::
395431

396432
Here's an example of a request:

0 commit comments

Comments
 (0)