---
title: "Simulate transaction"
method: POST
path: "/transactions/simulate"
tags: ["Transactions"]
---

# Simulate transaction

`POST /transactions/simulate`

The output of the transaction will have the exact transaction outputs and events that running
an actual signed transaction would have.  However, it will not have the associated state
hashes, as they are not updated in storage.  This can be used to estimate the maximum gas
units for a submitted transaction.

To use this, you must:
- Create a SignedTransaction with a zero-padded signature.
- Submit a SubmitTransactionRequest containing a UserTransactionRequest containing that signature.

To use this endpoint with BCS, you must submit a SignedTransaction
encoded as BCS. See SignedTransaction in types/src/transaction/mod.rs.

## Query parameters

- `estimate_max_gas_amount` boolean
- `estimate_gas_unit_price` boolean
- `estimate_prioritized_gas_unit_price` boolean

## Request body

- SubmitTransactionRequest — A request to submit a transaction This requires a transaction and a signature of it
  - `sender` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
  - `sequence_number` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
  - `max_gas_amount` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
  - `gas_unit_price` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
  - `expiration_timestamp_secs` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
  - `payload` union, required — An enum of the possible transaction payloads
    - object — Payload which runs a single entry function
      - `type` string, required
      - `function` string, required — Entry function id is string representation of a entry function defined on-chain. Format: `{address}::{module name}::{function name}` Both `module name` and `function name` are case-sensitive.
      - `type_arguments` MoveType[], required — Type arguments of the function
      - `arguments` unknown[], required — Arguments of the function
        - unknown
    - object — Payload which runs a script that can run multiple functions
      - `type` string, required
      - `code` MoveScriptBytecode, required — Move script bytecode
        - `bytecode` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `abi` MoveFunction — Move function
          - `name` string, required
          - `visibility` 'private' | 'public' | 'friend', required — Move function visibility
          - `is_entry` boolean, required — Whether the function can be called as an entry function directly in a transaction
          - `is_view` boolean, required — Whether the function is a view function or not
          - `generic_type_params` MoveFunctionGenericTypeParam[], required — Generic type params associated with the Move function
            - `constraints` MoveAbility[], required — Move abilities tied to the generic type param and associated with the function that uses it
          - `params` MoveType[], required — Parameters associated with the move function
          - `return` MoveType[], required — Return type of the function
      - `type_arguments` MoveType[], required — Type arguments of the function
      - `arguments` unknown[], required — Arguments of the function
        - unknown
    - object
      - `type` string, required
      - `modules` MoveModuleBytecode[], required
        - `bytecode` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `abi` MoveModule — A Move module
          - `address` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
          - `name` string, required
          - `friends` MoveModuleId[], required — Friends of the module
          - `exposed_functions` MoveFunction[], required — Public functions of the module
            - `name` string, required
            - `visibility` 'private' | 'public' | 'friend', required — Move function visibility
            - `is_entry` boolean, required — Whether the function can be called as an entry function directly in a transaction
            - `is_view` boolean, required — Whether the function is a view function or not
            - `generic_type_params` MoveFunctionGenericTypeParam[], required — Generic type params associated with the Move function
              - …
            - `params` MoveType[], required — Parameters associated with the move function
            - `return` MoveType[], required — Return type of the function
          - `structs` MoveStruct[], required — Structs of the module
            - `name` string, required
            - `is_native` boolean, required — Whether the struct is a native struct of Move
            - `abilities` MoveAbility[], required — Abilities associated with the struct
            - `generic_type_params` MoveStructGenericTypeParam[], required — Generic types associated with the struct
              - …
            - `fields` MoveStructField[], required — Fields associated with the struct
              - …
    - object — A multisig transaction that allows an owner of a multisig account to execute a pre-approved transaction as the multisig account.
      - `type` string, required
      - `multisig_address` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
      - `transaction_payload` MultisigTransactionPayload — Payload which runs a single entry function
        - `function` string, required — Entry function id is string representation of a entry function defined on-chain. Format: `{address}::{module name}::{function name}` Both `module name` and `function name` are case-sensitive.
        - `type_arguments` MoveType[], required — Type arguments of the function
        - `arguments` unknown[], required — Arguments of the function
          - unknown
  - `signature` TransactionSignature, required — unresolved $ref

