Get desktop application:
View/edit binary Protocol Buffers messages
* The Address Book service provides the ability for Hedera network node administrators to add, update, and remove consensus nodes. This addition, update, or removal of a consensus node requires governing council approval, but each node operator may update their own operational attributes without additional approval, reducing overhead for routine operations. Most operations are `privileged operations` and require governing council approval. ### For a node creation transaction. - The node operator SHALL create a `createNode` transaction. - The node operator MUST sign this transaction with the `Key` set as the `admin_key` for the new `Node`. - The node operator SHALL deliver the signed transaction to the Hedera council representative. - The Hedera council representative SHALL arrange for council members to review and sign the transaction. - Once sufficient council members have signed the transaction, the Hedera council representative SHALL submit the transaction to the network. - Upon receipt of a valid and signed node creation transaction the network software SHALL - Validate the threshold signature for the Hedera governing council - Validate the signature of the `Key` provided as the new `admin_key` for the `Node`. - Create the new node in state, this new node SHALL NOT be active in the network at this time. - When executing the next `freeze` transaction with `freeze_type` set to `PREPARE_UPGRADE`, update network configuration and bring the new node to an active status within the network. The node to be added SHALL be active in the network following this upgrade. ### For a node deletion transaction. - The node operator or Hedera council representative SHALL create a `deleteNode` transaction. - If the node operator creates the transaction - The node operator MUST sign this transaction with the `Key` set as the `admin_key` for the existing `Node`. - The node operator SHALL deliver the signed transaction to the Hedera council representative. - The Hedera council representative SHALL arrange for council members to review and sign the transaction. - Once sufficient council members have signed the transaction, the Hedera council representative SHALL submit the transaction to the network. - Upon receipt of a valid and signed node deletion transaction the network software SHALL - Validate the signature for the Hedera governing council - Remove the existing node from network state. The node SHALL still be active in the network at this time. - When executing the next `freeze` transaction with `freeze_type` set to `PREPARE_UPGRADE`, update network configuration and remove the node to be deleted from the network. The node to be deleted SHALL NOT be active in the network following this upgrade. ### For a node update transaction. - The node operator SHALL create an `updateNode` transaction. - The node operator MUST sign this transaction with the active `key` assigned as the `admin_key`. - The node operator SHALL submit the transaction to the network. Hedera council approval SHALL NOT be sought for this transaction - Upon receipt of a valid and signed node update transaction the network software SHALL - If the transaction modifies the value of the "node account", - Validate the signature of the active `key` for the account assigned as the _current_ "node account". - Validate the signature of the active `key` for the account to be assigned as the _new_ "node account". - Modify the node information held in network state with the changes requested in the update transaction. The node changes SHALL NOT be applied to network configuration, and SHALL NOT affect network operation at this time. - When executing the next `freeze` transaction with `freeze_type` set to `PREPARE_UPGRADE`, update network configuration according to the modified information in network state. The requested changes SHALL affect network operation following this upgrade.
* A transaction to create a new consensus node in the network address book. <p> This transaction, once complete, SHALL add a new consensus node to the network state.<br/> The new consensus node SHALL remain in state, but SHALL NOT participate in network consensus until the network updates the network configuration. <p> Hedera governing council authorization is REQUIRED for this transaction.
* A transaction to remove a consensus node from the network address book. <p> This transaction, once complete, SHALL remove the identified consensus node from the network state. <p> Hedera governing council authorization is REQUIRED for this transaction.
* A transaction to update an existing consensus node from the network address book. <p> This transaction, once complete, SHALL modify the identified consensus node state as requested. <p> This transaction is authorized by the node operator
* The Hedera Consensus Service (HCS) provides the ability for a Hashgraph to provide aBFT consensus as to the order and validity of messages submitted to a *topic*, as well as a *consensus timestamp* for those messages.
* Create an HCS topic. <p> On success, the resulting TransactionReceipt SHALL contain the newly created TopicId.<br/> If the `adminKey` is set on the topic, this transaction MUST be signed by that key.<br/> If the `adminKey` is _not_ set on the topic, this transaction MUST NOT set an `autoRenewAccount`. The new topic will be immutable and must be renewed manually.<br/> If the `autoRenewAccount` is set on the topic, this transaction MUST be signed by that account.<br/> <p> The request body MUST be a [ConsensusCreateTopicTransactionBody](#proto.ConsensusCreateTopicTransactionBody)
* Update an HCS topic. <p> If the `adminKey` is not set on the topic, this transaction MUST extend the `expirationTime` and MUST NOT modify any other field.<br/> If the `adminKey` is set on the topic, this transaction MUST be signed by that key.<br/> If this transaction sets a new `adminKey`, this transaction MUST be signed by <strong>_both_</strong> keys, the pre-update `adminKey` and the post-update `adminKey`.<br/> If this transaction sets a new, non-null, `autoRenewAccount`, the newly set account MUST sign this transaction.<br/> <p> The request body MUST be a [ConsensusUpdateTopicTransactionBody](#proto.ConsensusUpdateTopicTransactionBody)
* Delete an HCS topic. <p> If this transaction succeeds, all subsequent transactions referencing the deleted topic SHALL fail.<br/> The `adminKey` MUST be set on the topic and this transaction MUST be signed by that key.<br/> If the `adminKey` is not set on the topic, this transaction SHALL fail with a response code of `UNAUTHORIZED`. A topic without an `adminKey` cannot be deleted, but MAY expire.<br/> <p> The request body MUST be a [ConsensusDeleteTopicTransactionBody](#proto.ConsensusDeleteTopicTransactionBody)
* Submit a message to an HCS topic. <p> Valid and authorized messages on valid topics will be ordered by the consensus service, published in the block stream, and available to all subscribers on this topic via the mirror nodes.<br/> If this transaction succeeds the resulting TransactionReceipt SHALL contain the latest topicSequenceNumber and topicRunningHash for the topic.<br/> If the topic has a `submitKey` then that key MUST sign this transaction.<br/> <p> The request body MUST be a [ConsensusSubmitMessageTransactionBody](#proto.ConsensusSubmitMessageTransactionBody)
* Retrieve the latest state of a topic. This method is unrestricted and allowed on any topic by any payer account. <p> The request body MUST be a [ConsensusGetTopicInfoQuery](#proto.ConsensusGetTopicInfoQuery)<br/> The response body SHALL be a [ConsensusGetTopicInfoResponse](#proto.ConsensusGetTopicInfoResponse)
* Transactions and queries for the Hedera Crypto Service.
The following queries are permanently removed. getStakersByAccountID, getFastTransactionRecord
* Create a new account by submitting the transaction
* Update an account by submitting the transaction
* Initiate a transfer by submitting the transaction
* Delete an account by submitting the transaction
* Add one or more approved allowances for spenders to transfer the paying account's hbar or tokens.
* Delete one or more of the specific approved NFT serial numbers on an owner account.
* Add a livehash <blockquote>Important<blockquote> This transaction is obsolete, not supported, and SHALL fail with a pre-check result of `NOT_SUPPORTED`.</blockquote></blockquote>
* Delete a livehash <blockquote>Important<blockquote> This transaction is obsolete, not supported, and SHALL fail with a pre-check result of `NOT_SUPPORTED`.</blockquote></blockquote>
* Retrieve a livehash for an account <blockquote>Important<blockquote> This query is obsolete, not supported, and SHALL fail with a pre-check result of `NOT_SUPPORTED`.</blockquote></blockquote>
* Return all transactions in the last 180s of consensus time for which the given account was the effective payer **and** network property `ledger.keepRecordsInState` was `true`.
* Retrieve the balance of an account
* Retrieve the metadata of an account
* Retrieve the latest receipt for a transaction that is either awaiting consensus, or reached consensus in the last 180 seconds
* Retrieve the record of a transaction that is either awaiting consensus, or reached consensus in the last 180 seconds
* Service gRPC definitions for the Hedera File Service (HFS). #### Signature Requirements The HFS manages file authorization differently, depending on type of file transaction, and this can be surprising.<br/> The core element of file authorization is the `keys` field, which is a `KeyList`; a list of individual `Key` messages, each of which may represent a simple or complex key.<br/> The file service transactions treat this list differently.<br/> A `fileCreate`, `fileAppend`, or `fileUpdate` MUST have a valid signature from _each_ key in the list.<br/> A `fileDelete` MUST have a valid signature from _at least one_ key in the list. This is different, and allows a file "owned" by many entities to be deleted by any one of those entities. A deleted file cannot be restored, so it is important to consider this when assigning keys for a file.<br/> If any of the keys in a `KeyList` are complex, the full requirements of each complex key must be met to count as a "valid signature" for that key. A complex key structure (i.e. a `ThresholdKey`, or `KeyList`, possibly including additional `ThresholdKey` or `KeyList` descendants) may be assigned as the sole entry in a file `keys` field to ensure all transactions have the same signature requirements.
* Create a file in HFS.
* Update a file in HFS.
* Delete a file in HFS.<br/> The content of a file deleted in this manner is completely removed from network state, but the file metadata remains.
* Append content to a file in HFS.
* Retrieve the content of a file in HFS.<br/> Note that this query retrieves _only_ the file content, not any of the metadata for the file.
* Retrieve the metadata for a file in HFS.<br/> Note that this query does not retrieve the file _content_.
* Delete a "regular" file without "owner" authorization.<br/> This transaction _does not_ require signatures for the keys in the file `keys` list, but must be signed by a "privileged" account. <p> This transaction SHALL NOT accept a file identifier for a "system" file.<br/> This transaction SHALL NOT remove the _content_ of the file from state. This permits use of the `systemUndelete` to reverse this action if performed in error. <p> This is a privileged transaction, and only accounts 2-59 are permitted to call this function, by default. The actual restriction is in the `api-permission.properties` file in the consensus node configuration.
* Undelete a "regular" file. This transaction must be signed by a "privileged" account.<br/> <p> This transaction SHALL NOT accept a file identifier for a "system" file.<br/> The file identified SHOULD have been previously deleted.<br/> This transaction SHALL NOT recover the _content_ of a file unless that file was deleted with a `systemDelete` transaction. The _content_ of a file deleted with a `fileDelete` transaction is not retained in state. <p> This is a privileged transaction, and only accounts 2-60 are permitted to call this function, by default. The actual restriction is in the `api-permission.properties` file in the consensus node configuration.
* A service to manage network "freeze" events. This service provides a facility to prepare for network upgrades, halt network processing, perform network software upgrades, and automatically restart the network following an upgrade.
* Freeze, cancel, or prepare a freeze. This single transaction performs all of the functions supported by the network freeze service. These functions include actions to prepare an upgrade, prepare a telemetry upgrade, freeze the network, freeze the network for upgrade, or abort a scheduled freeze. <p> The actual freeze action SHALL be determined by the `freeze_type` field of the `FreezeTransactionBody`.<br/> The transaction body MUST be a `FreezeTransactionBody`.
* Basic "network information" queries. This service supports queries for the active services and API versions, and a query for account details.
* Retrieve the active versions of Hedera Services and API messages.
* Request detail information about an account. <p> The returned information SHALL include balance and allowances.<br/> The returned information SHALL NOT include a list of account records.
* Retrieve the time, in nanoseconds, spent in direct processing for one or more recent transactions. <p> For each transaction identifier provided, if that transaction is sufficiently recent (that is, it is within the range of the configuration value `stats.executionTimesToTrack`), the node SHALL return the time, in nanoseconds, spent to directly process that transaction (that is, excluding time to reach consensus).<br/> Note that because each node processes every transaction for the Hedera network, this query MAY be sent to any node. <p> <blockquote>Important<blockquote> This query is obsolete, not supported, and SHALL fail with a pre-check result of `NOT_SUPPORTED`.</blockquote></blockquote>
* Submit a transaction that wraps another transaction which will skip most validation. <p> <blockquote>Important<blockquote> This query is obsolete, not supported, and SHALL fail with a pre-check result of `NOT_SUPPORTED`. </blockquote></blockquote>
* Transactions and queries for the Schedule Service.<br/> The Schedule Service enables transactions to be submitted without all required signatures and offers a `scheduleSign` transaction to provide additional signatures independently after the schedule is created. The scheduled transaction may be executed immediately when all required signatures are present, or at expiration if "long term" schedules are enabled in network configuration. ### Execution Scheduled transactions SHALL be executed under the following conditions. 1. If "long term" schedules are enabled and `wait_for_expiry` is set for that schedule then the transaction SHALL NOT be executed before the network consensus time matches or exceeds the `expiration_time` field for that schedule. 1. If "long term" schedules are enabled and `wait_for_expiry` is _not_ set for that schedule, then the transaction SHALL be executed when all signatures required by the scheduled transaction are active for that schedule. This MAY be immediately after the `scheduleCreate` or a subsequent `scheduleSign` transaction, or MAY be at expiration if the signature requirements are met at that time. 1. If "long term" schedules are _disabled_, then the scheduled transaction SHALL be executed immediately after all signature requirements for the scheduled transaction are met during the `scheduleCreate` or a subsequent `scheduleSign` transaction. The scheduled transaction SHALL NOT be on expiration when "long term" schedules are disabled. A schedule SHALL remain in state and MAY be queried with a `getScheduleInfo` transaction after execution, until the schedule expires.<br/> When network consensus time matches or exceeds the `expiration_time` for a schedule, that schedule SHALL be removed from state, whether it has executed or not.<br/> If "long term" schedules are _disabled_, the maximum expiration time SHALL be the consensus time of the `scheduleCreate` transaction extended by the network configuration value `ledger.scheduleTxExpiryTimeSecs`. ### Block Stream Effects When a scheduled transaction is executed, the timestamp in the transaction identifier for that transaction SHALL be 1 nanosecond after the consensus timestamp for the transaction that resulted in its execution. If execution occurred at expiration, that transaction may be almost any transaction, including another scheduled transaction that executed at expiration.<br/> The transaction identifier for a scheduled transaction that is executed SHALL have the `scheduled` flag set and SHALL inherit the `accountID` and `transactionValidStart` values from the `scheduleCreate` that created the schedule.<br/> The `scheduleRef` property of the record for a scheduled transaction SHALL be populated with the schedule identifier of the schedule that executed.
* Create a new Schedule. <p> If all signature requirements are met with this transaction, the scheduled transaction MAY execute immediately.
* Add signatures to an existing schedule. <p> Signatures on this transaction SHALL be added to the set of active signatures on the schedule, and MAY result in execution of the scheduled transaction if all signature requirements are met.
* Mark an existing schedule deleted. <p> Once deleted a schedule SHALL NOT be executed and any subsequent `scheduleSign` transaction SHALL fail.
* Retrieve the metadata for a schedule.
* The Hedera Smart Contract Service (HSCS) provides an interface to an EVM compatible environment to create, store, manage, and execute smart contract calls. Smart Contracts implement useful and often highly complex interactions between individuals, systems, and the distributed ledger.
* Create a new smart contract. <p> If this transaction succeeds, the `ContractID` for the new smart contract SHALL be set in the transaction receipt.<br/> The contract is defined by the initial bytecode (or `initcode`). The `initcode` SHALL be provided either in a previously created file, or in the transaction body itself for very small contracts.<br/> As part of contract creation, the constructor defined for the new smart contract SHALL run with the parameters provided in the `constructorParameters` field.<br/> The gas to "power" that constructor MUST be provided via the `gas` field, and SHALL be charged to the payer for this transaction.<br/> If the contract _constructor_ stores information, it is charged gas for that storage. There is a separate fee in HBAR to maintain that storage until the expiration, and that fee SHALL be added to this transaction as part of the _transaction fee_, rather than gas.
* Modify a smart contract.<br/> Any change other than updating the expiration time requires that the contract be modifiable (has a valid `adminKey`) and that the transaction be signed by the `adminKey` <p> Fields _not set_ on the request SHALL NOT be modified.
* Call a function of a given smart contract, providing function parameter inputs as needed. <p> Resource ("gas") charges SHALL include all relevant fees incurred by the contract execution, including any storage required.<br/> The total transaction fee SHALL incorporate all of the "gas" actually consumed as well as the standard fees for transaction handling, data transfers, signature verification, etc...
* Call a query function of a given smart contract, providing function parameter inputs as needed.<br/> This is performed locally on the particular node that the client is communicating with. Executing the call locally is faster and less costly, but imposes certain restrictions. <p> The call MUST NOT change the state of the contract instance. This also precludes any expenditure or transfer of HBAR or other tokens.<br/> The call SHALL NOT have a separate consensus timestamp.<br/> The call SHALL NOT generate a record nor a receipt.<br/> The response SHALL contain the output returned by the function call.<br/> <p> This is generally useful for calling accessor functions which read (query) state without changes or side effects. Any contract call that would use the `STATICCALL` opcode MAY be called via contract call local with performance and cost benefits. <p> Unlike a ContractCall transaction, the node SHALL always consume the _entire_ amount of offered "gas" in determining the fee for this query, so accurate gas estimation is important.
* A standard query to obtain detailed information for a smart contract.
* A standard query to read the current bytecode for a smart contract.
* A standard query to obtain account and contract identifiers for a smart contract, given the Solidity identifier for that contract.
* <blockquote>This query is no longer supported.</blockquote> This query always returned an empty record list.
* Delete a smart contract, and transfer any remaining HBAR balance to a designated account. <p> If this call succeeds then all subsequent calls to that smart contract SHALL fail.<br/>
* Delete a smart contract, as a system-initiated deletion, this SHALL NOT transfer balances. <blockquote> This call is an administrative function of the Hedera network, and SHALL require network administration authorization.<br/> This transaction MUST be signed by one of the network administration accounts (typically `0.0.2` through `0.0.59`, as defined in the `api-permission.properties` file). </blockquote> If this call succeeds then all subsequent calls to that smart contract SHALL fail.<br/>
* Un-Delete a smart contract, returning it (mostly) to its state prior to deletion. <p> The contract to be restored MUST have been deleted via `systemDelete`. If the contract was deleted via `deleteContract`, it SHALL NOT be recoverable. <blockquote> This call is an administrative function of the Hedera network, and SHALL require network administration authorization.<br/> This transaction MUST be signed by one of the network administration accounts (typically `0.0.2` through `0.0.59`, as defined in the `api-permission.properties` file). </blockquote> If this call succeeds then subsequent calls to that smart contract MAY succeed.<br/>
* Make an Ethereum transaction "call" with all data in Ethereum formats, including the contract alias. <p> Call data MAY be in the transaction, or stored within a "File".<br/> The caller MAY offer additional gas above what is offered in the call data, but MAY be charged up to 80% of that value if the amount required is less than this "floor" amount.
* Transactions and queries for the Token Service
The following queries are permanently removed getAccountNftInfos, getTokenNftInfos
* Create a new token.
* Update a token.
* Mint one or more tokens to the treasury account. <p> This MAY specify a quantity of fungible/common tokens or a list of specific non-fungible/unique tokes, but MUST NOT specify both.
* Burn one or more tokens from the treasury account. <p> This MAY specify a quantity of fungible/common tokens or a list of specific non-fungible/unique tokes, but MUST NOT specify both.
* Delete a token.
* Wipe one or more tokens from an identified Account. <p> This MAY specify a quantity of fungible/common tokens or a list of specific non-fungible/unique tokes, but MUST NOT specify both.
* Freeze the transfer of tokens to or from an identified Account.
* Unfreeze the transfer of tokens to or from an identified Account.
* Assert that KYC requirements are met for a specific account with respect to a specific token.
* Assert that KYC requirements are _not_ met for a specific account with respect to a specific token.
* Associate one or more tokens to an account.
* Dissociate one or more tokens from an account.
* Update the custom fee schedule for a token.
* Retrieve the detail characteristics for a token. <p> This query SHALL return information for the token type as a whole.<br/> This query SHALL NOT return information for individual tokens.
* Retrieve the metadata for a specific non-fungible/unique token.<br/> The NFT to query is identified by token identifier and serial number. <p> This query SHALL return token metadata and, if an allowance is defined, the designated "spender" account for the queried NFT.
* Pause a token.
* Unpause (resume) a token.
* Update multiple non-fungible/unique tokens (NFTs) in a collection.<br/> The NFTs are identified by token identifier and one or more serial numbers. <p> This transaction SHALL update NFT metadata only.<br/> This transaction MUST be signed by the token `metadata_key`.
* Reject one or more tokens. <p> This transaction SHALL transfer the full balance of one or more tokens from the requesting account to the treasury for each token.<br/> This transfer SHALL NOT charge any custom fee or royalty defined for the token(s) to be rejected.<br/> ### Effects on success <ul> <li>If the rejected token is fungible/common, the requesting account SHALL have a balance of 0 for the rejected token.<br/> The treasury balance SHALL increase by the amount that the requesting account decreased.</li> <li>If the rejected token is non-fungible/unique the requesting account SHALL NOT hold the specific serialized token that is rejected.<br/> The treasury account SHALL hold each specific serialized token that was rejected.</li> </li>
* Airdrop one or more tokens to one or more accounts. <p> This transaction SHALL distribute tokens from the balance of one or more sending account(s) to the balance of one or more recipient accounts.<br/> Accounts SHALL receive the tokens in one of four ways. <ul> <li>An account already associated to the token to be distributed SHALL receive the airdropped tokens immediately to the recipient account balance.</li> <li>An account with available automatic association slots SHALL be automatically associated to the token, and SHALL immediately receive the airdropped tokens to the recipient account balance.</li> <li>An account with "receiver signature required" set SHALL have a "Pending Airdrop" created and MUST claim that airdrop with a `claimAirdrop` transaction.</li> <li>An account with no available automatic association slots SHALL have a "Pending Airdrop" created and MUST claim that airdrop with a `claimAirdrop` transaction. </li> </ul> Any airdrop that completes immediately SHALL be irreversible.<br/> Any airdrop that results in a "Pending Airdrop" MAY be canceled via a `cancelAirdrop` transaction.<br/> All transfer fees (including custom fees and royalties), as well as the rent cost for the first auto-renewal period for any automatic-association slot occupied by the airdropped tokens, SHALL be charged to the account submitting this transaction.
* Cancel one or more pending airdrops. <p> This transaction MUST be signed by _each_ account *sending* an airdrop to be canceled.
* Claim one or more pending airdrops. <p> This transaction MUST be signed by _each_ account **receiving** an airdrop to be claimed.<br> If a "Sender" lacks sufficient balance to fulfill the airdrop at the time the claim is made, that claim SHALL fail.
* The Utility Service provides a pseudo-random number generator. The single gRPC call defined for this service simply reports a single pseudo-random number in the transaction record. That value may either be a 32-bit integer within a requested range, or a 384-bit byte array. ### Block Stream Effects The requested value is reported exclusively in a `UtilPrngOutput` message.
* Generate a pseudo-random value. <p> The request body MUST be a [UtilPrngTransactionBody](#proto.UtilPrngTransactionBody)
* Execute a batch of transactions atomically. <p> All transactions in the batch will be executed in order, and if any transaction fails, the entire batch will fail. // TODO: Add more details about the batch transaction
* A single Account in the Hedera distributed ledger. Each Account SHALL have a unique three-part identifier, a Key, and one or more token balances.<br/> Each Account SHALL have an alias, which has multiple forms, and MAY be set automatically.<br/> Several additional items SHALL be associated with the Account to enable full functionality.<br/> Assets SHALL be represented as linked-lists with only the "head" item referenced directly in the Account, and the remaining items SHALL be accessible via the token relation or unique tokens maps.<br/> Accounts, as most items in the network, SHALL have an expiration time, recorded as seconds since the epoch, and MUST be "renewed" for a small fee at expiration. This helps to reduce the amount of inactive accounts retained in state.<br/> Another account MAY be designated to pay any renewal fees and automatically renew an account for (by default) 30-90 days at a time as a means to optionally ensure important accounts remain active.<br/> Accounts MAY participate in securing the network by "staking" the account balances to a particular network node, and receive a portion of network fees as a reward. An account MAY optionally decline these rewards but still stake its balances.<br/> An account MAY optionally require that inbound transfer transactions be signed by that account as receiver (in addition to the sender's signature).<br/> As with all network entities, Account ID SHALL be represented as shard.realm.X.<br/> Alias and contractId SHALL be additional identifiers used to connect accounts to transactions before the account is fully enabled, or in EVM contracts.<br/> --- #### Alias There is considerable complexity with `alias` (aka `evm_address`) for Accounts. Much of this comes from the existence of a "hidden" alias for almost all accounts, and the reuse of the alias field for both EVM reference and "automatic" account creation. For the purposes of this specification, we will use the following terms for clarity. - `key_alias` is the account public key as a protobuf serialized message and used for auto-creation and subsequent lookup. This is only valid if the account key is a single `primitive` key, either ED25519 or ECDSA_SECP256K1. - `evm_address` exists for every account and is one of - `contract_address`, which is the 20 byte EVM contract address per EIP-1014 - `evm_key_address`, which is the keccak-256 hash of a ECDSA_SECP256K1 `primitive` key. - This is for accounts lazy-created from EVM public keys, when the corresponding ECDSA_SECP256K1 public key is presented in a transaction signed by the private key for that public key, the account is created that key assigned, and the protobuf-serialized form is set as the account alias. - `long_zero`, is a synthetic 20 byte address inferred for "normally" created accounts. It is constructed from the "standard" AccountID as follows. - 4 byte big-endian shard number - 8 byte big-endian realm number - 8 byte big-endian entity number The `alias` field in the `Account` message SHALL contain one of four values for any given account. - The `key_alias`, if the account was created by transferring HBAR to the account referenced by `key_alias`. - The `evm_key_address` if the account was created from an EVM public key - The `contract_address` if the account belongs to an EVM contract - Not-Set/null/Bytes.EMPTY (collectively `null`) if the account was created normally If the `alias` field of an `Account` is any form of `null`, then the account MAY be referenced by `alias` in an `AccountID` by using the `long_zero` address for the account. This "hidden default" alias SHALL NOT be stored, but is synthesized by the node software as needed, and may be synthesized by an EVM contract or client software as well. An AccountID in a transaction MAY reference an `Account` with `shard`.`realm`.`alias`.<br/> If the account `alias` field is set for an Account, that value SHALL be the account alias.<br/> If the account `alias` field is not set for an Account, the `long_zero` alias SHALL be the account alias.
* The unique ID of this account. <p> An account ID, when assigned to this field, SHALL be of the form `shard.realm.number`.<br/> Transactions MAY reference the account by alias, but the account itself MUST always have a purely numeric identifier. This numeric ID is the value used to reference the account in query responses, transaction receipts, transaction records, and the block stream.
* An account EVM alias. <p> This is a value used in some contexts to reference an account when the numeric account identifier is not available.<br/> This field, when set to a non-default value, is immutable and SHALL NOT be changed.
* The key to be used to sign transactions from this account, if any. <p> This key SHALL NOT be set for hollow accounts until the account is finalized.<br/> This key SHALL be set on all other accounts, except for certain immutable accounts (0.0.800 and 0.0.801) necessary for network function and otherwise secured by the governing council.
* The current expiration time of this account, in seconds since the epoch. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.<br/> This account SHALL be due standard renewal fees when the network consensus time exceeds this time.<br/> If rent and expiration are enabled for the network, and automatic renewal is enabled for this account, renewal fees SHALL be charged after this time, and, if charged, the expiration time SHALL be extended for another renewal period.<br/> This account MAY be expired and removed from state at any point after this time if not renewed.<br/> An account holder MAY extend this time by submitting an account update transaction to modify expiration time, subject to the current maximum expiration time for the network.
* The HBAR balance of this account, in tinybar (10<sup>-8</sup> HBAR). <p> This value is a signed integer for efficiency, but MUST always be a whole number.
* A short description of this account. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* A boolean indicating that this account is deleted.
* The amount of HBAR staked to this account by others.
* If this account stakes to another account, this value SHALL be set to the time when the current period for staking and reward calculations began.
* ID of the account or node to which this account is staking, if any. <p> if not set this field MAY be interpreted as staked_account_id with value `0.0.0`.
* An identifier for the account to which this account is staking its balances as a proxy. <p> If this account is not currently staking its balances, then this field, if set, SHALL be the sentinel value of `0.0.0`.
* An identifier for the node this account is staked to. <p> If this account is not currently staking its balances, then this field, if set, SHALL be the sentinel value of `-1`. Wallet software SHOULD surface staking issues to users and provide a simple mechanism to update staking to a new node ID in the event the prior staked node ID ceases to be valid. <p> <blockquote>Note: node IDs do fluctuate as node operators change. The Account owner MUST submit a new transaction to change this value if the current node ID changes or ceases to operate as a node. An account with an invalid `staked_node_id` SHALL NOT participate in staking until the `staked_node_id` is updated to a valid node ID. </blockquote>
* A boolean indicating that this account has chosen to decline rewards for staking its balances. <p> This account MAY still stake its balances, but SHALL NOT receive reward payments for doing so.
* A boolean indicating that the account requires a receiver signature for inbound token transfer transactions. <p> If this value is `true` then a transaction to transfer tokens to this account SHALL NOT succeed unless this account has signed the transfer transaction.
* A token ID at the head of the linked list for this account from the token relations map.<br/> The token relations are connected by including the "next" and "previous" TokenID in each TokenRelation message. The "head" item in that list is found by looking up the TokenRelation with this Account's account_id and this head_token_id. Each subsequent item in the list is found via similar lookup with both an AccountID and a TokenID.
* A NftID at the head of the linked list for this account from the unique tokens map.<br/> The unique token relations are connected by including the "next" and "previous" NftID in each Nft message. The "head" item in that list is found by looking up the Nft with ID matching this head_nft_id. Each subsequent item in the list is found via similar lookup with the next or previous NftID.
* A serial number in the NftID at the head of the linked list for this account from unique tokens map. <p> This MUST match the `serial_number` field of `head_nft_id`.
* A number of non-fungible tokens (NTFs) owned by the account.
* A maximum for the number of tokens that can be automatically associated with this account. <p> If this is less than or equal to `used_auto_associations` (or 0), then this account MUST manually associate with a token before transacting in that token.<br/> This value may also be `-1` to indicate no limit.<br/> This value MUST NOT be less than `-1`.
* A count of used auto-association slots. <p> If this is greater than, or equal to, the current value of `max_auto_associations`, then this account MUST manually associate with a new token before transacting in that token.
* A count of tokens associated with this account. <p> This value determines a portion of the renewal fee for this account.
* A boolean indicating that this account is owned by a smart contract.
* A count of tokens with a positive balance associated with this account. <p> If the account has a positive balance in any token, it SHALL NOT be deleted.
* A nonce of this account for Ethereum interoperability.
* An amount of HBAR staked by this account at the start of the last reward period.
* An account identifier for automatic renewal.<br/> This is the identifier of another account, in the same shard and realm as this account, that has signed a transaction allowing the network to use its balance, if needed, to automatically extend this account's expiration time during automatic renewal processing. <p> If this is set, and this account lack sufficient HBAR balance to pay renewal fees when due, then the network SHALL deduct the necessary fees from the designated auto renew account, if that account has sufficient balance.
* A count of the number of seconds to extend this account's expiration. <p> The network SHALL extend the account's expiration by this number of seconds, if funds are available, upon automatic renewal.<br/> This SHALL NOT apply if the account is already deleted upon expiration.<br/> If this is not provided in an allowed range on account creation, the transaction SHALL fail with INVALID_AUTO_RENEWAL_PERIOD. The default values for the minimum period and maximum period are currently 30 days and 90 days, respectively.
* A count of smart contract key-value pairs.<br/> If this account is a smart-contract, this is the number of key-value pairs stored on the contract. <p> If this account is not a smart contract, this field SHALL NOT be used.<br/> This value SHALL determine a portion of the storage rental fees for the contract.
* A list of crypto (HBAR) allowances approved by this account. <p> If this is not empty, each allowance SHALL permit a specified "spender" account to spend this account's HBAR balance, up to a designated limit.<br/> This field SHALL permit spending only HBAR balance, not other tokens the account may hold. Allowances for other tokens SHALL be listed in the `token_allowances` field or the `approve_for_all_nft_allowances` field.
* A list of non-fungible token (NFT) allowances approved by this account. <p> If this is not empty, each allowance permits a specified "spender" account to transfer _all_ of this account's non-fungible tokens from a particular collection.<br/> Allowances for a specific serial number MUST be directly associated with that specific non-fungible token, rather than the holding account.
* A list of fungible token allowances approved by this account. <p> If this is not empty, each allowance permits a specified "spender" to spend this account's fungible tokens, of the designated type, up to a designated limit.
* A count of tokens for which this account is the treasury account. <p> Each native token is initially created with all tokens held by its treasury, and the owner of that account (which may be a smart contract) determines how those tokens are distributed.
* A flag indicating that the account is expired and pending removal. <p> When the network checks for entity expiration, it SHALL set this flag if the account expiration time has past and the account has no HBAR sufficient to pay current renewal fees.<br/> If the account has an auto-renew account set with an HBAR balance that could pay for an auto-renewal, then this flag SHALL NOT be set. This ensures the account is not encumbered during the time between expiration and when the auto-renewal processing renews the account.
* A contract storage key.<br/> This is the first key in the doubly-linked list of this contract's storage mappings. <p> This value SHALL be empty if the account is not a contract or the contract has no storage mappings.
* A pending airdrop ID.<br/> This is the head of the linked list for this account from the account airdrops map.<br/> <p> The account airdrops SHALL be connected by including the "next" and "previous" `PendingAirdropID` in each `AccountAirdrop` message.<br/> This value SHALL NOT be empty if this account is "sender" for any pending airdrop, and SHALL be empty otherwise.
* A number of pending airdrops. <p> This count SHALL be used to calculate rent _without_ walking the linked list of pending airdrops associated to this account via the `head_pending_airdrop_id` field.<br/> This value MUST be updated for every airdrop, clam, or cancel transaction that designates this account as a receiver.<br/> This number MUST always match the count of entries in the "list" identified by `head_pending_airdrop_id`.
* An account, and the amount that it sends or receives during a token transfer. This message is only relevant to fungible/common token transfers. Non-fungible/unique (NFT) token transfers MUST use the NftTransfer message.
Used in:
, ,* An account identifier that will send or receive token(s).
* An amount to send (negative) or receive (positive). <p> This amount MUST be denominated in the smallest unit of the relevant token.<br/> For HBAR this SHALL be tinybar (10<sup>-8</sup> HBAR).<br/> For other fungible/common tokens this SHALL depend on the value of `decimals` for that token.
* An approved allowance flag.<br/> If true then the transfer is expected to be an approved allowance. <p> If set, `accountID` SHALL be the owner that previously approved the allowance.<br/> The default value SHALL be false (unset).
* Permission granted by one account (the "funding" account) to another account (the "spender" account) that allows the spender to transfer all serial numbers of a specific non-fungible token (NFT) collection owned by the funding account.<br/> This is a broad permission, as it does not matter how many NFTs of the specified collection the funding account owns, the spender MAY dispose of any or all of them with this allowance.<br/> Each token type (typically a collection of NFTs) SHALL require a separate allowance.<br/> Allowances for a specific serial number MUST be directly associated with that specific non-fungible token, rather than the holding account. An allowance SHALL NOT transfer any tokens directly, it only permits transactions signed only by the spender account to transfer any non-fungible tokens of the specified type owned by the funding account.
Used in:
* The identifier for the token associated with this allowance. <p> This token MUST be a non-fungible/unique token.
* The identifier for the spending account associated with this allowance. <p> This account SHALL be permitted to sign transactions to spend tokens of the associated token type from the funding/allowing account.
* Permission granted by one account (the "funding" account) to another account (the "spender" account) that allows the spender to spend a specified amount of HBAR owned by the funding account. An allowance SHALL NOT transfer any HBAR directly, it only permits transactions signed only by the spender account to transfer HBAR, up to the amount specified, from the funding account. Once the specified amount is spent, the allowance SHALL be consumed and a new allowance SHALL be required before that spending account may spend additional HBAR from the funding account.
Used in:
* The identifier for the spending account associated with this allowance. <p> This account SHALL be permitted to sign transactions to spend HBAR from the funding/allowing account.<br/> This permission SHALL be limited to no more than the specified `amount`.
The maximum amount that the spender account may transfer within the scope of this allowance. <p> This allowance SHALL be consumed if any combination of transfers authorized via this allowance meet this value in total.<br/> This value MUST be specified in tinybar (i.e. 10<sup>-8</sup> HBAR).
* Permission granted by one account (the "funding" account) to another account (the "spender" account) that allows the spender to spend a specified amount of a specific non-HBAR fungible token from the balance owned by the funding account. An allowance SHALL NOT transfer any tokens directly, it only permits transactions signed only by the spender account to transfer tokens of the specified type, up to the amount specified, from the funding account. Once the specified amount is spent, the allowance SHALL be consumed and a new allowance SHALL be required before that spending account may spend additional tokens from the funding account.
Used in:
* The identifier for the token associated with this allowance. <p> This token MUST be a fungible/common token.
* The identifier for the spending account associated with this allowance. <p> This account SHALL be permitted to sign transactions to spend tokens of the associated token type from the funding/allowing account.<br/> This permission SHALL be limited to no more than the specified `amount`.
The maximum amount that the spender account may transfer within the scope of this allowance. <p> This allowance SHALL be consumed if any combination of transfers authorized via this allowance meet this value in total.<br/> This value MUST be specified in the smallest units of the relevant token (i.e. 10<sup>-decimals</sup> whole tokens).
* A unique identifier for an Hedera account. An account identifier is of the form `shard.realm.[number|alias]`.<br/> The identifier MAY use the alias form when transferring HBAR to a public key before the account for that key is created, when only the alias value is known, or in some smart contracts that use the EVM address style alias to refer to Accounts.<br/> When the account entry is completed, the alias SHALL be stored separately in the Account record, and the identifier in the Account SHALL use the `accountNum` form. --- ### Additional Notes #### Alias There is considerable complexity with `alias` (aka `evm_address`) for Accounts. Much of this comes from the existence of a "hidden" alias for almost all accounts, and the reuse of the alias field for both EVM reference and "automatic" account creation.<br/> For the purposes of this specification, we will use the following terms for clarity. - `key_alias`<br/> The account public key as a protobuf serialized message and used for auto-creation and subsequent lookup. This is only valid if the account key is a single `primitive` key, either Ed25519 or ECDSA_SECP256K1. - `evm_address`<br/> Exists for every account and is one of - `contract_address`<br/> The 20 byte EVM address prescribed by `CREATE` or `CREATE2` - `evm_key_address`<br/> An arbitrary 20 byte EVM address that, for a usable externally owned account (EOA) SHALL be the rightmost 20 bytes of the Keccak-256 hash of a ECDSA_SECP256K1 key.<br/> Such accounts may be created in one of three ways: - Sending hbar or fungible tokens to an unused ECDSA_SECP256K1 key alias. - Sending hbar or fungible tokens to an unassigned 20-byte EVM address. - Submitting a `CryptoCreate` signed with the corresponding private key. - `long_zero`<br/> A synthetic 20 byte address inferred for "normally" created accounts. It is constructed from the "standard" AccountID as follows. 1. 4 byte big-endian shard number 1. 8 byte big-endian realm number 1. 8 byte big-endian entity number<br/> The `alias` field in the `Account` message SHALL contain one of four values for any given account. - The `key_alias`, if the account was created by transferring HBAR to the `key_alias` public key value. - The `evm_key_address` if the account was created from an EVM public key - The `contract_address` if the account belongs to an EVM contract - Not-Set/null/Bytes.EMPTY (collectively `null`) if the account was created normally If the `alias` field of an `Account` is any form of `null`, then the account MAY be referred to by `alias` in an `AccountID` by using the `long_zero` address for the account.<br/> This "hidden default" alias SHALL NOT be stored, but is synthesized by the node software as needed, and may be synthesized by an EVM contract or client software as well. --- #### Alias forms An `AccountID` in a transaction MAY reference an `Account` with `shard.realm.alias`.<br/> If the account `alias` field is set for an Account, that value SHALL be the account alias.<br/> If the account `alias` field is not set for an Account, the `long_zero` alias SHALL be the account alias.
Used in:
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,* A whole number shard identifier.
* A whole number realm identifier.
* A whole number account number, unique within its realm and shard. <p> For any AccountID fields in the query response, transaction records, transaction receipts, or block stream `accountNum` MUST be used.
* An alias value.<br/> Alias is a value used in some contexts to refer to an account when account number is not available, and may be an alias public key, or an EVM address.
* A node within a doubly linked list of pending airdrop references.<br/> This internal state message forms the entries in a doubly-linked list of references to pending airdrop entries that are "owed" by a particular account as "sender". Each entry in this list MUST refer to an existing pending airdrop.<br/> The pending airdrop MUST NOT be claimed.<br/> The pending airdrop MUST NOT be canceled.<br/> The pending airdrop `sender` account's `head_pending_airdrop_id` field MUST match the `pending_airdrop_id` field in this message.
* An amount of fungible tokens to be sent for this pending airdrop. <p> This field SHALL NOT be set for non-fungible/unique tokens.
* A pending airdrop identifier. <p> This field SHALL identify the specific pending airdrop that precedes this position within the doubly linked list of pending airdrops "owed" by the sending account associated with this account airdrop "list".<br/> This SHALL match `pending_airdrop_id` if this is the only entry in the "list".
* A pending airdrop identifier.<br/> <p> This field SHALL identify the specific pending airdrop that follows this position within the doubly linked list of pending airdrops "owed" by the sending account associated with this account airdrop "list".<br/> This SHALL match `pending_airdrop_id` if this is the only entry in the "list".
* All of the accounts proxy staking to a given account, and the amounts proxy staked
Used in:
* The Account ID that is being proxy staked to
* Each of the proxy staking accounts, and the amount they are proxy staking
* Description of a transfer added to a `cryptoTransfer` transaction that satisfies custom fee requirements. It is important to note that this is not the actual transfer. The transfer of value SHALL be merged into the original transaction to minimize the number of actual transfers. This descriptor presents the fee assessed separately in the record stream so that the details of the fee assessed are not hidden in this process.
Used in:
* An amount of tokens assessed for this custom fee. <p> This shall be expressed in units of 10<sup>-decimals</sup> tokens.
* The token transferred to satisfy this fee. <p> If the token transferred is HBAR, this field SHALL NOT be set.
* An account that received the fee assessed. <p> This SHALL NOT be the sender or receiver of the original cryptoTransfer transaction.
* An account that provided the tokens assessed as a fee. <p> This SHALL be the account that _would have_ had a higher balance absent the fee. In most cases this SHALL be the `sender`, but some _fractional_ fees reduce the amount transferred, and in those cases the `receiver` SHALL be the effective payer for the fee.<br/> There are currently no situations where a third party pays a custom fee. This MAY change in a future release.
* A transaction body for handling a set of transactions atomically.
<<<pbj.java_package = "com.hedera.hapi.node.util">>> This comment is special code for setting PBJ Compiler java package
Used in:
* A list of signed bytes that represent the batch transactions.
* A specific hash algorithm. We did not reuse Record Stream `HashAlgorithm` here because in all cases, currently, this will be `SHA2_384` and if that is the default value then we can save space by not serializing it, whereas `HASH_ALGORITHM_UNKNOWN` is the default for Record Stream `HashAlgorithm`. Note that enum values here MUST NOT match the name of any other enum value in the same `package`, as protobuf follows `C++` scope rules and all enum _names_ are treated as global constants within the `package`.
* A SHA2 algorithm SHA-384 hash. <p> This is the default value, if a field of this enumerated type is not set, then this is the value that will be decoded when the serialized message is read.
* Information for a transaction block. This includes: - last block number. - consensus times for: - previous block start. - current block start. - last handled transaction. - hash data for a rolling window of 256 blocks. - whether migration records were produced.
* A block number. <p> The block number of the last completed immutable block.
* A consensus timestamp. <p> The consensus time of the first transaction for the last completed immutable block.
* A list of the last 256 block hashes.<br/> This is the SHA384 48 byte hashes of the previous 256 blocks, collected in a single byte array. <p> The first 48 bytes SHALL be the oldest block in the list.<br/> The last 48 bytes SHALL be the newest block, which is the last fully completed immutable block.<br/> This SHALL contain less than 256 block hashes if there are less than 256 preceding blocks; for instance, shortly after network genesis the network will not have processed 256 blocks yet. <p> This MAY change significantly for Block Stream (HIP TBD).
* A consensus timestamp. <p> The consensus time of the last transaction that was handled by the node within the current block.<br/> This property is how we 'advance the consensus clock'. The node MUST continually set this property to the consensus timestamp for the most recent transaction completed by the node.
* A flag indicating that migration records have been published. <p> This property SHALL be `false` immediately following a node upgrade<br/> This SHALL be set 'true' as migration records, if any, are published. Migration records are typically published "during" the first transaction handled by the node following startup.
* A consensus timestamp. <p> The consensus time of the first transaction in the current block; necessary for reconnecting nodes to detect when the current block is finished.
* The bytecode for a contract account. This is not referred to by any other protocol buffer, but is used internally within the Hedera Node software.
* The raw bytes (not hex-encoded) of a contract's bytecode.
* Two lists of congestion pricing level "start" times. Each list details the start of each time period when the congestion pricing level changed (increasing, or decreasing, the congestion fee multiplier).
* Timestamps for each point where "entity utilization" congestion pricing levels changed. <p> If congestion pricing has not occurred then this SHALL contain a single timestamp of value 0.
* Timestamps for each point where "gas utilization" congestion pricing levels changed. <p> If congestion pricing has not occurred then this SHALL contain a single timestamp of value 0.
* Create a topic to accept and group consensus messages. If `autoRenewAccount` is specified, that account Key MUST also sign this transaction.<br/> If `adminKey` is set, that Key MUST sign the transaction.<br/> On success, the resulting `TransactionReceipt` SHALL contain the newly created `TopicId`. The `autoRenewPeriod` on a topic MUST be set to a value between `autoRenewPeriod.minDuration` and `autoRenewPeriod.maxDuration`. These values are configurable, typically 30 and 92 days.<br/> This also sets the initial expirationTime of the topic. If no `adminKey` is set on a topic -`autoRenewAccount` SHALL NOT be set on the topic. - A `deleteTopic` transaction SHALL fail. - An `updateTopic` transaction that only extends the expirationTime MAY succeed. - Any other `updateTopic` transaction SHALL fail. If the topic expires and is not automatically renewed, the topic SHALL enter the `EXPIRED` state. - All transactions on the topic SHALL fail with TOPIC_EXPIRED - Except an updateTopic() call that only extends the expirationTime. - getTopicInfo() SHALL succeed, and show the topic is expired. The topic SHALL remain in the `EXPIRED` state for a time determined by the `autorenew.gracePeriod` (configurable, originally 7 days).<br/> After the grace period, if the topic's expirationTime is not extended, the topic SHALL be automatically deleted from state entirely, and cannot be recovered or recreated. ### Block Stream Effects None
Used in:
,* A short memo for this topic. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* Access control for modification of the topic after it is created. <p> If this field is set, that key MUST sign this transaction.<br/> If this field is set, that key MUST sign each future transaction to update or delete the topic.<br/> An updateTopic transaction that _only_ extends the topic expirationTime (a "manual renewal" transaction) SHALL NOT require admin key signature.<br/> A topic without an admin key SHALL be immutable, except for expiration and renewal.<br/> If adminKey is not set, then `autoRenewAccount` SHALL NOT be set.
* Access control for message submission to the topic. <p> If this field is set, that key MUST sign each consensus submit message for this topic.<br/> If this field is not set then any account may submit a message on the topic, without restriction.
* The initial lifetime, in seconds, for the topic.<br/> This is also the number of seconds for which the topic SHALL be automatically renewed upon expiring, if it has a valid auto-renew account. <p> This value MUST be set.<br/> This value MUST be greater than the configured MIN_AUTORENEW_PERIOD.<br/> This value MUST be less than the configured MAX_AUTORENEW_PERIOD.
* The ID of the account to be charged renewal fees at the topic's expirationTime to extend the lifetime of the topic. <p> The topic lifetime SHALL be extended by the smallest of the following: <ul> <li>The current `autoRenewPeriod` duration.</li> <li>The maximum duration that this account has funds to purchase.</li> <li>The configured MAX_AUTORENEW_PERIOD at the time of automatic renewal.</li> </ul> If this value is set, the referenced account MUST sign this transaction.<br/> If this value is set, the `adminKey` field MUST also be set (though that key MAY not have any correlation to this account).
* Access control for update or delete of custom fees. <p> If set, subsequent `consensus_update_topic` transactions signed with this key MAY update or delete the custom fees for this topic.<br/> If not set, the custom fees for this topic SHALL BE immutable.<br/> If not set when the topic is created, this field CANNOT be set via update.<br/> If set when the topic is created, this field MAY be changed via update.
* A set of keys.<br/> Keys in this list are permitted to submit messages to this topic without paying custom fees associated with this topic. <p> If a submit transaction is signed by _any_ key included in this set, custom fees SHALL NOT be charged for that transaction.<br/> This field MUST NOT contain more than 10 keys.<br/> fee_exempt_key_list SHALL NOT contain any duplicate keys.<br/> fee_exempt_key_list MAY contain keys for accounts that are inactive, deleted, or non-existent.<br/> If fee_exempt_key_list is unset in this transaction, there SHALL NOT be any fee-exempt keys. In particular, the following keys SHALL NOT be implicitly or automatically added to this list: `adminKey`, `submitKey`, `fee_schedule_key`.
* A set of custom fee definitions.<br/> These are fees to be assessed for each submit to this topic. <p> Each fee defined in this set SHALL be evaluated for each message submitted to this topic, and the resultant total assessed fees SHALL be charged.<br/> Custom fees defined here SHALL be assessed in addition to the base network and node fees.<br/> custom_fees list SHALL NOT contain more than `MAX_CUSTOM_FEE_ENTRIES_FOR_TOPICS` entries.
* Delete a topic. Once deleted, subsequent transactions or queries for that topic SHALL NOT succeed.<br/> If adminKey is set on the topic, this transaction MUST be signed by that key.<br/> If adminKey is not set on the topic, this transaction SHALL fail with a response code of `UNAUTHORIZED`. A topic without an adminKey cannot be deleted (but MAY expire). ### Block Stream Effects None
Used in:
,* Topic to be deleted.
* Retrieve the latest state of a topic. This method is unrestricted and allowed on any topic by any payer account.<br/> A query for a deleted topic MAY succeed if the topic is within the "autorenew grace period".<br/> A query for a topic removed from state SHALL NOT succeed.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A topic ID. <p> The network SHALL return information for this topic, if successful.
* Query response to describe the current state of a topic in the Hedera Consensus Service(HCS).
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* The ID of the topic requested in the query.
* Information describing the current state of the topic.
* Consensus message "chunk" detail.<br/> This message carries information describing the way in which a message submitted for consensus is broken into multiple fragments to fit within network transaction size limits. The use of multiple message fragments is RECOMMENDED for any message greater than 4KiB in total size. ### Block Stream Effects None
Used in:
,* The TransactionID of the first chunk. <p> This MUST be set for every chunk in a fragmented message.
* The total number of chunks in the message.
* The sequence number (from 1 to total) of the current chunk in the message.
* Submit a message for consensus.<br/> This transaction adds a new entry to the "end" of a topic, and provides the core function of the consensus service. Valid and authorized messages on valid topics SHALL be ordered by the consensus service, published in the block stream, and available to all subscribers on this topic via the mirror nodes.<br/> If this transaction succeeds the resulting `TransactionReceipt` SHALL contain the latest `topicSequenceNumber` and `topicRunningHash` for the topic.<br/> If the topic `submitKey` is set, and not an empty `KeyList`, then that key MUST sign this transaction. ### Block Stream Effects None
Used in:
,* Topic to submit message to.
* A message to be submitted. <p> This Transaction (including signatures) MUST be less than 6KiB.<br/> Messages SHOULD be less than 4KiB. A "chunked" message MAY be submitted if a message larger than this is required.
* Information for the current "chunk" in a fragmented message. <p> This value is REQUIRED if the full `message` is submitted in two or more fragments due to transaction size limits.<br/> If the message is submitted in a single transaction, then this field SHOULD NOT be set.
* A query response describing the current state of a topic for the Hedera Consensus Service (HCS).
Used in:
* A short description of this topic. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* The latest running hash of the topic. <p> This 48-byte field is the output of a SHA-384 digest with input data determined by the current version of the running hash algorithm used by the network.<br/> All new transactions SHALL use algorithm version `3`.<br/> The bytes of each uint64 or uint32 encoded for the hash input MUST be in Big-Endian format. <p> <hr/> If the algorithm version is '3', then the input data to the SHA-384 digest are, in order: <ol> <li>The previous running hash of the topic (48 bytes)</li> <li>The `topicRunningHashVersion` (8 bytes)</li> <li>The payer account's shard (8 bytes)</li> <li>The payer account's realm (8 bytes)</li> <li>The payer account's number (8 bytes)</li> <li>The topic's shard (8 bytes)</li> <li>The topic's realm (8 bytes)</li> <li>The topic's number (8 bytes)</li> <li>The number of seconds since the epoch when the `ConsensusSubmitMessage` reached consensus (8 bytes)</li> <li>The number of nanoseconds within the second when the `ConsensusSubmitMessage` reached consensus (4 bytes)</li> <li>The `topicSequenceNumber` (8 bytes)</li> <li>The output of a SHA-384 digest of the message bytes from the `ConsensusSubmitMessage` (48 bytes)</li> </ol>
* A current sequence number (starting at 1 for the first message) for messages on this topic.
* An expiration time for this topic, in seconds since the epoch. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.
* A key that MUST sign any transaction to update or delete this topic. <p> If this value is not set (null) then the topic CANNOT be deleted, modified, or updated.
* A key that MUST sign any transaction to submit a message to this topic. <p> If this value is not set (null) then any account MAY submit messages to this topic.
* A duration, in seconds, to extend the `expirationTime` value when this topic is automatically renewed. <p> If the `autoRenewAccount` value for this topic is set to a valid account with sufficient HBAR balance to pay renewal fees when this topic expires, the system SHALL automatically renew this topic, extending the `expirationTime` value by the number of seconds described here.<br/> If, however, the `autoRenewAccount` lacks sufficient HBAR balance to pay renewal fees when this topic expires, this topic SHALL be deleted after the time period specified in the `AUTORENEW_GRACE_PERIOD` configuration value.
* An account that is designated to pay automatic renewal fees. <p> If this value is a valid account ID when this topic expires, this account SHALL be charged the renewal fees for this topic, if it holds sufficient HBAR balance. If the account does not hold sufficient HBAR balance to pay renewal fees when necessary, then this topic SHALL be deleted.<br/> If this value is not set (null), or is not a valid account ID, when this topic expires, then this topic SHALL be deleted after the time period specified in the `AUTORENEW_GRACE_PERIOD` configuration value.
* A ledger ID of the network that generated this response. <p> This value SHALL identify the distributed ledger that responded to this query.
* Access control for update/delete of custom fees. <p> If unset, custom fees CANNOT be set for this topic.<br/> If not set when the topic is created, this field CANNOT be set via update.<br/> If set when the topic is created, this field MAY be changed via update.
* A set of keys.<br/> Keys in this list are permitted to submit messages to this topic without paying custom fees associated with this topic. <p> If a topic submit message is signed by _any_ key included in this set, custom fees SHALL NOT be charged for that transaction.<br/> `fee_exempt_key_list` MAY contain keys for accounts that are inactive, deleted, or non-existent.<br/> If not set, there SHALL NOT be any fee-exempt keys. In particular, the following keys SHALL NOT be implicitly or automatically added to this list: `adminKey`, `submitKey`, `fee_schedule_key`. A `fee_exempt_key_list` MUST NOT contain more than `MAX_ENTRIES_FOR_FEE_EXEMPT_KEY_LIST` keys. A `fee_exempt_key_list` MUST NOT contain any duplicate keys.
* A set of custom fee definitions.<br/> These are fees to be assessed for each submit to this topic. <p> Each fee defined in this set SHALL be evaluated for each message submitted to this topic, and the resultant total assessed fees SHALL be charged.<br/> Custom fees defined here SHALL be assessed in addition to the base network and node fees.
* Update the fields of an existing HCS topic. The topicID field is REQUIRED. All other fields are OPTIONAL.<br/> Fields set on this transaction SHALL be updated.<br/> Fields _not_ set on this transaction SHALL NOT be updated. ### Block Stream Effects None
Used in:
,* The topic ID specifying the topic to update. <p> A topic with this ID MUST exist and MUST NOT be deleted.<br/> This value is REQUIRED.
* An updated memo to be associated with this topic. <p> If this value is set, the current `adminKey` for the topic MUST sign this transaction.<br/> This value, if set, SHALL be encoded UTF-8 and SHALL NOT exceed 100 bytes when so encoded.
* An updated expiration time for this topic, in seconds since the epoch. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.<br/> The expirationTime MUST NOT be greater than the sum of `MAX_AUTORENEW_PERIOD` and the actual consensus timestamp of this transaction.<br/> If `adminKey` is <b>unset</b> for the _topic_, this transaction MUST NOT modify any other field.
* Updated access control for modification of the topic. <p> If this field is set, that key and the previously set key MUST both sign this transaction.<br/> If this value is an empty `KeyList`, the prior key MUST sign this transaction, and the topic SHALL be immutable after this transaction completes, except for expiration and renewal.
* Updated access control for message submission to the topic. <p> If this value is set, the current `adminKey` for the topic MUST sign this transaction.<br/> If this value is set to an empty `KeyList`, the `submitKey` for the topic will be unset after this transaction completes. When the `submitKey` is unset, any account may submit a message on the topic, without restriction.
An updated value for the number of seconds by which the topic expiration will be automatically extended upon expiration, if it has a valid auto-renew account. <p> If this value is set, the current `adminKey` for the topic MUST sign this transaction.<br/> This value, if set, MUST be greater than the configured MIN_AUTORENEW_PERIOD.<br/> This value, if set, MUST be less than the configured MAX_AUTORENEW_PERIOD.
* An updated ID for the account to be charged renewal fees at the topic's `expirationTime` to extend the lifetime of the topic. <p> If this value is set and not the "sentinel account", the referenced account MUST sign this transaction.<br/> If this value is set, the current `adminKey` for the topic MUST sign this transaction.<br/> If this value is set to the "sentinel account", which is `0.0.0`, the `autoRenewAccount` SHALL be removed from the topic.
* Access control for update/delete of custom fees. <p> If set, subsequent consensus_update_topic transactions signed with this key MAY update or delete the custom fees for this topic.<br/> If this field is set, the admin key MUST sign this transaction.<br/> If this field is set, the previous value SHALL be replaced.<br/> If set to a 'Key' containing an empty 'KeyList', the previous value SHALL be cleared.<br/> If not set, the current key SHALL NOT change.<br/> If unset in state, this field MUST NOT be set in this transaction.<br/> If not set when the topic is created, this field CANNOT be set via update.<br/>
* A set of keys<br/> Keys in this list are permitted to submit messages to this topic without paying custom fees associated with this topic. <p> If a submit transaction is signed by _any_ key included in this set, custom fees SHALL NOT be charged for that transaction.<br/> If this field is not set, the current set of keys SHALL NOT change.<br/> If this field is set, but contains an empty list, any existing fee-exempt keys SHALL be removed.<br/> A `fee_exempt_key_list` MUST NOT contain more than `MAX_ENTRIES_FOR_FEE_EXEMPT_KEY_LIST` keys.<br/> A `fee_exempt_key_list` MUST NOT contain any duplicate keys.<br/> A `fee_exempt_key_list` MAY contain keys for accounts that are inactive, deleted, or non-existent.
* A set of custom fee definitions.<br/> These are fees to be assessed for each submit to this topic. <p> Each fee defined in this set SHALL be evaluated for each message submitted to this topic, and the resultant total assessed fees SHALL be charged.<br/> Custom fees defined here SHALL be assessed in addition to the base network and node fees.<br/> If this field is not set, the current set of custom fees SHALL NOT change.<br/> If this field is set, but contains an empty list, all current custom fees SHALL be removed. custom_fees list SHALL NOT contain more than `MAX_CUSTOM_FEE_ENTRIES_FOR_TOPICS` entries.
* Call a view function of a given smart contract<br/> The call must provide function parameter inputs as needed.<br/> This is potentially useful for calling view functions that will not revert when executed in a static EVM context. Many such use cases will be better served by using a Mirror Node API, however. This is performed locally on the particular node that the client is communicating with. Executing the call locally is faster and less costly, but imposes certain restrictions.<br/> The call MUST NOT change the state of the contract instance. This also precludes any expenditure or transfer of HBAR or other tokens.<br/> The call SHALL NOT have a separate consensus timestamp.<br/> The call SHALL NOT generate a record nor a receipt.<br/> The response SHALL contain the output returned by the function call.<br/> Any contract call that would use the `STATICCALL` opcode MAY be called via contract call local with performance and cost benefits. Unlike a ContractCall transaction, the node SHALL always consume the _entire_ amount of offered "gas" in determining the fee for this query, so accurate gas estimation is important.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither). <p> The payment MUST be sufficient for the base fees _and_ the full amount in the `gas` field.
* The ID of a smart contract to call.
* The amount of "gas" to use for this call. <p> This transaction SHALL consume all of the gas offered and charge the corresponding fee according to the current exchange rate between HBAR and "gas".
* The smart contract function to call, and the parameters to pass to that function. <p> These SHALL be presented in EVM bytecode function call format.
* Do not use this field; it is ignored in the current software. <p> The maximum number of bytes that the result might include.<br/> The call will fail if it would have returned more than this number of bytes.
* The account that is the "sender" for this contract call. <p> If this is not set it SHALL be interpreted as the accountId from the associated transactionId.<br/> If this is set then either the associated transaction or the foreign transaction data MUST be signed by the referenced account.
* The response returned by a `ContractCallLocalQuery` transaction.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* The result(s) returned by the function call, if successful. <p> If the call failed this value SHALL be unset.
* Call a function of a given smart contract, providing function parameter inputs as needed. Resource ("gas") charges SHALL include all relevant fees incurred by the contract execution, including any storage required.<br/> The total transaction fee SHALL incorporate all of the "gas" actually consumed as well as the standard fees for transaction handling, data transfers, signature verification, etc...<br/> The response SHALL contain the output returned by the function call. ### Block Stream Effects A `CallContractOutput` message SHALL be emitted for each transaction.
Used in:
,* The ID of a smart contract to call.
* A maximum limit to the amount of gas to use for this call. <p> The network SHALL charge the greater of the following, but SHALL NOT charge more than the value of this field. <ol> <li>The actual gas consumed by the smart contract call.</li> <li>`80%` of this value.</li> </ol> The `80%` factor encourages reasonable estimation, while allowing for some overage to ensure successful execution.
* An amount of tinybar sent via this contract call. <p> If this is non-zero, the function MUST be `payable`.
* The smart contract function to call. <p> This MUST contain The application binary interface (ABI) encoding of the function call per the Ethereum contract ABI standard, giving the function signature and arguments being passed to the function.
* Create a new smart contract. If this transaction succeeds, the `ContractID` for the new smart contract SHALL be set in the transaction receipt.<br/> The contract is defined by the initial bytecode (or `initcode`). The `initcode` SHALL be stored either in a previously created file, or in the transaction body itself for very small contracts. As part of contract creation, the constructor defined for the new smart contract SHALL run with the parameters provided in the `constructorParameters` field.<br/> The gas to "power" that constructor MUST be provided via the `gas` field, and SHALL be charged to the payer for this transaction.<br/> If the contract _constructor_ stores information, it is charged gas for that storage. There is a separate fee in HBAR to maintain that storage until the expiration, and that fee SHALL be added to this transaction as part of the _transaction fee_, rather than gas. ### Block Stream Effects A `CreateContractOutput` message SHALL be emitted for each transaction.
Used in:
,* The source for the smart contract EVM bytecode. <p> The file containing the smart contract initcode. A copy of the contents SHALL be made and held as `bytes` in smart contract state.<br/> The contract bytecode is limited in size only by the network file size limit.
* The source for the smart contract EVM bytecode. <p> The bytes of the smart contract initcode. A copy of the contents SHALL be made and held as `bytes` in smart contract state.<br/> This value is limited in length by the network transaction size limit. This entire transaction, including all fields and signatures, MUST be less than the network transaction size limit.
* Access control for modification of the smart contract after it is created. <p> If this field is set, that key MUST sign this transaction.<br/> If this field is set, that key MUST sign each future transaction to update or delete the contract.<br/> An updateContract transaction that _only_ extends the topic expirationTime (a "manual renewal" transaction) SHALL NOT require admin key signature. <p> A contract without an admin key SHALL be immutable, except for expiration and renewal.
* A maximum limit to the amount of gas to use for the constructor call. <p> The network SHALL charge the greater of the following, but SHALL NOT charge more than the value of this field. <ol> <li>The actual gas consumed by the smart contract constructor call.</li> <li>`80%` of this value.</li> </ol> The `80%` factor encourages reasonable estimation, while allowing for some overage to ensure successful execution.
* The amount of HBAR to use as an initial balance for the account representing the new smart contract. <p> This value is presented in tinybar (10<sup><strong>-</strong>8</sup> HBAR).<br/> The HBAR provided here will be withdrawn from the payer account that signed this transaction.
* Proxy account staking is handled via `staked_id`. <p> Former field to designate a proxy account for HBAR staking. This field MUST NOT be set.
* The initial lifetime, in seconds, for the smart contract, and the number of seconds for which the smart contract will be automatically renewed upon expiration. <p> This value MUST be set.<br/> This value MUST be greater than the configured MIN_AUTORENEW_PERIOD.<br/> This value MUST be less than the configured MAX_AUTORENEW_PERIOD.<br/>
* An array of bytes containing the EVM-encoded parameters to pass to the smart contract constructor defined in the smart contract init code provided.
* <blockquote>Review Question<br/> <blockquote>Should this be deprecated?<br/> It's never been used and probably never should be used...<br/> Shard should be determined by the node the transaction is submitted to. </blockquote></blockquote> <p> The shard in which to create the new smart contract.<br/> This value is currently ignored.
* <blockquote>Review Question<br/> <blockquote>Should this be deprecated?<br/> It's never been used and probably never should be used...<br/> Realm should be determined by node and network parameters. </blockquote></blockquote> <p> The shard/realm in which to create the new smart contract.<br/> This value is currently ignored.
* <blockquote>Review Question<br/> <blockquote>Should this be deprecated?<br/> It's never been used and probably never should be used...<br/> If a realm is used, it must already exist; we shouldn't be creating it without a separate transaction.</blockquote></blockquote> <p> This was intended to provide an admin key for any new realm created during the creation of the smart contract.<br/> This value is currently ignored. a new realm SHALL NOT be created, regardless of the value of `realmID`.
* A short memo for this smart contract. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* The maximum number of tokens that can be auto-associated with this smart contract. <p> If this is less than or equal to `used_auto_associations` (or 0), then this contract MUST manually associate with a token before transacting in that token.<br/> Following HIP-904 This value may also be `-1` to indicate no limit.<br/> This value MUST NOT be less than `-1`.
* The id of an account, in the same shard and realm as this smart contract, that has signed this transaction, allowing the network to use its balance, when needed, to automatically extend this contract's expiration time. <p> If this field is set, that key MUST sign this transaction.<br/> If this field is set, then the network SHALL deduct the necessary fees from the designated auto renew account, if that account has sufficient balance. If the auto renew account does not have sufficient balance, then the fees for contract renewal SHALL be deducted from the HBAR balance held by the smart contract.<br/> If this field is not set, then all renewal fees SHALL be deducted from the HBAR balance held by this contract.
* An account ID. <p> This smart contract SHALL stake its HBAR via this account as proxy.
* The ID of a network node. <p> This smart contract SHALL stake its HBAR to this node. <p> <blockquote>Note: node IDs do fluctuate as node operators change. Most contracts are immutable, and a contract staking to an invalid node ID SHALL NOT participate in staking. Immutable contracts MAY find it more reliable to use a proxy account for staking (via `staked_account_id`) to enable updating the _effective_ staking node ID when necessary through updating the proxy account.</blockquote>
* A flag indicating that this smart contract declines to receive any reward for staking its HBAR balance to help secure the network. <p> If set to true, this smart contract SHALL NOT receive any reward for staking its HBAR balance to help secure the network, regardless of staking configuration, but MAY stake HBAR to support the network without reward.
* Delete a smart contract, and transfer any remaining HBAR balance to a designated account. If this call succeeds then all subsequent calls to that smart contract SHALL execute the `0x0` opcode, as required for EVM equivalence. ### Requirements - An account or smart contract MUST be designated to receive all remaining account balances. - The smart contract MUST have an admin key set. If the contract does not have `admin_key` set, then this transaction SHALL fail and response code `MODIFYING_IMMUTABLE_CONTRACT` SHALL be set. - If `admin_key` is, or contains, an empty `KeyList` key, it SHALL be treated the same as an admin key that is not set. - The `Key` set for `admin_key` on the smart contract MUST have a valid signature set on this transaction. - The designated receiving account MAY have `receiver_sig_required` set. If that field is set, the receiver account MUST also sign this transaction. - The field `permanent_removal` MUST NOT be set. That field is reserved for internal system use when purging the smart contract from state. Any user transaction with that field set SHALL be rejected and a response code `PERMANENT_REMOVAL_REQUIRES_SYSTEM_INITIATION` SHALL be set. ### Block Stream Effects None
Used in:
,* The id of the contract to be deleted. <p> This field is REQUIRED.
* An Account ID recipient. <p> This account SHALL receive all HBAR and other tokens still owned by the contract that is removed.
* A contract ID recipient. <p> This contract SHALL receive all HBAR and other tokens still owned by the contract that is removed.
* A flag indicating that this transaction is "synthetic"; initiated by the node software. <p> The consensus nodes create such "synthetic" transactions to both to properly manage state changes and to communicate those changes to other systems via the Block Stream.<br/> A user-initiated transaction MUST NOT set this flag.
* A contract function result.<br/> The result returned by a call to a smart contract function. This is part of the response to a ContractCallLocal query, and is in the record for a ContractCall. The ContractCreateInstance transaction record also carries a function result, which is the results of the call to the constructor.
Used in:
,* A contract identifier.<br/> This identifies the smart contract that defines the function called.
* Result data from the function call. <p> This SHALL be encoded in RLP bytecode format.
* Any error message produced by the contract call. <p> This SHALL be unset if the contract call succeeded.
* A bloom filter produced by this contract call.<br/> Ethereum uses this bloom filter to search for call results in the Ethereum block history. High false positive rates make the bloom filters quite limited value.
* A quantity of "gas" used.<br/> This represents the resource units expended to execute this contract call, and correlates to transaction costs.
* Any Log events produced by this contract call.
* Replaced by values in transaction records to support `CREATE2` calls.<br/> <p> The list of smart contracts that were created by the function call.<br/> The created ids will now _also_ be externalized through internal transaction records, where each record has its alias field populated with the new contract's EVM address.<br/> This is needed for contracts created with CREATE2, which removes the trivial relationship between a new contract's Identifier and its Solidity address.
* A created contract address.<br/> If the function created a new contract (e.g. `CREATE2`), this is the primary 20-byte EVM address for that contract. <p> Every contract SHALL have a "base" EVM address that is determined by its `shard.realm.num` contract ID.<br/> This address is constructed as follows <ol> <li>The first 4 bytes are the big-endian representation of the shard.</li> <li>The next 8 bytes are the big-endian representation of the realm.</li> <li>The final 8 bytes are the big-endian representation of the number.</li> </ol> <p> Contracts created via `CREATE2` SHALL have an _additional_, primary, address that is derived from the <a href="https://eips.ethereum.org/EIPS/eip-1014"><tt>EIP-1014</tt></a> specification. This additional address SHALL NOT be directly related to the `shard.realm.num` contract ID.<br/> It should be emphasized that Contracts created via a `CREATE2` call can also be referenced via the same "base" EVM address as described above.
* The amount of gas available for this call, sometimes referred to as the gasLimit.<br/> This field SHALL NOT be populated when the associated `TransactionBody` in the block stream is a `ContractCreateTransactionBody` or a `ContractCallTransactionBody`.
* An amount, in tinybar, sent by this function call.<br/> This SHALL be zero(0) if the function called is not `payable`.<br/> This field SHALL NOT be populated when the associated `TransactionBody` in the block stream is a `ContractCreateTransactionBody` or a `ContractCallTransactionBody`.
* The smart contract function to call, and the parameters to pass to that function.<br/> These SHALL be presented in EVM bytecode function call format.<br/> This field SHALL NOT be populated when the associated `TransactionBody` in the block stream is a `ContractCreateTransactionBody` or a `ContractCallTransactionBody`.
* The account that was the "sender" for this contract call.<br/> If this is not set it SHALL be read from the accountId in the transactionId for the contract call.<br/> This field SHALL NOT be populated when the associated `TransactionBody` in the block stream is a `ContractCreateTransactionBody` or a `ContractCallTransactionBody`.
* A list of contract account nonce values.<br/> This list SHALL contain a nonce value for each contract account modified as a result of this contract call. These nonce values SHALL be the value after the contract call is completed.
* A nonce value for the "signer account".<br/> If the contract call updated the signer nonce for the signer account (i.e. by creating another contract), this field SHALL contain the updated value.<br/> If the signer account nonce was not updated, this field SHALL be `null`.
* A transaction body to request the current bytecode for a smart contract.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A smart contract ID. <p> The network SHALL return bytecode for this smart contract, if successful.
* Information returned in response to a "get bytecode" query for a smart contract.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* The current bytecode of the requested smart contract.
* Request detailed information about a smart contract.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A smart contract ID. <p> The network SHALL return information for this smart contract, if successful.
* Information returned in response to a "get info" query for a smart contract.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* The information, as requested, for a smart contract. A state proof MAY be generated for this value.
Used in:
* The ID of the smart contract requested in the query.
* The Account ID for the account entry associated with this smart contract.
* The "Solidity" form contract ID.<br/> This is a hexadecimal string form of the 20-byte EVM address of the contract.
* The key that MUST sign any transaction to update or modify this smart contract. <p> If this value is null, or is an empty `KeyList` then the contract CANNOT be deleted, modified, or updated, but MAY still expire.
* The point in time at which this contract will expire.
* The duration, in seconds, for which the contract lifetime will be automatically extended upon expiration, provide sufficient HBAR is available at that time to pay the renewal fee.<br/> See `auto_renew_account_id` for additional conditions.
* The amount of storage used by this smart contract.
* A short description of this smart contract. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* The current HBAR balance, in tinybar, of the smart contract account.
* A flag indicating that this contract is deleted.
* Because <a href="https://hips.hedera.com/hip/hip-367">HIP-367</a>, which allows an account to be associated to an unlimited number of tokens, it became necessary to only provide this information from a Mirror Node.<br/> The list of tokens associated to this contract.
* The ledger ID of the network that generated this response. <p> This value SHALL identify the distributed ledger that responded to this query.
* An account designated to pay the renewal fee upon automatic renewal of this contract. <p> If this is not set, or is set to an account with zero HBAR available, the HBAR balance of the contract, if available, SHALL be used to pay the renewal fee.
* The maximum number of tokens that the contract can be associated to automatically.
* Staking information for this contract.
* Deprecated and not supported after release `0.9.0`. Request records of all transactions against the given contract in the last 25 hours.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A smart contract ID. <p> The network SHALL return information for this smart contract, if successful.
* Deprecated and not supported after release `0.9.0`. Response with records of all transactions against the given contract in the last 25 hours.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* A smart contract that this response describes.
* A list of records, each with contractCreateResult or contractCallResult as its body
* An identifier for a smart contract within the network.
Used in:
, , , , , , , , , , , , , , , , , , ,* A whole number shard identifier.
* A whole number realm identifier.
* A whole number contract identifier, unique within its realm and shard.
* A 20-byte EVM address of the contract to call. <p> A contract created via a HAPI `ContractCreate` call SHALL have an EVM address determined by its `shard.realm.num` identifier.<br/> This address is as follows <ol> <li>4 byte big-endian shard number</li> <li>8 byte big-endian realm number</li> <li>8 byte big-endian contract number</li> </ol> This address is not stored in state, but is computed when needed. <p> Contracts created by any other means, including a HAPI `EthereumTransaction` whose `to` address is the zero address, SHALL have the EVM address prescribed by the `CREATE` or `CREATE2` opcode, as applicable.
* EVM log data for a contract call.<br/> The EVM log information produced by a smart contract function call. Each contract function call MAY return zero or more log events.
Used in:
* A contract identifier.<br/> This refers to the contract that generated this log entry.
* A bloom filter.<br/> This filter applies to this log entry and indexes the contract log data in the full data of the Ethereum block.<br/> EIP-7668 proposes to remove bloom filters as they are quite low value in practice and separate indexing services are more effective.
* A list of the "topics" in this log entry.<br/> The EVM permits up to 4 topics, each of which is 32 bytes (one EVM word). <p> The first "topic" is special, and MUST contain the keccak256 hash of the event signature, if the event is not anonymous.
* Event data for this log entry.<br/> This is binary data consisting of an arbitrary number of 256 bit (32 byte) words. The content of that data is determined by the smart contract code.<br/>
* A contract "nonce" reference.<br/> This connects a contract and its "nonce" value, and is primarily for use in query responses. A "nonce" is short for "nonsense" and is usually a value with no particular meaning. The nonce of a contract SHALL be incremented when that contract creates another contract.
Used in:
* A contract identifier.<br/> This refers to the contract that holds this nonce value.
* A "nonce" value. The current value of the nonce associated with the identified contract.
* Modify the current state of a smart contract. ### Requirements - The `adminKey` MUST sign all contract update transactions except one that only updates the `expirationTime`. - A transaction that modifies any field other than `expirationTime` for a contract without a valid `adminKey` set SHALL fail with response code `MODIFYING_IMMUTABLE_CONTRACT`. - Fields set to non-default values in this transaction SHALL be updated on success. Fields not set to non-default values SHALL NOT be updated on success. ### Block Stream Effects None
Used in:
,* The contact ID that identifies the smart contract to be updated.<br/> This field MUST be set, and MUST NOT be a default ID (`0.0.0`).
* If set, modify the time at which this contract will expire.<br/> An expired contract requires a rent payment to "renew" the contract. A transaction to update this field is how that rent payment is made. <p> This value MUST NOT be less than the current `expirationTime` of the contract. If this value is earlier than the current value, the transaction SHALL fail with response code `EXPIRATION_REDUCTION_NOT_ALLOWED`.
* If set, modify the key that authorizes updates to the contract. <p> If this field is set to a valid Key, this key and the previously set key MUST both sign this transaction.<br/> If this value is an empty `KeyList`, the prior key MUST sign this transaction, and the smart contract SHALL be immutable after this transaction completes, except for expiration and renewal.<br/> If this value is not an empty `KeyList`, but does not contain any cryptographic keys, or is otherwise malformed, this transaction SHALL fail with response code `INVALID_ADMIN_KEY`.
* Replaced with `staked_id` alternatives. This field is unused and SHALL NOT modify the contract state.<br/> The id of an account to which the contract is proxy staked
* If set, modify the duration added to expiration time by each auto-renewal to this value.
* This field is unused and SHALL NOT modify the contract state.<br/> Previously, an ID of a file containing the bytecode of the Solidity transaction that created this contract.
This should be condensed to just a field instead of a oneof and field 9 reserved.
* This value could not accurately distinguish unset or deliberately empty. memoWrapper should be used instead.<br/>
* If set, modify the short memo for this smart contract. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* If set, modify the maximum number of tokens that can be auto-associated with the contract. <p> If this is set and less than or equal to `used_auto_associations`, or 0, then this contract MUST manually associate with a token before transacting in that token.<br/> This value MAY also be `-1` to indicate no limit.<br/> This value MUST NOT be less than `-1`.
* If set, modify the account, in the same shard and realm as this smart contract, that has agreed to allow the network to use its balance, when needed, to automatically extend this contract's expiration time. <p> If this field is set to a non-default value, that Account MUST sign this transaction.<br/> If this field is set to a default AccountID value (`0.0.0`), any pre-existing `auto_renew_account_id` value SHALL be removed on success.
* An account identifier.<br/> A staked account acts as a proxy, and this contract effectively nominates the same node as the identified account. <p> If set, modify this smart contract such that it SHALL stake its HBAR to the same node as the identified account.<br/> If this field is set to a default AccountID value (`0.0.0`), any pre-existing `staked_account_id` value SHALL be removed on success.
* A node identifier.<br/> A staked node identifier indicates the consensus node that this account nominates for staking. <p> If set, modify this smart contract such that it SHALL stake its HBAR to this node. If set to a the value `-1` any pre-existing `staked_node_id` value SHALL be removed on success. <p> <blockquote>Note: node IDs do fluctuate as node operators change. Most contracts are immutable, and a contract staking to an invalid node ID SHALL NOT participate in staking. Immutable contracts may find it more reliable to use a proxy account for staking (via `staked_account_id`) to enable updating the _effective_ staking node ID when necessary through updating the proxy account.</blockquote>
* A flag indicating if staking rewards are declined.<br/> If set, modify the flag indicating if this contract declines to accept rewards for staking its HBAR to secure the network. <p> If set to true, this smart contract SHALL NOT receive any reward for staking its HBAR balance to help secure the network, regardless of staking configuration, but MAY stake HBAR to support the network without reward.
* Add a hash value to the ledger and associate it with an account. Create an entry in the ledger for a SHA-384 hash of some content, and associate that with a specific account. This is sometimes used to associate a credential or certificate with an account as a public record.<br/> The entry created is also associated with a list of keys, all of which MUST sign this transaction.<br/> The account key for the associated account MUST sign this transaction.<br/> The live hash, once created, MAY be removed from the ledger with one or more signatures. - The account key of the account associated to the live hash. - Any one key from the key list in the live hash entry. - Any combination of keys from the key list in the live hash entry.
Used in:
* A Live Hash to be added to the ledger and associated with the identified account.
* An approved allowance of hbar transfers. This message specifies one allowance for a single, unique, combination of owner, spender, and amount. If `owner` is not set, the effective `owner` SHALL be the `payer` for the enclosing transaction.<br/> The `spender` MUST be specified and MUST be a valid account.<br/> The `amount` MUST be a whole number, and SHOULD be greater than `0` unless this allowance is intended to _remove_ a previously approved allowance.
Used in:
* An owner account identifier.<br/> This is the account identifier of the account granting an allowance for the `spender` to transfer tokens held by this account.
* A spender account identifier.<br/> This is the account identifier of the account permitted to transfer tokens held by the `owner`.
* An amount of tinybar (10<sup>-8</sup> HBAR).<br/> This is the amount of HBAR held by the `owner` that the `spender` is permitted to transfer. <p> This value MUST be a whole number.<br/> This value MUST be greater than 0 to create a new allowance.<br/> This value MAY be exactly `0` to _remove_ an existing allowance.<br/>
* Create ("Approve") allowances for one account to transfer tokens owned by a different account.<br/> An allowance permits a "spender" account to independently transfer tokens owned by a separate "owner" account. Each such allowance permits spending any amount, up to a specified limit, for fungible/common tokens; a single specified non-fungible/unique token, or all non-fungible/unique tokens of a particular token type held by the "owner" account. If the "owner" account is not specified for any allowance in this transaction (the `owner` field is not set), the `payer` account for this transaction SHALL be owner for that allowance.<br/> Each `owner` account specified in any allowance approved in this transaction MUST sign this transaction.<br/> If the `amount` field for any fungible/common allowance in this transaction is `0`, then that allowance SHOULD match an existing, previously approved, allowance which SHALL be removed.<br/> There are three lists in this message. Each list MAY be empty, but _at least one_ list MUST contain _at least one_ entry. Example for the `payer` rule.<br/> - Given an account `0.0.X` that pays for this transaction, and owner is not specified in an allowance of `200` HBAR to spender account `0.0.Y`. At consensus the spender account `0.0.Y` will have a new allowance to spend `200` HBAR from the balance of account `0.0.X`. ### Block Stream Effects None
Used in:
,* List of hbar allowances approved by the account owner. <p> This list MAY be empty, provided at least one other list is not empty.
* List of non-fungible token allowances approved by the account owner. <p> This list MAY be empty, provided at least one other list is not empty.
* List of fungible token allowances approved by the account owner. <p> This list MAY be empty, provided at least one other list is not empty.
Create a new account. If the auto_renew_account field is set, the key of the referenced account MUST sign this transaction.<br/> Current limitations REQUIRE that `shardID` and `realmID` both MUST be `0`. This is expected to change in the future. ### Block Stream Effects The newly created account SHALL be included in State Changes.
Used in:
,* The identifying key for this account. This key represents the account owner, and is required for most actions involving this account that do not modify the account itself. This key may also identify the account for smart contracts. <p> This field is REQUIRED. This `Key` MUST NOT be an empty `KeyList` and MUST contain at least one "primitive" (i.e. cryptographic) key value.
* An amount, in tinybar, to deposit to the newly created account. <p> The deposited amount SHALL be debited to the "payer" account for this transaction.
* Use `staked_id` instead.<br/> An account identifier for a staking proxy.
* Removed prior to the first available history, and may be related to an early design dead-end.<br/> An amount below which record stream records would not be created for a transaction that reduces this account balance.
* Removed prior to the first available history, and may be related to an early design dead-end.<br/> An amount below which record stream records would not be created for a transaction that increases this account balance.
* A flag indicating the account holder must authorize all incoming token transfers. <p> If this flag is set then any transaction that would result in adding hbar or other tokens to this account balance MUST be signed by the identifying key of this account (that is, the `key` field).<br/> If this flag is set, then the account key (`key` field) MUST sign this create transaction, in addition to the transaction payer.
* The duration between account automatic renewals.<br/> All entities in state may be charged "rent" occasionally (typically every 90 days) to prevent unnecessary growth of the ledger. This value sets the interval between such events for this account. <p> If the account balance (in HBAR) is insufficient to pay the full renewal fee, the entire HBAR balance SHALL be consumed and the expiration for the account SHALL be extended as far as the available balance can support.<br/> If the account HBAR balance is `0` when the account must be renewed, then the account SHALL be deleted, and subsequently removed from state.
* The shard in which this account is created <p> Currently, this MUST be `0`.<br/> If the desired shard is `0`, this SHOULD NOT be set.
* The realm in which this account is created. <p> The shard number for this realm MUST match the value in `shardID`.<br/> Currently, this MUST be `0` for both fields.<br/> If the desired realm is `0`, this SHOULD NOT be set.
* This field was never actually used or enabled, and is not expected to ever be used in the future.<br/>
* A short description of this Account. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* A maximum number of tokens that can be auto-associated with this account.<br/> By default this value is 0 for all accounts except for automatically created accounts (e.g. smart contracts), which default to -1. <p> If this value is `0`, then this account MUST manually associate to a token before holding or transacting in that token.<br/> This value MAY also be `-1` to indicate no limit.<br/> This value MUST NOT be less than `-1`.
* ID of the account to which this account is staking its balances. <p> If this account is not currently staking its balances, then this field, if set, MUST be the sentinel value of `0.0.0`.
* ID of the node this account is staked to. <p> If this account is not currently staking its balances, then this field, if set, SHALL be the sentinel value of `-1`.<br/> Wallet software SHOULD surface staking issues to users and provide a simple mechanism to update staking to a new node ID in the event the prior staked node ID ceases to be valid.
* A boolean indicating that this account has chosen to decline rewards for staking its balances. <p> This account MAY still stake its balances, but SHALL NOT receive reward payments for doing so, if this value is set.
* Bytes to be used as the account's alias. <p> This value, if set, MUST be one of the following values<br/> <ul> <li>The 32-byte serialized form of the ED25519 account key.</li> <li>The 33-byte _compressed_ serialized form of the ECDSA(secp256k1) account key.</li> <li>The 20-byte EVM address derived from a keccak-256 hash of the ECDSA(secp256k1) account key</li> </ul> All aliases within the network MUST be unique. If this value matches an existing account alias, this `create` transaction SHALL fail.<br/> If an account exists with a particular alias value, any transaction to transfer value _to_ that alias SHALL deposit the transferred value in the existing account, and SHALL NOT assess an account creation fee.<br/> Once set, an account alias is immutable and MUST NOT be changed.
* Delete one or more allowances.<br/> Given one or more, previously approved, allowances for non-fungible/unique tokens to be transferred by a spending account from an owning account; this transaction removes a specified set of those allowances. The owner account for each listed allowance MUST sign this transaction.<br/> Allowances for HBAR cannot be removed with this transaction. The owner account MUST submit a new `cryptoApproveAllowance` transaction with the amount set to `0` to "remove" that allowance.<br/> Allowances for fungible/common tokens cannot be removed with this transaction. The owner account MUST submit a new `cryptoApproveAllowance` transaction with the amount set to `0` to "remove" that allowance.<br/> ### Block Stream Effects None
Used in:
,* List of non-fungible/unique token allowances to remove. <p> This list MUST NOT be empty.
* Delete a specific live hash associated to a given account. This transaction MUST be signed by either the key of the associated account, or at least one of the keys listed in the live hash. ### Block Stream Effects None
Used in:
* An account associated to a live hash.
* The SHA-384 value of a specific live hash to delete.
* Delete an account.<br/> This will mark an account deleted, and transfer all tokens to a "sweep" account. A deleted account SHALL NOT hold a balance in any token type.<br/> A deleted account SHALL remain in state until it expires.<br/> Transfers that would increase the balance of a deleted account SHALL fail.<br/> A deleted account MAY be subject of a `cryptoUpdate` transaction to extend its expiration.<br/> When a deleted account expires it SHALL be removed entirely, and SHALL NOT be archived. ### Block Stream Effects None
Used in:
,* An account identifier. <p> The identified account SHALL receive all tokens, token balances, and non-fungible/unique from the deleted account.<br/> The identified account MUST sign this transaction.<br/> If not set, the account to be deleted MUST NOT have a balance in any token, a balance in HBAR, or hold any NFT.
* An account identifier. <p> This account SHALL be deleted if this transaction succeeds.<br/> This account SHOULD NOT hold any balance other than HBAR.<br/> If this account _does_ hold balances, the `transferAccountID` value MUST be set to a valid transfer account.<br/> This account MUST sign this transaction.<br/> This field MUST be set to a valid account identifier.
* Query to read the HBAR balance of an account or contract. This query SHALL return _only_ the HBAR balance for an account or smart contract. Early releases of the network would return all fungible/common token balances, but HIP-367 made it infeasible to return all such balances. This query SHALL NOT return any information beyond the current HBAR balance.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* An account identifier.<br/> This identifies an account for which the balance is requested. <p> Exactly one identifier MUST be provided.
* A smart contract identifier.<br/> This identifies a smart contract for which the balance is requested. <p> Exactly one identifier MUST be provided.
* Response to a CryptoGetAccountBalanceQuery.<br/> This response SHALL contain only the information needed to identify the query request and the actual HBAR balance of the identified account or contract.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* An account identifier.<br/> This is the account ID queried. <br/> The inclusion of the account queried is useful with state proofs, when needed to prove an account balance to a third party.
* A current account balance.<br/> This is the current HBAR balance denominated in tinybar (10<sup>-8</sup> HBAR).
* This field became infeasible to support after HIP-367 removed limits on the number of associated tokens.<br/> A list of token balances for all tokens associated to the account. <p> This field was deprecated by <a href="https://hips.hedera.com/hip/hip-367">HIP-367</a>, which allowed an account to be associated to an unlimited number of tokens. This scale makes it more efficient for users to consult mirror nodes to review their token balances.
* Request records of all "recent" transactions for which the specified account is the effective payer.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* An account identifier.<br/> This identifies the account to use when filtering the transaction record lists. <p> This field is REQUIRED.
* Return records of all "recent" transactions for which the specified account is the effective payer.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* An account identifier.<br/> This identifies the account used when filtering the transaction record lists. <p> This field SHALL match the requested account identifier.
* A list of records. <p> This list SHALL contain all available and "recent" records in which the account identified in the `accountID` field acted as effective payer.
* A query to read information for an account. The returned information SHALL include balance.<br/> The returned information SHALL NOT include allowances.<br/> The returned information SHALL NOT include token relationships.<br/> The returned information SHALL NOT include account records.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* The account ID for which information is requested
* Response when the client sends the node CryptoGetInfoQuery
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* Details of the account. <p> A state proof MAY be generated for this field.
* Information describing A single Account in the Hedera distributed ledger. #### Attributes Each Account may have a unique three-part identifier, a Key, and one or more token balances. Accounts also have an alias, which has multiple forms, and may be set automatically. Several additional items are associated with the Account to enable full functionality. #### Expiration Accounts, as most items in the network, have an expiration time, recorded as a `Timestamp`, and must be "renewed" for a small fee at expiration. This helps to reduce the amount of inactive accounts retained in state. Another account may be designated to pay any renewal fees and automatically renew the account for (by default) 30-90 days at a time as a means to optionally ensure important accounts remain active. ### Staking Accounts may participate in securing the network by "staking" the account balances to a particular network node, and receive a portion of network fees as a reward. An account may optionally decline these rewards but still stake its balances. #### Transfer Restrictions An account may optionally require that inbound transfer transactions be signed by that account as receiver (in addition to any other signatures required, including sender).
Used in:
* a unique identifier for this account. <p> An account identifier, when assigned to this field, SHALL be of the form `shard.realm.number`.
* A Solidity ID. <p> This SHALL be populated if this account is a smart contract, and SHALL NOT be populated otherwise.<br/> This SHALL be formatted as a string according to Solidity ID standards.
* A boolean indicating that this account is deleted. <p> Any transaction involving a deleted account SHALL fail.
* Replaced by StakingInfo.<br/> ID of the account to which this account is staking its balances. If this account is not currently staking its balances, then this field, if set, SHALL be the sentinel value of `0.0.0`.
* Replaced by StakingInfo.<br/> The total amount of tinybar proxy staked to this account.
* The key to be used to sign transactions from this account, if any. <p> This key SHALL NOT be set for hollow accounts until the account is finalized.<br/> This key SHALL be set on all other accounts, except for certain immutable accounts (0.0.800 and 0.0.801) necessary for network function and otherwise secured by the governing council.
* The HBAR balance of this account, in tinybar (10<sup>-8</sup> HBAR). <p> This value SHALL always be a whole number.
* Obsolete and unused.<br/> The threshold amount, in tinybars, at which a record was created for any transaction that decreased the balance of this account.
* Obsolete and unused.<br/> The threshold amount, in tinybars, at which a record was created for any transaction that increased the balance of this account.
* A boolean indicating that the account requires a receiver signature for inbound token transfer transactions. <p> If this value is `true` then a transaction to transfer tokens to this account SHALL NOT succeed unless this account has signed the transfer transaction.
* The current expiration time for this account. <p> This account SHALL be due standard renewal fees when the network consensus time exceeds this time.<br/> If rent and expiration are enabled for the network, and automatic renewal is enabled for this account, renewal fees SHALL be charged after this time, and, if charged, the expiration time SHALL be extended for another renewal period.<br/> This account MAY be expired and removed from state at any point after this time if not renewed.<br/> An account holder MAY extend this time by submitting an account update transaction to modify expiration time, subject to the current maximum expiration time for the network.
* A duration to extend this account's expiration. <p> The network SHALL extend the account's expiration by this duration, if funds are available, upon automatic renewal.<br/> This SHALL NOT apply if the account is already deleted upon expiration.<br/> If this is not provided in an allowed range on account creation, the transaction SHALL fail with INVALID_AUTO_RENEWAL_PERIOD. The default values for the minimum period and maximum period are currently 30 days and 90 days, respectively.
* All of the livehashes attached to the account (each of which is a hash along with the keys that authorized it and can delete it)
* As of `HIP-367`, which enabled unlimited token associations, the potential scale for this value requires that users consult a mirror node for this information.
* A short description of this account. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* The total number of non-fungible/unique tokens owned by this account.
* The maximum number of tokens that can be auto-associated with the account. <p> If this is less than or equal to `used_auto_associations` (or 0), then this account MUST manually associate with a token before transacting in that token.<br/> Following HIP-904 This value may also be `-1` to indicate no limit.<br/> This value MUST NOT be less than `-1`.
* An account alias.<br/> This is a value used in some contexts to reference an account when the tripartite account identifier is not available. <p> This field, when set to a non-default value, is immutable and SHALL NOT be changed.
* The ledger ID of the network that generated this response. <p> This value SHALL identify the distributed ledger that responded to this query.
* The ethereum transaction nonce associated with this account.
* Staking information for this account.
* Request detail for a specific live hash associated to a specific account.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* An account ID.<br/> The network SHALL return live hash information for this account, if successful.
* The specific SHA-384 live hash to inspect
* Return the full live hash associated to an account, if it is present. > Note that to generate a state proof of the _absence_ of a live hash from > an account a transaction MUST retrieve a state proof of the `Account` > with its list of live hashes.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* The requested live hash, if found.
* Get all the accounts that are proxy staking to this account. For each of them, give the amount currently staked. This was never implemented.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* The Account ID for which the records should be retrieved
* Response when the client sends the node CryptoGetStakersQuery
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* List of accounts proxy staking to this account, and the amount each is currently proxy staking
* Transfer HBAR and/or other tokens among two or more accounts and/or smart contracts. Transfers of HBAR or fungible/common tokens in this transaction are structured as a "double-entry" transfer list which debits one or more accounts, and separately credits one or more accounts. Each such transfer list may specify up to 10 individual credits or debits.<br/> Transfers of non-fungible/unique tokens in this transaction are structured as a "single-entry" transfer list, which both debits one account and credits another account in a single entry. At least one transfer MUST be present, this MAY be an HBAR transfer in `transfers`, or MAY be a token transfer in `tokenTransfers`.<br/> Either `transfers` or `tokenTransfers` MAY be unset, provided the other is set and not empty.<br/> If any one account with a debit in any transfer list holds insufficient balance to complete the transfer, the entire transaction SHALL fail, and all transfers SHALL NOT be completed.<br/> If any one account that is _sending_ an individual non-fungible/unique (NFT) token does not currently hold that unique NFT, the entire transaction SHALL FAIL, and all transfers SHALL NOT be completed. The transaction fee SHALL be charged for a transaction that fails due to insufficient balance or not holding the NFT to be transferred.<br/> Each account with any debit amounts in any transfer list MUST sign this transaction.<br/> Each account with any credit amounts in any transfer list that also has the `receiverSigRequired` flag set MUST sign this transaction. ### Block Stream Effects All debits and credits completed by this transaction SHALL be included in the transaction result transfer list.<br/> Multiple fungible/common debits from one account, or credits to one account, MAY be consolidated to a single debit or credit entry in the transaction result.<br/> Multiple non-fungible/unique transfers SHALL NOT be consolidated in the transaction result.
Used in:
,* A list of HBAR transfers. <p> Each transfer in this list MUST be denominated in tinybar.
* One or more lists of token transfers. <p> This list MUST NOT contain more than 10 entries.<br/> If custom fees must be charged, the fee SHALL be assessed against the effective "payer" for this transaction.<br/> If the effective "payer" for this transaction lacks sufficient balance to pay custom fees assessed, the entire transaction SHALL fail with a response code `INSUFFICIENT_PAYER_BALANCE_FOR_CUSTOM_FEE`.
* Modify the current state of an account. ### Requirements - The `key` for this account MUST sign all account update transactions. - If the `key` field is set for this transaction, then _both_ the current `key` and the new `key` MUST sign this transaction, for security and to prevent setting the `key` field to an invalid value. - If the `auto_renew_account` field is set for this transaction, the account identified in that field MUST sign this transaction. - Fields set to non-default values in this transaction SHALL be updated on success. Fields not set to non-default values SHALL NOT be updated on success. - All fields that may be modified in this transaction SHALL have a default value of unset (a.k.a. `null`). ### Block Stream Effects None
NOTE: Seven deprecated fields should probably be removed and the field names reserved. reserved 4,5,6,7,10,11,12 Also, the `receiverSigRequiredField` oneOf should be removed around `receiverSigRequiredWrapper` and the field renamed (both actions are "safe" in protobuf) to `receiver_signature_required`.
Used in:
,* An account identifier.<br/> This identifies the account which is to be modified in this transaction. <p> This field is REQUIRED.
* An account key.<br/> This may be a "primitive" key (a singly cryptographic key), or a composite key. <p> If set, this key MUST be a valid key.<br/> If set, the previous key and new key MUST both sign this transaction.
* Removed in favor of the `staked_id` oneOf.<br/> An account identifier for a "proxy" account. This account's HBAR are staked to a node selected by the proxy account.
* Removed prior to the first available history.<br/> A fraction to split staking rewards between this account and the proxy account.
This entire oneOf is deprecated, and the concept is not implemented.
* Removed prior to the first available history, and may be related to an early design dead-end.<br/> The new threshold amount (in tinybars) for which an account record is created for any send/withdraw transaction
* Removed prior to the first available history, and may be related to an early design dead-end.<br/> The new threshold amount (in tinybars) for which an account record is created for any send/withdraw transaction
This entire oneOf is deprecated, and the concept is not implemented.
* Removed prior to the first available history, and may be related to an early design dead-end.<br/> The new threshold amount (in tinybars) for which an account record is created for any receive/deposit transaction.
* Removed prior to the first available history, and may be related to an early design dead-end.<br/> The new threshold amount (in tinybars) for which an account record is created for any receive/deposit transaction.
* A duration to extend account expiration.<br/> An amount of time, in seconds, to extend the expiration date for this account when _automatically_ renewed. <p> This duration MUST be between the current configured minimum and maximum values defined for the network.<br/> This duration SHALL be applied only when _automatically_ extending the account expiration.
* A new account expiration time, in seconds since the epoch. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.<br/> If set, this value MUST be later than the current consensus time.<br/> If set, this value MUST be earlier than the current consensus time extended by the current maximum expiration time configured for the network.
* Removed to distinguish between unset and a default value.<br/> Do NOT use this field to set a false value because the server cannot distinguish from the default value. Use receiverSigRequiredWrapper field for this purpose.
* A flag indicating the account holder must authorize all incoming token transfers. <p> If this flag is set then any transaction that would result in adding hbar or other tokens to this account balance MUST be signed by the identifying key of this account (that is, the `key` field).
* A short description of this Account. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* A maximum number of tokens that can be auto-associated with this account.<br/> By default this value is 0 for all accounts except for automatically created accounts (i.e smart contracts) which default to -1. <p> If this value is `0`, then this account MUST manually associate to a token before holding or transacting in that token.<br/> This value MAY also be `-1` to indicate no limit.<br/> If set, this value MUST NOT be less than `-1`.<br/>
* ID of the account to which this account is staking its balances. <p> If this account is not currently staking its balances, then this field, if set, MUST be the sentinel value of `0.0.0`.
* ID of the node this account is staked to. <p> If this account is not currently staking its balances, then this field, if set, SHALL be the sentinel value of `-1`.<br/> Wallet software SHOULD surface staking issues to users and provide a simple mechanism to update staking to a new node ID in the event the prior staked node ID ceases to be valid.
* A boolean indicating that this account has chosen to decline rewards for staking its balances. <p> This account MAY still stake its balances, but SHALL NOT receive reward payments for doing so, if this value is set, and `true`.
* The "current" fee schedule and the "next" fee schedule. The current fee schedule is the schedule that SHALL apply to the current transaction.<br/> The next fee schedule is the schedule that SHALL apply after the current schedule expires.<br/> We store both to avoid a condition where transactions are processed very near the time when a fee schedule expires and it might be indeterminate which fees to apply. With both current and next fee schedule the network can deterministically apply the correct fee schedule based on consensus timestamp for each transaction.
* A current, unexpired, fee schedule.
* A future fee schedule to use when the current schedule expires.
* A transfer fee to assess during a CryptoTransfer.<br/> This fee applies to transactions that transfer units of the token to which the fee is attached. A custom fee may be either fixed or fractional, and must specify a fee collector account to receive the assessed fees. Custom fees MUST be greater than zero (0).
Used in:
, , ,* A fixed fee to be charged to the `sender` for every token transfer. <p> This type of fee MAY be defined for any token type.<br/> This type of fee MAY be more consistent and reliable than other types.
* A fee defined as a fraction of the tokens transferred. <p> This type of fee MUST NOT be defined for a non-fungible/unique token type.<br/> This fee MAY be charged to either sender, as an increase to the amount sent, or receiver, as a reduction to the amount received.
* A fee charged as royalty for any transfer of a non-fungible/unique token. <p> This type of fee MUST NOT be defined for a fungible/common token type.
* The account to receive the custom fee.
* Flag indicating to exempt all custom fee collector accounts for this token type from paying this custom fee when sending tokens. <p> The treasury account for a token, and the account identified by the `fee_collector_account_id` field of this `CustomFee` are always exempt from this custom fee to avoid redundant and unnecessary transfers. If this value is `true` then the account(s) identified in `fee_collector_account_id` for _all_ custom fee definitions for this token type SHALL also be exempt from this custom fee. This behavior is specified in HIP-573.
* A maximum custom fee that the user is willing to pay. <p> This message is used to specify the maximum custom fee that given user is willing to pay.
Used in:
* A payer account identifier.
* The maximum fees that the user is willing to pay for the message.
* A length of time in seconds. It is RECOMMENDED that this message be used whenever an amount of time, rather than a specific point in time, is needed.
Used in:
, , , , , , , , , , , , , ,* The number of seconds for this duration.
* The ID for a single entity (account, livehash, file, or smart contract) > The query that defines this message is no longer supported.
Used in:
* The Account ID for the cryptocurrency account
* A uniquely identifying livehash of an account
* The file ID of the file
* The smart contract ID that identifies instance
* A Pair of AccountID and TokenID.<br/> This is used as a key in certain cases. Deprecated.<br/> The TokenAssociation message should be used instead of this message.
* An account identifier for the associated account.
* A token identifier for the associated token.
* A single 64-bit number identifying a Hedera native entity. Deprecated.<br/> A primitive `int64` or `google.protobuf.Int64Value` wrapper is preferred.
* The entity number to store.
* A transaction in Ethereum format.<br/> Make an Ethereum transaction "call" with all data in Ethereum formats, including the contract alias. Call data may be in the transaction, or stored within an Hedera File. The caller MAY offer additional gas above what is offered in the call data, but MAY be charged up to 80% of that value if the amount required is less than this "floor" amount. ### Block Stream Effects An `EthereumOutput` message SHALL be emitted for each transaction.
Used in:
* The raw Ethereum transaction data. <p> This transaction MUST be RLP encoded.<br/> This SHALL be the complete transaction data unless the `call_data` field is set.<br/> If `call_data` is set, this field SHALL be modified to replace the `callData` element with the content of the referenced file.<br/> The transaction signature SHALL be validated after `callData` is complete, if necessary.
* The `callData` for the Ethereum transaction. <p> If this field is set, the data in the `ethereum_data` field SHALL be re-written to replace the `callData` element with the contents of this file at time of execution.<br/> The Ethereum transaction MUST be "rehydrated" with this modified `callData` before signature validation MAY be performed.
* A maximum amount of "gas" offered to pay the Ethereum transaction costs. <p> This gas offered is in addition to any gas supplied with the Ethereum transaction as declared in the `ethereum_data`.<br/> In most circumstances the account with an alias matching the public key available from the Ethereum transaction signature offers sufficient gas to power the transaction, but in some cases it MAY be desirable for the account submitting this transaction to either supplement or entirely fund the transaction cost.<br/> The amount of gas offered here SHALL be used to pay for transaction costs _in excess_ of any gas offered within the Ethereum transaction.<br/> If the gas offered within the Ethereum transaction is sufficient for all costs, the gas offered in this field SHALL NOT be expended.<br/> Regardless of actual transaction cost, the payer for this transaction SHALL NOT be charged more gas than the amount offered here.<br/> If the sum of both gas amounts is not sufficient to pay for the transaction, the entire total amount of gas offered SHALL be expended, the transaction SHALL fail, and the response code `INSUFFICIENT_GAS` SHALL be set.<br/> If any amount of gas is charged to the payer of this transaction, at least 80% of the value offered in this field SHALL be charged as a minimum fee.<br/> If the amount of gas authorized in the Ethereum transaction data is `0`, then the payer of this transaction SHALL be charged the entire cost of the Ethereum transaction, subject to the limit set in this field.
* An exchange rate as a ratio of USD cents per HBAR. This ratio SHALL be used to convert tinycent (`10<sup>-8</sup>` USD cent) to tinybar for fees and other purposes.<br/> When applying an `ExchangeRate`, implementations SHOULD ensure input values are `tinycent` and/or `tinybar` before applying the exchange ratio.<br/> Exchange results MAY be converted to USD or HBAR via division if whole unit values are required. The ratio described here SHALL be assigned such that a value in `tinybar` may be obtained with the following equation. ``` amountInTinybar = (amountInTinycent * hbarEquiv) / centEquiv ```
Used in:
* Denominator for a ratio of USD cents per HBAR.
* Numerator for a ratio of USD cents per HBAR.
* Expiration time stamp for this exchange rate.
* A set of two exchange rates.<br/> The exchange rate for the network is stored and reported as a set of two rates; current and next. This structure supports the network cleanly switching between exchange rates when necessary. This also provides clear notice to clients when the exchange rate will change and the exchange rate that will be applied for the next time period. The difference in rate between `currentRate` and `nextRate` MUST NOT exceed the configured maximum percentage change. This limit SHALL be a network configuration value.
Used in:
* A current exchange rate. <p> When present in a receipt, this SHALL be the exchange rate used to compute the fees for that transaction.
* A future exchange rate. <p> This exchange rate SHALL be applied after the current exchange rate expires.
* A set of values the nodes use in determining transaction and query fees, and constants involved in fee calculations. Nodes SHALL multiply the amount of "resources" allocated to a transaction or query by the corresponding price to calculate the appropriate fee. Units are one-thousandth of a `tinyCent`. The "resource" allocations SHALL be estimated based on transaction characteristics and current network state, and MAY be further adjusted based on network load and congestion. This SHALL be used, in different contexts, for the cost _factors_ used to calculate charged amounts, for the resource accumulation, and for actual amounts to be charged.<br/> Amounts recorded here MUST be converted to tinybar according to the current active `ExchangeRate` for the network.
Used in:
* Base: "minimum total fee". <p> The calculated fee MUST be greater than this value.
* Base: "maximum total fee". <p> The calculated fee MUST be less than this value.
* Base: "constant fee".<br/> A baseline constant contribution to total fee.
* Bandwidth: "bytes per transaction".<br/> The fee for bandwidth consumed by a transaction, measured in bytes
* Signatures: "validations per transaction".<br/> The fee for signature verifications required by a transaction
* Memory: "RAM byte-hours".<br/> The fee for RAM required to process a transaction, measured in byte-hours
* Disk: "storage byte-hours".<br/> The fee for storage required by a transaction, measured in byte-hours
* Compute: Ethereum term for a derivative EVM compute resource.<br/> The fee of computation for a smart contract transaction. The value of gas is set by a conversion rate, and is regularly updated to reflect reasonable and customary costs.
* Ad valorem: "transferred value".<br/> The fee for HBAR transferred by a transaction.
* Response memory: "bytes per response".<br/> The fee for data retrieved from memory to deliver a response, measured in bytes
* Response disk: "storage bytes per response".<br/> The fee for data retrieved from disk to deliver a response, measured in bytes
* A total fee, in component amounts charged for a transaction. Total fees are composed of three sets of components. - Node data, components that compensate the specific node that submitted the transaction. - Network data, components that compensate the Hedera network for gossiping the transaction and determining the consensus timestamp. - Service data, components that compensate the Hedera network for the ongoing maintenance and operation of the network, as well as ongoing development of network services. Fee components are recorded in thousandths of a tiny cent, and the network exchange rate converts these to tinybar amounts, which are what the network charges for transactions and what the network reports in the record stream.
Used in:
* Fee components to be paid to the submitting node.
* Fee components to be paid to the network for bringing a transaction to consensus.
* Fee components to be paid to the network for providing the immediate and ongoing services associated with executing the transaction, maintaining the network, and developing the network software.
* A sub-type distinguishing between different types of `FeeData` that may apply to the same base transaction type (associated with an `HederaFunctionality`).
* A wrapper for fee exempt key list.<br/> This wrapper exists to enable an update transaction to differentiate between a field that is not set and an empty list of keys. <p> An _unset_ field of this type SHALL NOT modify existing values.<br/> A _set_ field of this type with an empty `keys` list SHALL remove any existing values.
Used in:
* A set of keys.<br/> The keys in this list are permitted to submit messages to the topic without paying the topic's custom fees. <p> If a submit transaction is signed by _any_ key included in this set, custom fees SHALL NOT be charged for that transaction.
* A set of fee schedules covering all transaction types and query types, along with a specific time at which this fee schedule will expire. Nodes SHALL use the most recent unexpired fee schedule to determine the fees for all transactions based on various resource components imputed to each transaction.
Used in:
* Sets of fee coefficients for various transaction or query types.
* A time, in seconds since the `epoch`, when this fee schedule will expire. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.
* Representation of an Hedera File Service `file`. Files offer a place to store additional data, much more than is available in other entities, for use with smart contracts, non-fungible tokens, etc... As with all network entities, a file has a unique entity number, which is given along with the network's shard and realm in the form of a shard.realm.number id.
* This file's ID within the global network state. <p> This value SHALL be unique within the network.
* The file's expiration time in seconds since the epoch.<br/> This value should be compared against consensus time, which may not exactly match clock time at the moment of expiration. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.
* A list of keys that MUST sign any transaction to create or update this file. <p> Only _one_ of these keys must sign a transaction to delete the file.<br/> This field MAY be `null` or an empty list.<br/> If this field is null or an empty `KeyList`, then the file SHALL be immutable.<br/> For an immutable file, the only transaction permitted to modify that file SHALL be a `fileUpdate` transaction with _only_ the `expirationTime` set.
* The contents of the file. <p> This SHALL be limited to the current maximum file size; typically no more than 1 Megabyte (1048576 bytes).
* A short description of the file. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* A flag indicating that this file is deleted. <p> The `contents` of a deleted "regular" file SHALL be an empty (zero length) bytes.
* The pre-system-delete expiration time of a deleted "system" file, in seconds. <p> This field SHALL contain the original expiration time of a "system" file that is deleted. This SHOULD be used to restore that expiration time if the file is subsequently "un-deleted" before it is purged from the system.<br/> A "regular" file cannot be "un-deleted", so this field SHALL NOT be set for those files.
* A transaction body for an `appendContent` transaction.<br/> This transaction body provides a mechanism to append content to a "file" in network state. Hedera transactions are limited in size, but there are many uses for in-state byte arrays (e.g. smart contract bytecode) which require more than may fit within a single transaction. The `appendFile` transaction exists to support these requirements. The typical pattern is to create a file, append more data until the full content is stored, verify the file is correct, then update the file entry with any final metadata changes (e.g. adding threshold keys and removing the initial upload key). Each append transaction MUST remain within the total transaction size limit for the network (typically 6144 bytes).<br/> The total size of a file MUST remain within the maximum file size limit for the network (typically 1048576 bytes). #### Signature Requirements Append transactions MUST have signatures from _all_ keys in the `KeyList` assigned to the `keys` field of the file.<br/> See the [File Service](#FileService) specification for a detailed explanation of the signature requirements for all file transactions. ### Block Stream Effects None
Used in:
,* A file identifier.<br/> This identifies the file to which the `contents` will be appended. <p> This field is REQUIRED.<br/> The identified file MUST exist.<br/> The identified file MUST NOT be larger than the current maximum file size limit.<br/> The identified file MUST NOT be deleted.<br/> The identified file MUST NOT be immutable.
* An array of bytes to append.<br/> <p> This content SHALL be appended to the identified file if this transaction succeeds.<br/> This field is REQUIRED.<br/> This field MUST NOT be empty.
* Create a new file. If successful, the new file SHALL contain the (possibly empty) content provided in the `contents` field.<br/> When the current consensus time exceeds the `expirationTime` value, the network SHALL expire the file, and MAY archive the state entry. #### Signature Requirements The HFS manages file authorization in a manner that can be confusing. The core element of file authorization is the `keys` field, which is a `KeyList`; a list of individual `Key` messages, each of which may represent a simple or complex key.<br/> The file service transactions treat this list differently.<br/> A `fileCreate`, `fileAppend`, or `fileUpdate` MUST have a valid signature from _each_ key in the list.<br/> A `fileDelete` MUST have a valid signature from _at least one_ key in the list. This is different, and allows a file "owned" by many entities to be deleted by any one of those entities. A deleted file cannot be restored, so it is important to consider this when assigning keys for a file.<br/> If any of the keys in a `KeyList` are complex, the full requirements of each complex key must be met to count as a "valid signature" for that key. A complex key structure (i.e. a `ThresholdKey`, or `KeyList`, possibly including additional `ThresholdKey` or `KeyList` descendants) may be assigned as the sole entry in a file `keys` field to ensure all transactions have the same signature requirements. If the `keys` field is an empty `KeyList`, then the file SHALL be immutable and the only transaction permitted to modify that file SHALL be a `fileUpdate` transaction with _only_ the `expirationTime` set. #### Shard and Realm The current API ignores shardID and realmID. All files are created in shard 0 and realm 0. Future versions of the API may support multiple realms and multiple shards. ### Block Stream Effects After the file is created, the FileID for it SHALL be returned in the transaction receipt, and SHALL be recorded in the transaction record.
Used in:
,* An expiration timestamp. <p> When the network consensus time exceeds this value, the network SHALL expire the file.
* A list of keys that represent file "owners". <p> Every `Key` in this list MUST sign this `fileCreate` transaction, as well as any `fileUpdate` or `fileAppend` that modifies this file.<br/> At least one `Key` in this list MUST sign any `fileDelete` transaction to delete this file.<br/> If this `KeyList` is empty, the file SHALL be created immutable and the only field that may be changed subsequently is the `expirationTime`. An immutable file cannot be deleted except with a `systemDelete` transaction, or by expiration.
* A byte array of file content. <p> The file SHALL be created with initial content equal to this field.
* A shard in which this file is created
* A realm in which this file is created. <p> The shard number for this realm MUST match the value in `shardID`.<br/> Currently, this MUST be `0` for both fields.<br/> If the desired realm is `0.0`, this SHOULD NOT be set.
* The "create realm" was never enabled, and should not be possible on file creation.<br/> An admin key for a new realm, if one is created. Added deprecated tag 2024-05.
* A short description of this file. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* Mark a file as deleted and remove its content from network state. The metadata for a deleted file SHALL be retained at least until the expiration time for the file is exceeded.<br/> On completion, the identified file SHALL be marked `deleted`.<br/> On completion, the identified file SHALL have an empty `contents` array.<br/> This transaction SHALL be final and irreversible.<br/> #### Signature Requirements At least _one_ key from the `KeyList` in the `keys` field of the identified file MUST sign this transaction.<br/> If the keys field for the identified file is an empty `KeyList` (because that file was previously created or updated to have an empty `KeyList`), then the file is considered immutable and this message SHALL fail as UNAUTHORIZED. See the [File Service](#FileService) specification for a detailed explanation of the signature requirements for all file transactions. ### What is a "system" file A "system" file is any file with a file number less than or equal to the current configuration value for `ledger.numReservedSystemEntities`, typically `750`. ### Block Stream Effects None
Used in:
,* A file identifier.<br/> This identifies the file to delete. <p> The identified file MUST NOT be a "system" file.<br/> This field is REQUIRED.
* A query request to the Hedera File Service (HFS) for file content.<br/> This query requests the content of a file, but none of the information _about_ a file. A client should submit a `fileGetInfo` query to view information about a file.<br/> File content may also be available from a block node or mirror node, generally at lower cost.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A file identifier. <p> This MUST be the identifier of a file that exists in HFS.<br/> This value SHALL identify the file to be queried.
* A response to a query for the content of a file in the Hedera File Service (HFS). This message SHALL contain the full content of the requested file, but SHALL NOT contain any metadata.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* A combination of File identifier and content bytes. <p> This SHALL NOT be set if the file does not exist.<br/> The network MAY generate a state proof for this field.
Used in:
* A file identifier. <p> This SHALL be the identifier of a file that exists in HFS.<br/> This value SHALL identify the file that was queried.
* A byte array of file content. <p> This SHALL contain the full content of the requested file.<br/> This SHALL be empty if, and only if, the file content is empty.
* Query to request file metadata from the Hedera File Service (HFS).<br/> This query requests all of the information _about_ a file, but none of the _content_ of a file. A client should submit a `fileGetContents` query to view the content of a file. File content _may_ also be available from a block node or mirror node, generally at lower cost. File metadata SHALL be available for active files and deleted files.<br/> The size of a deleted file SHALL be `0` and the content SHALL be empty.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A file identifier. <p> This MUST be the identifier of a file that exists in HFS.<br/> This value SHALL identify the file to be queried.
* A response to a query for the metadata of a file in the HFS.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* A combination of fields from the requested file metadata. <p> This SHALL NOT be set if the identified file does not exist or has expired.
Used in:
* A file identifier. <p> This SHALL be the identifier of a file that exists in HFS.<br/> This value SHALL identify the file that was queried.
* A size, in bytes, for the file.
* An expiration timestamp. <p> The file SHALL NOT expire before the network consensus time exceeds this value.<br/> The file SHALL expire after the network consensus time exceeds this value.<br/>
* A flag indicating this file is deleted. <p> A deleted file SHALL have a size `0` and empty content.
* A KeyList listing all keys that "own" the file. <p> All keys in this list MUST sign a transaction to append to the file content, or to modify file metadata.<br/> At least _one_ key in this list MUST sign a transaction to delete this file.<br/> If this is an empty `KeyList`, the file is immutable, cannot be modified or deleted, but MAY expire. A `fileUpdate` transaction MAY extend the expiration time for an immutable file.
* A short description for this file. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* A ledger identifier for the responding network. <p> This value SHALL identify the distributed ledger that responded to this query.
* An identifier for a File within the network.
Used in:
, , , , , , , , , , , , , , , , ,* A whole number shard identifier.
* A whole number realm identifier.
* A whole number file identifier, unique within its realm and shard.
* Update the metadata, and/or replace the content, of a file in the Hedera File Service (HFS). Any field which is not set (i.e. is null) in this message, other than `fileID`, SHALL be ignored.<br/> If the `keys` list for the identified file is an empty `KeyList`, then this message MUST NOT set any field except `expirationTime`. #### Signature Requirements Every `Key` in the `keys` list for the identified file MUST sign this transaction, if any field other than `expirationTime` is to be updated.<br/> If the `keys` list for the identified file is an empty `KeyList` (because this file was previously created or updated to have an empty `KeyList`), then the file is considered immutable and this message MUST NOT set any field except `expirationTime`.<br/> See the [File Service](#FileService) specification for a detailed explanation of the signature requirements for all file transactions. ### Block Stream Effects None
Used in:
,* A file identifier for the file to update. <p> This field is REQUIRED.
* An expiration timestamp. <p> If set, this value MUST be strictly later than the existing `expirationTime` value, or else it will be ignored.<br/> If set, this value SHALL replace the existing `expirationTime`.<br/> If this field is the only field set, then this transaction SHALL NOT require any signature other than the `payer` for the transaction.<br/> When the network consensus time exceeds the then-current `expirationTime`, the network SHALL expire the file.
* The new list of keys that "own" this file. <p> If set, every key in this `KeyList` MUST sign this transaction.<br/> If set, every key in the _previous_ `KeyList` MUST _also_ sign this transaction.<br/> If this value is an empty `KeyList`, then the file SHALL be immutable after completion of this transaction.
* An array of bytes. <p> This value, if set, SHALL _replace_ the existing file content. If this value is set to an empty byte array, the content of the file SHALL be unchanged.
* A short description of this file. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* A custom fee definition for a consensus topic. <p> This fee definition is specific to an Hedera Consensus Service (HCS) topic and SHOULD NOT be used in any other context.<br/> All fields for this message are REQUIRED.<br/> Only "fixed" fee definitions are supported because there is no basis for a fractional fee on a consensus submit transaction.
Used in:
, , ,* A fixed custom fee. <p> The amount of HBAR or other token described by this `FixedFee` SHALL be charged to the transction payer for each message submitted to a topic that assigns this consensus custom fee.
* A collection account identifier. <p> All amounts collected for this consensus custom fee SHALL be transferred to the account identified by this field.
* A wrapper around a consensus custom fee list.<br/> This wrapper exists to enable an update transaction to differentiate between a field that is not set and an empty list of custom fees. <p> An _unset_ field of this type SHALL NOT modify existing values.<br/> A _set_ field of this type with an empty `fees` list SHALL remove any existing values.
Used in:
* A set of custom fee definitions.<br/> These are fees to be assessed for each submit to a topic.
* A fixed fee to assess for each token transfer, regardless of the amount transferred.<br/> This fee type describes a fixed fee for each transfer of a token type. The fee SHALL be charged to the `sender` for the token transfer transaction.<br/> This fee MAY be assessed in HBAR, the token type transferred, or any other token type, as determined by the `denominating_token_id` field.
Used in:
, , ,* The amount to assess for each transfer. <p> This value MUST be greater than `0`.<br/> This amount is expressed in units of 10<sup>-decimals</sup> tokens.
* The token type used to pay the assessed fee. <p> If this is unset, the fee SHALL be assessed in HBAR.<br/> If this is set, the fee SHALL be assessed in the token identified. This MAY be any token type. Custom fees assessed in other token types are more likely to fail, however, and it is RECOMMENDED that token creators denominate custom fees in the transferred token, HBAR, or well documented and closely related token types.<br/> If this value is set to `0.0.0` in the `tokenCreate` transaction, it SHALL be replaced with the `TokenID` of the newly created token.
* A rational number.<br/> A common use is to set the amount of a value transfer to collect as a custom fee. It is RECOMMENDED that both numerator and denominator be no larger than necessary to express the required fraction. A very large numerator, in particular, may not be reliable. Both fields are REQUIRED and SHOULD be positive integers.
Used in:
, ,* A fractional number's numerator.
* A fractional number's denominator. <p> A zero value SHALL fail with response code `FRACTION_DIVIDES_BY_ZERO`.
* A descriptor for a fee based on a portion of the tokens transferred. This fee option describes fees as a fraction of the amount of fungible/common token(s) transferred. The fee also describes a minimum and maximum amount, both of which are OPTIONAL. This type of fee SHALL be assessed only for fungible/common tokens.<br/> This type of fee MUST NOT be defined for a non-fungible/unique token type.<br/> This fee SHALL be paid with the same type of tokens as those transferred.<br/> The fee MAY be subtracted from the transferred tokens, or MAY be assessed to the sender in addition to the tokens actually transferred, based on the `net_of_transfers` field. When a single transaction sends tokens from one sender to multiple recipients, and the `net_of_transfers` flag is false, the network SHALL attempt to evenly assess the total fee across all recipients proportionally. This may be inexact and, particularly when there are large differences between recipients, MAY result in small deviations from an ideal "fair" distribution.<br/> If the sender lacks sufficient tokens to pay fees, or the assessment of custom fees reduces the net amount transferred to or below zero, the transaction MAY fail due to insufficient funds to pay all fees.
Used in:
* A Fraction of the transferred tokens to assess as a fee.<br/> This value MUST be less than or equal to one.<br/> This value MUST be greater than zero.
* A minimum fee to charge, in units of 10<sup>-decimals</sup> tokens. <p> This value is OPTIONAL, with a default of `0` indicating no minimum.<br/> If set, this value MUST be greater than zero.<br/> If set, all transfers SHALL pay at least this amount.
* A maximum fee to charge, in units of 10<sup>-decimals</sup> tokens. <p> This value is OPTIONAL, with a default of `0` indicating no maximum.<br/> If set, this value MUST be greater than zero.<br/> If set, any fee charged SHALL NOT exceed this value.<br/> This value SHOULD be strictly greater than `minimum_amount`. If this amount is less than or equal to `minimum_amount`, then the fee charged SHALL always be equal to this value and `fractional_amount` SHALL NOT have any effect.
* Flag requesting to assess the calculated fee against the sender, without reducing the amount transferred.<br/> #### Effects of this flag <ol> <li>If this value is true <ul> <li>The receiver of a transfer SHALL receive the entire amount sent.</li> <li>The fee SHALL be charged to the sender as an additional amount, increasing the token transfer debit.</li> </ul> </li> <li>If this value is false <ul> <li>The receiver of a transfer SHALL receive the amount sent _after_ deduction of the calculated fee.</li> </ul> </li> </ol>
* A transaction body for all five freeze transactions. Combining five different transactions into a single message, this transaction body MUST support options to schedule a freeze, abort a scheduled freeze, prepare a software upgrade, prepare a telemetry upgrade, or initiate a software upgrade. For a scheduled freeze, at the scheduled time, according to network consensus time - A freeze (`FREEZE_ONLY`) causes the network nodes to stop creating events or accepting transactions, and enter a persistent maintenance state. - A freeze upgrade (`FREEZE_UPGRADE`) causes the network nodes to stop creating events or accepting transactions, and upgrade the node software from a previously prepared upgrade package. The network nodes then restart and rejoin the network after upgrading. For other freeze types, immediately upon processing the freeze transaction - A Freeze Abort (`FREEZE_ABORT`) cancels any pending scheduled freeze. - A prepare upgrade (`PREPARE_UPGRADE`) begins to extract the contents of the specified upgrade file to the local filesystem. - A telemetry upgrade (`TELEMETRY_UPGRADE`) causes the network nodes to extract a telemetry upgrade package to the local filesystem and signal other software on the machine to upgrade, without impacting the node or network processing. ### Block Stream Effects Unknown
Used in:
,* Rejected if set; replace with `start_time`.<br/> The start hour (in UTC time), a value between 0 and 23
* Rejected if set; replace with `start_time`.<br/> The start minute (in UTC time), a value between 0 and 59
* Rejected if set; end time is neither assigned nor guaranteed and depends on many uncontrolled factors.<br/> The end hour (in UTC time), a value between 0 and 23
* Rejected if set; end time is neither assigned nor guaranteed and depends on many uncontrolled factors.<br/> The end minute (in UTC time), a value between 0 and 59
* An upgrade file. <p> If set, the identifier of a file in network state.<br/> The contents of this file MUST be a `zip` file and this data SHALL be extracted to the node filesystem during a `PREPARE_UPGRADE` or `TELEMETRY_UPGRADE` freeze type.<br/> The `file_hash` field MUST match the SHA384 hash of the content of this file.<br/> The extracted data SHALL be used to perform a network software update if a `FREEZE_UPGRADE` freeze type is subsequently processed.
* A SHA384 hash of file content.<br/> This is a hash of the file identified by `update_file`. <p> This MUST be set if `update_file` is set, and MUST match the SHA384 hash of the contents of that file.
* A start time for the freeze. <p> If this field is REQUIRED for the specified `freeze_type`, then when the network consensus time reaches this instant<ol> <li>The network SHALL stop accepting transactions.</li> <li>The network SHALL gossip a freeze state.</li> <li>The nodes SHALL, in coordinated order, disconnect and shut down.</li> <li>The nodes SHALL halt or perform a software upgrade, depending on `freeze_type`.</li> <li>If the `freeze_type` is `FREEZE_UPGRADE`, the nodes SHALL restart and rejoin the network upon completion of the software upgrade.</li> </ol> <blockquote> If the `freeze_type` is `TELEMETRY_UPGRADE`, the start time is required, but the network SHALL NOT stop, halt, or interrupt transaction processing. The required field is an historical anomaly and SHOULD change in a future release.</blockquote>
* The type of freeze. <p> This REQUIRED field effectively selects between five quite different transactions in the same transaction body. Depending on this value the service may schedule a freeze, prepare upgrades, perform upgrades, or even abort a previously scheduled freeze.
* An enumeration of possible network freeze types. Each enumerated value SHALL be associated to a single network freeze scenario. Each freeze scenario defines the specific parameters REQUIRED for that freeze.
Used in:
* An invalid freeze type. <p> The first value in a protobuf enum is a default value. This default is RECOMMENDED to be an invalid value to aid in detecting unset fields.
* Freeze the network, and take no further action. <p> The `start_time` field is REQUIRED, MUST be strictly later than the consensus time when this transaction is handled, and SHOULD be between `300` and `3600` seconds after the transaction identifier `transactionValidStart` field.<br/> The fields `update_file` and `file_hash` SHALL be ignored.<br/> A `FREEZE_ONLY` transaction SHALL NOT perform any network changes or upgrades.<br/> After this freeze is processed manual intervention is REQUIRED to restart the network.
* This freeze type does not freeze the network, but begins "preparation" to upgrade the network. <p> The fields `update_file` and `file_hash` are REQUIRED and MUST be valid.<br/> The `start_time` field SHALL be ignored.<br/> A `PREPARE_UPGRADE` transaction SHALL NOT freeze the network or interfere with general transaction processing.<br/> If this freeze type is initiated after a `TELEMETRY_UPGRADE`, the prepared telemetry upgrade SHALL be reset and all telemetry upgrade artifacts in the filesystem SHALL be deleted.<br/> At some point after this freeze type completes (dependent on the size of the upgrade file), the network SHALL be prepared to complete a software upgrade of all nodes.
* Freeze the network to perform a software upgrade. <p> The `start_time` field is REQUIRED, MUST be strictly later than the consensus time when this transaction is handled, and SHOULD be between `300` and `3600` seconds after the transaction identifier `transactionValidStart` field.<br/> A software upgrade file MUST be prepared prior to this transaction.<br/> After this transaction completes, the network SHALL initiate an upgrade and restart of all nodes at the start time specified.
* Abort a pending network freeze operation. <p> All fields SHALL be ignored for this freeze type.<br/> This freeze type MAY be submitted after a `FREEZE_ONLY`, `FREEZE_UPGRADE`, or `TELEMETRY_UPGRADE` is initiated.<br/> This freeze type MUST be submitted and reach consensus before the `start_time` designated for the current pending freeze to be effective.<br/> After this freeze type is processed, the upgrade file hash and pending freeze start time stored in the network SHALL be reset to default (empty) values.
* Prepare an upgrade of auxiliary services and containers providing telemetry/metrics. <p> The `start_time` field is REQUIRED, MUST be strictly later than the consensus time when this transaction is handled, and SHOULD be between `300` and `3600` seconds after the transaction identifier `transactionValidStart` field.<br/> The `update_file` field is REQUIRED and MUST be valid.<br/> A `TELEMETRY_UPGRADE` transaction SHALL NOT freeze the network or interfere with general transaction processing.<br/> This freeze type MUST NOT be initiated between a `PREPARE_UPGRADE` and `FREEZE_UPGRADE`. If this freeze type is initiated after a `PREPARE_UPGRADE`, the prepared upgrade SHALL be reset and all software upgrade artifacts in the filesystem SHALL be deleted.<br/> At some point after this freeze type completes (dependent on the size of the upgrade file), the network SHALL automatically upgrade the telemetry/metrics services and containers as directed in the specified telemetry upgrade file. <blockquote> The condition that `start_time` is REQUIRED is an historical anomaly and SHOULD change in a future release.</blockquote>
* Request detail information about an account. The returned information SHALL include balance and allowances.<br/> The returned information SHALL NOT include a list of account records. #### Important This query is a _privileged_ query. Only "system" accounts SHALL be permitted to submit this query.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* An account ID for which information is requested <p> This value SHALL identify the account to be queried.<br/> This value MUST identify a valid account.<br/> This field is REQUIRED.
* A response to a `GetAccountDetailsQuery`. This SHALL contain the account details if requested and successful.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* Details of the account. <p> A state proof MAY be generated for this field.
* Information describing a single Account in the Hedera distributed ledger. #### Attributes Each Account may have a unique three-part identifier, a Key, and one or more token balances. Accounts also have an alias, which has multiple forms, and may be set automatically. Several additional items are associated with the Account to enable full functionality. #### Expiration Accounts, as most items in the network, have an expiration time, recorded as a `Timestamp`, and must be "renewed" for a small fee at expiration. This helps to reduce the amount of inactive accounts retained in state. Another account may be designated to pay any renewal fees and automatically renew the account for (by default) 30-90 days at a time as a means to optionally ensure important accounts remain active. ### Staking Accounts may participate in securing the network by "staking" the account balances to a particular network node, and receive a portion of network fees as a reward. An account may optionally decline these rewards but still stake its balances. #### Transfer Restrictions An account may optionally require that inbound transfer transactions be signed by that account as receiver (in addition to any other signatures required, including sender).
Used in:
* The unique ID of this account. <p> An account ID, when assigned to this field, SHALL be of the form `shard.realm.number`.<br/> Transactions MAY reference the account by alias, but the account itself MUST always have a purely numeric identifier. This numeric ID is the value used to reference the account in query responses, transaction receipts, transaction records, and the block stream.
* A Solidity ID.<br/> This identifies the contract instance, and the `Account` associated with that contract instance. <p> This SHALL be populated if this account is a smart contract, and SHALL NOT be populated otherwise.<br/> This SHALL be formatted as a string according to Solidity ID standards.
* A boolean indicating that this account is deleted.
* Replaced by StakingInfo.<br/> ID of the account to which this account is staking its balances. If this account is not currently staking its balances, then this field, if set, SHALL be the sentinel value of `0.0.0`.
* The total amount of tinybar proxy staked to this account.
* The key to be used to sign transactions from this account, if any. <p> This key SHALL NOT be set for hollow accounts until the account is finalized.<br/> This key SHALL be set on all other accounts, except for certain immutable accounts (0.0.800 and 0.0.801) necessary for network function and otherwise secured by the governing council.
* The HBAR balance of this account, in tinybar (10<sup>-8</sup> HBAR). <p> This value SHALL always be a whole number.
* A boolean indicating that the account requires a receiver signature for inbound token transfer transactions. <p> If this value is `true` then a transaction to transfer tokens to this account SHALL NOT succeed unless this account has signed the transfer transaction.
* The current expiration time for this account. <p> This account SHALL be due standard renewal fees when the network consensus time exceeds this time.<br/> If rent and expiration are enabled for the network, and automatic renewal is enabled for this account, renewal fees SHALL be charged after this time, and, if charged, the expiration time SHALL be extended for another renewal period.<br/> This account MAY be expired and removed from state at any point after this time if not renewed.<br/> An account holder MAY extend this time by submitting an account update transaction to modify expiration time, subject to the current maximum expiration time for the network.
* A duration to extend this account's expiration. <p> The network SHALL extend the account's expiration by this duration, if funds are available, upon automatic renewal.<br/> This SHALL NOT apply if the account is already deleted upon expiration.<br/> If this is not provided in an allowed range on account creation, the transaction SHALL fail with INVALID_AUTO_RENEWAL_PERIOD. The default values for the minimum period and maximum period are currently 30 days and 90 days, respectively.
* As of `HIP-367`, which enabled unlimited token associations, the potential scale for this value requires that users consult a mirror node for this information. Only the top `maxRelsPerInfoQuery` (default 1000) relationships will be returned by this query.<br/> A list of tokens to which this account is "associated", enabling the transfer of that token type by this account.
* A short description of this account. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* The total number of non-fungible/unique tokens owned by this account.
* The maximum number of tokens that can be auto-associated with the account. <p> If this is less than or equal to `used_auto_associations` (or 0), then this account MUST manually associate with a token before transacting in that token.<br/> Following HIP-904 This value may also be `-1` to indicate no limit.<br/> This value MUST NOT be less than `-1`.
* An account EVM alias.<br/> This is a value used in some contexts to reference an account when the tripartite account identifier is not available. <p> This field, when set to a non-default value, is immutable and SHALL NOT be changed.
* The ledger ID of the network that generated this response. <p> This value SHALL identify the distributed ledger that responded to this query.
* A list of crypto (HBAR) allowances approved by this account. <p> If this is not empty, each allowance SHALL permit a specified "spender" account to spend this account's HBAR balance, up to a designated limit.<br/> This field SHALL permit spending only HBAR balance, not other tokens the account may hold.<br/> Allowances for other tokens SHALL be listed in the `token_allowances` field or the `approve_for_all_nft_allowances` field.
* A list of non-fungible token (NFT) allowances approved by this account. <p> If this is not empty, each allowance SHALL permit a specified "spender" account to transfer _all_ of this account's non-fungible/unique tokens from a particular collection.<br/> Allowances for a specific serial number MUST be directly associated with that specific non-fungible/unique token, rather than the holding account.
* A list of fungible token allowances approved by this account. <p> If this is not empty, each allowance SHALL permit a specified "spender" to spend this account's fungible tokens, of the designated type, up to a designated limit.
* Query all accounts, claims, files, and smart contract instances whose associated keys include the given Key. > This query is no longer supported.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* The key to search for. It MUST NOT contain a contractID nor a ThresholdKey.
* Response when the client sends the node GetByKeyQuery > This query is no longer supported.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* The list of entities that include this public key in their associated Key list
* Query to read Contract, Account, and File identifiers for a smart contract given a Solidity identifier.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A contract ID in the format used by Solidity. <p> This field is REQUIRED.
* Response to a getBySolidityId query. This message returns the account, contract, and file identifiers for a smart contract.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* An account identifier. <p> This SHALL identify an account that backs the requested smart contract.
* A file identifier. <p> This SHALL identify a file, the contents of which are the EVM bytecode for the requested smart contract.
* A contract identifier. <p> This SHALL identify the requested smart contract.
* Permission granted by one account (the "funding" account) to another account (the "spender" account) that allows the spender to spend a specified amount of HBAR owned by the funding account. An allowance SHALL NOT transfer any HBAR directly, it only permits transactions signed only by the spender account to transfer HBAR, up to the amount specified, from the funding account. Once the specified amount is spent, the allowance SHALL be consumed and a new allowance SHALL be required before that spending account may spend additional HBAR from the funding account.
Used in:
* The identifier for the spending account associated with this allowance. <p> This account SHALL be permitted to sign transactions to spend HBAR from the funding/allowing account.<br/> This permission SHALL be limited to no more than the specified `amount`.
* The maximum amount that the spender account may transfer within the scope of this allowance. <p> This allowance SHALL be consumed if any combination of transfers authorized via this allowance meet this value in total.<br/> This value MUST be specified in tinybar (i.e. 10<sup>-8</sup> HBAR).
* Permission granted by one account (the "funding" account) to another account (the "spender" account) that allows the spender to transfer all serial numbers of a specific non-fungible/unique token (NFT) collection owned by the funding account.<br/> This is a broad permission, as it does not matter how many NFTs of the specified collection the funding account owns, the spender MAY dispose of any or all of them with this allowance.<br/> Each token type (typically a collection of NFTs) SHALL require a separate allowance.<br/> Allowances for a specific serial number MUST be directly associated with that specific non-fungible/unique token, rather than the holding account. An allowance SHALL NOT transfer any tokens directly, it only permits transactions signed only by the spender account to transfer any non-fungible/unique tokens of the specified type owned by the funding account.
Used in:
* The identifier for the token associated with this allowance. <p> This token MUST be a non-fungible/unique token.
* The identifier for the spending account associated with this allowance. <p> This account SHALL be permitted to sign transactions to spend tokens of the associated token type from the funding/allowing account.
* Permission granted by one account (the "funding" account) to another account (the "spender" account) that allows the spender to spend a specified amount of a specific non-HBAR fungible token from the balance owned by the funding account. An allowance SHALL NOT transfer any tokens directly, it only permits transactions signed only by the spender account to transfer tokens of the specified type, up to the amount specified, from the funding account. Once the specified amount is spent, the allowance SHALL be consumed and a new allowance SHALL be required before that spending account may spend additional tokens from the funding account.
Used in:
* The identifier for the token associated with this allowance. <p> This token MUST be a fungible/common token.
* The identifier for the spending account associated with this allowance. <p> This account SHALL be permitted to sign transactions to spend tokens of the associated token type from the funding/allowing account.<br/> This permission SHALL be limited to no more than the specified `amount`.
The maximum amount that the spender account may transfer within the scope of this allowance. <p> This allowance SHALL be consumed if any combination of transfers authorized via this allowance meet this value in total.<br/> This value MUST be specified in the smallest units of the relevant token (i.e. 10<sup>-decimals</sup> whole tokens).
* The transactions and queries supported by Hedera Hashgraph.
FUTURE - Uncomment when https://github.com/hashgraph/pbj/issues/339 is fixed; currently the PBJ-generated unit tests fail when using reserved ordinals reserved 96, 97, 98, 99;
Used in:
,* Unused - The first value is unused because this default value is ambiguous with an "unset" value and therefore should not be used.
* Transfer tokens among accounts.
* Update an account.
* Delete an account.
* Add a livehash to an account
* Delete a livehash from an account
* Execute a smart contract call.
* Create a smart contract.
* Update a smart contract.
* Create a "file" stored in the ledger.
* Append data to a "file" stored in the ledger.
* Update a "file" stored in the ledger.
* Delete a "file" stored in the ledger.
* Get the balance for an account.
* Get a full account record.
* Get information about a token.
* Execute a local smart contract call.<br/> Used by contracts to call other contracts.
* Get information about a smart contract.
* Get the compiled bytecode that implements a smart contract.
* Get a smart contract record by reference to the solidity ID.
* Get a smart contract by reference to the contract key.
* Get the live hash for an account
* Get the accounts proxy staking to a given account.
* Get the contents of a "file" stored in the ledger.
* Get the metadata for a "file" stored in the ledger.
* Get transaction record(s) for a specified transaction ID.
* Get all transaction records for a specified contract ID in the past 24 hours.<br/> deprecated since version 0.9.0
* Create a new account
* Delete a "system" "file" stored in the ledger.<br/> "System" files are files with special purpose and ID values within a specific range.<br/> These files require additional controls and can only be deleted when authorized by accounts with elevated privilege.
* Undo the delete of a "system" "file" stored in the ledger.<br/> "System" files are files with special purpose and ID values within a specific range.<br/> These files require additional controls and can only be deleted when authorized by accounts with elevated privilege. This operation allows such files to be restored, within a reasonable timeframe, if deleted improperly.
* Delete a smart contract
* Stop all processing and "freeze" the entire network.<br/> This is generally sent immediately prior to upgrading the network.<br/> After processing this transactions all nodes enter a quiescent state.
* Create a Transaction Record.<br/> This appears to be purely internal and unused.
* Auto-renew an account.<br/> This is used for internal fee calculations.
* Auto-renew a smart contract.<br/> This is used for internal fee calculations.
* Get version information for the ledger.<br/> This returns a the version of the software currently running the network for both the protocol buffers and the network services (node).
* Get a receipt for a specified transaction ID.
* Create a topic for the Hedera Consensus Service (HCS).
* Update an HCS topic.
* Delete an HCS topic.
* Get metadata (information) for an HCS topic.
* Publish a message to an HCS topic.
* Submit a transaction, bypassing intake checking. Only enabled in local-mode.
* Create a token for the Hedera Token Service (HTS).
* Get metadata (information) for an HTS token.
* Freeze a specific account with respect to a specific HTS token. <p> Once this transaction completes that account CANNOT send or receive the specified token.
* Remove a "freeze" from an account with respect to a specific HTS token.
* Grant KYC status to an account for a specific HTS token.
* Revoke KYC status from an account for a specific HTS token.
* Delete a specific HTS token.
* Update a specific HTS token.
* Mint HTS token amounts to the treasury account for that token.
* Burn HTS token amounts from the treasury account for that token.
* Wipe all amounts for a specific HTS token from a specified account.
* Associate a specific HTS token to an account.
* Dissociate a specific HTS token from an account.
* Create a scheduled transaction
* Delete a scheduled transaction
* Sign a scheduled transaction
* Get metadata (information) for a scheduled transaction
* Get NFT metadata (information) for a range of NFTs associated to a specific non-fungible/unique HTS token and owned by a specific account.
* Get metadata (information) for a specific NFT identified by token and serial number.
* Get NFT metadata (information) for a range of NFTs associated to a specific non-fungible/unique HTS token.
* Update a token's custom fee schedule. <p> If a transaction of this type is not signed by the token `fee_schedule_key` it SHALL fail with INVALID_SIGNATURE, or TOKEN_HAS_NO_FEE_SCHEDULE_KEY if there is no `fee_schedule_key` set.
* Get execution time(s) for one or more "recent" TransactionIDs.
* Pause a specific HTS token
* Unpause a paused HTS token.
* Approve an allowance for a spender relative to the owner account, which MUST sign the transaction.
* Delete (unapprove) an allowance previously approved for the owner account.
* Get all the information about an account, including balance and allowances.<br/> This does not get a list of account records.
* Perform an Ethereum (EVM) transaction.<br/> CallData may be inline if small, or in a "file" if large.
* Used to indicate when the network has updated the staking information at the end of a staking period and to indicate a new staking period has started.
* Generate and return a pseudorandom number based on network state.
* Get a record for a "recent" transaction.
* Update the metadata of one or more NFT's of a specific token type.
* Create a node
* Update a node
* Delete a node
* Transfer one or more token balances held by the requesting account to the treasury for each token type.
* Airdrop one or more tokens to one or more accounts.
* Remove one or more pending airdrops from state on behalf of the sender(s) for each airdrop.
* Claim one or more pending airdrops
* Submit a signature of a state root hash gossiped to other nodes
* Publish a hinTS key to the network.
* Vote for a particular preprocessing output of a hinTS construction.
* Sign a partial signature for the active hinTS construction.
* Sign a particular history assembly.
* Publish a roster history proof key to the network.
* Vote for a particular history proof.
* Publish a random CRS to the network.
* Submit a batch of transactions to run atomically
* A Key is an entity representing one or more cryptographic public/private key pairs and, optionally, the structure for how multiple signatures may be composed to meet complex multiple-signature authorization requirements. A Key can be a public key from either the Ed25519 or ECDSA(secp256k1) signature schemes. In the ECDSA(secp256k1) case we require the 33-byte compressed form of the public key. For simplicity, we call these cryptographic public keys `primitive` keys.<br/> If an entity has a primitive key associated to it, then the corresponding private key must sign any transaction to send tokens or perform other actions requiring authorization. A Key can also be the ID of a smart contract, which SHALL authorize that contract to execute any system contract with signing requirements that are met by the key.<br/> > Example >> If account `0.0.A` has a threshold key whose threshold is satisfied >> by a contract ID key for contract `0.0.C`, then when `0.0.C` is called, >> it is authorized to use system contracts to manage any asset owned by >> `0.0.A`. If the contract ID key is "delegatable", then `0.0.C` can even >> perform these actions when running code accessed via `DELEGATECALL`. A Key can be a "threshold key", which is a list of N keys, any M of which may sign in order for the signature to be considered valid. The value of M for a given threshold key MUST be less than or equal to N. A threshold key is sometimes called a "M-of-N" key. A Key can be a "key list" where all keys in the list must sign unless specified otherwise in the documentation for a specific transaction type (e.g. FileDeleteTransactionBody).<br/> This implies that the use of a key list is dependent on context. For example, an Hedera file that is created with a list of keys, SHALL require that all of those keys must sign a transaction to create or modify the file, but only one key from that list MUST sign a transaction to delete the file. So it is a single list that sometimes acts as a N-of-N threshold key, and sometimes acts as a 1-of-N threshold key.<br/> To reduce confusion this may cause, a key list SHALL always be considered N-of-N, unless specified otherwise in official documentation.<br/> A key list MAY have repeated primitive public keys, but the signature requirement for all keys in a repeated set SHALL be satisfied by a single valid signature. There is no mechanism to require a single key to sign a single transaction more than once. Any list or threshold key MAY have nested key lists or threshold keys. This allows, for example, the keys within a threshold signature to themselves be threshold, list, contract, or primitive keys. This nesting structure enables complex asymmetric multi-party signature requirements to be met. To ensure adequate performance and transaction security, key nesting is limited to at most fifteen(15) levels.
Used in:
, , , , , , , , , , , , , , , , , , , , , , , , , ,* A smart contract instance that is authorized implicitly. <p> This key type SHALL require that the code in the active message frame belong to the contract with the given id.
* An array of Ed25519 public key bytes.
* This option is not currently supported.<br/> An array of RSA-3072 public key bytes.
* This option is not currently supported.<br/> An array of ECDSA, using the p-384 curve, public key bytes.
* A threshold, M, combined with a list of N keys, any M of which are sufficient to form a valid signature.
* A list of keys. This may be treated like a "N-of-N" threshold key, as a component of another key, or in some other manner as documented.
* A set of compressed ECDSA(secp256k1) public key bytes.<br/> This is an EVM compatibility format.
* A smart contract that, if the recipient of the active message frame, SHALL be imputed authorization.<br/> Setting this key type is a more permissive version of setting a contractID key. <p> This key form SHALL NOT strictly require that the code being executed in the frame belong to the given contract. The code in frame MAY be running another contract via a `delegatecall`.
* A list of keys.<br/> A `KeyList` requires all keys (N-of-N) to sign, unless otherwise specified in official documentation. A KeyList may contain repeated keys, but all such repeated keys are considered a single key when determining signature authorization. ### Additional Notes 1. An empty key list is the "standard" mechanism to represent an unassigned key. For example, if the `admin_key` of a token is set to the empty key list, then that token has no admin key, and functionality that requires an admin key to sign the transaction is disabled.
Used in:
, , , , , , ,* A list of keys. All values in this list SHALL be non-null. <p>
* A Live Hash value associating some item of content to an account. This message represents a desired entry in the ledger for a SHA-384 hash of some content, an associated specific account, a list of authorized keys, and a duration the live hash is "valid".
Used in:
, , ,* An account associated via this live hash to the hashed content.
* A SHA-384 hash of some content that is associated to the account or account holder.
* A list of keys, all of which MUST sign the transaction to add the live hash.<br/> Any one of these keys may, however, remove the live hash to revoke the association.
* A duration describing how long this Live Hash SHALL remain valid.<br/> A Live Hash SHOULD NOT be relied upon after this duration has elapsed.
* Retrieve the time, in nanoseconds, spent in direct processing for one or more recent transactions. For each transaction identifier provided, if that transaction is sufficiently recent (that is, it is within the range of the configuration value `stats.executionTimesToTrack`), the node SHALL return the time, in nanoseconds, spent to directly process that transaction.<br/> This time will generally correspond to the time spent in a `handle` call within the workflow. Note that because each node processes every transaction for the Hedera network, this query MAY be sent to any node, and results MAY be different between different nodes.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A list of transaction identifiers to query. <p> All of the queried transaction identifiers MUST have execution time available. If any identifier does not have available execution time, the query SHALL fail with an `INVALID_TRANSACTION_ID` response.
* A response to a `networkGetExecutionTime` query.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* A list of execution times, in nanoseconds. <p> This list SHALL be in the same order as the transaction identifiers were presented in the query.
* Query the deployed versions of Hedera Services and the API definitions in semantic version format
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A response to a `NetworkGetVersionInfoQuery`. This SHALL return `SemanticVersion` information for both Hedera API (HAPI) and Hedera Services.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* An API version. <p> This SHALL be the current Hedera API (HAPI) protobuf message version accepted by the network.
* A Services version. <p> This SHALL be the current version of the Hedera Services software operating the network.
* An Hedera Token Service staking reward entity. This stores values related to the aggregate staking rewards for all nodes in the network. It is calculated at the beginning of each staking period.
* A flag indicating that staking rewards are activated on the network. <p> Among other criteria, this is set to true when the balance of 0.0.800 (the account that pays rewards) reaches a minimum required balance.
* A global snapshot of the `stake_to_reward` value for all nodes at the beginning of the current staking period. <p> The `stake_to_reward` value is the sum of balance and `staked_to_me` for all accounts staked to a node that do not decline staking rewards.<br/> This is needed for calculating rewards for current staking period without considering changes to `stake_to_reward` within the current staking period.<br/> This value SHALL be reset at the beginning of every staking period.
* A global snapshot of the `stake` value for all nodes at the beginning of the current staking period. <p> The `stake` value is the sum of balance and `staked_to_me` for all accounts staked to a node, and SHALL NOT consider whether the account has accepted or declined rewards.<br/> This value SHALL be reset at the beginning of every staking period.
* The total staking rewards, in tinybars, that may be collected by all accounts staking to all nodes after the end of this staking period. <p> This SHALL be calculated assuming that no account "renounces" its rewards by setting `decline_reward` to true, or is ineligible for some other reason.<br/> If a node is removed, the `pending_rewards` value of that node SHALL be subtracted from this value.
* The last time a node reward payment was made. This will be set at the end of a staking period.
* An Hedera Token Service non-fungible token (NFT).<br/> Every NFT is a unique instance of a token with non-fungible type. The NFT SHALL be identified by token ID and serial number.<br/> The token treasury account SHALL own all minted NFTs of that token type initially.<br/> NFTs owned by the token treasury SHALL NOT be linked into that account's virtual linked list of NFTs.<br/> NFTs not owned by the token treasury SHALL be linked into the owner account's virtual linked list of NFTs.
* The id of this NFT, consisting of a Token ID and serial number.
* The account or contract id that owns this NFT. <p> If this NFT is owned by its token type's current treasury account, this value SHALL be zero.
* The account or contract id approved to spend this NFT. <p> If there is no approved spender, this value SHALL be null.
* The consensus time of the TokenMint that created this NFT as offset from the epoch. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.
* The metadata bytes for this NFT. This is often a URI value. <p> This value, if set, SHALL NOT exceed 100 bytes.
* The NFT ID of the previous entry in the current owner's "virtual double-linked list" of owned NFTs. <p> If the owner of this NFT is the token treasury, this SHALL be unset.
* The NFT ID of the next entry in the current owner's "virtual double-linked list" of owned NFTs. <p> If the owner of this NFT is the token treasury, this SHALL be unset.
* An approved allowance of non-fungible tokens.<br/> This type of allowance may permit transfers for one or more individual unique tokens, or may permit transfers for all unique tokens of the specified type. If `owner` is not set, the effective `owner` SHALL be the `payer` for the enclosing transaction.<br/> The `spender` MUST be specified and MUST be a valid account.<br/> If `approve_for_all` is set, then `serial_numbers` SHOULD be empty and SHALL be ignored. If `approve_for_all` is unset, then `serial_numbers` MUST NOT be empty.
Used in:
* A token identifier.<br/> This identifies the type of token the `spender` is permitted to transfer from the `owner`. <p> The identified token type MUST be a non-fungible/unique token.
* An owner account identifier.<br/> This is the account identifier of the account granting an allowance for the `spender` to transfer tokens held by this account.
* A spender account identifier.<br/> This is the account identifier of the account permitted to transfer tokens held by the `owner`.
* A list of token serial numbers.<br/> The list of serial numbers that the spender is permitted to transfer. <p> The `owner` MUST currently hold each token identified in this list.
* A flag indicating this allowance applies to all tokens of the specified (non-fungible/unique) type. <p> If true, the `spender` SHALL be permitted to transfer any or all of the `owner`'s tokens of the specified token type. This SHALL apply not only to currently owned tokens, but to all such tokens acquired in the future, unless the allowance is `delete`d.
* A spender-owner account identifier.<br/> This account identifier identifies a `spender` for whom an existing `approved_for_all` allowance was previously created. This enables an account with such broad access to grant allowances to transfer individual tokens from the original owner without involving that original owner. <p> If this is set, the account identified MUST sign this transaction, but the `owner` account MAY NOT sign this transaction.<br/> If this is set, there MUST exist an active `approved_for_all` allowance from the `owner` for the `delegating_spender` to transfer all tokens of the type identified by the `tokenId` field.<br/> If this value is set, the `approved_for_all` flag MUST be `false`.
* An identifier for a unique token (or "NFT"), used by both contract and token services.
Used in:
, , , , ,* A token identifier.<br/> This token represents the collection containing this NFT.
* A unique serial number.<br/> This serial number is unique within its token type.
* A single allowance for one non-fungible/unique token. This is specific to removal, and the allowance is identified for that specific purpose. All fields in this message are REQUIRED. The `serial_numbers` list MUST NOT be empty. The combination of field values in this message MUST match existing allowances for one or more individual non-fungible/unique tokens. ### Removing an allowance that is `approve_for_all` To remove an allowance that has set the `approve_for_all` flag, the `owner` account must first _approve_ a **new** allowance for a specific serial number using a `cryptoApproveAllowance`, and then, if desired, that newly approved allowance to a specific serial number may be deleted in a separate `cryptoDeleteAllowance` transaction.
Used in:
* A token identifier. <p> This MUST be a valid token identifier for a non-fungible/unique token type.
* An `owner` account identifier. <p> This account MUST sign the transaction containing this message.
* The list of serial numbers to remove allowances from. <p> This list MUST NOT be empty.
* A NFT transfer.<br/> This refers to a sender account, a receiver account, and the serial number of an NFT to transfer from sender to receiver. Each `NftTransfer` SHALL be contained in another message (typically `TokenTransferList`) that details which `Token` type applies to this NFT transfer.
Used in:
* An Account identifier for the sender.
* An Account identifier for the receiver.
* A serial number for the NFT to transfer.
* An approved allowance flag.<br/> If true then the transfer is expected to be an approved allowance. <p> If set, `senderAccountID` SHALL be the owner that previously approved the allowance.<br/> If set, the `senderAccountID` MUST be the "payer" account for the transaction <br/> The default value SHALL be false (unset).
* A record of judge rounds missed by a single node.<br/> This records, for a single node, the number of rounds so far, during this staking period that missed creating judges. This is used to determine if the node is "active" or not. This message SHALL NOT record the total number of rounds in a staking period.<br/> This message SHALL record a count of rounds for a single node that missed creating judges.
Used in:
* A node identifier.
* A count of rounds.<br/> This is the count of rounds so far, in this staking period in which the node identified by `node_id` did not create judges.
* The data about a node, including its service endpoints and the Hedera account to be paid for services provided by the node (that is, queries answered and transactions submitted). All active fields are populated in the `0.0.102` address book file.<br/> Only fields documented with "`0.0.101` field" are populated in the 0.0.101 address book file. This message MAY be superseded by messages in state/addressbook/node.proto and node_get_info.proto.
Used as response type in: com.hedera.mirror.api.proto.NetworkService.getNodes
Used as field type in:
* ServiceEndpoint is now used to retrieve a node's list of IP addresses and ports.<br/> The IP address of the Node, as a string, encoded in UTF-8.<br/> This value SHALL NOT be populated.
* ServiceEndpoint is now used to retrieve a node's list of IP addresses and ports.<br/> The port number of the grpc server for the node.<br/> This value SHALL NOT be populated.
* Description provides short text functionality.<br/> A short description of the node. <p> This field SHALL NOT be populated.
* A hexadecimal String encoding of an X509 public key. <p> This X509 RSA _public_ key SHALL be used to verify record stream files (e.g., record stream files).<br/> This field SHALL be a string of hexadecimal characters, encoded UTF-8, which, translated to binary, form the public key DER encoding.
* A numeric identifier for the node. <p> This value SHALL NOT be sequential. <p> A `0.0.101` field
* An account to be paid the "node" portion of transaction fees.<br/> The "node" fees are paid to the node that submitted the transaction. <p> A `0.0.101` field
* A hash of the node's TLS certificate. <p> This field SHALL be a string of hexadecimal characters, encoded UTF-8, which, translated to binary, form a SHA-384 hash of the node's TLS certificate in PEM format. This TLS certificate MUST be encoded UTF-8 and normalized according to the NFKD form prior to computing the hash value.<br/> The value of this field SHALL be used to verify the node TLS certificate when presented during protocol negotiation. <p> A `0.0.101` field
* A node's service IP addresses and TCP ports.<br/> Nodes require multiple endpoints to ensure that inter-node communication (e.g. gossip) is properly separated from client communication to API endpoints. <p> A `0.0.101` field
* A short description of the node. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* This is replaced by per-account stake tracking and dynamic calculation.<br/> The amount of tinybar staked to the node.<br/> This value SHOULD NOT be populated, and SHALL be ignored.
* A list of nodes and their metadata that contains details of the nodes running the network. Used to parse the contents of system files `0.0.101` and `0.0.102`.
* Published data for all nodes in the network
* A record of node rewards status.<br/> This is used to record the number of "active" nodes in a staking period based on number of judges each node created in that period. It also records the number of rounds so far in the staking period. A Node SHALL be considered "active" if it produced "judges" according to the consensus algorithm in a percentage of rounds, during the staking period, greater than the network configuration value for `nodes.activeRoundsPercent`.
* A number of rounds so far, in this staking period.
* The fees collected by node accounts in this period.
* A list of node activities.<br/> This records the number of rounds when each node created judges for the consensus algorithm. <p> This list SHALL contain one entry for each node participating in consensus during this staking period.
* Staking information for one node at the end of a staking period. This SHALL be one entry in a list reported at the end of each full staking period.
Used in:
* A limit to the amount of stake considered for consensus weight. <p> The amount of stake (whether accepting rewards or not) assigned to a node that exceeds this limit SHALL NOT be considered for consensus weight calculation.<br/> If stake to _reward_ for a node exceeds this threshold, then all accounts staking to that node SHALL receive a lower reward rate in proportion to the excess stake.
* A minimum amount of HBAR staked to a node to receive rewards. <p> If the amount of stake (whether accepting rewards or not) assigned to a node at the start of a staking period is less than this threshold, then no rewards SHALL be paid to that node or to any accounts staking to that node.
* A node identifier.<br/> This value uniquely identifies this node within the network address book.
* The rate of rewards, in tinybar per HBAR, for the staking reward period that just ended.
* A consensus weight assigned to this node for the next staking period.
* The total amount staked to this node, while declining rewards. <p> This SHALL be the total staked amount, in tinybar, that is staked to this node with the value of the `decline_reward` set.<br/> This value MUST be calculated at the beginning of the staking period.
* The total amount staked to this node, while accepting rewards. <p> This SHALL be the total staked amount, in tinybar, that is staked to this node with the value of the `decline_reward` not set.<br/> This value MUST be calculated at the beginning of the staking period.
* A system initiated transaction to update staking information. This transaction SHALL be issued at the end of each staking period to update node stakes and reward limits.<br/> This transaction SHALL be a child of the first transaction to reach consensus following the end of the previous staking period.<br/> This transaction MUST NOT be sent by a client and SHALL be rejected if received by any node.<br/> This transaction SHALL be present in the record stream or block stream. ### Block Stream Effects None
Used in:
* A timestamp indicating the end of the staking period. <p> This value SHALL be one nanosecond prior to midnight prior to the consensus time of the parent transaction.
* A list of `NodeStake` entries for each node at the beginning of the new staking period. <p> This list SHALL have one entry for each node participating in network consensus.
* A maximum reward rate for this staking period. <p> This SHALL be a ratio of tinybar to HBAR.<br/> An account SHALL NOT receive a reward greater than the product of this ratio and the total number of HBAR staked by that account.
* A fraction of network and service fees paid to the "node" reward account.<br/> The node staking rewards are paid from the designated reward account `0.0.801`, which receives a fraction of network and service fees for each transaction. This field is the value of that fraction for the last staking period.
* A limit to the number of staking periods held for inactive accounts.<br/> This is the maximum number of trailing staking periods for which an account can collect staking rewards.<br/> #### Example If this value is 365 with a calendar day period, then each account must collect rewards at least once per calendar year to receive the full amount of staking rewards earned. <p> Staking rewards SHALL be stored in network state for no more than `staking_periods_stored` staking periods.<br/> Each account MUST participate in at least one transaction that affects its balance, staking, or staking metadata within this time limit to receive all available staking rewards.
* A number of minutes representing a staking period.<br/> <blockquote>Note<blockquote> For the special case of `1440` minutes, periods are treated as calendar days aligned to midnight UTC, rather than repeating `1440` minute periods left-aligned at the epoch.</blockquote></blockquote>
* A fraction of network and service fees paid to the "general" reward account.<br/> The general staking rewards are paid from the designated reward account `0.0.800`, which receives a fraction of network and service fees for each transaction. This field is the value of that fraction for the last staking period.
* A minimum balance required to pay general staking rewards. <p> If the balance of the staking reward account `0.0.800` is below this threshold, staking rewards SHALL NOT be paid in full.
* HIP-786 replaced this field with `max_total_reward`.<br/> This was a maximum total number of tinybars to be distributed as staking rewards in the staking period that just ended.
* An amount reserved in the staking reward account.<br/> This is an amount "reserved" in the balance of account `0.0.800` that is already owed for pending rewards that were previously earned but have not yet been collected.<br/> This value is further detailed in HIP-786.
* An available, unreserved, amount in the staking reward account.<br/> This is the balance of the staking reward account `0.0.800` at the close of the staking period that just ended, after reduction for all "reserved" funds necessary to pay previously earned rewards.<br/> This value is further detailed in HIP-786. <p> This value SHALL be used to calculate the reward ratio according to the formula detailed in HIP-782.
* A minimum balance required for maximum staking rewards.<br/> This value is further detailed in HIP-786. The formula to calculate staking rewards is detailed in HIP-782. <p> The value of `unreserved_staking_reward_balance` MUST match or exceed the value of this field to support the maximum staking reward ratio.<br/>
* A maximum network-wide stake that can earn full rewards.<br/> If the network-wide stake, in tinybar, exceeds this value, then staking rewards must be reduced to maintain "smooth" reward adjustments as defined in HIP-782.<br/> This value is further detailed in HIP-786. <p> If the total network-wide stake exceeds this value, the effective staking reward ratio MUST be reduced to maintain solvency of the staking reward account.
* A limit amount that could be paid as staking rewards.<br/> In the limit case, the network could pay at most this amount, in tinybar as staking rewards for the staking period that just ended, if all other conditions were met to perfection.<br/> <p> This value SHALL reflect the result of a maximum reward calculation that takes into account the balance thresholds and maximum stake thresholds as defined in HIP-782 and HIP-786.<br/> This value is a convenience. The actual defined calculation SHALL be authoritative in the unlikely event this value differs.
* A unique, composite, identifier for a pending airdrop. Each pending airdrop SHALL be uniquely identified by a `PendingAirdropId`.<br/> A `PendingAirdropId` SHALL be recorded when created and MUST be provided in any transaction that would modify that pending airdrop (such as a `claimAirdrop` or `cancelAirdrop`).
Used in:
, , , ,* A sending account. <p> This is the account that initiated, and SHALL fund, this pending airdrop.<br/> This field is REQUIRED.
* A receiving account. <p> This is the ID of the account that SHALL receive the airdrop.<br/> This field is REQUIRED.
* A token identifier.<br/> This is the type of token for a fungible/common token airdrop. <p> This field is REQUIRED for a fungible/common token and MUST NOT be used for a non-fungible/unique token.
* The id of a single NFT<br/> This is the type of token for a non-fungible/unique token airdrop and consists of a Token ID and serial number. <p> This field is REQUIRED for a non-fungible/unique token and MUST NOT be used for a fungible/common token.
* A record of a new pending airdrop.
Used in:
* A unique, composite, identifier for a pending airdrop. <p> This field is REQUIRED.
* A single pending airdrop amount. <p> If the pending airdrop is for a fungible/common token this field is REQUIRED and SHALL be the current amount of tokens offered.<br/> If the pending airdrop is for a non-fungible/unique token, this field SHALL NOT be set.
* A single pending airdrop value. This message SHALL record the airdrop amount for a fungible/common token.<br/> This message SHOULD be null for a non-fungible/unique token.<br/> If a non-null `PendingAirdropValue` is set for a non-fungible/unique token, the amount field MUST be `0`. It is RECOMMENDED that implementations store pending airdrop information as a key-value map from `PendingAirdropId` to `PendingAirdropValue`, with a `null` value used for non-fungible pending airdrops.
Used in:
,* An amount to transfer for fungible/common tokens.<br/> This is expressed in the smallest available units for that token (i.e. 10<sup>-`decimals`</sup> whole tokens). <p> This amount SHALL be transferred from the sender to the receiver, if claimed.<br/> If the token is a fungible/common token, this value MUST be strictly greater than `0`.<br/> If the token is a non-fungible/unique token, this message SHOULD NOT be set, and if set, this field MUST be `0`.
* A single boolean with no particular meaning.
* A single byte array with no particular meaning.
* A single 32-bit number with no particular meaning.
* A single 64-bit number with no particular meaning.
* A single string with no particular meaning.
* information about a single account that is proxy staking
Used in:
* The Account ID that is proxy staking
* The number of hbars that are currently proxy staked
* A query transaction.<br/> This message is serialized to bytes and those bytes are signed by the submitter, with the signature included in the QueryHeader for the query request.
Used as request type in: ConsensusService.getTopicInfo, CryptoService.cryptoGetBalance, CryptoService.getAccountInfo, CryptoService.getAccountRecords, CryptoService.getLiveHash, CryptoService.getTransactionReceipts, CryptoService.getTxRecordByTxID, FileService.getFileContent, FileService.getFileInfo, NetworkService.getAccountDetails, NetworkService.getExecutionTime, NetworkService.getVersionInfo, ScheduleService.getScheduleInfo, SmartContractService.ContractGetBytecode, SmartContractService.contractCallLocalMethod, SmartContractService.getBySolidityID, SmartContractService.getContractInfo, SmartContractService.getTxRecordByContractID, TokenService.getTokenInfo, TokenService.getTokenNftInfo
* Get all entities associated with a given key.
* Get an Hedera identifier associated with an identifier in EVM "Solidity" form.<br/> Most often used in smart contracts to find an Hedera account, file, or contract identifier to pass to a system contract or precompile.
* Call a function of a smart contract.<br/> This call is executed exclusively on the node to which it is submitted, and is much less expensive than a `contractCall` transaction.
* Get information about a smart contract.
* Get runtime bytecode used by a smart contract.
* This query is unsupported and SHALL fail.<br/> Requests for this information MUST be directed to a mirror node. <p> Get Records of a smart contract.
* Get the current HBAR balance of an Hedera account or smart contract.
* Get records of all "recent" transactions for which a specified account is the effective payer.
* Get information about an account, including the balance.<br/> This does not get the list of account records.
* This query is unsupported and SHALL fail.<br/> Requests for this information MUST be directed to a mirror node. <p> Get a single livehash from a single account, if present.
* This query is unsupported and SHALL fail.<br/> Requests for this information MUST be directed to a mirror node. <p> Get all the accounts that are proxy staking to this account.
* Get the content of a file.
* Get metadata for a file.
* Get a receipt for a transaction.<br/> This only returns a receipt if the transaction is "recent", which is typically within the previous 180 seconds (3 minutes).
* Get a record for a transaction. This only returns a record if the transaction is "available", which is typically within the previous 1 hour.
* Get a record for a transaction. This only returns a record if the transaction is "recent", which is typically within the previous 180 seconds (3 minutes).
* Get metadata for a consensus topic.
* Get the versions of Hedera Services and the HAPI API deployed on the responding consensus node.
* Get metadata for a token.
* Get metadata for a schedule.<br/> A schedule is a request to execute a transaction at a future time.
* This query is unsupported and SHALL fail.<br/> Requests for this information MUST be directed to a mirror node. <p> Get a list of non-fungible/unique tokens associated with an account.
* Get metadata for a specific, serial numbered, non-fungible/unique token (NFT).
* This query is unsupported and SHALL fail.<br/> Requests for this information MUST be directed to a mirror node. <p> Get metadata for all non-fungible/unique tokens (NFTs) of a single type within a range of indices (0-based count of minted tokens).
* This query is unsupported and SHALL fail.<br/> Requests for this information MUST be directed to a mirror node. <p> Get the execution time for a recent transaction.
* Get detail metadata for an account.
* A standard query header.<br/> Each query from the client to the node must contain a QueryHeader, which specifies the desired response type, and includes a payment transaction that will compensate the network for responding to the query. The payment may be blank if the query is free. The payment transaction MUST be a `cryptoTransfer` from the payer account to the account of the node where the query is submitted.<br/> If the payment is sufficient, the network SHALL respond with the response type requested.<br/> If the response type is `COST_ANSWER` the payment MUST be unset. A state proof SHALL be available for some types of information.<br/> A state proof SHALL be available for a Record, but not a receipt, and the response entry for each supported "get info" query.
Used in:
, , , , , , , , , , , , , , , , , , , , , , , ,* A signed `CryptoTransferTransaction` to pay query fees. <p> This MUST transfer HBAR from the "payer" to the responding node account sufficient to pay the query fees.
* A type of query response requested.
* A realm identifier.<br/> Within a given shard, every realm has a unique numeric identifier. Each account, file, and contract instance belongs to exactly one realm.
Used in:
, ,* A whole number shard identifier.
* A whole number realm identifier.
* A single query response. Each query MUST define its specific response type.<br/> Each query response MUST include both the information request and a `ResponseHeader`.<br/> All possible query response types MUST be listed here in a `oneof`.
Used as response type in: ConsensusService.getTopicInfo, CryptoService.cryptoGetBalance, CryptoService.getAccountInfo, CryptoService.getAccountRecords, CryptoService.getLiveHash, CryptoService.getTransactionReceipts, CryptoService.getTxRecordByTxID, FileService.getFileContent, FileService.getFileInfo, NetworkService.getAccountDetails, NetworkService.getExecutionTime, NetworkService.getVersionInfo, ScheduleService.getScheduleInfo, SmartContractService.ContractGetBytecode, SmartContractService.contractCallLocalMethod, SmartContractService.getBySolidityID, SmartContractService.getContractInfo, SmartContractService.getTxRecordByContractID, TokenService.getTokenInfo, TokenService.getTokenNftInfo
* A response for a query requesting all accounts, claims, files, and smart contract instances whose associated keys include the given Key. <p> > This query is no longer supported.
* A response for a query requesting Contract, Account, and File identifiers for a smart contract, given a Solidity identifier.
* A response for a _local_ call to a query function of a given smart contract, providing function parameter inputs as needed. <p> > This call is only performed on the local node. It is _not_ a > network consensus result.
* A response for a query requesting the current bytecode for a smart contract.
* A response for a query requesting detailed information about a smart contract.
* A response for a query requesting records of all transactions against the given contract in the last 25 hours. <p> > This query is no longer supported.
* A response for a query requesting the HBAR balance of an account or contract.
* A response for a query requesting records of all "recent" transactions for which the specified account is the effective payer.
* A response for a query requesting information for an account.<br/> This query includes balance, but not allowances or token relationships.
* A response for a query requesting detail for a specific live hash associated to a specific account. <p> > This query is no longer supported.
* A response for a query requesting all the accounts that are proxy staking to this account. <p> > This query is no longer supported.
* A response for a query requesting the content of a file in the Hedera File Service (HFS).
* A response for a query requesting file metadata from the Hedera File Service (HFS).
* A response for a query requesting the post-consensus (final) result of a transaction.
* A response for a query requesting a transaction record; the detail changes completed in response to a transaction.
* A response for a query requesting a very recent transaction record. <p> > This query is no longer supported.
* A response for a query requesting the current state of a topic for the Hedera Consensus Service (HCS).
* A response for a query requesting the deployed versions of Hedera Services and the API definitions in semantic version format
* A response for a query requesting metadata for a specific Token.
* A response for a query requesting detail for a scheduled transaction.
* A response for a query requesting detail for a subset of individual non-fungible/unique tokens owned by an account.<br/> The requested tokens are selected by a list index, which is based on the order in which the tokens were added to the account.
* A response for a query requesting detail for a specific non-fungible/unique token selected by both token identifier and serial number.
* A response for a query requesting detail for a subset of individual non-fungible/unique tokens.<br/> The requested tokens are selected by a list index, which is based on the order in which the tokens were minted.
* A response for a query requesting the time, in nanoseconds, spent in direct processing for one or more recent transactions. <p> > This query is no longer supported.
* A response for a query requesting detail information about an account. <p> This query is a privileged query and "system" account authorization is REQUIRED for this query.
* An enumeration of possible response codes.
Used in:
, , ,* The transaction passed the precheck validations.
* For any error not handled by specific error codes listed below.
* Payer account does not exist.
* Node Account provided does not match the node account of the node the transaction was submitted to.
* Pre-Check error when TransactionValidStart + transactionValidDuration is less than current consensus time.
* Transaction start time is greater than current consensus time
* The given transactionValidDuration was either non-positive, or greater than the maximum valid duration of 180 secs.
* The transaction signature is not valid
* Transaction memo size exceeded 100 bytes
* The fee provided in the transaction is insufficient for this type of transaction
* The payer account has insufficient cryptocurrency to pay the transaction fee
* This transaction ID is a duplicate of one that was submitted to this node or reached consensus in the last 180 seconds (receipt period)
* If API is throttled out
* The API is not currently supported
* The file id is invalid or does not exist
* The account id is invalid or does not exist
* The contract id is invalid or does not exist
* Transaction id is not valid
* Receipt for given transaction id does not exist
* Record for given transaction id does not exist
* The solidity id is invalid or entity with this solidity id does not exist
* The responding node has submitted the transaction to the network. Its final status is still unknown.
* The transaction succeeded
* There was a system error and the transaction failed because of invalid request parameters.
* There was a system error while performing fee calculation, reserved for future.
* There was a system error while performing balance checks, reserved for future.
* Key not provided in the transaction body
* Unsupported algorithm/encoding used for keys in the transaction
* When the account balance is not sufficient for the transfer
* During an update transaction when the system is not able to find the Users Solidity address
* Not enough gas was supplied to execute transaction
* contract byte code size is over the limit
* local execution (query) is requested for a function which changes state
* Contract REVERT OPCODE executed
* For any contract execution related error not handled by specific error codes listed above.
* In Query validation, account with +ve(amount) value should be Receiving node account, the receiver account should be only one account in the list
* Header is missing in Query request
* The update of the account failed
* Provided key encoding was not supported by the system
* null solidity address
* update of the contract failed
* the query header is invalid
* Invalid fee submitted
* Payer signature is invalid
* The keys were not provided in the request.
* Expiration time provided in the transaction was invalid.
* WriteAccess Control Keys are not provided for the file
* The contents of file are provided as empty.
* The crypto transfer credit and debit do not sum equal to 0
* Transaction body provided is empty
* Invalid transaction body provided
* the type of key (base ed25519 key, KeyList, or ThresholdKey) does not match the type of signature (base ed25519 signature, SignatureList, or ThresholdKeySignature)
* the number of key (KeyList, or ThresholdKey) does not match that of signature (SignatureList, or ThresholdKeySignature). e.g. if a keyList has 3 base keys, then the corresponding signatureList should also have 3 base signatures.
* the livehash body is empty
* the livehash data is missing
* the keys for a livehash are missing
* the livehash data is not the output of a SHA-384 digest
* the query body is empty
* the crypto livehash query is empty
* the livehash is not present
* the account id passed has not yet been created.
* the livehash already exists for a given account
* File WACL keys are invalid
* Serialization failure
* The size of the Transaction is greater than transactionMaxBytes
* The Transaction has more than 50 levels
* Contract is marked as deleted
* the platform node is either disconnected or lagging behind.
* one public key matches more than one prefixes on the signature map
* transaction not created by platform due to large backlog
* auto renewal period is not a positive number of seconds
* the response code when a smart contract id is passed for a crypto API request
* the account has been marked as deleted
* the file has been marked as deleted
* same accounts repeated in the transfer account list
* attempting to set negative balance value for crypto account
* when deleting smart contract that has crypto balance either transfer account or transfer smart contract is required
* when deleting smart contract that has crypto balance you can not use the same contract id as transferContractId as the one being deleted
* transferAccountId or transferContractId specified for contract delete does not exist
* attempting to modify (update or delete a immutable smart contract, i.e. one created without a admin key)
* Unexpected exception thrown by file system functions
* the duration is not a subset of [MINIMUM_AUTORENEW_DURATION,MAXIMUM_AUTORENEW_DURATION]
* Decoding the smart contract binary to a byte array failed. Check that the input is a valid hex string.
* File to create a smart contract was of length zero
* Bytecode for smart contract is of length zero
* Attempt to set negative initial balance
* Attempt to set negative receive record threshold
* Attempt to set negative send record threshold
* Special Account Operations should be performed by only Genesis account, return this code if it is not Genesis Account
* The fee payer account doesn't have permission to submit such Transaction
* FreezeTransactionBody is invalid
* FreezeTransactionBody does not exist
* Exceeded the number of accounts (both from and to) allowed for crypto transfer list
* Smart contract result size greater than specified maxResultSize
* The payer account is not a special account(account 0.0.55)
* Negative gas was offered in smart contract call
* Negative value / initial balance was specified in a smart contract call / create
* Failed to update fee file
* Failed to update exchange rate file
* Payment tendered for contract local call cannot cover both the fee and the gas
* Entities with Entity ID below 1000 are not allowed to be deleted
* Violating one of these rules: 1) treasury account can update all entities below 0.0.1000, 2) account 0.0.50 can update all entities from 0.0.51 - 0.0.80, 3) Network Function Master Account A/c 0.0.50 - Update all Network Function accounts & perform all the Network Functions listed below, 4) Network Function Accounts: i) A/c 0.0.55 - Update Address Book files (0.0.101/102), ii) A/c 0.0.56 - Update Fee schedule (0.0.111), iii) A/c 0.0.57 - Update Exchange Rate (0.0.112).
* Fee Schedule Proto uploaded but not valid (append or update is required)
* Fee Schedule Proto uploaded but not valid (append or update is required)
* Fee Schedule Proto File Part uploaded
* The change on Exchange Rate exceeds Exchange_Rate_Allowed_Percentage
* Contract permanent storage exceeded the currently allowable limit
* Transfer Account should not be same as Account to be deleted
* The expiration date/time on a smart contract may not be reduced
* Gas exceeded currently allowable gas limit per transaction
* File size exceeded the currently allowable limit
* When a valid signature is not provided for operations on account with receiverSigRequired=true
* The Topic ID specified is not in the system.
* A provided admin key was invalid. Verify the bytes for an Ed25519 public key are exactly 32 bytes; and the bytes for a compressed ECDSA(secp256k1) key are exactly 33 bytes, with the first byte either 0x02 or 0x03..
* A provided submit key was invalid.
* An attempted operation was not authorized (ie - a deleteTopic for a topic with no adminKey).
* A ConsensusService message is empty.
* The autoRenewAccount specified is not a valid, active account.
* An adminKey was not specified on the topic, so there must not be an autoRenewAccount.
* The topic has expired, was not automatically renewed, and is in a 7 day grace period before the topic will be deleted unrecoverably. This error response code will not be returned until autoRenew functionality is supported by HAPI.
chunk number must be from 1 to total (chunks) inclusive.
For every chunk, the payer account that is part of initialTransactionID must match the Payer Account of this transaction. The entire initialTransactionID should match the transactionID of the first chunk, but this is not checked or enforced by Hedera except when the chunk number is 1.
Account is frozen and cannot transact with the token
An involved account already has more than <tt>tokens.maxPerAccount</tt> associations with non-deleted tokens.
The token is invalid or does not exist
Invalid token decimals
Invalid token initial supply
Treasury Account does not exist or is deleted
Token Symbol is not UTF-8 capitalized alphabetical string
Freeze key is not set on token
Amounts in transfer list are not net zero
A token symbol was not provided
The provided token symbol was too long
KYC must be granted and account does not have KYC granted
KYC key is not set on token
Token balance is not sufficient for the transaction
Token transactions cannot be executed on deleted token
Supply key is not set on token
Wipe key is not set on token
The requested token mint amount would cause an invalid total supply
The requested token burn amount would cause an invalid total supply
A required token-account relationship is missing
The target of a wipe operation was the token treasury account
The provided KYC key was invalid.
The provided wipe key was invalid.
The provided freeze key was invalid.
The provided supply key was invalid.
Token Name is not provided
Token Name is too long
The provided wipe amount must not be negative, zero or bigger than the token holder balance
Token does not have Admin key set, thus update/delete transactions cannot be performed
An <tt>associateToken</tt> operation specified a token already associated to the account
An attempted operation is invalid until all token balances for the target account are zero
An attempted operation is invalid because the account is a treasury
Same TokenIDs present in the token list
Exceeded the number of token transfers (both from and to) allowed for token transfer list
TokenTransfersTransactionBody has no TokenTransferList
TokenTransfersTransactionBody has a TokenTransferList with no AccountAmounts
* The Scheduled entity does not exist; or has now expired, been deleted, or been executed
* The Scheduled entity cannot be modified. Admin key not set
* The provided Scheduled Payer does not exist
* The Schedule Create Transaction TransactionID account does not exist
* The provided sig map did not contain any new valid signatures from required signers of the scheduled transaction
* The required signers for a scheduled transaction cannot be resolved, for example because they do not exist or have been deleted
* Only whitelisted transaction types may be scheduled
* At least one of the signatures in the provided sig map did not represent a valid signature for any required signer
* The scheduled field in the TransactionID may not be set to true
* A schedule already exists with the same identifying fields of an attempted ScheduleCreate (that is, all fields other than scheduledPayerAccountID)
* A string field in the transaction has a UTF-8 encoding with the prohibited zero byte
* A schedule being signed or deleted has already been deleted
* A schedule being signed or deleted has already been executed
* ConsensusSubmitMessage request's message size is larger than allowed.
* An operation was assigned to more than one throttle group in a given bucket
* The capacity needed to satisfy all opsPerSec groups in a bucket overflowed a signed 8-byte integral type
* Given the network size in the address book, the node-level capacity for an operation would never be enough to accept a single request; usually means a bucket burstPeriod should be increased
* A bucket was defined without any throttle groups
* A throttle group was granted zero opsPerSec
* The throttle definitions file was updated, but some supported operations were not assigned a bucket
* The new contents for the throttle definitions system file were not valid protobuf
* The new throttle definitions system file were invalid, and no more specific error could be divined
* The transaction references an account which has passed its expiration without renewal funds available, and currently remains in the ledger only because of the grace period given to expired entities
* Invalid token max supply
* Invalid token nft serial number
* Invalid nft id
* Nft metadata is too long
* Repeated operations count exceeds the limit
* The range of data to be gathered is out of the set boundaries
* A custom fractional fee set a denominator of zero
* The transaction payer could not afford a custom fee
* More than 10 custom fees were specified
* Any of the feeCollector accounts for customFees is invalid
* Any of the token Ids in customFees is invalid
* Any of the token Ids in customFees are not associated to feeCollector
* A token cannot have more units minted due to its configured supply ceiling
* The transaction attempted to move an NFT serial number from an account other than its owner
* A custom fee schedule entry did not specify either a fixed or fractional fee
* Only positive fees may be assessed at this time
* Fee schedule key is not set on token
* A fractional custom fee exceeded the range of a 64-bit signed integer
* A royalty cannot exceed the total fungible value exchanged for an NFT
* Each fractional custom fee must have its maximum_amount, if specified, at least its minimum_amount
* A fee schedule update tried to clear the custom fees from a token whose fee schedule was already empty
* Only tokens of type FUNGIBLE_COMMON can be used to as fee schedule denominations
* Only tokens of type FUNGIBLE_COMMON can have fractional fees
* The provided custom fee schedule key was invalid
* The requested token mint metadata was invalid
* The requested token burn metadata was invalid
* The treasury for a unique token cannot be changed until it owns no NFTs
* An account cannot be dissociated from a unique token if it owns NFTs for the token
* A NFT can only be burned when owned by the unique token's treasury
* An account did not own the NFT to be wiped
* An AccountAmount token transfers list referenced a token type other than FUNGIBLE_COMMON
* All the NFTs allowed in the current price regime have already been minted
* The payer account has been marked as deleted
* The reference chain of custom fees for a transferred token exceeded the maximum length of 2
* More than 20 balance adjustments were to satisfy a CryptoTransfer and its implied custom fee payments
* The sender account in the token transfer transaction could not afford a custom fee
* Currently no more than 4,294,967,295 NFTs may be minted for a given unique token type
* Only tokens of type NON_FUNGIBLE_UNIQUE can have royalty fees
* The account has reached the limit on the automatic associations count.
* Already existing automatic associations are more than the new maximum automatic associations.
* Cannot set the number of automatic associations for an account more than the maximum allowed token associations <tt>tokens.maxPerAccount</tt>.
* Token is paused. This Token cannot be a part of any kind of Transaction until unpaused.
* Pause key is not set on token
* The provided pause key was invalid
* The update file in a freeze transaction body must exist.
* The hash of the update file in a freeze transaction body must match the in-memory hash.
* A FREEZE_UPGRADE transaction was handled with no previous update prepared.
* A FREEZE_ABORT transaction was handled with no scheduled freeze.
* The update file hash when handling a FREEZE_UPGRADE transaction differs from the file hash at the time of handling the PREPARE_UPGRADE transaction.
* The given freeze start time was in the (consensus) past.
* The prepared update file cannot be updated or appended until either the upgrade has been completed, or a FREEZE_ABORT has been handled.
* Once a freeze is scheduled, it must be aborted before any other type of freeze can can be performed.
* If an NMT upgrade has been prepared, the following operation must be a FREEZE_UPGRADE. (To issue a FREEZE_ONLY, submit a FREEZE_ABORT first.)
* If an NMT upgrade has been prepared, the subsequent FREEZE_UPGRADE transaction must confirm the id of the file to be used in the upgrade.
* If an NMT upgrade has been prepared, the subsequent FREEZE_UPGRADE transaction must confirm the hash of the file to be used in the upgrade.
* Consensus throttle did not allow execution of this transaction. System is throttled at consensus level.
* A precompiled contract succeeded, but was later reverted.
* All contract storage allocated to the current price regime has been consumed.
* An alias used in a CryptoTransfer transaction is not the serialization of a primitive Key message--that is, a Key with a single Ed25519 or ECDSA(secp256k1) public key and no unknown protobuf fields.
* A fungible token transfer expected a different number of decimals than the involved type actually has.
* The proxy account id is invalid or does not exist.
* The transfer account id in CryptoDelete transaction is invalid or does not exist.
* The fee collector account id in TokenFeeScheduleUpdate is invalid or does not exist.
* The alias already set on an account cannot be updated using CryptoUpdate transaction.
* An approved allowance specifies a spender account that is the same as the hbar/token owner account.
* The establishment or adjustment of an approved allowance cause the token allowance to exceed the token maximum supply.
* The specified amount for an approved allowance cannot be negative.
* The approveForAll flag cannot be set for a fungible token.
* The spender does not have an existing approved allowance with the hbar/token owner.
* The transfer amount exceeds the current approved allowance for the spender account.
* The payer account of an approveAllowances or adjustAllowance transaction is attempting to go beyond the maximum allowed number of allowances.
* No allowances have been specified in the approval transaction.
* Spender is repeated more than once in Crypto or Token or NFT allowance lists in a single CryptoApproveAllowance transaction.
* Serial numbers are repeated in nft allowance for a single spender account
* Fungible common token used in NFT allowances
* Non fungible token used in fungible token allowances
* The account id specified as the owner is invalid or does not exist.
* The account id specified as the spender is invalid or does not exist.
* [Deprecated] If the CryptoDeleteAllowance transaction has repeated crypto or token or Nft allowances to delete.
* If the account Id specified as the delegating spender is invalid or does not exist.
* The delegating Spender cannot grant approveForAll allowance on a NFT token type for another spender.
* The delegating Spender cannot grant allowance on a NFT serial for another spender as it doesnt not have approveForAll granted on token-owner.
* The scheduled transaction could not be created because it's expiration_time was too far in the future.
* The scheduled transaction could not be created because it's expiration_time was less than or equal to the consensus time.
* The scheduled transaction could not be created because it would cause throttles to be violated on the specified expiration_time.
* The scheduled transaction could not be created because it would cause the gas limit to be violated on the specified expiration_time.
* The ethereum transaction either failed parsing or failed signature validation, or some other EthereumTransaction error not covered by another response code.
* EthereumTransaction was signed against a chainId that this network does not support.
* This transaction specified an ethereumNonce that is not the current ethereumNonce of the account.
* The ethereum transaction specified an access list, which the network does not support.
* A schedule being signed or deleted has passed it's expiration date and is pending execution if needed and then expiration.
* A selfdestruct or ContractDelete targeted a contract that is a token treasury.
* A selfdestruct or ContractDelete targeted a contract with non-zero token balances.
* A contract referenced by a transaction is "detached"; that is, expired and lacking any hbar funds for auto-renewal payment---but still within its post-expiry grace period.
* A ContractUpdate requested removal of a contract's auto-renew account, but that contract has no auto-renew account.
* A delete transaction submitted via HAPI set permanent_removal=true
A CryptoCreate or ContractCreate used the deprecated proxyAccountID field.
* An account set the staked_account_id to itself in CryptoUpdate or ContractUpdate transactions.
* The staking account id or staking node id given is invalid or does not exist.
* Native staking, while implemented, has not yet enabled by the council.
* The range provided in UtilPrng transaction is negative.
* The maximum number of entities allowed in the current price regime have been created.
* The full prefix signature for precompile is not valid
* The combined balances of a contract and its auto-renew account (if any) did not cover the rent charged for net new storage used in a transaction.
* A contract transaction tried to use more than the allowed number of child records, via either system contract records or internal contract creations.
* The combined balances of a contract and its auto-renew account (if any) or balance of an account did not cover the auto-renewal fees in a transaction.
* A transaction's protobuf message includes unknown fields; could mean that a client expects not-yet-released functionality to be available.
* The account cannot be modified. Account's key is not set
* An alias that is assigned to an account or contract cannot be assigned to another account or contract.
* A provided metadata key was invalid. Verification includes, for example, checking the size of Ed25519 and ECDSA(secp256k1) public keys.
* Metadata key is not set on token
* Token Metadata is not provided
* NFT serial numbers are missing in the TokenUpdateNftsTransactionBody
* Admin key is not set on token
* A transaction failed because the consensus node identified is deleted from the address book.
* A transaction failed because the consensus node identified is not valid or does not exist in state.
* A transaction failed because one or more entries in the list of service endpoints for the `gossip_endpoint` field is invalid.<br/> The most common cause for this response is a service endpoint that has the domain name (DNS) set rather than address and port.
* A transaction failed because the node account identifier provided does not exist or is not valid.<br/> One common source of this error is providing a node account identifier using the "alias" form rather than "numeric" form. It is also used for atomic batch transaction for child transaction if the node account id is not 0.0.0.
* A transaction failed because the description field cannot be encoded as UTF-8 or is more than 100 bytes when encoded.
* A transaction failed because one or more entries in the list of service endpoints for the `service_endpoint` field is invalid.<br/> The most common cause for this response is a service endpoint that has the domain name (DNS) set rather than address and port.
* A transaction failed because the TLS certificate provided for the node is missing or invalid. <p> #### Probable Causes The certificate MUST be a TLS certificate of a type permitted for gossip signatures.<br/> The value presented MUST be a UTF-8 NFKD encoding of the TLS certificate.<br/> The certificate encoded MUST be in PEM format.<br/> The `gossip_ca_certificate` field is REQUIRED and MUST NOT be empty.
* A transaction failed because the hash provided for the gRPC certificate is present but invalid. <p> #### Probable Causes The `grpc_certificate_hash` MUST be a SHA-384 hash.<br/> The input hashed MUST be a UTF-8 NFKD encoding of the actual TLS certificate.<br/> The certificate to be encoded MUST be in PEM format.
* The maximum automatic associations value is not valid.<br/> The most common cause for this error is a value less than `-1`.
* The maximum number of nodes allowed in the address book have been created.
* In ServiceEndpoint, domain_name and ipAddressV4 are mutually exclusive
* Fully qualified domain name is not allowed in gossip_endpoint
* In ServiceEndpoint, domain_name size too large
* ServiceEndpoint is invalid
* The number of gossip endpoints exceeds the limit
* The transaction attempted to use duplicate `TokenReference`.<br/> This affects `TokenReject` attempting to reject same token reference more than once.
* The account id specified as the owner in `TokenReject` is invalid or does not exist.
* The transaction attempted to use more than the allowed number of `TokenReference`.
* The number of service endpoints exceeds the limit
The IPv4 address is invalid
* The transaction attempted to use empty `TokenReference` list.
The node account is not allowed to be updated
The token has no metadata or supply key
* The list of `PendingAirdropId`s is empty and MUST NOT be empty.
* A `PendingAirdropId` is repeated in a `claim` or `cancel` transaction.
* The number of `PendingAirdropId` values in the list exceeds the maximum allowable number.
A pending airdrop already exists for the specified NFT.
The identified account is sender for one or more pending airdrop(s) and cannot be deleted. <p> The requester SHOULD cancel all pending airdrops before resending this transaction.
* Consensus throttle did not allow execution of this transaction.<br/> The transaction should be retried after a modest delay.
* The provided pending airdrop id is invalid.<br/> This pending airdrop MAY already be claimed or cancelled. <p> The client SHOULD query a mirror node to determine the current status of the pending airdrop.
* The token to be airdropped has a fallback royalty fee and cannot be sent or claimed via an airdrop transaction.
* This airdrop claim is for a pending airdrop with an invalid token.<br/> The token might be deleted, or the sender may not have enough tokens to fulfill the offer. <p> The client SHOULD query mirror node to determine the status of the pending airdrop and whether the sender can fulfill the offer.
* A scheduled transaction configured to wait for expiry to execute was given an expiry time at which there is already too many transactions scheduled to expire; its creation must be retried with a different expiry.
* The provided gRPC certificate hash is invalid.
* A scheduled transaction configured to wait for expiry to execute was not given an explicit expiration time.
* A contract operation attempted to schedule another transaction after it had already scheduled a recursive contract call.
* A contract can schedule recursive calls a finite number of times (this is approximately four million times with typical network configuration.)
* The target network is waiting for the ledger ID to be set, which is a side effect of finishing the network's TSS construction.
* The provided fee exempt key list size exceeded the limit.
* The provided fee exempt key list contains duplicated keys.
* The provided fee exempt key list contains an invalid key.
* The provided fee schedule key contains an invalid key.
* If a fee schedule key is not set when we create a topic we cannot add it on update.
* If the topic's custom fees are updated the topic SHOULD have a fee schedule key
* The fee amount is exceeding the amount that the payer is willing to pay.
* There are no corresponding custom fees.
* The provided list contains invalid max custom fee.
* The provided max custom fee list contains fees with duplicate denominations.
* The provided max custom fee list contains fees with duplicate account id.
* Max custom fees list is not supported for this operation.
* The list of batch transactions is empty
* The list of batch transactions contains duplicated transactions
* The list of batch transactions contains a transaction type that is in the AtomicBatch blacklist as configured in the network.
* The inner transaction of a batch transaction failed
* The inner transaction of a batch transaction is missing a batch key
* The batch key is set for a non batch transaction
* The batch key is not valid
* The provided schedule expiry time is not configurable.
* The network just started at genesis and is creating system entities.
* A standard header returned with every query response. The fields for `cost` or `stateProof` MAY be unset if the requested `ResponseType` does not request those values.<br/> The `responseType` SHALL match the request response type.<br/> The `nodeTransactionPrecheckCode` field SHALL contain the result code for the query.
Used in:
, , , , , , , , , , , , , , , , , , , , , , , ,* The result code for this query. <p> This value SHALL indicate either success or the reason for failure.
* The response type requested for this query. <p> This SHALL be the response type requested in the query header.
* Requested cost estimate.<br/> This is the fee that _would be_ charged if the query was executed. <p> This value SHALL be set if the response type requested requires cost information, and SHALL NOT be set otherwise.<br/> This value SHALL include the query fee, but SHALL NOT include the transfer fee required to execute the fee payment transaction.
* A state proof for the information requested. This field SHALL NOT be set if the response type does not require a state proof.<br/> This field SHALL NOT be set if a state proof is not available for the query type.<br/> This field SHALL be set if the response type requested a state proof and a state proof is available.
* The type of query response.<br/> This SHALL be answer-only as a default.<br/> This value SHALL support an "estimated cost" type.<br/> This value SHOULD support a "state proof" type, when available.
Used in:
,* A response with the query answer.
* A response with both the query answer and a state proof.
* A response with the estimated cost to answer the query.
* A response with the estimated cost to answer and a state proof.
* A fee to assess during a CryptoTransfer that changes ownership of a non-fungible/unique (NFT) token.<br/> This message defines the fraction of the fungible value exchanged for an NFT that the ledger should collect as a royalty. "Fungible value" includes both HBAR (ℏ) and units of fungible HTS tokens. When the NFT sender does not receive any fungible value, the ledger will assess the fallback fee, if present, to the new NFT owner. Royalty fees can only be added to non-fungible/unique tokens. #### Important Note > Users should be aware that native royalty fees are _strictly_ a > convenience feature, SHALL NOT be guaranteed, and the network SHALL NOT > enforce _inescapable_ royalties on the exchange of a unique NFT.<br/> > For _one_ example, if the counterparties agree to split their value > transfer and NFT exchange into separate transactions, the network cannot > possibly determine the value exchanged. Even trustless transactions, > using a smart contract or other form of escrow, can arrange such split > transactions as a single _logical_ transfer. Counterparties that wish to _respect_ creator royalties MUST follow the pattern the network recognizes. <div style="margin-left: 2em; margin-top: -0.8em"> A single transaction MUST contain all three elements, transfer of the NFT, debit of fungible value from the receiver, and credit of fungible value to the sender, in order for the network to accurately assess royalty fees. </div> <div style="margin-left: 1em; margin-top: -0.8em"> Two examples are presented here. <div style="margin-left: 1em"> The NFT sender and receiver MUST both sign a single `cryptoTransfer` that transfers the NFT from sender to receiver, debits the fungible value from the receiver, and credits the sender with the fungible value the receiver is exchanging for the NFT.<br/> A marketplace using an approved spender account for an escrow transaction MUST credit the account selling the NFT in the same `cryptoTransfer` transaction that transfers the NFT to, and deducts fungible value from, the buying account. </div></div> This type of fee MAY NOT produce accurate results if multiple transfers are executed in a single transaction. It is RECOMMENDED that each NFT subject to royalty fees be transferred separately and without unrelated fungible token transfers. The network SHALL NOT consider third-party transfers, including "approved spender" accounts, in collecting royalty fees. An honest broker MUST ensure that transfer of an NFT and payment delivered to the sender are present in the same transaction. There is an [open suggestion](https://github.com/hashgraph/hedera-improvement-proposal/discussions/578) that proposes to broaden the scope of transfers from which the network automatically collects royalties to cover related third parties. If this interests or concerns you, please add your voice to that discussion.
Used in:
* The fraction of fungible value exchanged for an NFT to collect as royalty. <p> This SHALL be applied once to the total fungible value transferred for the transaction.<br/> There SHALL NOT be any adjustment based on multiple transfers involving the NFT sender as part of a single transaction.
* A fixed fee to assess if no fungible value is known to be traded for the NFT. <p> If an NFT is transferred without a corresponding transfer of _fungible_ value returned in the same transaction, the network SHALL charge this fee as a fallback.<br/> Fallback fees MAY have unexpected effects when interacting with escrow, market transfers, and smart contracts. It is RECOMMENDED that developers carefully consider possible effects from fallback fees when designing systems that facilitate the transfer of NFTs.
* The running hash of transaction records and the previous `3` running hashes. All hashes are 48 byte SHA384 hash values. If the running hashes do not exist yet (for example, at genesis) then each not-yet-available value SHALL be empty (zero-length) bytes.
* A running hash of all record stream items.
* The previous running hash of all record stream items.
* The previous, previous running hash of all record stream items.
* The previous, previous, previous running hash of all record stream items.
* A schedulable transaction. The network configuration `scheduling.whitelist` limits which of these transaction types may actually be scheduled. As of version `0.50.0` of the consensus node software this list contains only `CryptoTransfer`, `ConsensusSubmitMessage`, `TokenBurn`, `TokenMint`, and `CryptoApproveAllowance`.
Used in:
, ,* A limit for the transaction fee the client is willing to pay. <p> The network SHALL NOT charge fees greater than this value.
* A short description of the schedulable transaction. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* Call a function defined on a smart contract.
* Create a smart contract.
* Update a smart contract.
* Delete a smart contract and transfer remaining balance to a specified account.
* Create a new Hedera account.
* Delete an Hedera account.<br/> This will mark the account as deleted, and transfer all remaining HBAR to a receiver account.
* Transfer HBAR between accounts.
* Modify an Hedera account.
* Append data to the end of a file.
* Create a new file.
* Delete a file.<br/> This will remove the content of the file, and mark the file as deleted.
* Modify a file.<br/> This may modify any metadata, and/or _replace_ the content.
* Delete a file as an Hedera administrative function.<br/> This is a privileged operation.
* Restore a file deleted via `systemDelete`.<br/> This is a privileged operation.
* Freeze the network.<br/> This is actually several possible operations, and the caller should examine the "freeze service" for more detail.<br/> This is a privileged operation.
* Create a topic.
* Update a topic.
* Delete a topic.
* Submit a message to a topic.<br/> A message may be "chunked", and submitted in parts, if the total message size exceeds the limit for a single transaction.
* Create a new Hedera token.
* Freeze an account with respect to a token.<br/> A frozen account cannot transact in that token until unfrozen.
* Unfreeze an account with respect to a token.
* Grant KYC to an account with respect to a token.<br/> KYC is generally a "know your customer" assertion that a responsible entity has sufficient information to positively identify the account holder to relevant authorities.
* Revoke KYC from an account with respect to a token.
* Deletes an Hedera token.<br/> The token will be marked deleted.
* Update an Hedera token.<br/> Depending on what fields are to be modified, the signature requirements will vary. See `TokenUpdateTransactionBody` for further detail.
* Mint new tokens.<br/> All minted tokens will be delivered to the treasury account for the token type. The "mint key" for the token must sign this transaction.
* Burn tokens from the treasury account.<br/> The "burn key" for the token must sign this transaction.
* Wipe tokens from an account.<br/> This will remove a specified amount of fungible/common tokens or a specified list of non-fungible/unique serial numbered tokens of a given token type from an Hedera account. The removed tokens are _burned_ as if by a `tokenBurn` transaction.<br/> The "wipe key" for the token must sign this transaction.
* Associate tokens to an account.
* Dissociate tokens from an account.
* Delete a schedule.<br/> The schedule will be marked as deleted.
* Pause a Token.<br/> This transaction must be signed by the "pause key" for the token.
* Unpause a Token.<br/> This transaction must be signed by the "pause key" for the token.
* Add one or more approved allowances for spenders to transfer the paying account's hbar or tokens.
* Delete one or more approvals for spenders to transfer the paying account's hbar or tokens.
* Update the custom fee schedule for a token.<br/> This transaction must be signed by the "fee schedule key" for the token.
* Provide a deterministic pseudorandom number based on network state.
* Update one or more non-fungible/unique tokens.<br/> This will update metadata for one or more serial numbers within a collection (token type).
* Create a new node in the network address book.<br/> This is a privileged operation.
* Update a node in the network address book.<br/> This is a privileged operation.
* Delete a node from the network address book.<br/> This will mark the node as deleted.<br/> This is a privileged operation.
* "Reject" undesired tokens.<br/> This transaction will transfer one or more tokens or token balances held by the requesting account to the treasury for each token type. <p> Each transfer MUST be one of the following: <ul> <li>A single non-fungible/unique token.</li> <li>The full balance held for a fungible/common token type.</li> </ul> When complete, the requesting account SHALL NOT hold the rejected tokens.<br/> Custom fees and royalties defined for the tokens rejected SHALL NOT be charged for this transaction.
* Cancel an "airdrop".<br/> This transaction cancels a pending airdrop for one or more recipients. <p> The airdrop(s) to cancel MUST be pending, and not claimed.<br/>
* Claim an "airdrop". This transaction "claims" one or more pending "airdrops". <p> The airdrop(s) to claim MUST be pending, and not already claimed.<br/>
* Send an "airdrop" of tokens to one or more recipients. <p> This transaction unilaterally "gifts" tokens by transferring them from a "sender" account to the "recipient" account(s). If any recipient is not already associated to the token to airdrop, or has set a "reciever signature required" flag, then that recipient is recorded as a "pending" airdrop which must be "claimed". All other recipients receive the "airdropped" tokens immediately.
* Representation of a Hedera Schedule entry in the network Merkle tree.<br/> A Schedule represents a request to run a transaction _at some future time_ either when the `Schedule` expires (if long term schedules are enabled and `wait_for_expiry` is true) or as soon as the `Schedule` has gathered enough signatures via any combination of the `scheduleCreate` and 0 or more subsequent `scheduleSign` transactions.
Used in:
* This schedule's ID within the global network state. <p> This value SHALL be unique within the network.
* A flag indicating this schedule is deleted. <p> A schedule SHALL either be executed or deleted, but never both.
* A flag indicating this schedule has executed. <p> A schedule SHALL either be executed or deleted, but never both.
* A schedule flag to wait for expiration before executing. <p> A schedule SHALL be executed immediately when all necessary signatures are gathered, unless this flag is set.<br/> If this flag is set, the schedule SHALL wait until the consensus time reaches `expiration_time_provided`, when signatures MUST again be verified. If all required signatures are present at that time, the schedule SHALL be executed. Otherwise the schedule SHALL expire without execution. <p> Note that a schedule is always removed from state after it expires, regardless of whether it was executed or not.
* A short description for this schedule. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* The scheduler account for this schedule. <p> This SHALL be the account that submitted the original ScheduleCreate transaction.
* The explicit payer account for the scheduled transaction. <p> If set, this account SHALL be added to the accounts that MUST sign the schedule before it may execute.
* The admin key for this schedule. <p> This key, if set, MUST sign any `schedule_delete` transaction.<br/> If not set, then this schedule SHALL NOT be deleted, and any `schedule_delete` transaction for this schedule SHALL fail.
* The transaction valid start value for this schedule. <p> This MUST be set, and SHALL be copied from the `TransactionID` of the original `schedule_create` transaction.
* The requested expiration time of the schedule if provided by the user. <p> If not provided in the `schedule_create` transaction, this SHALL be set to a default value equal to the current consensus time, forward offset by the maximum schedule expiration time in the current dynamic network configuration (typically 62 days).<br/> The actual `calculated_expiration_second` MAY be "earlier" than this, but MUST NOT be later.
* The calculated expiration time of the schedule. <p> This SHALL be calculated from the requested expiration time in the `schedule_create` transaction, and limited by the maximum expiration time in the current dynamic network configuration (typically 62 days). <p> The schedule SHALL be removed from global network state after the network reaches a consensus time greater than or equal to this value.
* The consensus timestamp of the transaction that executed or deleted this schedule. <p> This value SHALL be set to the `current_consensus_time` when a `schedule_delete` transaction is completed.<br/> This value SHALL be set to the `current_consensus_time` when the scheduled transaction is executed, either as a result of gathering the final required signature, or, if long-term schedule execution is enabled, at the requested execution time.
* The scheduled transaction to execute. <p> This MUST be one of the transaction types permitted in the current value of the `schedule.whitelist` in the dynamic network configuration.
* The full transaction that created this schedule. <p> This is primarily used for duplicate schedule create detection. This is also the source of the parent transaction ID, from which the child transaction ID is derived when the `scheduled_transaction` is executed.
* All of the "primitive" keys that have already signed this schedule. <p> The scheduled transaction SHALL NOT be executed before this list is sufficient to "activate" the required keys for the scheduled transaction.<br/> A Key SHALL NOT be stored in this list unless the corresponding private key has signed either the original `schedule_create` transaction or a subsequent `schedule_sign` transaction intended for, and referencing to, this specific schedule. <p> The only keys stored are "primitive" keys (ED25519 or ECDSA_SECP256K1) in order to ensure that any key list or threshold keys are correctly handled, regardless of signing order, intervening changes, or other situations. The `scheduled_transaction` SHALL execute only if, at the time of execution, this list contains sufficient public keys to satisfy the full requirements for signature on that transaction.
* Create a new Schedule. #### Requirements This transaction SHALL create a new _schedule_ entity in network state.<br/> The schedule created SHALL contain the `scheduledTransactionBody` to be executed.<br/> If successful the receipt SHALL contain a `scheduleID` with the full identifier of the schedule created.<br/> When a schedule _executes_ successfully, the receipt SHALL include a `scheduledTransactionID` with the `TransactionID` of the transaction that executed.<br/> When a scheduled transaction is executed the network SHALL charge the regular _service_ fee for the transaction to the `payerAccountID` for that schedule, but SHALL NOT charge node or network fees.<br/> If the `payerAccountID` field is not set, the effective `payerAccountID` SHALL be the `payer` for this create transaction.<br/> If an `adminKey` is not specified, or is an empty `KeyList`, the schedule created SHALL be immutable.<br/> An immutable schedule MAY be signed, and MAY execute, but SHALL NOT be deleted.<br/> If two schedules have the same values for all fields except `payerAccountID` then those two schedules SHALL be deemed "identical".<br/> If a `scheduleCreate` requests a new schedule that is identical to an existing schedule, the transaction SHALL fail and SHALL return a status code of `IDENTICAL_SCHEDULE_ALREADY_CREATED` in the receipt.<br/> The receipt for a duplicate schedule SHALL include the `ScheduleID` of the existing schedule and the `TransactionID` of the earlier `scheduleCreate` so that the earlier schedule may be queried and/or referred to in a subsequent `scheduleSign`. #### Signature Requirements A `scheduleSign` transaction SHALL be used to add additional signatures to an existing schedule.<br/> Each signature SHALL "activate" the corresponding cryptographic("primitive") key for that schedule.<br/> Signature requirements SHALL be met when the set of active keys includes all keys required by the scheduled transaction.<br/> A scheduled transaction for a "long term" schedule SHALL NOT execute if the signature requirements for that transaction are not met when the network consensus time reaches the schedule `expiration_time`.<br/> A "short term" schedule SHALL execute immediately once signature requirements are met. This MAY be immediately when created. #### Long Term Schedules A "short term" schedule SHALL have the flag `wait_for_expiry` _unset_.<br/> A "long term" schedule SHALL have the flag `wait_for_expiry` _set_.<br/> A "long term" schedule SHALL NOT be accepted if the network configuration `scheduling.longTermEnabled` is not enabled.<br/> A "long term" schedule SHALL execute when the current consensus time matches or exceeds the `expiration_time` for that schedule, if the signature requirements for the scheduled transaction are met at that instant.<br/> A "long term" schedule SHALL NOT execute before the current consensus time matches or exceeds the `expiration_time` for that schedule.<br/> A "long term" schedule SHALL expire, and be removed from state, after the network consensus time exceeds the schedule `expiration_time`.<br/> A short term schedule SHALL expire, and be removed from state, after the network consensus time exceeds the current network configuration for `ledger.scheduleTxExpiryTimeSecs`. > Note >> Long term schedules are not (as of release 0.56.0) enabled. Any schedule >> created currently MUST NOT set the `wait_for_expiry` flag.<br/> >> When long term schedules are not enabled, schedules SHALL NOT be >> executed at expiration, and MUST meet signature requirements strictly >> before expiration to be executed. ### Block Stream Effects If the scheduled transaction is executed immediately, the transaction record SHALL include a `scheduleRef` with the schedule identifier of the schedule created.
Used in:
* A scheduled transaction. <p> This value is REQUIRED.<br/> This transaction body MUST be one of the types enabled in the network configuration value `scheduling.whitelist`.
* A short description of the schedule. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* A `Key` required to delete this schedule. <p> If this is not set, or is an empty `KeyList`, this schedule SHALL be immutable and SHALL NOT be deleted.
* An account identifier of a `payer` for the scheduled transaction. <p> This value MAY be unset. If unset, the `payer` for this `scheduleCreate` transaction SHALL be the `payer` for the scheduled transaction.<br/> If this is set, the identified account SHALL be charged the fees required for the scheduled transaction when it is executed.<br/> If the actual `payer` for the _scheduled_ transaction lacks sufficient HBAR balance to pay service fees for the scheduled transaction _when it executes_, the scheduled transaction SHALL fail with `INSUFFICIENT_PAYER_BALANCE`.<br/>
* An expiration time. <p> If not set, the expiration SHALL default to the current consensus time advanced by either the network configuration value `scheduling.maxExpirationFutureSeconds`, if `wait_for_expiry` is set and "long term" schedules are enabled, or the network configuration value `ledger.scheduleTxExpiryTimeSecs` otherwise.
* A flag to delay execution until expiration. <p> If this flag is set the scheduled transaction SHALL NOT be evaluated for execution before the network consensus time matches or exceeds the `expiration_time`.<br/> If this flag is not set, the scheduled transaction SHALL be executed immediately when all required signatures are received, whether in this `scheduleCreate` transaction or a later `scheduleSign` transaction.<br/> This value SHALL NOT be used and MUST NOT be set when the network configuration value `scheduling.longTermEnabled` is not enabled.
* Mark a schedule in the network state as deleted. This transaction MUST be signed by the `adminKey` for the identified schedule.<br/> If a schedule does not have `adminKey` set or if `adminKey` is an empty `KeyList`, that schedule SHALL be immutable and MUST NOT be deleted.<br/> A deleted schedule SHALL not be executed.<br/> A deleted schedule MUST NOT be the subject of a subsequent `scheduleSign` transaction. ### Block Stream Effects None
Used in:
,* A schedule identifier. <p> This MUST identify the schedule which SHALL be deleted.
* Request for information about a scheduled transaction. If the requested schedule does not exist, the network SHALL respond with `INVALID_SCHEDULE_ID`.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A schedule identifier. <p> This SHALL identify the schedule to retrieve.<br/> This field is REQUIRED.
* A response message for a `getScheduleInfo` query.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* Detail information for a schedule. <p> This field SHALL contain all available schedule detail.
* An unique identifier for a Schedule
Used in:
, , , , , , ,* A whole number shard
* A whole number realm
* A whole number schedule, unique within its realm and shard
* A message for storing a list of schedule identifiers in state.<br/> This is used to store lists of `ScheduleID` values. One example is all schedules that expire at a particular time.
* A list of schedule identifiers, in no particular order. <p> While the order is not _specified_, it MUST be deterministic.
* Information summarizing schedule state
Used in:
* A schedule identifier. <p> This SHALL identify the schedule retrieved.
* A deletion timestamp. <p> If the schedule was deleted, this SHALL be set to the consensus timestamp of the `deleteSchedule` transaction.<br/> If the schedule is _not_ deleted, this field SHALL NOT be set.
* An execution timestamp. <p> If the schedule was completed, and the _scheduled_ transaction executed, this SHALL be set to the consensus timestamp of the transaction that initiated that execution.<br/> If the schedule is _not_ complete, this field SHALL NOT be set.
* An expiration timestamp.<br/> This represents the time at which the schedule will expire. For a long-term schedule (if enabled) this is when the schedule will be executed, assuming it meets signature requirements at that time. For a short-term schedule, this is the deadline to complete the signature requirements for the scheduled transaction to execute. Regardless of schedule type, the schedule will be removed from state when it expires. <p> A schedule SHALL be removed from state when it expires.<br/> A short-term schedule MUST meet signature requirements strictly before expiration or it SHALL NOT be executed.<br/> A long-term schedule SHALL be executed if, and only if, all signature requirements for the scheduled transaction are met at expiration.<br/> A long-term schedule SHALL NOT be executed if any signature requirement for the scheduled transaction are not met at expiration.<br/>
* A scheduled transaction. <p> This SHALL be a transaction type enabled in the network property `scheduling.whitelist`, and SHALL NOT be any other transaction type.<br/> This transaction SHALL be executed if the schedule meets all signature and execution time requirements for this transaction.<br/> The signature requirements for this transaction SHALL be evaluated at schedule creation, SHALL be reevaluated with each `signSchedule` transaction, and, for long-term schedules, SHALL be reevaluated when the schedule expires.<br/>
* A short description for this schedule. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* The key used to delete the schedule from state
* A list of "valid" signatures for this schedule.<br/> This list contains only "primitive" (i.e. cryptographic or contract) signatures. The full signature requirements for the scheduled transaction are evaluated as if this list of keys had signed the scheduled transaction directly. <p> This list SHALL contain every "primitive" key that has signed the original `createSchedule`, or any subsequent `signSchedule` transaction.<br/> This list MAY elide any signature not likely to be required by the scheduled transaction. Such requirement SHOULD be evaluated when the signature is presented (i.e. during evaluation of a `createSchedule` or `signSchedule` transaction).
* An account identifier. <p> This SHALL identify the account that created this schedule.
* An account identifier. <p> The identified account SHALL pay the full transaction fee for the scheduled transaction _when it executes_.
* A transaction identifier. <p> This SHALL be recorded as the transaction identifier for the _scheduled_ transaction, if (and when) it is executed.
* The ledger ID of the network that generated this response. <p> This value SHALL identify the distributed ledger that responded to this query.
* A flag indicating this schedule will execute when it expires. <p> If this field is set <ul> <li>This schedule SHALL be considered a "long-term" schedule.</li> <li>This schedule SHALL be evaluated when the network consensus time reaches the `expirationTime`, and if the signature requirements for the scheduled transaction are met at that time, the scheduled transaction SHALL be executed.</li> <li>This schedule SHALL NOT be executed before the network consensus time reaches the `expirationTime`.</li> </ul> If this field is not set <ul> <li>This schedule SHALL be considered a "short-term" schedule.</li> <li>This schedule SHALL be evaluated when created, and reevaluated with each `signSchedule` transaction, and if the signature requirements for the scheduled transaction are met at that time, the scheduled transaction SHALL be executed immediately.</li> <li>This schedule SHALL be executed as soon as the signature requirements are met, and MUST be executed before the network consensus time reaches the `expirationTime`, if at all.</li> </ul>
* A message for storing a list of schedules in state.<br/> This is used to store lists of `Schedule` values. One example is all schedules that expire at a particular time.
* a list of schedules, in no particular order. <p> While the order is not _specified_, it MUST be deterministic.
* Add signatures to an existing scheduled transaction. When a schedule _executes_ successfully, the receipt SHALL include a `scheduledTransactionID` with the `TransactionID` of the transaction that executed.<br/> When a scheduled transaction is executed the network SHALL charge the regular _service_ fee for the transaction to the `payerAccountID` for that schedule, but SHALL NOT charge node or network fees.<br/> If the `payerAccountID` field is not set, the effective `payerAccountID` SHALL be the `payer` for this create transaction.<br/> Each signature on this transaction SHALL "activate" the corresponding cryptographic("primitive") key for the schedule identified.<br/> Signature requirements SHALL be met when the set of active keys includes all keys required by the scheduled transaction.<br/> A scheduled transaction for a "long term" schedule SHALL NOT execute if the signature requirements for that transaction are not met when the network consensus time reaches the schedule `expiration_time`.<br/> A "short term" schedule SHALL execute immediately once signature requirements are met. This MAY be immediately when created.<br/> ### Block Stream Effects If the scheduled transaction is executed immediately following this `scheduleSign` transaction, the transaction record SHALL include a `scheduleRef` with the schedule identifier `scheduleID`.
Used in:
* A schedule identifier. <p> This MUST identify the schedule to which signatures SHALL be added.
* A count of schedules scheduled and processed. This value summarizes the counts of scheduled and processed transactions within a particular consensus second.
* A number of transactions scheduled to expire at a consensus second.
* A number of scheduled transactions that have been processed at a consensus second.
* An ordering for a scheduled transaction.<br/> This establishes the order in which scheduled transactions intended to execute at a particular consensus second will be executed. Scheduled transactions that have the same `expiry_second` SHALL execute in ascending order of `order_number`.
* A consensus second in which the transaction is to be executed. This is _also_ the consensus time when the transaction will expire if it has not gathered enough signatures in time.
An ordered position within a conceptual list.<br/> This is the ordered position within the consensus second when the associated transaction will be executed.
* A software version according to "[semantic versioning](https://semver.org/)" or "date versioning". Hedera currently modifies the "typical" semantic versioning somewhat, the `major` version is always `0`, and each release increments the `minor` version. The `patch` and `pre` components are used in the typical manner. The `build` component is not generally used.
Used in:
, ,* A major version.<br/> Hedera does not increment this value and retains a `0` value to indicate that API may change for any release. <p> This value SHALL increment for an incompatible API change.<br/>
* A minor version.<br/> Hedera increments this value with each release.<br/> There may be incompatible API changes in any Hedera Services release. <p> This value SHALL increment for backwards-compatible new functionality.
* A patch version. <p> This value SHALL increment for backwards-compatible bug fixes.
* A pre-release version. <p> This MAY be denoted by appending a hyphen and a series of dot separated identifiers per [Semver Specification](https://semver.org/#spec-item-9); given a string `0.14.0-alpha.1+21AF26D3`, this field would contain 'alpha.1'
* A build version. <p> Build version MAY be denoted by appending a plus sign and a series of dot separated identifiers immediately following the patch or pre-release version per [Semver Specification](https://semver.org/#spec-item-10); so given a string `0.14.0-alpha.1+21AF26D3`, this field would contain '21AF26D3'
* A network node endpoint.<br/> Each network node in the global address book publishes one or more endpoints which enable the nodes to communicate both with other nodes, for gossip, and with clients to receive transaction requests. This message supports IPv4 with address and TCP port, and MAY include a FQDN instead of an IP address.<br/> IPv6 is not currently supported. When the `domain_name` field is set, the `ipAddressV4` field MUST NOT be set.<br/> When the `ipAddressV4` field is set, the `domain_name` field MUST NOT be set.
Used in:
, , , ,* A 32-bit IPv4 address.<br/> This is the address of the endpoint, encoded in pure "big-endian" (i.e. left to right) order (e.g. `127.0.0.1` has hex bytes in the order `7F`, `00`, `00`, `01`).
* A TCP port to use. <p> This value MUST be between 0 and 65535, inclusive.
* A node domain name. <p> This MUST be the fully qualified domain name of the node.<br/> This value MUST NOT exceed 253 characters.<br/> When the `domain_name` field is set, the `ipAddressV4` field MUST NOT be set.<br/> When the `ipAddressV4` field is set, the `domain_name` field MUST NOT be set.
* Setting values representing a source of runtime configuration information.
* A List of `Setting` values, typically read from application properties.
* A single runtime configuration setting. Typically a name-value pair, this may also contain a small amount of associated data.
Used in:
* A name for this setting property.
* A value for this setting property.
* A small quantity of data associated with this setting. <p> This SHOULD be less than 100 bytes.<br/> If the value is a string, it MUST be encoded UTF-8.
* A shard identifier.<br/> A shard is a partition of nodes running the network that processes transactions separately from other shards. Each shard is effectively an independent instance of the overall network that shares the same virtual distributed ledger, and may gossip cross-shard transactions with other shards to maintain overall correct processing of the ledger.
Used in:
, ,* A whole number shard identifier.
* This message is deprecated and MUST NOT be used to communicate with network nodes. It is retained here only for historical reasons. Client software MUST NOT include this message in any request. <br/> Compliant nodes SHALL NOT accept any request containing this message. Please use the `SignaturePair` and `SignatureMap` messages instead of this message.
Used in:
* Smart contract virtual signature (always length zero).
* Ed25519 signature bytes.
* RSA-3072 signature bytes.
* ECDSA p-384 signature bytes.
* A list of signatures for a single N-of-M threshold Key. This must be a list of exactly M signatures, at least N of which are non-null.
* A list of M signatures, each corresponding to a Key in a KeyList of the same length.
* This message is deprecated and MUST NOT be used to communicate with network nodes. It is retained here only for historical reasons. Client software MUST NOT include this message in any request. <br/> Compliant nodes SHALL NOT accept any request containing this message. Please use the `SignaturePair` and `SignatureMap` messages instead of this message.
Used in:
, ,* Each signature corresponds to a Key in the KeyList.
* A set of signatures corresponding to every unique public key that signed a given transaction. If any public key matches more than one prefix in the signature map, the transaction containing that map SHALL fail immediately with the response code `KEY_PREFIX_MISMATCH`.
Used in:
,* A list of signature pairs for a specific transaction.<br/> Each signature pair represents a single cryptographic (`primitive`) public key identified by a "prefix" value and the cryptographic signature produced for that key.
* A public key and signature pair.<br/> Only Ed25519 and ECDSA(secp256k1) keys and signatures are currently supported as cryptographic (non-implied) signatures.
Used in:
* Prefix bytes of the public key. <p> The client may use any number of bytes from zero to the whole length of the public key for pubKeyPrefix. If zero bytes are used, then it MUST be true that only one cryptographic key is required to sign the associated transaction.<br/> If the `pubKeyPrefix` is 0 bytes and more than a single cryptographic key is required to sign the transaction, the request SHALL resolve to `INVALID_SIGNATURE`. <blockquote>Important Note<blockquote> In the special case that a signature is provided to authorize a precompiled contract, the `pubKeyPrefix` MUST contain the _entire public key_.<br/> That is, if the key is an Ed25519 key, the `pubKeyPrefix` MUST be 32 bytes long and contain the full public key bytes.<br/> If the key is an ECDSA(secp256k1) key, the `pubKeyPrefix` MUST be 33 bytes long and contain the full _compressed_ form of the public key. </blockquote></blockquote> <p> <dl><dt>Purpose</dt> <dd>The `pubKeyPrefix` exists to save cost. A signed transaction with shorter prefixes will have fewer bytes, and so will have a lower transaction fee. The prefixes, however, MUST be long enough to distinguish between all of the public keys that might be signing the transaction. Therefore, software signing a transaction SHOULD evaluate which keys might possibly be required to sign a transaction, and ensure that the shortest prefix that is sufficient to unambiguously identify the correct key is used. </dd></dl>
* A smart contract virtual signature. <p> This value MUST be length zero, if set.
* An Ed25519 signature.
* This option is not supported.<br/> A RSA-3072 signature.
* This option is not supported.<br/> ECDSA p-384 signature.
* An ECDSA(secp256k1) signature.
* A combination transaction bytes and a map of signatures.<br/> This message contains a serialized `TransactionBody` in a byte array and a `SignatureMap` that contains all of the signatures offered to authenticate the transaction. ### Block Stream Effects This content is recorded in the record stream exactly as received.
* A byte array containing a serialized `TransactionBody`. <p> This content is what the signatures in `sigMap` MUST sign.
* A set of cryptographic signatures. <p> This set MUST contain all signatures required to authenticate and authorize the transaction.<br/> This set MAY contain additional signatures.
* The key of a storage slot. A slot is scoped to a specific contract ID. For each contract, its EVM storage is a mapping of 256-bit keys (or "words") to 256-bit values.
* The Contract ID of the contract that owns (and pays for) this slot.
* The EVM key of this slot, left-padded with zeros to form a 256-bit word.
* The value of a contract storage slot. For the EVM, this is a single "word". Because we iterate through all the storage slots for an expired contract when purging it from state, our slot values also include the words of the previous and next keys in this contract's storage "virtual linked list".
* The EVM value in this slot, left-padded with zeros to form a 256-bit word.
* The word of the previous key in this contract's storage list (if any).
* The word of the next key in this contract's storage list (if any).
* Staking information for an account or a contract. This is used for responses returned from `CryptoGetInfo` or `ContractGetInfo` queries.
Used in:
,* A flag indicating that the holder of this account has chosen to decline staking rewards.
* A `Timestamp` of the start time for the latest active staking period. <p> This MUST be a period during which either the staking settings for this account or contract changed or the account or contract received staking rewards, whichever is later. Examples of a change in staking settings include starting staking or changing the staked_node_id.<br/> If this account or contract is not currently staked to a node, then this field SHALL NOT be set.
* An amount, in tinybar, to be received in the next reward payout.<br/> Rewards are not paid out immediately; for efficiency reasons rewards are only paid out as part of another transaction involving that account.
* A proxy-staked balance.<br/> The total HBAR balance of all accounts that delegate staking to this account or contract.
* A delegated stake. <p> This account delegates to the indicated account for staking purposes.
* A direct stake. <p> This accounts stakes its balance to the designated node.
* An Hedera Token Service staking info entity. Staking info is per node. Shard and Realm are implied based on the network address book entry for this node.
* The entity number of this node.<br/> The shard and realm numbers are implied, based on the network address book entry for this node. <p> This value SHALL be unique within a given shard and realm.<br/> This value MAY be repeated across shards and/or realms.
* The minimum stake, in tinybar, that is required for this node to have a non-zero weight in the network consensus. <p> If the current value of `stake` is below this value, this node SHALL have a zero weight in network consensus.
* The maximum stake to this node that is considered to calculate its weight in the network consensus. <p> If the current `stake` value is above this limit, the excess staked HBAR SHALL NOT be considered when determining consensus weight.
* The sum of balances of all accounts staked to this node, considering only accounts that choose to receive rewards.
* The sum of balances of all accounts staked to this node, considering only accounts that decline to receive rewards.
* The snapshot of stake_to_reward value at the beginning of the current staking period. <p> This is necessary when calculating rewards for the current staking period without considering changes to `stake_to_reward` _within_ the current staking period.<br/> This value SHALL be reset at the beginning of every staking period.
* The amount of staked HBAR from `stake_reward_start` that will have unclaimed rewards due to accounts changing their staking metadata in a way that disqualifies them for the current staking period. <p> This value SHALL be reset at the beginning of every staking period.
* The total amount of HBAR staked to this node. <p> This is sum of stake_to_reward and stake_to_not_reward.<br/> If the sum is greater than `max_stake`, then the _effective_ stake SHALL be `max_stake`.<br/> If the sum is less than `min_stake`, then the _effective_ stake SHALL be `0`.
* A running list of reward amounts for the last 365+1 staking periods (typically a year and a day). <p> The first element SHALL be the reward up to and including the last full period prior to the present reward period.<br/> The second element SHALL be the reward up to and including the period before the last full period prior to the present period.<br/> The list SHALL continue in reverse chronological order until the reward history limit is reached.
* The consensus weight of this node in the network. <p> This is recomputed based on the `stake` of this node at midnight UTC of each day. If the `stake` of this node at that time is less than `min_stake`, then the weight SHALL be 0.<br/> <p> Given the following: <ul> <li>The `effective stake` of a single node SHALL be `0` if the node `stake` is less than `min_stake`.</li> <li>The `effective stake` SHALL be `max_stake` if the node `stake` is greater than `max_stake`.</li> <li>The `effective stake` SHALL be the actual value of `stake` if `min_stake` < `stake` < `max_stake`.</li> <li>The `effective network stake` SHALL be calculated as ∑(`effective stake` of each node) for all nodes in the network address book.</li> </ul> <p> This field is deprecated and SHALL NOT be used when RosterLifecycle is enabled. The weight SHALL be same as the `effective_stake` described above.
* The total staking rewards in tinybars that MAY be collected by all accounts staking to the current node after the end of this staking period. <p> This SHALL be calculated assuming that no account "renounces" its rewards by setting `decline_reward` to true, or is ineligible for some other reason.<br/> When the current node is deleted, this amount SHALL be subtracted from the total pending rewards of all accounts staking to all nodes in the network in NetworkStakingRewards.
* A flag indicating that this node has been removed from this network.
* A transaction sub type.<br/> This enumeration enables a set of transaction base fees to be broadly defined for a type of operation and also be modified, when necessary, based on specifics of the operation. ### Explanation The resource cost for a TokenMint operation is different between minting fungible/common and non-fungible/unique tokens. This `enum` is used to "mark" a cost as applying to one or the other.<br/> Similarly, the resource cost for a basic `tokenCreate` without a custom fee schedule may yield a _base_ fee of $1. The resource cost for a `tokenCreate` _with_ a custom fee schedule is different and may yield a _base_ fee of $2 or more.
Used in:
* The resource cost for the transaction type has no additional attributes
* The resource cost for the transaction type includes an operation on a fungible/common token
* The resource cost for the transaction type includes an operation on a non-fungible/unique token
* The resource cost for the transaction type includes an operation on a fungible/common token with a custom fee schedule
* The resource cost for the transaction type includes an operation on a non-fungible/unique token with a custom fee schedule
* The resource cost for the transaction type includes a ScheduleCreate containing a ContractCall.
* The resource cost for the transaction type includes a TopicCreate with custom fees.
* Delete a file or contract bytecode as an administrative transaction. > Note >> A system delete/undelete for a `contractID` is not supported and >> SHALL return `INVALID_FILE_ID` or `MISSING_ENTITY_ID`. This transaction MAY be reversed by the `systemUndelete` transaction. A file deleted via `fileDelete`, however SHALL be irrecoverable.<br/> This transaction MUST specify an expiration timestamp (with seconds precision). The file SHALL be permanently removed from state when network consensus time exceeds the specified expiration time.<br/> This transaction MUST be signed by an Hedera administrative ("system") account. ### What is a "system" file A "system" file is any file with a file number less than or equal to the current configuration value for `ledger.numReservedSystemEntities`, typically `750`. ### Block Stream Effects None
Used in:
,* A file identifier. <p> The identified file MUST exist in the HFS.<br/> The identified file MUST NOT be deleted.<br/> The identified file MUST NOT be a "system" file.<br/> This field is REQUIRED.
* A contract identifier. <p> The identified contract MUST exist in network state.<br/> The identified contract bytecode MUST NOT be deleted.<br/> <p> This option is _unsupported_.
* A timestamp indicating when the file will be removed from state. <p> This value SHALL be expressed in seconds since the `epoch`. The `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.<br/> This field is REQUIRED.
* Recover a file or contract bytecode deleted from the Hedera File System (HFS) by a `systemDelete` transaction. > Note >> A system delete/undelete for a `contractID` is not supported and >> SHALL return `INVALID_FILE_ID` or `MISSING_ENTITY_ID`. This transaction can _only_ recover a file removed with the `systemDelete` transaction. A file deleted via `fileDelete` SHALL be irrecoverable.<br/> This transaction MUST be signed by an Hedera administrative ("system") account. ### What is a "system" file A "system" file is any file with a file number less than or equal to the current configuration value for `ledger.numReservedSystemEntities`, typically `750`. ### Block Stream Effects None
Used in:
,* A file identifier. <p> The identified file MUST exist in the HFS.<br/> The identified file MUST be deleted.<br/> The identified file deletion MUST be a result of a `systemDelete` transaction.<br/> The identified file MUST NOT be a "system" file.<br/> This field is REQUIRED.
* A contract identifier. <p> The identified contract MUST exist in network state.<br/> The identified contract bytecode MUST be deleted.<br/> The identified contract deletion MUST be a result of a `systemDelete` transaction. <p> This option is _unsupported_.
* A threshold value and a list of public keys that, together, form a threshold signature requirement. Any subset of the keys in the list may satisfy the signature requirements of this type of key, provided the number of keys meets or exceeds the threshold. For example, if a particular key has a threshold of three(3) and eight(8) keys in the list, then any three(3) signatures, from the list of eight(8), is sufficient to authorize that key. For threshold purposes, all signatures from a single `primitive` key are considered a single signature, so that signature(s) from a single key SHALL NOT _directly_ meet a threshold greater than one(1). #### Note > It is possible to construct a complex key structure that _would_ enable a > single primitive key to successfully meet a threshold requirement. All > threshold keys SHOULD be carefully audited to ensure no one `primitive` > key, or smart contract, has disproportionate capability.
Used in:
* A transaction MUST have valid signatures from at least this number of separate keys, from the `keys` list to be authorized by this key.
* A list of the keys that MAY satisfy signature requirements of this key.
* This message is deprecated and MUST NOT be used to communicate with network nodes. It is retained here only for historical reasons. Client software MUST NOT include this message in any request. <br/> Compliant nodes SHALL NOT accept any request containing this message. Please use the `SignaturePair` and `SignatureMap` messages, in combination with `ThresholdKey` keys, instead of this message.
Used in:
* For an N-of-M threshold key, this is a list of M signatures, at least N of which must be non-null.
* A "bucket" of performance allocated across one or more throttle groups.<br/> This entry combines one or more throttle groups into a single unit to calculate limitations and congestion. Each "bucket" "fills" as operations are completed, then "drains" over a period of time defined for each bucket. This fill-and-drain characteristic enables the network to process sudden bursts of heavy traffic while still observing throttle limits over longer timeframes. The value of `burstPeriodMs` is combined with the `milliOpsPerSec` values for the individual throttle groups to determine the total bucket "capacity". This combination MUST be less than the maximum value of a signed long integer (`9223372036854775807`), when scaled to a nanosecond measurement resolution. > Note >> There is some question regarding the mechanism of calculating the >> combination of `burstPeriodMs` and `milliOpsPerSec`. The calculation >> Is implemented in difficult-to-find code, and very likely does not >> match the approach described here.
Used in:
* A name for this bucket.<br/> This is used for log entries. <p> This value SHOULD NOT exceed 20 characters.
* A burst duration limit, in milliseconds.<br/> This value determines the total "capacity" of the bucket. The rate at which the bucket "drains" is set by the throttles, and this duration sets how long that rate must be sustained to empty a "full" bucket. That combination (calculated as the product of this value and the least common multiple of the `milliOpsPerSec` values for all throttle groups) determines the maximum amount of operations this bucket can "hold". <p> The calculated capacity of this bucket MUST NOT exceed `9,223,372,036,854`.
* A list of throttle groups.<br/> These throttle groups combined define the effective throttle rate for the bucket. <p> This list MUST contain at least one entry.
* A list of throttle buckets.<br/> This list, simultaneously enforced, defines a complete throttling policy. 1. When an operation appears in more than one throttling bucket, that operation SHALL be throttled unless all of the buckets where the operation appears have "capacity" available. 1. An operation assigned to no buckets is SHALL be throttled in every instance. The _effective_ throttle for this case is `0`.
* A list of throttle buckets. <p> This list MUST be set, and SHOULD NOT be empty.<br/> An empty list SHALL have the effect of setting all operations to a single group with throttle limit of `0` operations per second for the entire network.
* A single throttle limit applied to one or more operations. The list of operations MUST contain at least one entry.<br/> The throttle limit SHALL be specified in thousandths of an operation per second; one operation per second for the network would be `1000`.<br/> The throttle limit MUST be greater than zero (`0`).
Used in:
* A list of operations to be throttled. <p> This list MUST contain at least one item.<br/> This list SHOULD NOT contain any item included in any other active `ThrottleGroup`.
* A throttle limit for this group.<br/> This is a total number of operations, in thousandths, the network may perform each second for this group. Every node executes every transaction, so this limit effectively applies individually to each node as well.<br/> <p> This value MUST be greater than zero (`0`).<br/> This value SHOULD be less than `9,223,372`.<br/>
* A single snapshot of the used throttle capacity for a throttle and point in time. > Question: >> What throttle does this apply to? How is that determined?
Used in:
* Used throttle capacity.
* The time at which the this snapshot of capacity was calculated.<br/> Stored as an offset from the `epoch`. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.
* All point-in-time snapshots of throttle usage for TPS and "gas" throttle values for a given point in time. > Question: >> What point in time? Should this store consensus timestamp here?
* A list of snapshots for TPS throttles. <p> <blockquote>Question:<blockquote>What is the order?</blockquote></blockquote>
* A single snapshot for the gas throttle.
* An exact date and time.<br/> This is the same data structure as the Google protobuf Timestamp.proto. #### Additional Notes Useful information is present in comments on the [Google version](https://github.com/google/protobuf/blob/master/src/google/protobuf/timestamp.proto).
Used in:
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,* The number of complete seconds since the start of the epoch. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.<br/> This value MUST be greater than 0.<br/> This value SHOULD be strictly greater than `946684800`.
* The number of nanoseconds after the start of the second referenced in `seconds`. <p> This value MUST be greater than or equal to 0.<br/> This value MUST be strictly less than 1,000,000,000.
* An exact date and time, with a resolution of one second.
Used in:
, ,* The number of complete seconds since the start of the epoch. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.<br/> This value MUST be greater than 0.<br/> This value SHOULD be strictly greater than `946684800`.
* An Hedera Token Service(HTS) token. A token SHALL represent a fungible or non-fungible unit of exchange.<br/> The specified Treasury Account SHALL receive the initial supply of tokens and SHALL determine distribution of all tokens once minted.
* A unique identifier for this token.
* A human-readable name for this token. <p> This value MAY NOT be unique.<br/> This value SHALL NOT exceed 100 bytes when encoded as UTF-8.
* A human-readable symbol for the token. <p> This value SHALL NOT be unique.<br/> This value SHALL NOT exceed 100 bytes when encoded as UTF-8.
* A number of decimal places for this token. <p> If decimals are 8 or 11, then the number of whole tokens can be at most billions or millions, respectively. More decimals allows for a more finely-divided token, but also limits the maximum total supply. <p> Examples <ul> <li>Bitcoin satoshis (21 million whole tokens with 8 decimals).</li> <li>Hedera tinybar (50 billion whole tokens with 8 decimals).</li> <li>Bitcoin milli-satoshis (21 million whole tokens with 11 decimals).</li> <li>Theoretical limit is roughly 92.2 billion with 8 decimals, or 92.2 million with 11 decimals.</li> </ul> All token amounts in the network are stored as integer amounts, with each unit representing 10<sup>-decimals</sup> whole tokens. <p> For tokens with `token_type` set to `NON_FUNGIBLE_UNIQUE` this MUST be 0.
* A _current_ total supply of this token, expressed in the smallest unit of the token. <p> The number of _whole_ tokens this represents is (total_supply / 10<sup>decimals</sup>). The value of total supply, MUST be within the positive range of a twos-compliment signed 64-bit integer. The `total_supply`, therefore MUST be between 1, and 9,223,372,036,854,775,807, inclusive. <p> This value SHALL be reduced when a `token_burn` or `token_wipe_account` operation is executed, and SHALL be increased when a `token_mint` operation is executed.
* A treasury account identifier for this token. <p> When the token is created, the initial supply given in the token create transaction SHALL be minted and deposited in the treasury account.<br/> All token mint transactions for this token SHALL deposit the new minted tokens in the treasury account.<br/> All token burn transactions for this token SHALL remove the tokens to be burned from the treasury account.
* Access control for general modification of this token. <p> This key MUST sign any `token_update` transaction that changes any attribute of the token other than expiration_time. Other attributes of this token MAY be changed by transactions other than `token_update`, and MUST be signed by one of the other purpose-specific keys assigned to the token.<br/> This value can be set during token creation, and SHALL NOT be modified thereafter, unless the update transaction is signed by both the existing `admin_key` and the new `admin_key`.<br/> If the `admin_key` is not set for a token, that token SHALL be immutable.
* Access control for KYC for this token. <p> Know Your Customer (KYC) status may be granted for an account by a token grant kyc transaction signed by this key.<br/> If this key is not set, then KYC status cannot be granted to an account for this token, and any `TokenGrantKyc` transaction attempting to grant kyc to an account for this token SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* Access control to freeze this token. <p> A token may be frozen for an account, preventing any transaction from transferring that token for that specified account, by a token freeze account transaction signed by this key.<br/> If this key is not set, the token cannot be frozen, and any transaction attempting to freeze the token for an account SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* Access control of account wipe for this token. <p> A token may be wiped, removing and burning tokens from a specific account, by a token wipe transaction, which MUST be signed by this key. The `treasury_account` cannot be subjected to a token wipe. A token burn transaction, signed by the `supply_key`, serves to burn tokens held by the `treasury_account` instead.<br/> If this key is not set, the token cannot be wiped, and any transaction attempting to wipe the token from an account SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* Access control of token mint/burn for this token. <p> A token mint transaction MUST be signed by this key, and any token mint transaction not signed by the current `supply_key` for that token SHALL NOT succeed.<br/> A token burn transaction MUST be signed by this key, and any token burn transaction not signed by the current `supply_key` for that token SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* Access control of the `custom_fees` field for this token. <p> The token custom fee schedule may be changed, modifying the fees charged for transferring that token, by a token update transaction, which MUST be signed by this key.<br/> If this key is not set, the token custom fee schedule cannot be changed, and any transaction attempting to change the custom fee schedule for this token SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* Access control of pause/unpause for this token. <p> A token may be paused, preventing any transaction from transferring that token, by a token update transaction signed by this key.<br/> If this key is not set, the token cannot be paused, and any transaction attempting to pause the token SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* A last used serial number for this token. <p> This SHALL apply only to non-fungible tokens.<br/> When a new NFT is minted, the serial number to apply SHALL be calculated from this value.
* A flag indicating that this token is deleted. <p> A transaction involving a deleted token MUST NOT succeed.
* A type for this token. <p> A token SHALL be either `FUNGIBLE_COMMON` or `NON_FUNGIBLE_UNIQUE`.<br/> If this value was omitted during token creation, `FUNGIBLE_COMMON` SHALL be used.
* A supply type for this token. <p> A token SHALL have either `INFINITE` or `FINITE` supply type.<br/> If this value was omitted during token creation, the value `INFINITE` SHALL be used.
* An identifier for the account (if any) that the network will attempt to charge for this token's auto-renewal upon expiration. <p> This field is OPTIONAL. If it is not set then renewal fees SHALL be charged to the account identified by `treasury_account_id`.
* A number of seconds by which the network should automatically extend this token's expiration. <p> If the token has a valid auto-renew account, and is not deleted upon expiration, the network SHALL attempt to automatically renew this token.<br/> If this is not provided in an allowed range on token creation, the transaction SHALL fail with `INVALID_AUTO_RENEWAL_PERIOD`.<br/> The default values for the minimum period and maximum period are 30 days and 90 days, respectively.
* An expiration time for this token, in seconds since the epoch. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.
* A short description of this token. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* A maximum supply of this token.<br/> This is the maximum number of tokens of this type that may be issued. <p> This limit SHALL apply regardless of `token_type`.<br/> If `supply_type` is `INFINITE` then this value MUST be 0.<br/> If `supply_type` is `FINITE`, then this value MUST be greater than 0.
* A flag indicating that this token is paused. <p> A transaction involving a paused token, other than token_unpause, MUST NOT succeed.
* A flag indicating that accounts associated to this token are frozen by default. <p> Accounts newly associated with this token CANNOT transact in the token until unfrozen.<br/> This SHALL NOT prevent a `tokenReject` transaction to return the tokens from an account to the treasury account.
* A flag indicating that accounts associated with this token are granted KYC by default.
* A custom fee schedule for this token.
* A Token "Metadata". <p> This value, if set, SHALL NOT exceed 100 bytes.
* Access Control of metadata update for this token. <p> A transaction to update the `metadata` field of this token MUST be signed by this key.<br/> If this token is a non-fungible/unique token type, a transaction to update the `metadata` field of any individual serialized unique token of this type MUST be signed by this key.<br/> If this key is not set, the token metadata SHALL NOT be changed after it is created.<br/> If this key is not set, the metadata for any individual serialized token of this type SHALL NOT be changed after it is created.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* Airdrop one or more tokens to one or more accounts. ### Effects This distributes tokens from the balance of one or more sending account(s) to the balance of one or more recipient accounts. Accounts MAY receive the tokens in one of four ways. - An account already associated to the token to be distributed SHALL receive the airdropped tokens immediately to the recipient account balance.<br/> The fee for this transfer SHALL include the transfer, the airdrop fee, and any custom fees. - An account with available automatic association slots SHALL be automatically associated to the token, and SHALL immediately receive the airdropped tokens to the recipient account balance.<br/> The fee for this transfer SHALL include the transfer, the association, the cost to renew that association once, the airdrop fee, and any custom fees. - An account with "receiver signature required" set SHALL have a "Pending Airdrop" created and must claim that airdrop with a `claimAirdrop` transaction.<br/> The fee for this transfer SHALL include the transfer, the association, the cost to renew that association once, the airdrop fee, and any custom fees.<br/> If the pending airdrop is not claimed immediately, the `sender` SHALL pay the cost to renew the token association, and the cost to maintain the pending airdrop, until the pending airdrop is claimed or cancelled. - An account with no available automatic association slots SHALL have a "Pending Airdrop" created and must claim that airdrop with a `claimAirdrop` transaction.<br/> The fee for this transfer SHALL include the transfer, the association, the cost to renew that association once, the airdrop fee, and any custom fees.<br/> If the pending airdrop is not claimed immediately, the `sender` SHALL pay the cost to renew the token association, and the cost to maintain the pending airdrop, until the pending airdrop is claimed or cancelled. If an airdrop would create a pending airdrop for a fungible/common token, and a pending airdrop for the same sender, receiver, and token already exists, the existing pending airdrop SHALL be updated to add the new amount to the existing airdrop, rather than creating a new pending airdrop.<br/> Any airdrop that completes immediately SHALL be irreversible. Any airdrop that results in a "Pending Airdrop" MAY be canceled via a `cancelAirdrop` transaction.<br/> All transfer fees (including custom fees and royalties), as well as the rent cost for the first auto-renewal period for any automatic-association slot occupied by the airdropped tokens, SHALL be charged to the account paying for this transaction.<br/> ### Block Stream Effects - Each successful transfer SHALL be recorded in `token_transfer_list` for the transaction record. - Each successful transfer that consumes an automatic association slot SHALL populate the `automatic_association` field for the record. - Each pending transfer _created_ SHALL be added to the `pending_airdrops` field for the record. - Each pending transfer _updated_ SHALL be added to the `pending_airdrops` field for the record.
Used in:
,* A list of token transfers representing one or more airdrops. <p> The sender for each transfer MUST have sufficient balance to complete the transfers.<br/> All token transfers MUST successfully transfer tokens or create a pending airdrop for this transaction to succeed.<br/> This list MUST contain between 1 and 10 transfers, inclusive. <p> Note that each transfer of fungible/common tokens requires both a debit and a credit, so each _fungible_ token transfer MUST have _balanced_ entries in the TokenTransferList for that transfer.
* An approved allowance of fungible/common token transfers. This message specifies one allowance for a single, unique, combination of token, owner, spender, and amount. If `owner` is not set, the effective `owner` SHALL be the `payer` for the enclosing transaction.<br/> The `tokenId` MUST be specified and MUST be a valid fungible/common token type.<br/> The `spender` MUST be specified and MUST be a valid account.<br/> The `amount` MUST be a whole number, and SHOULD be greater than `0` unless this allowance is intended to _remove_ a previously approved allowance.
Used in:
* A token identifier.<br/> This identifies the type of token the `spender` is permitted to transfer from the `owner`. <p> The identified token type MUST be a fungible/common token.
* An owner account identifier.<br/> This is the account identifier of the account granting an allowance for the `spender` to transfer tokens held by this account.
* A spender account identifier.<br/> This is the account identifier of the account permitted to transfer tokens held by the `owner`.
* An amount of fractional tokens (10<sup>-decimals</sup> tokens).<br/> This is the amount of tokens held by the `owner` that the `spender` is permitted to transfer. <p> This value MUST be a whole number.<br/> This value MUST be greater than 0 to create a new allowance.<br/> This value MAY be exactly `0` to _remove_ an existing allowance.<br/>
* Associate an Hedera Token Service (HTS) token and an account. An association MUST exist between an account and a token before that account may transfer or receive that token.<br/> If the identified account is not found, the transaction SHALL return `INVALID_ACCOUNT_ID`.<br/> If the identified account has been deleted, the transaction SHALL return `ACCOUNT_DELETED`.<br/> If any of the identified tokens is not found, the transaction SHALL return `INVALID_TOKEN_REF`.<br/> If any of the identified tokens has been deleted, the transaction SHALL return `TOKEN_WAS_DELETED`.<br/> If an association already exists for any of the identified tokens, the transaction SHALL return `TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT`.<br/> The identified account MUST sign this transaction. ### Block Stream Effects None
Used in:
,* An account identifier. <p> The identified account SHALL be associated to each of the tokens identified in the `tokens` field.<br/> This field is REQUIRED and MUST be a valid account identifier.<br/> The identified account MUST exist in state.<br/> The identified account MUST NOT be deleted.<br/> The identified account MUST NOT be expired.
* A list of token identifiers. <p> Each token identified in this list SHALL be separately associated with the account identified in the `account` field.<br/> This list MUST NOT be empty. Each entry in this list MUST be a valid token identifier.<br/> Each entry in this list MUST NOT be currently associated to the account identified in `account`.<br/> Each entry in this list MUST NOT be expired.<br/> Each entry in this list MUST NOT be deleted.
* An association between a token and an account. An account must be associated with a token before that account can transact in (send or receive) that token.
Used in:
* A token identifier for the associated token.
* An account identifier for the associated account.
* A number of _transferable units_ of a specified token. The transferable unit of a token is its smallest denomination, as given by the token's `decimals` property. Each minted token contains 10<sup>`decimals`</sup> transferable units. For example, we could think of the cent as the transferable unit of the US dollar (`decimals=2`); and the tinybar as the transferable unit of HBAR (`decimals=8`). Transferable units are not directly comparable across different tokens.
Used in:
,* A token identifier.
* A number of transferable units of the identified token. <p> For fungible/common tokens this SHALL be the balance, in units of 10<sup>`-decimals`</sup> whole tokens.<br/> For non-fungible/unique tokens, this SHALL be the number of individual unique tokens in this balance.
* A number of "decimals" precision. <p> This MUST match the `decimals` value for the token identified by the `tokenId` field.
* A set of token balance values. Each entry describes the balance the enclosing account holds for a specific token. The balance is an amount for a fungible/common token or a count for a non-fungible/unique token.
* A list of token balance values.<br/> Each entry represents a single account balance for a single token.
* Burns tokens from the Token's treasury Account. The token MUST have a `supply_key` set and that key MUST NOT be an empty `KeyList`.<br/> The token `supply_key` MUST sign this transaction.<br/> This operation SHALL decrease the total supply for the token type by the number of tokens "burned".<br/> The total supply for the token type MUST NOT be reduced below zero (`0`) by this transaction.<br/> The tokens to burn SHALL be deducted from the token treasury account.<br/> If the token is a fungible/common type, the amount MUST be specified.<br/> If the token is a non-fungible/unique type, the specific serial numbers MUST be specified.<br/> The global batch size limit (`tokens.nfts.maxBatchSizeBurn`) SHALL set the maximum number of individual NFT serial numbers permitted in a single `tokenBurn` transaction. ### Block Stream Effects None
Used in:
,* A token identifier. <p> This SHALL identify the token type to "burn".<br/> The identified token MUST exist, and MUST NOT be deleted.
* An amount to burn from the Treasury Account. <p> This is interpreted as an amount in the smallest possible denomination for the token (10<sup>-decimals</sup> whole tokens).<br/> The balance for the token treasury account MUST contain sufficient tokens to complete this transaction with a non-negative balance.<br/> If this value is equal to zero (`0`), the token SHOULD be a non-fungible/unique type.<br/> If this value is non-zero, the token MUST be a fungible/common type.
* A list of serial numbers to burn from the Treasury Account. <p> This list MUST NOT contain more entries than the current limit set by the network configuration value `tokens.nfts.maxBatchSizeBurn`.<br/> The treasury account for the token MUST hold each unique token identified in this list.<br/> If this list is not empty, the token MUST be a non-fungible/unique type.<br/> If this list is empty, the token MUST be a fungible/common type.
* Token cancel airdrop<br/> Remove one or more pending airdrops from state on behalf of the sender(s) for each airdrop. Each pending airdrop canceled SHALL be removed from state and SHALL NOT be available to claim.<br/> Each cancellation SHALL be represented in the transaction body and SHALL NOT be restated in the record file.<br/> All cancellations MUST succeed for this transaction to succeed. ### Block Stream Effects None
Used in:
,* A list of one or more pending airdrop identifiers.<br/> This list declares the set of pending airdrop entries that the client wishes to cancel; on success all listed pending airdrop entries will be removed. <p> This transaction MUST be signed by the account identified by a `sender_id` for each entry in this list.<br/> This list MUST NOT have any duplicate entries.<br/> This list MUST contain between 1 and 10 entries, inclusive.
* Token claim airdrop<br/> Complete one or more pending transfers on behalf of the recipient(s) for an airdrop. The sender MUST have sufficient balance to fulfill the airdrop at the time of claim. If the sender does not have sufficient balance, the claim SHALL fail.<br/> Each pending airdrop successfully claimed SHALL be removed from state and SHALL NOT be available to claim again.<br/> Each claim SHALL be represented in the transaction body and SHALL NOT be restated in the record file.<br/> All claims MUST succeed for this transaction to succeed. ### Block Stream Effects The completed transfers SHALL be present in the transfer list.
Used in:
,* A list of one or more pending airdrop identifiers. <p> This transaction MUST be signed by the account identified by the `receiver_id` for each entry in this list.<br/> This list MUST contain between 1 and 10 entries, inclusive.<br/> This list MUST NOT have any duplicate entries.
* Create an HTS token. #### Keys Each token has several keys that, separately, control different functions for that token. It is *_strongly_* recommended that each key assigned to a token be unique, or disabled by assigning an empty `KeyList`. Keys and purpose - `adminKey` is a general access and may authorize a token update transaction as well as _update the other keys_. Even the admin key cannot authorize _adding_ a key that is not present, however.<br/> The admin key may also delete the token entirely. - `fee_schedule` may authorize updating the token custom fees. If this key is not present, the custom fees for the token are fixed and immutable. - `freeze` may authorize a token freeze or unfreeze transaction. If this key is not present, accounts holding this token cannot have their tokens frozen or unfrozen. - `kyc` may authorize a token grant KYC or revoke KYC transaction. If this key is not present, accounts holding this token cannot have KYC status granted or revoked. - `metadata` may authorize token update nfts transactions. If this key is not present, the token metadata values for that non-fungible/unique token _type_ will be immutable. - `pause` may authorize a token pause or token unpause transaction. If this key is not present, the token cannot be paused (preventing any account from transacting in that token) or resumed. - `supply` may authorize a token mint or burn transaction. If this key is not present, the token cannot mint additional supply and existing tokens cannot be "burned" from the treasury (but _might_ still be "burned" from individual accounts, c.f. `wipeKey` and `tokenWipe`). - `wipe` may authorize a token wipe account transaction. If this key is not present, accounts holding this token cannot have their balance or NFTs wiped (effectively burned). #### Requirements If `tokenType` is fungible/common, the `initialSupply` MUST be strictly greater than zero(`0`).<br/> If `tokenType` is non-fungible/unique, the `initialSupply` MUST be zero(`0`).<br/> If `tokenSupplyType` is "infinite", the `maxSupply` MUST be zero(`0`).<br/> If `tokenSupplyType` is "finite", the `maxSupply` MUST be strictly greater than zero(`0`).<br/> ### Block Stream Effects If the token is created, the Token Identifier SHALL be in the receipt.<br/>
Used in:
,* A name for the token.<br/> This is generally the "full name" displayed in wallet software. <p> This field is REQUIRED.<br/> This value MUST NOT exceed 100 bytes when encoded as UTF-8.<br/> This value MUST NOT contain the Unicode NUL codepoint.
* A symbol to use for the token. <p> This field is REQUIRED.<br/> This value MUST NOT exceed 100 bytes when encoded as UTF-8.<br/> This value MUST NOT contain the Unicode NUL codepoint.
* A decimal precision of the token's smallest denomination.<br/> Most values are described in terms of this smallest denomination, so the token initial supply, for instance, must be divided by <tt>10<sup>decimals</sup></tt> to get whole tokens. <p> This MUST be zero(`0`) for non-fungible/unique tokens.
* An initial supply, in the smallest denomination for the token. <p> This amount SHALL be transferred to the treasury account as part of this transaction.<br/> This amount MUST be specified in the smallest denomination for the token (i.e. <tt>10<sup>-decimals</sup></tt> whole tokens).<br/> This MUST be zero(`0`) for a non-fungible/unique token.
* A treasury account identifier. <p> This field is REQUIRED.<br/> The identified account SHALL be designated the "treasury" for the new token, and all tokens "minted" SHALL be delivered to that account, including the initial supply, if any.<br/> The identified account MUST exist, MUST NOT be expired, and SHOULD have a non-zero HBAR balance.<br/> The identified account SHALL be associated to the new token.
* An Hedera key for token administration. <p> This key, if set, SHALL have administrative authority for this token and MAY authorize token update and/or token delete transactions.<br/> If this key is not set, or is an empty `KeyList`, this token SHALL be immutable, except for expiration and renewal.
* An Hedera key for managing account KYC. <p> This key, if set, SHALL have KYC authority for this token and MAY authorize transactions to grant or revoke KYC for accounts.<br/> If this key is not set, or is an empty `KeyList`, KYC status for this token SHALL NOT be granted or revoked for any account.<br/> If this key is removed after granting KYC, those grants SHALL remain and cannot be revoked.
* An Hedera key for managing asset "freeze". <p> This key, if set, SHALL have "freeze" authority for this token and MAY authorize transactions to freeze or unfreeze accounts with respect to this token.<br/> If this key is not set, or is an empty `KeyList`, this token SHALL NOT be frozen or unfrozen for any account.<br/> If this key is removed after freezing accounts, those accounts SHALL remain frozen and cannot be unfrozen.
* An Hedera key for wiping tokens from accounts. <p> This key, if set, SHALL have "wipe" authority for this token and MAY authorize transactions to "wipe" any amount of this token from any account, effectively burning the tokens "wiped".<br/> If this key is not set, or is an empty `KeyList`, it SHALL NOT be possible to "wipe" this token from an account.
* An Hedera key for "minting" and "burning" tokens. <p> This key, if set, MAY authorize transactions to "mint" new tokens to be delivered to the token treasury or "burn" tokens held by the token treasury.<br/> If this key is not set, or is an empty `KeyList`, it SHALL NOT be possible to change the supply of tokens and neither "mint" nor "burn" transactions SHALL be permitted.
* An initial Freeze status for accounts associated to this token. <p> If this value is set, an account MUST be the subject of a `tokenUnfreeze` transaction after associating to the token before that account can send or receive this token.<br/> If this value is set, the `freezeKey` SHOULD be set.<br/> If the `freezeKey` is not set, any account associated to this token while this value is set SHALL be permanently frozen. <p> <blockquote>REVIEW NOTE<blockquote> Should we prevent setting this value true for tokens with no freeze key?<br/> Should we set this value to false if a freeze key is removed? </blockquote></blockquote>
* An expiration timestamp. <p> If the `autoRenewAccount` and `autoRenewPeriod` fields are set, this value SHALL be replaced with the current consensus time extended by the `autoRenewPeriod` duration.<br/> If this value is set and token expiration is enabled in network configuration, this token SHALL expire when consensus time exceeds this value, and MAY be subsequently removed from the network state.<br/> If this value is not set, and the automatic renewal account is also not set, then this value SHALL default to the current consensus time extended by the "default" expiration period from network configuration.
* An identifier for the account to be charged renewal fees at the token's expiry to extend the lifetime of the token. <p> If this value is set, the token lifetime SHALL be extended by the _smallest_ of the following: <ul> <li>The current `autoRenewPeriod` duration.</li> <li>The maximum duration that this account has funds to purchase.</li> <li>The configured MAX_AUTORENEW_PERIOD at the time of automatic renewal.</li> </ul> If this account's HBAR balance is `0` when the token must be renewed, then the token SHALL be expired, and MAY be subsequently removed from state.<br/> If this value is set, the referenced account MUST sign this transaction.
* A duration between token automatic renewals.<br/> All entities in state may be charged "rent" occasionally (typically every 90 days) to prevent unnecessary growth of the ledger. This value sets the interval between such events for this token. <p> This value MUST be set.<br/> This value MUST be greater than the configured MIN_AUTORENEW_PERIOD.<br/> This value MUST be less than the configured MAX_AUTORENEW_PERIOD.
* A short description for this token. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* A type for this token, according to IWA classification. <p> If this value is not set, the token SHALL have the default type of fungible/common.<br/> This field SHALL be immutable.
* A supply type for this token, according to IWA classification. <p> If this value is not set, the token SHALL have the default supply type of "infinite" (which is, as a practical matter, (2<sup><i>63</i></sup>-1)/10<sup><i>decimals</i></sup>).<br/> This field SHALL be immutable.
* A maximum supply for this token. <p> This SHALL be interpreted in terms of the smallest fractional unit for this token.<br/> If `supplyType` is "infinite", this MUST be `0`.<br/> This field SHALL be immutable.
* An Hedera key for managing the token custom fee schedule. <p> This key, if set, MAY authorize transactions to modify the `custom_fees` for this token.<br/> If this key is not set, or is an empty `KeyList`, the `custom_fees` for this token SHALL NOT be modified.
* A list of custom fees representing a fee schedule. <p> This list MAY be empty, which SHALL mean that there are no custom fees for this token.<br/> If this token is a non-fungible/unique type, the entries in this list MUST NOT declare a `fractional_fee`.<br/> If this token is a fungible/common type, the entries in this list MUST NOT declare a `royalty_fee`.<br/> Any token type MAY include entries that declare a `fixed_fee`.
* An Hedera key for managing token "pause". <p> This key, if set, SHALL have "pause" authority for this token and MAY authorize transactions to pause or unpause this token.<br/> If this key is not set, or is an empty `KeyList`, this token SHALL NOT be paused or unpaused.<br/> If this key is removed while the token is paused, the token cannot be unpaused and SHALL remain paused.
* Token "Metadata". <p> The value, if set, MUST NOT exceed 100 bytes.<br/> <dl><dt>Examples</dt> <dd>hcs://1/0.0.4896575</dd> <dd>ipfs://bafkreifd7tcjjuwxxf4qkaibkj62pj4mhfuud7plwrc3pfoygt55al6syi</dd> </dl>
* An Hedera key for managing the token `metadata`. <p> This key, if set, MAY authorize transactions to modify the `metadata` for this token.<br/> If this key is not set, or is an empty `KeyList`, the `metadata` for this token SHALL NOT be modified.
* Mark a token as deleted.<br/> A deleted token remains present in the network state, but is no longer active, cannot be held in a balance, and all operations on that token fail. A deleted token is removed from network state when it expires. #### Operations on a deleted token All operations on a deleted token SHALL fail with a status code `TOKEN_WAS_DELETED`.<br/> Any attempt to transfer a deleted token between accounts SHALL fail with a status code `TOKEN_WAS_DELETED`. > QUESTIONS >> What happens to existing balances/NFTs? >> Are these removed; are they stuck on the accounts? > >> If balances/NFTs remain, can a `tokenReject` remove them? #### Requirements The `admin_key` for the token MUST be set, and MUST sign this transaction.<br/> If the `admin_key` for the token is not set, this transaction SHALL fail with a status code `TOKEN_IS_IMMUTABlE`. ### Block Stream Effects None
Used in:
,* A token identifier. <p> This SHALL identify the token type to delete.<br/> The identified token MUST exist, and MUST NOT be deleted.
* Dissociate an account from one or more HTS tokens. If the identified account is not found, the transaction SHALL return `INVALID_ACCOUNT_ID`.<br/> If the identified account has been deleted, the transaction SHALL return `ACCOUNT_DELETED`.<br/> If any of the identified tokens is not found, the transaction SHALL return `INVALID_TOKEN_REF`.<br/> If any of the identified tokens has been deleted, the transaction SHALL return `TOKEN_WAS_DELETED`.<br/> If an association does not exist for any of the identified tokens, the transaction SHALL return `TOKEN_NOT_ASSOCIATED_TO_ACCOUNT`.<br/> If the identified account has a nonzero balance for any of the identified tokens, and that token is neither deleted nor expired, the transaction SHALL return `TRANSACTION_REQUIRES_ZERO_TOKEN_BALANCES`.<br/> If one of the identified tokens is a fungible/common token that is expired, the account MAY disassociate from that token, even if that token balance is not zero for that account.<br/> If one of the identified tokens is a non-fungible/unique token that is expired, the account MUST NOT disassociate if that account holds any individual NFT of that token. In this situation the transaction SHALL return `TRANSACTION_REQUIRED_ZERO_TOKEN_BALANCES`.<br/> The identified account MUST sign this transaction. ### Block Stream Effects None
Used in:
,* An account identifier. <p> The identified account SHALL be dissociated from each of the tokens identified in the `tokens` field. This field is REQUIRED and MUST be a valid account identifier.<br/> The identified account MUST exist in state.<br/> The identified account MUST NOT be deleted.<br/> The identified account MUST NOT be expired.
* A list of token identifiers. <p> Each token identified in this list SHALL be dissociated from the account identified in the `account` field.<br/> This list MUST NOT be empty. Each entry in this list MUST be a valid token identifier.<br/> Each entry in this list MUST be currently associated to the account identified in `account`.<br/> Entries in this list MAY be expired, if the token type is fungible/common.<br/> Each entry in this list MUST NOT be deleted.
* Update the custom fee schedule for a token type. The token MUST have a `fee_schedule_key` set and that key MUST NOT be an empty `KeyList`.<br/> The token `fee_schedule_key` MUST sign this transaction.<br/> The token MUST exist, MUST NOT be deleted, and MUST NOT be expired.<br/> If the custom_fees list is empty, clears the fee schedule or resolves to CUSTOM_SCHEDULE_ALREADY_HAS_NO_FEES if the fee schedule was already empty. ### Block Stream Effects None
Used in:
,* A token identifier. <p> This SHALL identify the token type to modify with an updated custom fee schedule.<br/> The identified token MUST exist, and MUST NOT be deleted.
* A list of custom fees representing a fee schedule. <p> This list MAY be empty to remove custom fees from a token.<br/> If the identified token is a non-fungible/unique type, the entries in this list MUST NOT declare a `fractional_fee`.<br/> If the identified token is a fungible/common type, the entries in this list MUST NOT declare a `royalty_fee`.<br/> Any token type MAY include entries that declare a `fixed_fee`.
* Block transfers of a token type for an account.<br/> This, effectively, freezes assets of one account with respect to one token type. While frozen, that account cannot send or receive tokens of the identified type. The token MUST have a `freeze_key` set and that key MUST NOT be an empty `KeyList`.<br/> The token `freeze_key` MUST sign this transaction.<br/> The identified token MUST exist, MUST NOT be deleted, MUST NOT be paused, and MUST NOT be expired.<br/> The identified account MUST exist, MUST NOT be deleted, and MUST NOT be expired.<br/> If the identified account is already frozen with respect to the identified token, the transaction SHALL succeed, but no change SHALL be made.<br/> An association between the identified account and the identified token MUST exist. ### Block Stream Effects None
Used in:
,* A token identifier. <p> This SHALL identify the token type to "freeze".<br/> The identified token MUST exist, MUST NOT be deleted, and MUST be associated to the identified account.
* An account identifier. <p> This shall identify the account to "freeze".<br/> The identified account MUST exist, MUST NOT be deleted, MUST NOT be expired, and MUST be associated to the identified token.<br/> The identified account SHOULD NOT be "frozen" with respect to the identified token.
* Possible token freeze status values. This is returned by `TokenGetInfoQuery` or `CryptoGetInfoResponse` in `TokenRelationship`.
Used in:
,* The token does not support freeze or cannot be frozen for the designated account.<br/> Typically this indicates that the token does not have a `freeze_key` set.
* The token is currently frozen for the designated account.
* The token is not currently frozen for the designated account.
* Deleted and unsupported. This query is not implemented and any query of this type submitted SHALL return a `NOT_SUPPORTED` response code.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* The Account for which information is requested
* Specifies the start index (inclusive) of the range of NFTs to query for. Value must be in the range [0; ownedNFTs-1]
* Specifies the end index (exclusive) of the range of NFTs to query for. Value must be in the range (start; ownedNFTs]
* Deleted and unsupported.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* List of NFTs associated to the account
* Request information for a token.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A token identifier. <p> This SHALL identify the token to query.<br/> The identified token MUST exist, and MUST NOT be deleted.
* A response message for the `getTokenInfo` query.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* The information requested for the identified token.
* Applicable only to tokens of type NON_FUNGIBLE_UNIQUE. Gets info on a NFT for a given TokenID (of type NON_FUNGIBLE_UNIQUE) and serial number
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A non-fungible/unique token (NFT) identifier. <p> This SHALL identify the NFT to query.<br/> The identified NFT MUST exist, and MUST NOT be deleted.
* UNDOCUMENTED
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* The information about this NFT
* Deleted and unsupported. This query is not implemented and any query of this type submitted SHALL return a `NOT_SUPPORTED` response code.
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A token identifier. <p> This SHALL identify the token to query.<br/> The identified token MUST exist, MUST NOT be deleted, and MUST be a non-fungible/unique type.
* Specifies the start index (inclusive) of the range of NFTs to query for. Value must be in the range [0; mintedNFTs-1]
* Specifies the end index (exclusive) of the range of NFTs to query for. Value must be in the range (start; mintedNFTs]
* Deleted and unsupported.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* A token identifier. <p> This SHALL identify the token type to query.<br/> The identified token MUST exist, and MUST NOT be deleted. The identified token MUST be a non-fungible/unique type.
* A list of messages, each of which describes one NFT.
* Grant "Know Your Customer"(KYC) for one account for a single token. This transaction MUST be signed by the `kyc_key` for the token.<br/> The identified token MUST have a `kyc_key` set to a valid `Key` value.<br/> The token `kyc_key` MUST NOT be an empty `KeyList`.<br/> The identified token MUST exist and MUST NOT be deleted.<br/> The identified account MUST exist and MUST NOT be deleted.<br/> The identified account MUST have an association to the identified token.<br/> On success the association between the identified account and the identified token SHALL be marked as "KYC granted". ### Block Stream Effects None
Used in:
,* A token identifier. <p> The identified token SHALL grant "KYC" for the account identified by the `account` field.<br/> The identified token MUST be associated to the account identified by the `account` field.
* An account identifier. <p> The token identified by the `token` field SHALL grant "KYC" for the identified account.<br/> This account MUST be associated to the token identified by the `token` field.
* Unique identifier for a token.<br/> As with all entity identifiers within the network, a token identifier consists of a combination of shard number, realm number, and entity number. Each of these numbers is unique within its scope (shard > realm > entity).
Used in:
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,* A whole number shard identifier.
* A whole number realm identifier.
* A whole number token identifier.
* An Hedera Token Service(HTS) token. A token SHALL represent a fungible or non-fungible unit of exchange.<br/> The specified Treasury Account SHALL receive the initial supply of tokens and SHALL determine distribution of all tokens once minted.
Used in:
* A unique identifier for this token.
* A human-readable name for this token. <p> This value MAY NOT be unique.<br/> This value SHALL NOT exceed 100 bytes when encoded as UTF-8.
* A human-readable symbol for the token. <p> This value SHALL NOT be unique.<br/> This value SHALL NOT exceed 100 bytes when encoded as UTF-8.
* A number of decimal places for this token. <p> If decimals are 8 or 11, then the number of whole tokens can be at most billions or millions, respectively. More decimals allows for a more finely-divided token, but also limits the maximum total supply. <p> Examples <ul> <li>Bitcoin satoshis (21 million whole tokens with 8 decimals).</li> <li>Hedera tinybar (50 billion whole tokens with 8 decimals).</li> <li>Bitcoin milli-satoshis (21 million whole tokens with 11 decimals).</li> <li>Theoretical limit is roughly 92.2 billion with 8 decimals, or 92.2 million with 11 decimals.</li> </ul> All token amounts in the network are stored as integer amounts, with each unit representing 10<sup>-decimals</sup> whole tokens. <p> For tokens with `token_type` set to `NON_FUNGIBLE_UNIQUE` this MUST be 0.
* A _current_ total supply of this token, expressed in the smallest unit of the token. <p> The number of _whole_ tokens this represents is (total_supply / 10<sup>decimals</sup>). The value of total supply, MUST be within the positive range of a twos-compliment signed 64-bit integer. The `total_supply`, therefore MUST be between 1, and 9,223,372,036,854,775,807, inclusive. <p> This value SHALL be reduced when a `token_burn` or `token_wipe_account` operation is executed, and SHALL be increased when a `token_mint` operation is executed.
* A treasury account identifier for this token. <p> When the token is created, the initial supply given in the token create transaction SHALL be minted and deposited in the treasury account.<br/> All token mint transactions for this token SHALL deposit the new minted tokens in the treasury account.<br/> All token burn transactions for this token SHALL remove the tokens to be burned from the treasury account.
* Access control for general modification of this token. <p> This key MUST sign any `token_update` transaction that changes any attribute of the token other than expiration_time. Other attributes of this token MAY be changed by transactions other than `token_update`, and MUST be signed by one of the other purpose-specific keys assigned to the token.<br/> This value can be set during token creation, and SHALL NOT be modified thereafter, unless the update transaction is signed by both the existing `admin_key` and the new `admin_key`.<br/> If the `admin_key` is not set for a token, that token SHALL be immutable.
* Access control for KYC for this token. <p> Know Your Customer (KYC) status may be granted for an account by a token grant kyc transaction signed by this key.<br/> If this key is not set, then KYC status cannot be granted to an account for this token, and any `TokenGrantKyc` transaction attempting to grant kyc to an account for this token SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* Access control to freeze this token. <p> A token may be frozen for an account, preventing any transaction from transferring that token for that specified account, by a token freeze account transaction signed by this key.<br/> If this key is not set, the token cannot be frozen, and any transaction attempting to freeze the token for an account SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* Access control of account wipe for this token. <p> A token may be wiped, removing and burning tokens from a specific account, by a token wipe transaction, which MUST be signed by this key. The `treasury_account` cannot be subjected to a token wipe. A token burn transaction, signed by the `supply_key`, serves to burn tokens held by the `treasury_account` instead.<br/> If this key is not set, the token cannot be wiped, and any transaction attempting to wipe the token from an account SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* Access control of token mint/burn for this token. <p> A token mint transaction MUST be signed by this key, and any token mint transaction not signed by the current `supply_key` for that token SHALL NOT succeed.<br/> A token burn transaction MUST be signed by this key, and any token burn transaction not signed by the current `supply_key` for that token SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* A flag indicating if accounts associated to this token are frozen by default, not frozen, or freeze is not applicable. <p> Accounts frozen by default and newly associated with this token CANNOT transact in the token until unfrozen.<br/> This SHALL NOT prevent a `tokenReject` transaction to return the tokens from an account to the treasury account.
* A flag indicating if accounts associated with this token are granted KYC by default, revoked by default, or KYC is not applicable.
* A flag indicating that this token is deleted. <p> A transaction involving a deleted token MUST NOT succeed.
* An identifier for the account (if any) that the network will attempt to charge for this token's auto-renewal upon expiration. <p> This field is OPTIONAL. If it is not set then renewal fees SHALL be charged to the account identified by `treasury`.
* A duration by which the network should automatically extend this token's expiration. <p> If the token has a valid auto-renew account, and is not deleted upon expiration, the network SHALL attempt to automatically renew this token.<br/> The default values for the minimum period and maximum period are 30 days and 90 days, respectively.
* An expiration time for this token, in seconds since the epoch. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.
* A short description of this token. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* A type for this token. <p> A token SHALL be either `FUNGIBLE_COMMON` or `NON_FUNGIBLE_UNIQUE`.<br/> If this value was omitted during token creation, `FUNGIBLE_COMMON` SHALL be used.<br/> The value `FUNGIBLE_COMMON` SHALL represent a fungible/common token. The value `NON_FUNGIBLE_UNIQUE` SHALL represent a non-fungible/unique token.
* A supply type for this token. <p> A token SHALL have either `INFINITE` or `FINITE` supply type.<br/> If this value was omitted during token creation, the value `INFINITE` SHALL be used.
* A maximum supply of this token.<br/> This is the maximum number of tokens of this type that may be issued. <p> This limit SHALL apply regardless of `token_type`.<br/> If `supply_type` is `INFINITE` then this value MUST be 0.<br/> If `supply_type` is `FINITE`, then this value MUST be greater than 0.
* Access control of the `custom_fees` field for this token. <p> The token custom fee schedule may be changed, modifying the fees charged for transferring that token, by a token update transaction, which MUST be signed by this key.<br/> If this key is not set, the token custom fee schedule cannot be changed, and any transaction attempting to change the custom fee schedule for this token SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* A custom fee schedule for this token.
* Access control of pause/unpause for this token. <p> A token may be paused, preventing any transaction from transferring that token, by a token update transaction signed by this key.<br/> If this key is not set, the token cannot be paused, and any transaction attempting to pause the token SHALL NOT succeed.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* A flag indicating that this token is paused.<br/> A token may be paused, unpaused, or pause not applicable. <p> A transaction involving a paused token, other than token_unpause, MUST NOT succeed.
* The ledger ID of the network that generated this response. <p> This value SHALL identify the distributed ledger that responded to this query.
* A Token "Metadata". <p> This value, if set, SHALL NOT exceed 100 bytes.
* Access Control of metadata update for this token. <p> A transaction to update the `metadata` field of this token MUST be signed by this key.<br/> If this token is a non-fungible/unique token type, a transaction to update the `metadata` field of any individual serialized unique token of this type MUST be signed by this key.<br/> If this key is not set, the token metadata SHALL NOT be changed after it is created.<br/> If this key is not set, the metadata for any individual serialized token of this type SHALL NOT be changed after it is created.<br/> This key MAY be set when the token is created, and MAY be set or modified via a token update transaction signed by the `admin_key`.<br/> If `admin_key` is not set, this value, whether set or unset, SHALL be immutable.
* Types of validation strategies for token keys.
Used in:
* Perform all token key validations.<br/> This is the default value and behavior.
* Perform no validations at all for all passed token keys.
* Possible token "KYC" status values. This is returned by `TokenGetInfoQuery` or `CryptoGetInfoResponse` in `TokenRelationship`.
Used in:
,* The token does not support KYC or cannot grant KYC for the designated account.<br/> Typically this indicates that the token does not have a `kyc_key` set.
* The designated account is currently granted KYC status for the designated token.
* The designated account is not currently granted KYC status for the designated token.
* Mint tokens and deliver the new tokens to the token treasury account. The token MUST have a `supply_key` set and that key MUST NOT be an empty `KeyList`.<br/> The token `supply_key` MUST sign this transaction.<br/> This operation SHALL increase the total supply for the token type by the number of tokens "minted".<br/> The total supply for the token type MUST NOT be increased above the maximum supply limit (2^63-1) by this transaction.<br/> The tokens minted SHALL be credited to the token treasury account.<br/> If the token is a fungible/common type, the amount MUST be specified.<br/> If the token is a non-fungible/unique type, the metadata bytes for each unique token MUST be specified in the `metadata` list.<br/> Each unique metadata MUST not exceed the global metadata size limit defined by the network configuration value `tokens.maxMetadataBytes`.<br/> The global batch size limit (`tokens.nfts.maxBatchSizeMint`) SHALL set the maximum number of individual NFT metadata permitted in a single `tokenMint` transaction. ### Block Stream Effects None
Used in:
,* A token identifier. <p> This SHALL identify the token type to "mint".<br/> The identified token MUST exist, and MUST NOT be deleted.
* An amount to mint to the Treasury Account. <p> This is interpreted as an amount in the smallest possible denomination for the token (10<sup>-decimals</sup> whole tokens).<br/> The balance for the token treasury account SHALL receive the newly minted tokens.<br/> If this value is equal to zero (`0`), the token SHOULD be a non-fungible/unique type.<br/> If this value is non-zero, the token MUST be a fungible/common type.
* A list of metadata bytes.<br/> <p> One non-fungible/unique token SHALL be minted for each entry in this list.<br/> Each entry in this list MUST NOT be larger than the limit set by the current network configuration value `tokens.maxMetadataBytes`.<br/> This list MUST NOT contain more entries than the current limit set by the network configuration value `tokens.nfts.maxBatchSizeMint`.<br/> If this list is not empty, the token MUST be a non-fungible/unique type.<br/> If this list is empty, the token MUST be a fungible/common type.
* Information for one non-fungible/unique token (NFT).
Used in:
, ,* A non-fungible/unique token (NFT) identifier. <p> This SHALL match the NFT requested.<br/>
* The current owner of the NFT
* The effective consensus timestamp at which the NFT was minted
* Represents the unique metadata of the NFT
* The ledger ID of the network that generated this response. <p> This value SHALL identify the distributed ledger that responded to this query.
* If an allowance is granted for the NFT, its corresponding spender account
* Possible Pause status values. This is returned by `TokenGetInfoQuery` in `TokenRelationship`.
Used in:
* The token does not support pause or cannot be paused.<br/> Typically this indicates that the token does not have a `pause_key` set.
* The token is currently paused.
* The token is not currently paused.
* Pause transaction activity for a token. This transaction MUST be signed by the Token `pause_key`.<br/> The `token` identified MUST exist, and MUST NOT be deleted.<br/> The `token` identified MAY be paused; if the token is already paused, this transaction SHALL have no effect. The `token` identified MUST have a `pause_key` set, the `pause_key` MUST be a valid `Key`, and the `pause_key` MUST NOT be an empty `KeyList`.<br/> A `paused` token SHALL NOT be transferred or otherwise modified except to "up-pause" the token with `unpauseToken` or in a `rejectToken` transaction. ### Block Stream Effects None
Used in:
,* A token identifier. <p> The identified token SHALL be paused. Subsequent transactions involving that token SHALL fail until the token is "unpaused".
* A union token identifier. Identify a fungible/common token type, or a single non-fungible/unique token serial.
Used in:
* A fungible/common token type.
* A single specific serialized non-fungible/unique token.
* Reject undesired token(s).<br/> Transfer one or more token balances held by the requesting account to the treasury for each token type. Each transfer SHALL be one of the following - A single non-fungible/unique token. - The full balance held for a fungible/common token. A single `tokenReject` transaction SHALL support a maximum of 10 transfers.<br/> A token that is `pause`d MUST NOT be rejected.<br/> If the `owner` account is `frozen` with respect to the identified token(s) the token(s) MUST NOT be rejected.<br/> The `payer` for this transaction, and `owner` if set, SHALL NOT be charged any custom fees or other fees beyond the `tokenReject` transaction fee. ### Block Stream Effects - Each successful transfer from `payer` to `treasury` SHALL be recorded in the `token_transfer_list` for the transaction record.
Used in:
,* An account identifier.<br/> This OPTIONAL field identifies the account holding the tokens to be rejected. <p> If set, this account MUST sign this transaction. If not set, the `payer` for this transaction SHALL be the effective `owner` for this transaction.
* A list of one or more token rejections. <p> On success each rejected token serial number or balance SHALL be transferred from the requesting account to the treasury account for that token type.<br/> After rejection the requesting account SHALL continue to be associated with the token.<br/> If dissociation is desired then a separate `TokenDissociate` transaction MUST be submitted to remove the association.<br/> This list MUST contain at least one (1) entry and MUST NOT contain more than ten (10) entries.
* An Hedera Token Service token relationship. A token relationship connects an Account with a Token and is necessary for that Account to transact in that Token. TokenRelationship defines a connection between one account and one token type. A TokenRelation SHALL be identified by the combination of token_id and account_id.<br/> A TokenRelation SHALL contain, for the referenced token,<br/> The account's current balance, whether the account has KYC granted, and whether the assets are frozen. TokenRelation entries SHALL be connected via a "virtual linked list" with the next TokenID and previous TokenID stored in the TokenRelation. These TokenIDs MUST be combined with the AccountID to find the next or previous relationship in the list.
* A token identifier. <p> This SHALL identify the token involved in this association.
* An account identifier. <p> This SHALL identify the account involved in this association.
* The fungible token balance of this token relationship. <p> This MUST be a whole number.
* A flag indicating that this token relationship is frozen. <p> When a token relationship is frozen the associated account SHALL NOT be permitted to transfer to or from the associated balance. <p> This flag is associated with the Token value `freeze_key`, and any transaction to set this flag MUST be signed by that key. If the Token does not have a `freeze_key` set, then this flag SHALL NOT be set true for relationships between accounts and that token.
* A flag indicating that this token relationship has been granted KYC status. <p> If the token flag `accounts_kyc_granted_by_default` is set true, then this flag SHALL be set true for all accounts subsequently associated to that token. Otherwise this flag SHALL NOT be set until a transaction is submitted, and signed with the Token `kyc_key` to set the flag true.<br/> If the Token does not have a `kyc_key` set and the token flag `accounts_kyc_granted_by_default` is not set true, then this value MUST be false for all accounts subsequently associated to that token. <p> Typically a transaction to set this value to true is considered equivalent to asserting that the "Know Your Customer" (KYC) requirements have been met for this combination of account and token and the relevant records are available as required.
* A flag indicating that this token relationship was created using automatic association. <p> If this is true then there MUST NOT exist a customer-signed transaction associating this account and token combination and the account `used_auto_associations` SHALL be incremented when this relationship is created.
* The Token ID of the previous entry in the associated Account's "virtual double-linked list" of token relationships. <p> This must be combined with the value of `account_id` to identify the actual `TokenRelation` referenced.
* The Token ID of the next entry in the associated Account's "virtual double-linked list" of token relationships. <p> This must be combined with the value of `account_id` to identify the actual `TokenRelation` referenced.
* An Hedera Token Service token relationship. A token relationship describes the connection between an Account and a Token type, including the current account balance in that token. A `TokenRelationship` SHALL contain, for the designated token and enclosing account, The account's current balance, whether the account has KYC granted, whether the assets are frozen and whether the association was automatic.<br/> A `TokenRelationship` MAY also contain the `symbol` and `decimals` values copied from the token.<br/> `TokenRelationship` entries SHALL be valid only within the context of a `GetAccountDetails` query response, or other enclosing message, which specifies the account side of the relationship.
Used in:
, ,* A token identifier. <p> This MUST match an existing token that is not deleted.
* A token symbol. <p> This MUST match an existing token that is not deleted.<br/> This MUST match the value for the token identified in `tokenId`.
* An account balance for this token. <p> For fungible/common tokens this SHALL be the balance that the account holds of that token. The value is provided as an integer amount of the smallest unit of the token (i.e. 10<sup>`-decimals`</sup> whole tokens).<br/> For non-fungible/unique tokens this SHALL be the whole number of unique tokens held by the account for this token type.
* A KYC status for the account with respect to this token. <p> This may be `KycNotApplicable`, `Granted` or `Revoked` and, if KYC is not supported for this token (e.g. the `kyc_key` of the token is not set), this SHALL be `KycNotApplicable`.
* A Freeze status for the account with respect to this token. <p> This value SHALL be one of `FreezeNotApplicable`, `Frozen` or `Unfrozen`.<br/> If the token cannot freeze account assets (e.g. the `freeze_key` of the token is not set), this SHALL be `FreezeNotApplicable`.
* A maximum "precision" for this token. <p> This value MUST match the `decimals` field of the token identified in the `tokenId` field.<br/> A single whole token SHALL be divided into at most 10<sup>`decimals`</sup> sub-units.
* An automatic association flag. <p> This SHALL be set if the relationship was created implicitly (automatically).<br/> This SHALL be unset if the relationship was created explicitly (manually) via a `TokenAssociate` transaction.
* Revoke "Know Your Customer"(KYC) from one account for a single token. This transaction MUST be signed by the `kyc_key` for the token.<br/> The identified token MUST have a `kyc_key` set to a valid `Key` value.<br/> The token `kyc_key` MUST NOT be an empty `KeyList`.<br/> The identified token MUST exist and MUST NOT be deleted.<br/> The identified account MUST exist and MUST NOT be deleted.<br/> The identified account MUST have an association to the identified token.<br/> On success the association between the identified account and the identified token SHALL NOT be marked as "KYC granted". ### Block Stream Effects None
Used in:
,* A token identifier. <p> The identified token SHALL revoke "KYC" for the account identified by the `account` field.<br/> The identified token MUST be associated to the account identified by the `account` field.
* An account identifier. <p> The token identified by the `token` field SHALL revoke "KYC" for the identified account.<br/> This account MUST be associated to the token identified by the `token` field.
* Possible Token Supply Types (IWA Compatibility). This `enum` indicates the limit of tokens that can exist during the lifetime of a token definition. The "infinite" supply is only theoretically infinite, as it is still limited to the magnitude of a 64-bit signed integer. A "finite" supply is further limited to a value specified when the token is created (or updated, if not immutable).
Used in:
, ,* An unlimited supply.<br/> This indicates that tokens of this type have an upper bound of Long.MAX_VALUE.<br/> The supply is accounted in the smallest units of the token (i.e. 10<sup>-`decimals`</sup> whole tokens)
* A limited supply.<br/> This indicates that tokens of this type have an upper bound of `maxSupply`.<br/> The maximum supply SHALL be provided on token creation, but MAY be changed thereafter if the token has an `admin_key` set.
* A list of transfers for a particular (non-HBAR) token type. A `TokenTransferList` applies to a single token type, but may contain many individual transfers.<br/> Each transfer of a fungible/common token MUST specify an `accountID` and `amount`. Amount SHALL be positive when the account receives tokens, and SHALL be negative when the account sends tokens. The amount SHOULD NOT be `0`.<br/> In a transfer list containing fungible/common tokens in the `transfers` list, the sum of all such transfers MUST be zero (`0`). Each transfer of a unique token SHALL specify both sender and receiver, as well as the serial number transferred.<br/> A single `TokenTransferList` MUST contain `transfers` or `nftTransfers`, but MUST NOT contain both.
Used in:
, ,* A token identifier.<br/> This is the token to be transferred.
* A list of account amounts. <p> Each entry SHALL have an account and amount.<br/> These transfers SHALL be "double-entry" style; the credits (positive amount) and debits (negative amount) MUST sum to 0, unless this transfer list is part of a `mint` or `burn` operation.<br/> This SHALL be be set for fungible/common tokens and MUST be empty otherwise.
* A list of NftTransfers. <p> Each entry SHALL have a sender and receiver account, and the serial number of the unique token to transfer.<br/> This SHALL be be set for non-fungible/unique tokens and SHALL be empty otherwise.
* An expected decimal precision.<br/> This is the number of decimals a fungible/common token type is _expected_ to have. <p> The transfer SHALL fail with response code `UNEXPECTED_TOKEN_DECIMALS` if this is set and the actual decimals specified for the `Token` differ from this value.<br/> If `nftTransfers` is set, then this value SHOULD NOT be set.
* Possible Token Types (IWA Compatibility). Apart from fungible and non-fungible, Tokens can have either a common or unique representation. Furthermore, tokens can have intrinsic or referential value, and can be whole and indivisible or fractional.<br/> These distinction might seem subtle, but it is important when considering how tokens can be traced, used, transferred, and if they can have isolated unique properties. A few examples (these may not match enumerations below) using IWA taxonomy. <dl> <dt>fungible, whole, intrinsic, unique</dt> <dd>Physical fiat currency</dd> <dt>fungible, fractional, intrinsic, common</dt> <dd>bank balance fiat currency</dd> <dt>non-fungible, fractional, reference, unique</dt> <dd>"mutual" collectible/art/property ownership</dd> <dt>non-fungible, whole, intrinsic, unique</dt> <dd>Physical work of fine art</dd> <dt>non-fungible, whole, reference, unique</dt> <dd>Registered property title</dd> </dl>
Used in:
, ,* A fungible/common token.<br/> Tokens of this type are interchangeable with one another, where any quantity of tokens has the same value as another equal quantity, if they are in the same class. Tokens share a single set of properties, and are not distinct from one another. Ownership is represented as a balance or quantity associated to a given account. Tokens may be divided into fractional tokens, within reasonable limits. <p> IWA taxonomy _fungible, fractional, intrinsic, common_
* A non-fungible/unique token.<br/> Tokens of this type are unique, and are not interchangeable with other tokens of the same type. Each token carries a serial number which is unique for that token, these tokens may have a different trade value for each individual token. The tokens are individually accounted and often carry additional unique properties. Tokens cannot be subdivided, and value is related to what the individual token represents. <p> IWA taxonomy _non-fungible, whole, reference, unique_
* Resume transfers of a token type for an account.<br/> This releases previously frozen assets of one account with respect to one token type. Once unfrozen, that account can once again send or receive tokens of the identified type. The token MUST have a `freeze_key` set and that key MUST NOT be an empty `KeyList`.<br/> The token `freeze_key` MUST sign this transaction.<br/> The identified token MUST exist, MUST NOT be deleted, MUST NOT be paused, and MUST NOT be expired.<br/> The identified account MUST exist, MUST NOT be deleted, and MUST NOT be expired.<br/> If the identified account is not frozen with respect to the identified token, the transaction SHALL succeed, but no change SHALL be made.<br/> An association between the identified account and the identified token MUST exist. ### Block Stream Effects None
Used in:
,* A token identifier. <p> This SHALL identify the token type to "unfreeze".<br/> The identified token MUST exist, MUST NOT be deleted, and MUST be associated to the identified account.
* An account identifier. <p> This shall identify the account to "unfreeze".<br/> The identified account MUST exist, MUST NOT be deleted, MUST NOT be expired, and MUST be associated to the identified token.<br/> The identified account SHOULD be "frozen" with respect to the identified token.
* Resume transaction activity for a token. This transaction MUST be signed by the Token `pause_key`.<br/> The `token` identified MUST exist, and MUST NOT be deleted.<br/> The `token` identified MAY not be paused; if the token is not paused, this transaction SHALL have no effect. The `token` identified MUST have a `pause_key` set, the `pause_key` MUST be a valid `Key`, and the `pause_key` MUST NOT be an empty `KeyList`.<br/> An `unpaused` token MAY be transferred or otherwise modified. ### Block Stream Effects None
Used in:
,* A token identifier. <p> The identified token SHALL be "unpaused". Subsequent transactions involving that token MAY succeed.
* Modify the metadata field for an individual non-fungible/unique token (NFT). Updating the metadata of an NFT SHALL NOT affect ownership or the ability to transfer that NFT.<br/> This transaction SHALL affect only the specific serial numbered tokens identified. This transaction SHALL modify individual token metadata.<br/> This transaction MUST be signed by the token `metadata_key`.<br/> The token `metadata_key` MUST be a valid `Key`.<br/> The token `metadata_key` MUST NOT be an empty `KeyList`. ### Block Stream Effects None
Used in:
,* A token identifier.<br/> This is the token type (i.e. collection) for which to update NFTs. <p> This field is REQUIRED.<br/> The identified token MUST exist, MUST NOT be paused, MUST have the type non-fungible/unique, and MUST have a valid `metadata_key`.
* A list of serial numbers to be updated. <p> This field is REQUIRED.<br/> This list MUST have at least one(1) entry.<br/> This list MUST NOT have more than ten(10) entries.
* A new value for the metadata. <p> If this field is not set, the metadata SHALL NOT change.<br/> This value, if set, MUST NOT exceed 100 bytes.
* Update an existing token. This transaction SHALL NOT update any field that is not set.<br/> Most changes MUST be signed by the current `admin_key` of the token. If the token does not currently have a valid `admin_key`, then this transaction MUST NOT set any value other than `expiry` or a non-admin key.<br/> If the `treasury` is set to a new account, the new account MUST sign this transaction.<br/> If the `treasury` is set to a new account for a _non-fungible/unique_ token, The current treasury MUST NOT hold any tokens, or the network configuration property `tokens.nfts.useTreasuryWildcards` MUST be set. #### Requirements for Keys Any of the key values may be changed, even without an admin key, but the key to be changed MUST have an existing valid key assigned, and both the current key and the new key MUST sign the transaction.<br/> A key value MAY be set to an empty `KeyList`. In this case the existing key MUST sign this transaction, but the new value is not a valid key, and the update SHALL effectively remove the existing key. ### Block Stream Effects None
Used in:
,* A token identifier. <p> This SHALL identify the token type to delete.<br/> The identified token MUST exist, and MUST NOT be deleted.<br/> If any field other than `expiry` is set, the identified token MUST have a valid `admin_key`.
* A new symbol to use for the token. <p> This value, if set, MUST NOT exceed 100 bytes when encoded as UTF-8.<br/> This value, if set, MUST NOT contain the Unicode NUL codepoint.
* A new name for the token.<br/> This is generally the "full name" displayed in wallet software. <p> This value, if set, MUST NOT exceed 100 bytes when encoded as UTF-8.<br/> This value, if set, MUST NOT contain the Unicode NUL codepoint.
* A new treasury account identifier. <p> If set, - The identified account SHALL be designated the "treasury" for the token, and all tokens "minted" SHALL be delivered to that account following this transaction.<br/> - The identified account MUST exist, MUST NOT be expired, MUST NOT be deleted, and SHOULD have a non-zero HBAR balance.<br/> - The identified account SHALL be associated to this token. - The full balance of this token held by the prior treasury account SHALL be transferred to the new treasury account, if the token type is fungible/common. - If the token type is non-fungible/unique, the previous treasury account MUST NOT hold any tokens of this type. - The new treasury account key MUST sign this transaction.
* An Hedera key for token administration. <p> This key, if set, SHALL have administrative authority for this token and MAY authorize token update and/or token delete transactions.<br/> If this key is set to an empty `KeyList`, this token SHALL be immutable thereafter, except for expiration and renewal.<br/> If set, this key MUST be a valid key or an empty `KeyList`.<br/> If set to a valid key, the previous key and new key MUST both sign this transaction.
* An Hedera key for managing account KYC. <p> This key, if set, SHALL have KYC authority for this token and MAY authorize transactions to grant or revoke KYC for accounts.<br/> If this key is not set, or is an empty `KeyList`, KYC status for this token SHALL NOT be granted or revoked for any account.<br/> If this key is removed after granting KYC, those grants SHALL remain and cannot be revoked.<br/> If set, this key MUST be a valid key or an empty `KeyList`.<br/> If set to a valid key, the previous key and new key MUST both sign this transaction.
* An Hedera key for managing asset "freeze". <p> This key, if set, SHALL have "freeze" authority for this token and MAY authorize transactions to freeze or unfreeze accounts with respect to this token.<br/> If this key is set to an empty `KeyList`, this token SHALL NOT be frozen or unfrozen for any account.<br/> If this key is removed after freezing accounts, those accounts SHALL remain frozen and cannot be unfrozen.<br/> If set, this key MUST be a valid key or an empty `KeyList`.<br/> If set to a valid key, the previous key and new key MUST both sign this transaction.
* An Hedera key for wiping tokens from accounts. <p> This key, if set, SHALL have "wipe" authority for this token and MAY authorize transactions to "wipe" any amount of this token from any account, effectively burning the tokens "wiped".<br/> If this key is set to an empty `KeyList`, it SHALL NOT be possible to "wipe" this token from an account.<br/> If set, this key MUST be a valid key or an empty `KeyList`.<br/> If set to a valid key, the previous key and new key MUST both sign this transaction.
* An Hedera key for "minting" and "burning" tokens. <p> This key, if set, MAY authorize transactions to "mint" new tokens to be delivered to the token treasury or "burn" tokens held by the token treasury.<br/> If this key is set to an empty `KeyList`, it SHALL NOT be possible to change the supply of tokens and neither "mint" nor "burn" transactions SHALL be permitted.<br/> If set, this key MUST be a valid key or an empty `KeyList`.<br/> If set to a valid key, the previous key and new key MUST both sign this transaction.
* An identifier for the account to be charged renewal fees at the token's expiry to extend the lifetime of the token. <p> If this value is set for the identified token, the token lifetime SHALL be extended by the _smallest_ of the following at expiration: <ul> <li>The current `autoRenewPeriod` duration.</li> <li>The maximum duration that this account has funds to purchase.</li> <li>The configured MAX_AUTORENEW_PERIOD at the time of automatic renewal.</li> </ul> If this account's HBAR balance is `0` when the token must be renewed, then the token SHALL be expired, and MAY be subsequently removed from state.<br/> If this value is set, the referenced account MUST sign this transaction. <p> <blockquote>Note<blockquote> It is not currently possible to remove an automatic renewal account. Once set, it can only be replaced by a valid account. </blockquote></blockquote>
* A duration between token automatic renewals.<br/> All entities in state may be charged "rent" occasionally (typically every 90 days) to prevent unnecessary growth of the ledger. This value sets the interval between such events for this token. <p> If set, this value MUST be greater than the configured `MIN_AUTORENEW_PERIOD`.<br/> If set, this value MUST be less than the configured `MAX_AUTORENEW_PERIOD`.
* An expiration timestamp. <p> If this value is set, the automatic renewal account is not set for the identified token, and token expiration is enabled in network configuration, this token SHALL expire when the consensus time exceeds this value, and MAY be subsequently removed from the network state.<br/> If `autoRenewAccount` is set or the `auto_renew_account_id` is set for the identified token, the token SHALL be subject to automatic renewal when the consensus time exceeds this value.
* A short description for this token. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* An Hedera key for managing the token custom fee schedule. <p> This key, if set, MAY authorize transactions to modify the `custom_fees` for this token.<br/> If this key is set to an empty `KeyList`, the `custom_fees` for this token SHALL NOT be modified.<br/> If set, this key MUST be a valid key or an empty `KeyList`.<br/> If set to a valid key, the previous key and new key MUST both sign this transaction.
* An Hedera key for managing token "pause". <p> This key, if set, SHALL have "pause" authority for this token and MAY authorize transactions to pause or unpause this token.<br/> If this key is set to an empty `KeyList`, this token SHALL NOT be paused or unpaused.<br/> If this key is removed while the token is paused, the token cannot be unpaused and SHALL remain paused.<br/> If set, this key MUST be a valid key or an empty `KeyList`.<br/> If set to a valid key, the previous key and new key MUST both sign this transaction.
* Token "Metadata". <p> The value, if set, MUST NOT exceed 100 bytes.<br/> <dl><dt>Examples</dt> <dd>hcs://1/0.0.4896575</dd> <dd>ipfs://bafkreifd7tcjjuwxxf4qkaibkj62pj4mhfuud7plwrc3pfoygt55al6syi</dd> </dl>
* An Hedera key for managing the token `metadata`. <p> This key, if set, MAY authorize transactions to modify the `metadata` for this token.<br/> If this key is set to an empty `KeyList`, the `metadata` for this token SHALL NOT be modified.<br/> If set, this key MUST be a valid key or an empty `KeyList`.<br/> If set to a valid key, the previous key and new key MUST both sign this transaction.
* Set a key validation mode.<br/> Any key may be updated by a transaction signed by the token `admin_key`. Each role key may _also_ sign a transaction to update that key. If a role key signs an update to change that role key both old and new key must sign the transaction, _unless_ this field is set to `NO_VALIDATION`, in which case the _new_ key is not required to sign the transaction (the existing key is still required).<br/> The primary intent for this field is to allow a role key (e.g. a `pause_key`) holder to "remove" that key from the token by signing a transaction to set that role key to an empty `KeyList`. <p> If set to `FULL_VALIDATION`, either the `admin_key` or _both_ current and new key MUST sign this transaction to update a "key" field for the identified token.<br/> If set to `NO_VALIDATION`, either the `admin_key` or the current key MUST sign this transaction to update a "key" field for the identified token.<br/> This field SHALL be treated as `FULL_VALIDATION` if not set.
* Wipe (administratively burn) tokens held by a non-treasury account.<br/> On success, the requested tokens will be removed from the identified account and the token supply will be reduced by the amount "wiped". This transaction MUST be signed by the token `wipe_key`.<br/> The identified token MUST exist, MUST NOT be deleted, and MUST NOT be paused.<br/> The identified token MUST have a valid `Key` set for the `wipe_key` field, and that key MUST NOT be an empty `KeyList`.<br/> The identified account MUST exist, MUST NOT be deleted, MUST be associated to the identified token, MUST NOT be frozen for the identified token, MUST NOT be the token `treasury`, and MUST hold a balance for the token or the specific serial numbers provided.<br/> This transaction SHOULD provide a value for `amount` or `serialNumbers`, but MUST NOT set both fields. ### Block Stream Effects The new total supply for the wiped token type SHALL be recorded.
Used in:
,* A token identifier. <p> This field is REQUIRED.<br/> The identified token MUST exist, MUST NOT be paused, MUST NOT be deleted, and MUST NOT be expired.
* An account identifier.<br/> This identifies the account from which tokens will be wiped. <p> This field is REQUIRED.<br/> The identified account MUST NOT be deleted or expired.<br/> If the identified token `kyc_key` is set to a valid key, the identified account MUST have "KYC" granted.<br/> The identified account MUST NOT be the `treasury` account for the identified token.
* An amount of fungible/common tokens to wipe. <p> If the identified token is a non-fungible/unique token type, this value MUST be exactly zero(`0`).<br/> If the identified token type is fungible/common: <ul> <li>This value SHALL be specified in units of the smallest denomination possible for the identified token (<tt>10<sup>-decimals</sup></tt> whole tokens).</li> <li>This value MUST be strictly less than `Long.MAX_VALUE`.</li> <li>This value MUST be less than or equal to the current total supply for the identified token.</li> <li>This value MUST be less than or equal to the current balance held by the identified account.</li> <li>This value MAY be zero(`0`).</li> </ul>
* A list of serial numbers to wipe.<br/> The non-fungible/unique tokens with these serial numbers will be destroyed and cannot be recovered or reused. <p> If the identified token type is a fungible/common type, this list MUST be empty.<br/> If the identified token type is non-fungible/unique: <ul> <li>This list MUST contain at least one entry if the identified token type is non-fungible/unique.>/li> <li>This list MUST NOT contain more entries than the current total supply for the identified token.</li> <li>Every entry in this list MUST be a valid serial number for the identified token (i.e. "collection").</li> <li>Every entry in this list MUST be owned by the identified account</li> <li></li> </ul> This list MUST NOT contain more entries than the network configuration value for batch size limit, typically ten(`10`).
* Representation of an Hedera Consensus Service(HCS) topic. As with all network entities, a topic has a unique entity number, which is usually given along with the network's shard and realm in the form of a shard.realm.number id.<br/> An HCS topic is an ordered logical stream of messages united and secured by a running hash of those messages. The integrity of any message on a topic, and the topic stream as a whole, can always be ascertained from block stream data by recomputing the running hash across any subset of messages on the topic.<br/> The messages on a topic SHALL NOT be stored in network state, but are available in the network block stream, and may be queried via the Mirror Node system.
* The topic's ID. <p> This value SHALL be unique within the network.
* The number of messages sent to the topic.
* The expiration time for this topic, in seconds since the epoch. <p> For this purpose, `epoch` SHALL be the UNIX epoch with 0 at `1970-01-01T00:00:00.000Z`.
* The number of seconds for which the topic will be automatically renewed upon expiring (if it has a valid auto-renew account).
* The id of the account (if any) that the network will attempt to charge fees to complete auto-renewal of this topic, upon expiration.
* A flag indicating that this topic is deleted.
* The current running hash of this topic. <p> This 48-byte field is the output of a SHA-384 digest with input data determined by the current version of the running hash algorithm used by the network.<br/> All topics in state SHALL use running hash algorithm version `3`.<br/> The bytes of each uint64 or uint32 encoded for the hash input MUST be in Big-Endian format. <p> <hr/> If the algorithm version is '3', then the input data to the SHA-384 digest are, in order: <ol> <li>The previous running hash of the topic (48 bytes)</li> <li>The `topicRunningHashVersion` (8 bytes)</li> <li>The payer account's shard (8 bytes)</li> <li>The payer account's realm (8 bytes)</li> <li>The payer account's number (8 bytes)</li> <li>The topic's shard (8 bytes)</li> <li>The topic's realm (8 bytes)</li> <li>The topic's number (8 bytes)</li> <li>The number of seconds since the epoch when the `ConsensusSubmitMessage` reached consensus (8 bytes)</li> <li>The number of nanoseconds within the second when the `ConsensusSubmitMessage` reached consensus (4 bytes)</li> <li>The `topicSequenceNumber` (8 bytes)</li> <li>The output of a SHA-384 digest of the message bytes from the `ConsensusSubmitMessage` (48 bytes)</li> </ol> <blockquote>Note that older messages on a topic, which are available in the block stream, MAY use older algorithm versions, and the block stream record incorporates a running hash version field to ensure the correct hash calculation for each such historical message.</blockquote>
* A short description of this topic. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* Access control for modification of the topic. <p> If this field is set, that key MUST sign each message to update or delete this topic.<br/> A topic without an admin key SHALL be immutable, except for expiration and renewal.<br/> If this field is not set, the `auto_renew_account_id` MUST NOT be set.
* Access control for message submission to the topic. <p> If this field is set, that key MUST sign each consensus submit message for this topic.
* Access control for update/delete of custom fees. <p> If this field is unset, the current custom fees CANNOT be changed.<br/> If this field is set, that `Key` MUST sign any transaction to update the custom fee schedule for this topic.
* A set of "privileged payer" keys<br/> Keys in this list are permitted to submit messages to this topic without paying custom fees associated with this topic. <p> If a submit transaction is signed by _any_ key included in this set, custom fees SHALL NOT be charged for that transaction.<br/> A `fee_exempt_key_list` MUST NOT contain more than `MAX_ENTRIES_FOR_FEE_EXEMPT_KEY_LIST` keys.<br/> A `fee_exempt_key_list` MUST NOT contain any duplicate keys.<br/> A `fee_exempt_key_list` MAY contain keys for accounts that are inactive, deleted, or non-existent. If not set, there SHALL NOT be any fee-exempt keys. In particular, the following keys SHALL NOT be implicitly or automatically added to this list: `adminKey`, `submitKey`, `fee_schedule_key`.
* A set of custom fee definitions.<br/> These are fees to be assessed for each submit to this topic. <p> If this list is empty, the only fees charged for a submit to this topic SHALL be the network and node fees.<br/> If this list is not empty, each fee defined in this set SHALL be evaluated for each message submitted to this topic, and the resultant total assessed fees SHALL be charged.<br/> If this list is not empty, custom fees defined here SHALL be charged _in addition to_ the base network and node fees.
* An unique identifier for a topic.<br/> Topics are part of the consensus service, messages are published to a topic.
Used in:
, , , , , , ,* A whole number shard identifier.
* A whole number realm identifier.
* A whole number topic identifier, unique within its realm and shard.
* A wrapper around signed transaction bytes.<br/> This was originally a transaction with body, signatures, and/or bytes, but is not only a wrapper around a byte array containing signed transction bytes. The `signedTransactionBytes` field is REQUIRED and MUST contain a valid, serialized, `SignedTransaction` message.<br/> All other fields are deprecated and MUST NOT be set. #### Additional Notes The four deprecated fields will be removed and reserved in a future release.
<<<pbj.java_package = "com.hedera.hapi.node.base">>> This comment is special code for setting PBJ Compiler java package
Used as request type in: AddressBookService.createNode, AddressBookService.deleteNode, AddressBookService.updateNode, ConsensusService.createTopic, ConsensusService.deleteTopic, ConsensusService.submitMessage, ConsensusService.updateTopic, CryptoService.addLiveHash, CryptoService.approveAllowances, CryptoService.createAccount, CryptoService.cryptoDelete, CryptoService.cryptoTransfer, CryptoService.deleteAllowances, CryptoService.deleteLiveHash, CryptoService.updateAccount, FileService.appendContent, FileService.createFile, FileService.deleteFile, FileService.systemDelete, FileService.systemUndelete, FileService.updateFile, FreezeService.freeze, NetworkService.uncheckedSubmit, ScheduleService.createSchedule, ScheduleService.deleteSchedule, ScheduleService.signSchedule, SmartContractService.callEthereum, SmartContractService.contractCallMethod, SmartContractService.createContract, SmartContractService.deleteContract, SmartContractService.systemDelete, SmartContractService.systemUndelete, SmartContractService.updateContract, TokenService.airdropTokens, TokenService.associateTokens, TokenService.burnToken, TokenService.cancelAirdrop, TokenService.claimAirdrop, TokenService.createToken, TokenService.deleteToken, TokenService.dissociateTokens, TokenService.freezeTokenAccount, TokenService.grantKycToTokenAccount, TokenService.mintToken, TokenService.pauseToken, TokenService.rejectToken, TokenService.revokeKycFromTokenAccount, TokenService.unfreezeTokenAccount, TokenService.unpauseToken, TokenService.updateNfts, TokenService.updateToken, TokenService.updateTokenFeeSchedule, TokenService.wipeTokenAccount, UtilService.atomicBatch, UtilService.prng
Used as field type in:
,* Replaced with `signedTransactionBytes`.<br/> The body of the transaction.
* Replaced with `signedTransactionBytes`.<br/> The signatures on the body.
* Replaced with `signedTransactionBytes`.<br/> The signatures on the body with a newer format.
* Replaced with `signedTransactionBytes`.<br/> TransactionBody serialized into bytes.
* A valid, serialized, `SignedTransaction` message. <p> This field MUST be present. This field MUST NOT exceed the current network transaction size limit (currently 6144 bytes).
* A transaction body. Every transaction is structured as a signed byte array. That byte array is a serialized `TransactionBody`. The transaction body contains the full content of the transaction, while the `SignedTransaction` includes a signature map for signatures authenticating that byte array, and that is serialized and transmitted wrapped in a `Transaction` message.<br/> The bulk of this message is a `oneof` block which offers the option for any one of the transaction messages for the network. This message also includes several additional fields to specify various parameters required to process a transaction.
Used in:
,* A transaction identifier.<br/> Each transaction is uniquely identified by its transaction identifier. <p> Each transaction identifier MUST be unique.<br/> Multiple transactions MAY be submitted with the same transaction identifier, but all except the first SHALL be rejected as duplicate transactions.<br/> This identifier MUST specify a `payer` account to be charged all fees associated with the transaction.<br/> This identifier MUST specify a "valid start time".<br/> The "valid start time" MUST be strictly _earlier_ than the current network consensus time.<br/> The "valid start time" MUST NOT be more than the current network configuration value for `transaction.maxValidDuration` seconds before the current network consensus time.<br/> This identifier MUST NOT set the `scheduled` flag.<br/> This identifier MUST NOT set a nonce value.
* A node account identifier. <p> This MUST identify the account of the consensus node to which this transaction is submitted.
* A maximum transaction fee, in tinybar. <p> The network SHALL NOT charge a transaction fee that exceeds this amount.<br/> The network MAY charge up to this amount, and reject the transaction, if the amount offered is insufficient to cover the required fees.<br/> The network MAY charge a minimum fee equal to 80% of the amount offered if the amount offered is much larger than the required fees.
* A maximum duration in which to execute this transaction. <p> This transaction SHALL be rejected as expired if the valid start time, extended by this duration, is less than the current network consensus time when the transaction is submitted.<br/> This transaction SHALL be rejected with an invalid duration if this value is greater than the current network configuration value for `transaction.maxValidDuration`.
* Records are always generated.<br/> Obsolete option to not generate a record. <p> This flag SHALL be ignored. Every transaction SHALL generate a record, or block stream equivalent.
* A short description for this transaction. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* The <b>public key</b> of the trusted batch assembler.
The fields here are ordered in strictly ascending field ordinal order due to limitations in PBJ.
* Call a function defined on a smart contract.
* Create a smart contract.
* Update a smart contract.
* An obsolete, and unsupported, operation to add a "live hash" to an account.
* Create a new Hedera account.
* Delete an Hedera account.<br/> This will mark the account as deleted, and transfer all remaining HBAR to a receiver account.
* An obsolete, and unsupported, operation to remove a "live hash" from an account.
* Transfer HBAR between accounts.
* Modify an Hedera account.
* Append data to the end of a file.
* Create a new file.
* Delete a file.<br/> This will remove the content of the file, and mark the file as deleted.
* Modify a file.<br/> This may modify any metadata, and/or _replace_ the content.
* Delete a file as an Hedera administrative function.<br/> This is a privileged operation.
* Restore a file deleted via `systemDelete`.<br/> This is a privileged operation.
* Delete a smart contract and transfer remaining balance to a specified account.
* Freeze the network.<br/> This is actually several possible operations, and the caller should examine the "freeze service" for more detail.<br/> This is a privileged operation.
* Create a topic.
* Update a topic.
* Delete a topic.
* Submit a message to a topic.<br/> A message may be "chunked", and submitted in parts, if the total message size exceeds the limit for a single transaction.
* Unsupported system transaction. <p> This transaction MAY be implemented in testing networks, but SHALL NOT be enabled or supported in production environments.<br/> Clients MUST NOT call this method, and any such transaction SHALL be rejected.<br/> A network MAY choose to charge punitive fees for attempting to execute an `uncheckedSubmit`.
* Create a new Hedera token.
* Freeze an account with respect to a token.<br/> A frozen account cannot transact in that token until unfrozen.
* Unfreeze an account with respect to a token.
* Grant KYC to an account with respect to a token.<br/> KYC is generally a "know your customer" assertion that a responsible entity has sufficient information to positively identify the account holder to relevant authorities.
* Revoke KYC from an account with respect to a token.
* Delete an Hedera token.<br/> The token will be marked deleted.
* Update an Hedera token.<br/> Depending on what fields are to be modified, the signature requirements will vary. See `TokenUpdateTransactionBody` for further detail.
* Mint new tokens.<br/> All minted tokens will be delivered to the treasury account for the token type. The "mint key" for the token must sign this transaction.
* Burn tokens from the treasury account.<br/> The "burn key" for the token must sign this transaction.
* Wipe tokens from an account.<br/> This will remove a specified amount of fungible/common tokens or a specified list of non-fungible/unique serial numbered tokens of a given token type from an Hedera account. The removed tokens are _burned_ as if by a `tokenBurn` transaction.<br/> The "wipe key" for the token must sign this transaction.
* Associate tokens to an account.
* Dissociate tokens from an account.
* Create a schedule.<br/> A schedule is a request to execute a specific transaction, included in the create body, in the future. The scheduled transaction may execute as soon as all signature requirements are met with the schedule create or a subsequent schedule sign transaction. A schedule may, alternatively, execute on expiration if long-term schedules are enabled and the schedule meets signature requirements at that time.
* Delete a schedule.<br/> The schedule will be marked as deleted.
* Sign a schedule.<br/> Add one or more cryptographic keys to the list of keys that have signed a schedule, and which may serve to meet the signature requirements for the scheduled transaction.
* Update the custom fee schedule for a token.<br/> This transaction must be signed by the "fee schedule key" for the token.
* Pause a Token. <p> This transaction MUST be signed by the "pause key" for the token.
* Unpause a Token. <p> This transaction MUST be signed by the "pause key" for the token.
* Add one or more approved allowances for spenders to transfer the paying account's hbar or tokens.
* Delete one or more approvals for spenders to transfer the paying account's hbar or tokens.
* Perform an Ethereum encoded transaction.
* Update the staking information.<br/> This internal transaction is performed at the end of a staking period to complete staking calculations and indicate that new staking period has started.
* Provide a deterministic pseudorandom number based on network state.
* Update one or more non-fungible/unique tokens.<br/> This will update metadata for one or more serial numbers within a collection (token type).
* Create a new node in the network address book.<br/> This is a privileged operation. <p> This transaction SHALL create a new consensus node record and add that record to the network address book.
* Update a node in the network address book.<br/> This is a privileged operation. <p> This transaction SHALL update an existing consensus node record in the network address book.
* Delete a node from the network address book.<br/> This is a privileged operation. <p> This transaction SHALL mark an existing consensus node record as deleted and remove that node from the network address book.
* Reject and return a token to treasury.<br/> This transaction will transfer one or more tokens or token balances held by the requesting account to the treasury for each token type. <p> Each transfer MUST be one of the following: <ul> <li>A single non-fungible/unique token.</li> <li>The full balance held for a fungible/common token type.</li> </ul> When complete, the requesting account SHALL NOT hold the rejected tokens.<br/> Custom fees and royalties defined for the tokens rejected SHALL NOT be charged for this transaction.
* "Airdrop" tokens.<br/> This transaction sends tokens from one or more "sender" accounts to one or more "recipient" accounts. <p> If a recipient account cannot immediately receive the token(s) sent, a "pending" airdrop SHALL be created and MUST be claimed.
* Cancel one or more "pending" airdrops that are not yet claimed.
* Claim one or more "pending" airdrops.
* A transaction body for signature of a state root hash gossiped to other nodes
* A transaction body for voting on hinTS aggregation keys.
* A transaction body for publishing a node's hintTS key.
* A transaction body for broadcasting a node's hintTS partial signature on a message.
* A transaction body for contributed a signature with a node's proof key to a history proof.
* A transaction body for publishing a node's metadata proof key.
* A transaction body for voting on a metadata proof descending from the ledger id.
* A transaction body for broadcasting a node's crs publication
* A transaction body for handling a set of transactions atomically.
* A list of maximum custom fees that the users are willing to pay. <p> This field is OPTIONAL.<br/> If left empty, the users are accepting to pay any custom fee.<br/> If used with a transaction type that does not support custom fee limits, the transaction will fail.
* The fee schedule for a specific transaction or query based on the fee data.
Used in:
* An enumeration for a particular transaction or query.<br/> The functionality type determines the base cost parameters.
* Use `fees` instead of this field.<br/> Resource price coefficients.
* The resource price coefficients for transaction type and any applicable subtypes.<br/> The multiple entries enable support for subtype price definitions.
* Get the tx record of a transaction, given its transaction ID. Once a transaction reaches consensus, then information about whether it succeeded or failed will be available until the end of the receipt period. Before and after the receipt period, and for a transaction that was never submitted, the receipt is unknown.<br/> This query is free (the payment field is left empty).
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* The ID of the transaction for which the record is requested.
* Response when the client sends the node TransactionGetFastRecordQuery. If it created a new entity (account, file, or smart contract instance) then one of the three ID fields will be filled in with the ID of the new entity. Sometimes a single transaction will create more than one new entity, such as when a new contract instance is created, and this also creates the new account that it owned by that instance.
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* The requested transaction records
* A query to retrieve a transaction receipt. This query retrieves the post-consensus (final) result of a transaction. A transaction receipt may not be available if queried too early (less than 5-10 seconds), or too late (more than 3 minutes). If a receipt is available, it contains basic transaction results. A query to a mirror node (or other archival system) is required to obtain full detail for a transaction, or any result after the basic receipt time period. This query is "free". The payment field in the header MUST be empty.<br/> If a receipt is not available, the response SHALL be `UNKNOWN`.<br/> A transaction receipt SHALL be available after the network reaches consensus for a transaction.<br/> A transaction receipt SHALL NOT be available after the end of the network configured "receipt period", typically three(3) minutes. <dl> <dt>What is the "first" transaction?</dt> <dd>The "first" transaction SHALL be the the transaction with the earliest consensus time and a status that is neither `INVALID_NODE_ACCOUNT` nor `INVALID_PAYER_SIGNATURE`.<br/> If no transaction is found meeting this status criteria, the "first" transaction SHALL be the transaction with the earliest consensus time.</dd> <dt>What is a "child" transaction?</dt> <dd>A "child" transaction is any transaction created in the process of completing another transaction. These are most common with a smart contract call, where a call to a contract may initiate one or more additional transactions to complete a complex process.</dd> </dl>
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A transaction identifier. <p> This MUST contain the full identifier, as submitted, for the transaction to query.
* A flag to request duplicates. <p> If set, every transaction receipt within the receipt period that matches the requested transaction identifier SHALL be returned.<br/> If not set, duplicate transactions SHALL NOT be returned.<br/> If not set, only the receipt for the first matching transaction to reach consensus SHALL be returned.
* A flag to request "child" receipts. <p> If set, the response SHALL include receipts for each child transaction executed as part of the requested parent transaction.<br/> If not set, the response SHALL NOT include any receipts for child transactions.
* Response message for a `getTransactionReceipts` query. The `receipt` field SHALL return the receipt for the "first" transaction that matches the transaction identifier requested.<br/> If receipts for duplicate transactions are requested, those duplicate receipts SHALL be present in the `duplicateTransactionReceipts` list.<br/> If receipts for child transactions are requested, those child receipts SHALL be present in the `child_transaction_receipts` list.<br/> A state proof SHALL NOT be provided for this response; transaction receipts are not retained in network state. <dl> <dt>What is the "first" transaction?</dt> <dd>The "first" transaction receipt SHALL be the receipt for the first transaction with status that is neither `INVALID_NODE_ACCOUNT` nor `INVALID_PAYER_SIGNATURE`.<br/> If no transaction is found meeting the status criteria, the "first" transaction SHALL be the first transaction by consensus time.</dd> <dt>What is a "child" transaction?</dt> <dd>A "child" transaction is any transaction created in the process of completing another transaction. These are most common with a smart contract call, where a call to a contract may initiate one or more additional transactions to complete a complex process.</dd> </dl>
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* A transaction receipt. <p> This SHALL be the receipt for the "first" transaction that matches the transaction identifier requested.<br/> If the identified transaction has not reached consensus, this receipt SHALL have a `status` of `UNKNOWN`.<br/> If the identified transaction reached consensus prior to the current configured receipt period (typically the last 180 seconds), this receipt SHALL have a `status` of `UNKNOWN`.
* A list of duplicate transaction receipts. <p> If the request set the `includeDuplicates` flat, this list SHALL include the receipts for each duplicate transaction associated to the requested transaction identifier. If the request did not set the `includeDuplicates` flag, this list SHALL be empty.<br/> If the `receipt` status is `UNKNOWN`, this list SHALL be empty.<br/> This list SHALL be in order by consensus timestamp.
* A list of receipts for all child transactions spawned by the requested transaction. <p> If the request set the `include_child_receipts` flag, this list SHALL include receipts for each child transaction executed as part of the requested parent transaction.<br/> If the request did not set the `include_child_receipts` flag, this list SHALL be empty. <br/> If the parent transaction did not initiate any child transactions this list SHALL be empty.<br/> If the `receipt` status is `UNKNOWN`, this list SHALL be empty.<br/> This list SHALL be in order by consensus timestamp.
* Request for a `TransactionGetRecord` (a.k.a. `getTxRecordByTxID`) query. <p> A transaction record SHALL be available after the network reaches consensus and completes execution for a transaction.<br/> A transaction record SHALL NOT be available after the end of the network configured "record cache duration". <dl> <dt>What is the "first" transaction?</dt> <dd>The "first" transaction SHALL be the the transaction with the earliest consensus time and a status that is neither `INVALID_NODE_ACCOUNT` nor `INVALID_PAYER_SIGNATURE`.<br/> If no transaction is found meeting this status criteria, the "first" transaction SHALL be the transaction with the earliest consensus time.</dd> <dt>What is a "child" transaction?</dt> <dd>A "child" transaction is any transaction created in the process of completing another transaction. These are most common with a smart contract call, where a call to a contract may initiate one or more additional transactions to complete a complex process.</dd> </dl>
Used in:
* Standard information sent with every query operation.<br/> This includes the signed payment and what kind of response is requested (cost, state proof, both, or neither).
* A transaction identifier. <p> This MUST contain the full identifier, as submitted, for the transaction to query.
* A flag to request duplicates. <p> If set, every transaction record within the record cache duration that matches the requested transaction identifier SHALL be returned.<br/> If not set, duplicate transactions SHALL NOT be returned.<br/> If not set, only the record for the first matching transaction to reach consensus SHALL be returned.
* A flag to request "child" records. <p> If set, the response SHALL include records for each child transaction executed as part of the requested parent transaction.<br/> If not set, the response SHALL NOT include any records for child transactions.
* Response message for a `getTxRecordByTxID` query. The `transactionRecord` field SHALL return the record for the "first" transaction that matches the transaction identifier requested.<br/> If records for duplicate transactions are requested, those duplicate records SHALL be present in the `duplicateTransactionReceipts` list.<br/> If records for child transactions are requested, those child records SHALL be present in the `child_transaction_records` list.<br/> A state proof MAY be provided for this response; provided the record is still available from the consensus nodes. <dl> <dt>What is the "first" transaction?</dt> <dd>The "first" transaction receipt SHALL be the receipt for the first transaction with status that is neither `INVALID_NODE_ACCOUNT` nor `INVALID_PAYER_SIGNATURE`.<br/> If no transaction is found meeting the status criteria, the "first" transaction SHALL be the first transaction by consensus time.</dd> <dt>What is a "child" transaction?</dt> <dd>A "child" transaction is any transaction created in the process of completing another transaction. These are most common with a smart contract call, where a call to a contract may initiate one or more additional transactions to complete a complex process.</dd> </dl>
Used in:
* The standard response information for queries.<br/> This includes the values requested in the `QueryHeader` (cost, state proof, both, or neither).
* A transaction record. <p> This SHALL be the record for the "first" transaction that matches the transaction identifier requested.<br/> If the identified transaction has not reached consensus, this record SHALL have a `status` of `UNKNOWN`.<br/> If the identified transaction reached consensus prior to the current configured record cache duration, this record SHALL have a `status` of `UNKNOWN`.
* A list of duplicate transaction records. <p> If the request set the `includeDuplicates` flat, this list SHALL include the records for each duplicate transaction associated to the requested transaction identifier. If the request did not set the `includeDuplicates` flag, this list SHALL be empty.<br/> If the `transactionRecord` status is `UNKNOWN`, this list SHALL be empty.<br/> This list SHALL be in order by consensus timestamp.
* A list of records for all child transactions spawned by the requested transaction. <p> If the request set the `include_child_records` flag, this list SHALL include records for each child transaction executed as part of the requested parent transaction.<br/> If the request did not set the `include_child_records` flag, this list SHALL be empty. <br/> If the parent transaction did not initiate any child transactions this list SHALL be empty.<br/> If the `transactionRecord` status is `UNKNOWN`, this list SHALL be empty.<br/> This list SHALL be in order by consensus timestamp.
* A transaction identifier.<br/> This is used for retrieving receipts and records for a transaction and internally by the network for detecting when duplicate transactions are submitted. A transaction may be processed more reliably by submitting it to several nodes, each with a different node account, but all with the same TransactionID. Then, the transaction will take effect when the first of all those nodes submits the transaction and it reaches consensus. The other transactions SHALL NOT be executed (and SHALL result in a `DUPLICATE_TRANSACTION` response).<br/> Multiple submission increase reliability on the assumption that an error in, for example, network connectivity will not affect all nodes equally. Latency might be slightly lower, if one node is handling intake significantly slower than others, for example. The base transaction fee is required for each submission, however, so the total fees charged are significantly higher when using this approach. ### Requirements Each transaction identifier MUST be unique.<br/> Multiple transactions MAY be submitted with the same transaction identifier, but all except the first SHALL be rejected as duplicate transactions.<br/> An identifier MUST specify a `payer` account to be charged all fees associated with the transaction.<br/> The `payer` account MUST exist and MUST have sufficient HBAR to pay all transaction fees.<br/> An identifier MUST specify a "valid start time".<br/> The "valid start time" MUST be strictly _earlier_ than the current network consensus time when submitted.<br/> The "valid start time" MUST NOT be more than `transaction.maxValidDuration` seconds before the current network consensus time when submitted.<br/> A client-submitted transaction MUST NOT set the `scheduled` flag. ### Additional Notes Additional items applicable to Scheduled Transactions: - The ID of a Scheduled Transaction, once executed, SHALL inherit both `transactionValidStart` and `accountID` from the `ScheduleCreate` transaction that created the schedule. - The `scheduled` property SHALL be set for Scheduled Transactions.
Used in:
, , , , , , , , ,* A timestamp for the transaction start time.<br/> This is the earliest expected start time for this transaction. <p> This value MUST be strictly less than `consensusTimestamp` when the transaction is submitted.
* An Account identifier. <p> The identified account SHALL pay transaction fees for this transaction.
* A scheduled transaction flag.<br/> If set, this transaction represents the execution of a Schedule after all necessary signatures are gathered. <p> This flag MUST NOT be set in a user-submitted transaction.
* An identifier for an internal transaction.<br/> An internal transaction is one that was spawned as part of handling a user transaction. These internal transactions share the transactionValidStart and accountID of the user transaction, so a nonce is necessary to give them a unique TransactionID. <p> An example is when a "parent" ContractCreate or ContractCall transaction calls one or more HTS precompiled contracts; each of the "child" transactions spawned for a precompile has a transaction id with a different nonce. <p> This value MUST be unset for user-submitted transactions.
* A simple protobuf wrapper to store a list of transactions. This is used by `Transaction.[from|to]Bytes()` in the SDKs. The reason the SDK needs a list of transactions is because it holds onto a transaction per node. So if a transaction is to be submitted to nodes 3 and 4 the SDK Transaction type would contain a list of 2 protobuf transactions, one for node 3 and one for node 4.
* The summary of a transaction's result so far.<br/> If the transaction has not reached consensus, this result will be necessarily incomplete. Most items in this object are only set for specific transactions. Those values SHALL be unset for all other transactions.
Used in:
,* The consensus status of the transaction. <p> This SHALL be `UNKNOWN` if consensus has not been reached.<br/> This SHALL be `UNKNOWN` if the associated transaction did not have a valid payer signature.
* In the receipt of a `CryptoCreate`, the id of the newly created account.
* In the receipt of a `FileCreate`, the id of the newly created file.
* In the receipt of a `ContractCreate`, the id of the newly created contract.
* The exchange rates in effect when the transaction reached consensus.
* In the receipt of a `ConsensusCreateTopic`, the id of the newly created topic.
* In the receipt of a `ConsensusSubmitMessage`, the new sequence number for the topic that received the message.
* In the receipt of a `ConsensusSubmitMessage`, the new running hash of the topic that received the message.<br/> <p> The inputs to the topic running hash have changed over time.<br/> This 48-byte field is the output of a SHA-384 digest with input data determined by the value of the `topicRunningHashVersion` field.<br/> All new transactions SHALL use `topicRunningHashVersion` `3`.<br/> The bytes of each uint64 or uint32 encoded for the hash input MUST be in Big-Endian format. <p> <hr style="margin: 0.2em 5em 0.2em 5em; height: 0.5em; border-style: solid none solid none; border-width: 2px;"/> <p> The most recent version is denoted by `topicRunningHashVersion = 3`. <p> This version SHALL include, in order <ol> <li>The previous running hash of the topic (48 bytes)</li> <li>The `topic_running_hash_version` field (8 bytes)</li> <li>The payer account's shard (8 bytes)</li> <li>The payer account's realm (8 bytes)</li> <li>The payer account's number (8 bytes)</li> <li>The topic's shard (8 bytes)</li> <li>The topic's realm (8 bytes)</li> <li>The topic's number (8 bytes)</li> <li>The number of seconds since the epoch when the `ConsensusSubmitMessage` reached consensus (8 bytes)</li> <li>The number of nanoseconds within the second when the `ConsensusSubmitMessage` reached consensus (4 bytes)</li> <li>The `topic_sequence_number` field (8 bytes)</li> <li>The output of a SHA-384 digest of the message bytes from the `ConsensusSubmitMessage` (48 bytes)</li> </ol> <hr style="margin: 0.2em 5em 0.2em 5em; height: 0.5em; border-style: solid none solid none; border-width: 2px;"/> <p> The next older version is denoted by `topicRunningHashVersion = 2`. <p> This version SHALL include, in order <ol> <li>The previous running hash of the topic (48 bytes)</li> <li>The `topic_running_hash_version` field (8 bytes)</li> <li>The topic's shard (8 bytes)</li> <li>The topic's realm (8 bytes)</li> <li>The topic's number (8 bytes)</li> <li>The number of seconds since the epoch when the `ConsensusSubmitMessage` reached consensus (8 bytes)</li> <li>The number of nanoseconds within the second when the `ConsensusSubmitMessage` reached consensus (4 bytes)</li> <li>The `topic_sequence_number` field (8 bytes)</li> <li>The output of a SHA-384 digest of the message bytes from the `ConsensusSubmitMessage` (48 bytes)</li> </ol> <hr style="margin: 0.2em 5em 0.2em 5em; height: 0.5em; border-style: solid none solid none; border-width: 2px;"/> <p> The original version, used at genesis, is denoted by `topicRunningHashVersion = 1` or `topicRunningHashVersion = 0`. <p> This version SHALL include, in order <ol> <li>The previous running hash of the topic (48 bytes)</li> <li>The topic's shard (8 bytes)</li> <li>The topic's realm (8 bytes)</li> <li>The topic's number (8 bytes)</li> <li>The number of seconds since the epoch when the `ConsensusSubmitMessage` reached consensus (8 bytes)</li> <li>The number of nanoseconds within the second when the `ConsensusSubmitMessage` reached consensus (4 bytes)</li> <li>The `topic_sequence_number` field (8 bytes)</li> <li>The message bytes from the `ConsensusSubmitMessage` (variable)</li> </ol>
* In the receipt of a `ConsensusSubmitMessage`, the version of the SHA-384 digest inputs used to update the running hash.
* In the receipt of a `CreateToken`, the id of the newly created token
* In the receipt of `TokenMint`, `TokenWipe`, or `TokenBurn`.<br/> For non-unique tokens, the current total supply of that token.<br/> For unique tokens,the total number of NFTs issued for that token.
* In the receipt of a `ScheduleCreate`, the id of the newly created Scheduled Entity
* In the receipt of a `ScheduleCreate` or `ScheduleSign` that enables the scheduled transaction to execute immediately, the `TransactionID` that should be used to query for the receipt or record of the scheduled transaction that was executed.
* In the receipt of a `TokenMint` for non-fungible/unique tokens, the serial numbers of the newly created tokens.
* An affected node identifier.<br/> In the receipt of a NodeCreate, the id of the newly created node. <p> This value SHALL be set following a `createNode` transaction.<br/> This value SHALL NOT be set following any other transaction.
* A cache of transaction receipts.<br/> As transactions are handled and receipts are created, they are stored in state for a configured time limit (perhaps, for example, 3 minutes). During this time window, any client can query the node and get the receipt for the transaction. The `TransactionReceiptEntries` is the object stored in state with this information. This message SHALL contain a list of `TransactionReceiptEntry` objects.
* An entry in the record cache with the receipt for a transaction. This is the entry stored in state that enables returning the receipt information when queried by clients. When a transaction is handled a receipt SHALL be created.<br/> This receipt MUST be stored in state for a configured time limit (e.g. 3 minutes).<br/> While a receipt is stored, a client MAY query the node and retrieve the receipt.
Used in:
* A node identifier.<br/> This identifies the node that submitted the transaction to consensus. The value is the identifier as known to the current address book. <p> Valid node identifiers SHALL be between 0 and <tt>2<sup>63-1</sup></tt>, inclusive.
* A transaction identifier.<br/> This identifies the submitted transaction for this receipt.
* A status result.<br/> This is the final status after handling the transaction.
* Response when the client sends the node TransactionGetRecordResponse
Used in:
, , , ,* A transaction receipt. <p> This SHALL report consensus status (reach consensus, failed, unknown) and the ID of any new entity (i.e. account, file, contract, schedule, etc...) created.
* A transaction hash value. <p> This SHALL be the hash of the Transaction that executed and SHALL NOT be the hash of any Transaction that failed for having a duplicate TransactionID.
* A consensus timestamp. <p> This SHALL be null if the transaction did not reach consensus yet.
* A transaction identifier to the transaction associated to this record.
* A transaction memo.<br/> This is the memo that was submitted as part of the transaction. <p> This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.
* A transaction fee charged. <p> This SHALL be the actual transaction fee charged.<br/> This MAY NOT match the original `transactionFee` value from the `TransactionBody`.
* A contract call result.<br/> A record of the value returned by the smart contract function (if it completed and didn't fail) from a `ContractCallTransaction`.
* A contract creation result.<br/> A record of the value returned by the smart contract constructor (if it completed and didn't fail) from a `ContractCreateTransaction`.
* A transfer list for this transaction.<br/> This is a list of all HBAR transfers completed for this transaction. <p> This MAY include fees, transfers performed by the transaction, transfers initiated by a smart contract it calls, or the creation of threshold records that it triggers.
* A token transfer list for this transaction.<br/> This is a list of all non-HBAR token transfers completed for this transaction.<br/>
* A schedule reference.<br/> The reference to a schedule ID for the schedule that initiated this transaction, if this this transaction record represents a scheduled transaction.
* A list of all custom fees that were assessed during a CryptoTransfer. <p> These SHALL be paid if the transaction status resolved to SUCCESS.
* A list of all token associations implicitly or automatically created while handling this transaction.
* A consensus timestamp for a child record. <p> This SHALL be the consensus timestamp of a user transaction that spawned an internal child transaction.
* A new account alias.<br/> <p> This is the new alias assigned to an account created as part of a CryptoCreate transaction triggered by a user transaction with a (previously unused) alias.
* A keccak256 hash of the ethereumData. <p> This field SHALL only be populated for EthereumTransaction.
* A list of staking rewards paid. <p> This SHALL be a list accounts with the corresponding staking rewards paid as a result of this transaction.
* A pseudorandom 384-bit sequence. <p> This SHALL be returned in the record of a UtilPrng transaction with no output range,
* A pseudorandom 32-bit integer.<br/> <p> This SHALL be returned in the record of a PRNG transaction with an output range specified.
* A new default EVM address for an account created by this transaction. <p> This field SHALL be populated only when the EVM address is not specified in the related transaction body.
* A list of pending token airdrops. <p> Each pending airdrop SHALL represent a single requested transfer from a sending account to a recipient account.<br/> These pending transfers are issued unilaterally by the sending account, and MUST be claimed by the recipient account before the transfer SHALL complete.<br/> A sender MAY cancel a pending airdrop before it is claimed.<br/> An airdrop transaction SHALL emit a pending airdrop when the recipient has no available automatic association slots available or when the recipient has set `receiver_sig_required`.
* As transactions are handled and records and receipts are created, they are stored in state for a configured time period (for example, 3 minutes). During this time, any client can query the node and get the record or receipt for the transaction. The `TransactionRecordEntry` is the object stored in state with this information.
* A node identifier.<br/> This identifier is the node, as known to the address book, that submitted the transaction for consensus. <p> This SHALL be a whole number.
* An Account identifier for the payer for the transaction. <p> This MAY be the same as the account ID within the Transaction ID of the record, or it MAY be the account ID of the node that submitted the transaction to consensus if the account ID in the Transaction ID was not able to pay.
* A transaction record for the transaction.
* A message sent by a node in response to a transaction submission.<br/> This message only acknowledges that the individual node has checked the transaction, completed pre-check, and checked the fee offered. If the transaction fee is not sufficient, the `nodeTransactionPrecheckCode` value SHALL be `INSUFFICIENT_TX_FEE` and the `cost` field SHALL be the actual transaction fee, in tinybar, required.<br/> If the client requires acknowledgement of the network consensus result for a transaction, the client SHOULD request a transaction receipt or detailed transaction record. A client MAY also obtain network consensus results from a mirror node.
Used as response type in: AddressBookService.createNode, AddressBookService.deleteNode, AddressBookService.updateNode, ConsensusService.createTopic, ConsensusService.deleteTopic, ConsensusService.submitMessage, ConsensusService.updateTopic, CryptoService.addLiveHash, CryptoService.approveAllowances, CryptoService.createAccount, CryptoService.cryptoDelete, CryptoService.cryptoTransfer, CryptoService.deleteAllowances, CryptoService.deleteLiveHash, CryptoService.updateAccount, FileService.appendContent, FileService.createFile, FileService.deleteFile, FileService.systemDelete, FileService.systemUndelete, FileService.updateFile, FreezeService.freeze, NetworkService.uncheckedSubmit, ScheduleService.createSchedule, ScheduleService.deleteSchedule, ScheduleService.signSchedule, SmartContractService.callEthereum, SmartContractService.contractCallMethod, SmartContractService.createContract, SmartContractService.deleteContract, SmartContractService.systemDelete, SmartContractService.systemUndelete, SmartContractService.updateContract, TokenService.airdropTokens, TokenService.associateTokens, TokenService.burnToken, TokenService.cancelAirdrop, TokenService.claimAirdrop, TokenService.createToken, TokenService.deleteToken, TokenService.dissociateTokens, TokenService.freezeTokenAccount, TokenService.grantKycToTokenAccount, TokenService.mintToken, TokenService.pauseToken, TokenService.rejectToken, TokenService.revokeKycFromTokenAccount, TokenService.unfreezeTokenAccount, TokenService.unpauseToken, TokenService.updateNfts, TokenService.updateToken, TokenService.updateTokenFeeSchedule, TokenService.wipeTokenAccount, UtilService.atomicBatch, UtilService.prng
* A pre-consensus response code. <p> This response SHALL represent the response of the individual node, and SHALL NOT represent the consensus of the network.
* An approximate transaction fee. <p> This value SHALL be `0` unless the `nodeTransactionPrecheckCode` is `INSUFFICIENT_TX_FEE`.<br/> This value SHOULD be an amount, in tinybar, that _would have_ succeeded at the time the transaction was submitted.<br/> Note that this amount is not guaranteed to succeed in a future transaction due to uncontrolled variables, such as network congestion, but should be considered a close approximation.
* A list of accounts and amounts to transfer. Each `AccountAmount` SHALL specify the account and the amount to send(negative) or receive(positive).<br/> Each `TransferList` SHALL be contained in another message that contains other details required to complete a transfer. This is typically a `CryptoTransferTransactionBody` or `TransactionRecord`.<br/> The `TransferList` SHALL only be used for HBAR transfers. Other token types MUST use the `TokenTransferList` message.
Used in:
,* A list of AccountAmount pairs.<br/> Each entry in this list is an account and an amount to transfer into it (positive) or out of it (negative)
* Submit an arbitrary (serialized) Transaction to the network without pre-check. This transaction SHALL require `superuser` privileges (e.g. the `treasury` or `systemAdmin` accounts).
Used in:
* The serialized bytes of a `Transaction`. <p> This transaction SHALL be deserialized and submitted for consensus with no further validation.<br/> Specifically, the transaction may violate basic limits and constraints such as size limits, minimum or maximum values, valid start time, fee calculations, etc...
* Request a deterministic pseudo-random number. The value returned SHALL be deterministic, but not easily predicted. The value returned SHALL NOT be suitable for cryptographic use. ### Block Stream Effects The result of this transaction is reported in a `UtilPrngOutput` message.
Used in:
,* A range for the requested value. <p> If this is greater than `0`, the service SHALL return a 32-bit pseudo-random number between 0 and the value provided in the transaction record.<br/> If this is unset, zero, or negative; the service SHALL return a 384-bit unsigned pseudo-random number in the record.