## Response `200`

- UserTransaction[]
  - `version` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
  - `hash` string, required
  - `state_change_hash` string, required
  - `event_root_hash` string, required
  - `state_checkpoint_hash` string
  - `gas_used` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
  - `success` boolean, required — Whether the transaction was successful
  - `vm_status` string, required — The VM status of the transaction, can tell useful information in a failure
  - `accumulator_root_hash` string, required
  - `changes` WriteSetChange[], required — Final state of resources changed by the transaction
    - union — A final state change of a transaction on a resource or module
      - object — Delete a module
        - `type` string, required
        - `address` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
        - `state_key_hash` string, required — State key hash
        - `module` string, required — Move module id is a string representation of Move module. Format: `{address}::{module name}` `address` should be hex-encoded 32 byte account address that is prefixed with `0x`. Module name is case-sensitive.
      - object — Delete a resource
        - `type` string, required
        - `address` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
        - `state_key_hash` string, required — State key hash
        - `resource` string, required — String representation of a MoveStructTag (on-chain Move struct type). This exists so you can specify MoveStructTags as path / query parameters, e.g. for get_events_by_event_handle. It is a combination of: 1. `move_module_address`, `module_name` and `struct_name`, all joined by `::` 2. `struct generic type parameters` joined by `, ` Examples: * `0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>` * `0x1::account::Account` Note: 1. Empty chars should be ignored when comparing 2 struct tag ids. 2. When used in an URL path, should be encoded by url-encoding (AKA percent-encoding). See [doc](https://aptos.dev/concepts/accounts) for more details.
      - object — Delete a table item
        - `type` string, required
        - `state_key_hash` string, required
        - `handle` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `key` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `data` DeletedTableData — Deleted table data
          - `key` unknown, required
          - `key_type` string, required — Deleted key type
      - object — Write a new module or update an existing one
        - `type` string, required
        - `address` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
        - `state_key_hash` string, required — State key hash
        - `data` MoveModuleBytecode, required — Move module bytecode along with it's ABI
          - `bytecode` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
          - `abi` MoveModule — A Move module
            - `address` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
            - `name` string, required
            - `friends` MoveModuleId[], required — Friends of the module
            - `exposed_functions` MoveFunction[], required — Public functions of the module
              - …
            - `structs` MoveStruct[], required — Structs of the module
              - …
      - object — Write a resource or update an existing one
        - `type` string, required
        - `address` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
        - `state_key_hash` string, required — State key hash
        - `data` MoveResource, required — A parsed Move resource
          - `type` string, required — String representation of a MoveStructTag (on-chain Move struct type). This exists so you can specify MoveStructTags as path / query parameters, e.g. for get_events_by_event_handle. It is a combination of: 1. `move_module_address`, `module_name` and `struct_name`, all joined by `::` 2. `struct generic type parameters` joined by `, ` Examples: * `0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>` * `0x1::account::Account` Note: 1. Empty chars should be ignored when comparing 2 struct tag ids. 2. When used in an URL path, should be encoded by url-encoding (AKA percent-encoding). See [doc](https://aptos.dev/concepts/accounts) for more details.
          - `data` MoveStructValue, required — This is a JSON representation of some data within an account resource. More specifically, it is a map of strings to arbitrary JSON values / objects, where the keys are top level fields within the given resource. To clarify, you might query for 0x1::account::Account and see the example data. Move `bool` type value is serialized into `boolean`. Move `u8`, `u16` and `u32` type value is serialized into `integer`. Move `u64`, `u128` and `u256` type value is serialized into `string`. Move `address` type value (32 byte Aptos account address) is serialized into a HexEncodedBytes string. For example: - `0x1` - `0x1668f6be25668c1a17cd8caf6b8d2f25` Move `vector` type value is serialized into `array`, except `vector<u8>` which is serialized into a HexEncodedBytes string with `0x` prefix. For example: - `vector<u64>{255, 255}` => `["255", "255"]` - `vector<u8>{255, 255}` => `0xffff` Move `struct` type value is serialized into `object` that looks like this (except some Move stdlib types, see the following section): ```json { field1_name: field1_value, field2_name: field2_value, ...... } ``` For example: `{ "created": "0xa550c18", "role_id": "0" }` **Special serialization for Move stdlib types**: - [0x1::string::String](https://github.com/aptos-labs/aptos-core/blob/main/language/move-stdlib/docs/ascii.md) is serialized into `string`. For example, struct value `0x1::string::String{bytes: b"Hello World!"}` is serialized as `"Hello World!"` in JSON.
      - object — Change set to write a table item
        - `type` string, required
        - `state_key_hash` string, required
        - `handle` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `key` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `value` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `data` DecodedTableData — Decoded table data
          - `key` unknown, required
          - `key_type` string, required — Type of key
          - `value` unknown, required
          - `value_type` string, required — Type of value
  - `sender` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
  - `sequence_number` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
  - `max_gas_amount` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
  - `gas_unit_price` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
  - `expiration_timestamp_secs` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
  - `payload` union, required — An enum of the possible transaction payloads
    - object — Payload which runs a single entry function
      - `type` string, required
      - `function` string, required — Entry function id is string representation of a entry function defined on-chain. Format: `{address}::{module name}::{function name}` Both `module name` and `function name` are case-sensitive.
      - `type_arguments` MoveType[], required — Type arguments of the function
      - `arguments` unknown[], required — Arguments of the function
        - unknown
    - object — Payload which runs a script that can run multiple functions
      - `type` string, required
      - `code` MoveScriptBytecode, required — Move script bytecode
        - `bytecode` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `abi` MoveFunction — Move function
          - `name` string, required
          - `visibility` 'private' | 'public' | 'friend', required — Move function visibility
          - `is_entry` boolean, required — Whether the function can be called as an entry function directly in a transaction
          - `is_view` boolean, required — Whether the function is a view function or not
          - `generic_type_params` MoveFunctionGenericTypeParam[], required — Generic type params associated with the Move function
            - `constraints` MoveAbility[], required — Move abilities tied to the generic type param and associated with the function that uses it
          - `params` MoveType[], required — Parameters associated with the move function
          - `return` MoveType[], required — Return type of the function
      - `type_arguments` MoveType[], required — Type arguments of the function
      - `arguments` unknown[], required — Arguments of the function
        - unknown
    - object
      - `type` string, required
      - `modules` MoveModuleBytecode[], required
        - `bytecode` string, hex, required — All bytes (Vec<u8>) data is represented as hex-encoded string prefixed with `0x` and fulfilled with two hex digits per byte. Unlike the `Address` type, HexEncodedBytes will not trim any zeros.
        - `abi` MoveModule — A Move module
          - `address` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
          - `name` string, required
          - `friends` MoveModuleId[], required — Friends of the module
          - `exposed_functions` MoveFunction[], required — Public functions of the module
            - `name` string, required
            - `visibility` 'private' | 'public' | 'friend', required — Move function visibility
            - `is_entry` boolean, required — Whether the function can be called as an entry function directly in a transaction
            - `is_view` boolean, required — Whether the function is a view function or not
            - `generic_type_params` MoveFunctionGenericTypeParam[], required — Generic type params associated with the Move function
              - …
            - `params` MoveType[], required — Parameters associated with the move function
            - `return` MoveType[], required — Return type of the function
          - `structs` MoveStruct[], required — Structs of the module
            - `name` string, required
            - `is_native` boolean, required — Whether the struct is a native struct of Move
            - `abilities` MoveAbility[], required — Abilities associated with the struct
            - `generic_type_params` MoveStructGenericTypeParam[], required — Generic types associated with the struct
              - …
            - `fields` MoveStructField[], required — Fields associated with the struct
              - …
    - object — A multisig transaction that allows an owner of a multisig account to execute a pre-approved transaction as the multisig account.
      - `type` string, required
      - `multisig_address` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
      - `transaction_payload` MultisigTransactionPayload — Payload which runs a single entry function
        - `function` string, required — Entry function id is string representation of a entry function defined on-chain. Format: `{address}::{module name}::{function name}` Both `module name` and `function name` are case-sensitive.
        - `type_arguments` MoveType[], required — Type arguments of the function
        - `arguments` unknown[], required — Arguments of the function
          - unknown
  - `signature` TransactionSignature — unresolved $ref
  - `events` Event[], required — Events generated by the transaction
    - `guid` EventGuid, required
      - `creation_number` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
      - `account_address` string, hex, required — A hex encoded 32 byte Aptos account address. This is represented in a string as a 64 character hex string, sometimes shortened by stripping leading 0s, and adding a 0x. For example, address 0x0000000000000000000000000000000000000000000000000000000000000001 is represented as 0x1.
    - `sequence_number` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.
    - `type` string, required — String representation of an on-chain Move type tag that is exposed in transaction payload. Values: - bool - u8 - u16 - u32 - u64 - u128 - u256 - address - signer - vector: `vector<{non-reference MoveTypeId}>` - struct: `{address}::{module_name}::{struct_name}::<{generic types}>` Vector type value examples: - `vector<u8>` - `vector<vector<u64>>` - `vector<0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>>` Struct type value examples: - `0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin> - `0x1::account::Account` Note: 1. Empty chars should be ignored when comparing 2 struct tag ids. 2. When used in an URL path, should be encoded by url-encoding (AKA percent-encoding).
    - `data` unknown, required
  - `timestamp` string, uint64, required — A string containing a 64-bit unsigned integer. We represent u64 values as a string to ensure compatibility with languages such as JavaScript that do not parse u64s in JSON natively.

## Other responses

- `400`
- `403`
- `404`
- `413`
- `500`
- `503`
- `507`

## Changes

- **2023-11-09** `e31d48fc6df2` — 24 breaking, 72 info
  - added `#/components/schemas/PublicKey_string(HexEncodedBytes)` to the `items/signature/oneOf[#/components/schemas/TransactionSignature_AccountSignature]/allOf[#/components/schemas/AccountSignature]/oneOf[#/components/schemas/AccountSignature_MultiKeySignature]/allOf[#/components/schemas/MultiKeySignature]/public_keys/items/` response property `oneOf` list for the response status `200`
  - added `#/components/schemas/PublicKey_string(HexEncodedBytes)` to the `items/signature/oneOf[#/components/schemas/TransactionSignature_AccountSignature]/allOf[#/components/schemas/AccountSignature]/oneOf[#/components/schemas/AccountSignature_SingleKeySignature]/allOf[#/components/schemas/SingleKeySignature]/public_key` response property `oneOf` list for the response status `200`
  - added `#/components/schemas/PublicKey_string(HexEncodedBytes)` to the `items/signature/oneOf[#/components/schemas/TransactionSignature_FeePayerSignature]/allOf[#/components/schemas/FeePayerSignature]/fee_payer_signer/allOf[#/components/schemas/AccountSignature]/oneOf[#/components/schemas/AccountSignature_MultiKeySignature]/allOf[#/components/schemas/MultiKeySignature]/public_keys/items/` response property `oneOf` list for the response status `200`
  - added `#/components/schemas/PublicKey_string(HexEncodedBytes)` to the `items/signature/oneOf[#/components/schemas/TransactionSignature_FeePayerSignature]/allOf[#/components/schemas/FeePayerSignature]/fee_payer_signer/allOf[#/components/schemas/AccountSignature]/oneOf[#/components/schemas/AccountSignature_SingleKeySignature]/allOf[#/components/schemas/SingleKeySignature]/public_key` response property `oneOf` list for the response status `200`
  - …92 more
- …earlier changes not shown

[Full history](https://skmtc.dev/pontem-network/apis/lumio-node-api/changes/transactions/simulate/post.md)

---

[API](https://skmtc.dev/pontem-network/apis/lumio-node-api.md) · [All operations](https://skmtc.dev/pontem-network/apis/lumio-node-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/pontem-network/lumio-node-api/revisions/8693bec3be11/schema)
