An account, and the amount that it sends or receives during a cryptocurrency or token transfer.
Field | Type | Label | Description |
accountID | AccountID | The Account ID that sends/receives cryptocurrency or tokens |
|
amount | sint64 | The amount of tinybars (for Crypto transfers) or in the lowest denomination (for Token transfers) that the account sends(negative) or receives(positive) |
|
is_approval | bool | If true then the transfer is expected to be an approved allowance and the accountID is expected to be the owner. The default is false (omitted). |
The ID for an a cryptocurrency account
Field | Type | Label | Description |
shardNum | int64 | The shard number (nonnegative) |
|
realmNum | int64 | The realm number (nonnegative) |
|
accountNum | int64 | A non-negative account number unique within its realm |
|
alias | bytes | The public key bytes to be used as the account's alias. The public key bytes are the result of serializing a protobuf Key message for any primitive key type. Currently only primitive key bytes are supported as an alias (ThresholdKey, KeyList, ContractID, and delegatable_contract_id are not supported) At most one account can ever have a given alias and it is used for account creation if it was automatically created using a crypto transfer. It will be null if an account is created normally. It is immutable once it is set for an account. If a transaction auto-creates the account, any further transfers to that alias will simply be deposited in that account, without creating anything, and with no creation fee being charged. |
|
evm_address | bytes | The ethereum account 20-byte EVM address to be used initially in place of the public key bytes. This EVM address may be either the encoded form of the shard.realm.num or the keccak-256 hash of a ECDSA_SECP256K1 primitive key. If a transaction lazily-creates this account, a subsequent transaction will be required containing the public key bytes that map to the EVM address bytes. Lazy account creates will only support the keccak-256 hash of a ECDSA_SECP256K1 primitive key form. |
The ID for a smart contract instance
Field | Type | Label | Description |
shardNum | int64 | The shard number (nonnegative) |
|
realmNum | int64 | The realm number (nonnegative) |
|
contractNum | int64 | A nonnegative number unique within a given shard and realm |
|
evm_address | bytes | The 20-byte EVM address of the contract to call. Every contract has an EVM address determined by its <tt>shard.realm.num</tt> id. This address is 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> Contracts created via CREATE2 have an <b>additional, primary address</b> that is derived from the <a href="https://eips.ethereum.org/EIPS/eip-1014">EIP-1014</a> specification, and does not have a simple relation to a <tt>shard.realm.num</tt> id. (Please do note that CREATE2 contracts can also be referenced by the three-part EVM address described above.) |
This contains two Fee Schedules with expiry timestamp.
Field | Type | Label | Description |
currentFeeSchedule | FeeSchedule | Contains current Fee Schedule |
|
nextFeeSchedule | FeeSchedule | Contains next Fee Schedule |
A set of prices the nodes use in determining transaction and query fees, and constants involved
in fee calculations. Nodes multiply the amount of resources consumed by a transaction or query
by the corresponding price to calculate the appropriate fee. Units are one-thousandth of a
tinyCent.
Field | Type | Label | Description |
min | int64 | A minimum, the calculated fee must be greater than this value |
|
max | int64 | A maximum, the calculated fee must be less than this value |
|
constant | int64 | A constant contribution to the fee |
|
bpt | int64 | The price of bandwidth consumed by a transaction, measured in bytes |
|
vpt | int64 | The price per signature verification for a transaction |
|
rbh | int64 | The price of RAM consumed by a transaction, measured in byte-hours |
|
sbh | int64 | The price of storage consumed by a transaction, measured in byte-hours |
|
gas | int64 | The price of computation for a smart contract transaction, measured in gas |
|
tv | int64 | The price per hbar transferred for a transfer |
|
bpr | int64 | The price of bandwidth for data retrieved from memory for a response, measured in bytes |
|
sbpr | int64 | The price of bandwidth for data retrieved from disk for a response, measured in bytes |
The total fee charged for a transaction. It is composed of three components – a node fee that
compensates the specific node that submitted the transaction, a network fee that compensates the
network for assigning the transaction a consensus timestamp, and a service fee that compensates
the network for the ongoing maintenance of the consequences of the transaction.
Field | Type | Label | Description |
nodedata | FeeComponents | Fee paid to the submitting node |
|
networkdata | FeeComponents | Fee paid to the network for processing a transaction into consensus |
|
servicedata | FeeComponents | Fee paid to the network for providing the service associated with the transaction; for instance, storing a file |
|
subType | SubType | SubType distinguishing between different types of FeeData, correlating to the same HederaFunctionality |
A list of resource prices fee for different transactions and queries and the time period at which
this fee schedule will expire. Nodes use the prices to determine the fees for all transactions
based on how much of those resources each transaction uses.
Field | Type | Label | Description |
transactionFeeSchedule | TransactionFeeSchedule | repeated | List of price coefficients for network resources |
expiryTime | TimestampSeconds | FeeSchedule expiry time |
The ID for a file
Field | Type | Label | Description |
shardNum | int64 | The shard number (nonnegative) |
|
realmNum | int64 | The realm number (nonnegative) |
|
fileNum | int64 | A nonnegative File number unique within its realm |
A rational number, used to set the amount of a value transfer to collect as a custom fee
Field | Type | Label | Description |
numerator | int64 | The rational's numerator |
|
denominator | int64 | The rational's denominator; a zero value will result in FRACTION_DIVIDES_BY_ZERO |
A Key can be a public key from either the Ed25519 or ECDSA(secp256k1) signature schemes, where
in the ECDSA(secp256k1) case we require the 33-byte compressed form of the public key. We call
these public keys primitive keys.
If an account has primitive key associated to it, then the corresponding private key must sign
any transaction to transfer cryptocurrency out of it.
A Key can also be the ID of a smart contract instance, which is then authorized to perform any
precompiled contract action that requires this key to sign.
Note that when a Key is a smart contract ID, it doesn't mean the contract with that ID
will actually create a cryptographic signature. It only means that when the contract calls a
precompiled contract, the resulting "child transaction" will be authorized to perform any action
controlled by the Key.
A Key can be a "threshold key", which means a list of M keys, any N of which must sign in order
for the threshold signature to be considered valid. The keys within a threshold signature may
themselves be threshold signatures, to allow complex signature requirements.
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). Their use is
dependent on context. For example, a Hedera file is created with a list of keys, where all of
them must sign a transaction to create or modify the file, but only one of them is needed to sign
a transaction to delete the file. So it's a single list that sometimes acts as a 1-of-M threshold
key, and sometimes acts as an M-of-M threshold key. A key list is always an M-of-M, unless
specified otherwise in documentation. A key list can have nested key lists or threshold keys.
Nested key lists are always M-of-M. A key list can have repeated primitive public keys, but all
repeated keys are only required to sign once.
A Key can contain a ThresholdKey or KeyList, which in turn contain a Key, so this mutual
recursion would allow nesting arbitrarily deep. A ThresholdKey which contains a list of primitive
keys has 3 levels: ThresholdKey -> KeyList -> Key. A KeyList which contains several primitive
keys has 2 levels: KeyList -> Key. A Key with 2 levels of nested ThresholdKeys has 7 levels:
Key -> ThresholdKey -> KeyList -> Key -> ThresholdKey -> KeyList -> Key.
Each Key should not have more than 46 levels, which implies 15 levels of nested ThresholdKeys.
Field | Type | Label | Description |
contractID | ContractID | smart contract instance that is authorized as if it had signed with a key |
|
ed25519 | bytes | Ed25519 public key bytes |
|
RSA_3072 | bytes | (NOT SUPPORTED) RSA-3072 public key bytes |
|
ECDSA_384 | bytes | (NOT SUPPORTED) ECDSA with the p-384 curve public key bytes |
|
thresholdKey | ThresholdKey | a threshold N followed by a list of M keys, any N of which are required to form a valid signature |
|
keyList | KeyList | A list of Keys of the Key type. |
|
ECDSA_secp256k1 | bytes | Compressed ECDSA(secp256k1) public key bytes |
|
delegatable_contract_id | ContractID | A smart contract that, if the recipient of the active message frame, should be treated as having signed. (Note this does not mean the <i>code being executed in the frame</i> will belong to the given contract, since it could be running another contract's code via <tt>delegatecall</tt>. So setting this key is a more permissive version of setting the contractID key, which also requires the code in the active message frame belong to the the contract with the given id.) |
A list of keys that requires all keys (M-of-M) to sign unless otherwise specified in
documentation. A KeyList may contain repeated keys, but all repeated keys are only required to
sign once.
Field | Type | Label | Description |
keys | Key | repeated | list of keys |
A sender account, a receiver account, and the serial number of an NFT of a Token with
NON_FUNGIBLE_UNIQUE type. When minting NFTs the sender will be the default AccountID instance
(0.0.0) and when burning NFTs, the receiver will be the default AccountID instance.
Field | Type | Label | Description |
senderAccountID | AccountID | The accountID of the sender |
|
receiverAccountID | AccountID | The accountID of the receiver |
|
serialNumber | int64 | The serial number of the NFT |
|
is_approval | bool | If true then the transfer is expected to be an approved allowance and the senderAccountID is expected to be the owner. The default is false (omitted). |
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.)
If the serviceEndpoint list is not set, or empty, then the endpoint given by the
(deprecated) ipAddress and portno fields should be used.
All fields are populated in the 0.0.102 address book file while only fields that start with # are
populated in the 0.0.101 address book file.
Field | Type | Label | Description |
ipAddress | bytes | Deprecated. The IP address of the Node with separator & octets encoded in UTF-8. Usage is deprecated, ServiceEndpoint is preferred to retrieve a node's list of IP addresses and ports |
|
portno | int32 | Deprecated. The port number of the grpc server for the node. Usage is deprecated, ServiceEndpoint is preferred to retrieve a node's list of IP addresses and ports |
|
memo | bytes | Deprecated. Usage is deprecated, nodeAccountId is preferred to retrieve a node's account ID |
|
RSA_PubKey | string | The node's X509 RSA public key used to sign stream files (e.g., record stream files). Precisely, this field is a string of hexadecimal characters which, translated to binary, are the public key's DER encoding. |
|
nodeId | int64 | # A non-sequential identifier for the node |
|
nodeAccountId | AccountID | # The account to be paid for queries and transactions sent to this node |
|
nodeCertHash | bytes | # Hash of the node's TLS certificate. Precisely, this field is a string of hexadecimal characters which, translated to binary, are the SHA-384 hash of the UTF-8 NFKD encoding of the node's TLS cert in PEM format. Its value can be used to verify the node's certificate it presents during TLS negotiations. |
|
serviceEndpoint | ServiceEndpoint | repeated | # A node's service IP addresses and ports |
description | string | A description of the node, with UTF-8 encoding up to 100 bytes |
|
stake | int64 | Deprecated. [Deprecated] The amount of tinybars staked to the node |
Name | Option |
ipAddress | true |
portno | true |
memo | true |
stake | true |
A list of nodes and their metadata that contains all details of the nodes for the network. Used
to parse the contents of system files 0.0.101 and 0.0.102.
Field | Type | Label | Description |
nodeAddress | NodeAddress | repeated | Metadata of all nodes in the network |
The ID for a realm. Within a given shard, every realm has a unique ID. Each account, file, and
contract instance belongs to exactly one realm.
Field | Type | Label | Description |
shardNum | int64 | The shard number (nonnegative) |
|
realmNum | int64 | The realm number (nonnegative) |
Unique identifier for a Schedule
Field | Type | Label | Description |
shardNum | int64 | A nonnegative shard number |
|
realmNum | int64 | A nonnegative realm number |
|
scheduleNum | int64 | A nonnegative schedule number |
Hedera follows semantic versioning (https://semver.org/) for both the HAPI protobufs and the
Services software. This type allows the getVersionInfo query in the
NetworkService to return the deployed versions of both protobufs and software on the
node answering the query.
Field | Type | Label | Description |
major | int32 | Increases with incompatible API changes |
|
minor | int32 | Increases with backwards-compatible new functionality |
|
patch | int32 | Increases with backwards-compatible bug fixes |
|
pre | string | A pre-release version MAY be denoted by appending a hyphen and a series of dot separated identifiers (https://semver.org/#spec-item-9); so given a semver 0.14.0-alpha.1+21AF26D3, this field would contain 'alpha.1' |
|
build | string | Build metadata MAY be denoted by appending a plus sign and a series of dot separated identifiers immediately following the patch or pre-release version (https://semver.org/#spec-item-10); so given a semver 0.14.0-alpha.1+21AF26D3, this field would contain '21AF26D3' |
Contains the IP address and the port representing a service endpoint of a Node in a network. Used
to reach the Hedera API and submit transactions to the network.
Field | Type | Label | Description |
ipAddressV4 | bytes | The 32-bit IPv4 address of the node encoded in left to right order (e.g. 127.0.0.1 has 127 as its first byte) |
|
port | int32 | The port of the node |
UNDOCUMENTED
Field | Type | Label | Description |
nameValue | Setting | repeated | list of name value pairs of the application properties |
UNDOCUMENTED
Field | Type | Label | Description |
name | string | name of the property |
|
value | string | value of the property |
|
data | bytes | any data associated with property |
Each shard has a nonnegative shard number. Each realm within a given shard has a nonnegative
realm number (that number might be reused in other shards). And each account, file, and smart
contract instance within a given realm has a nonnegative number (which might be reused in other
realms). Every account, file, and smart contract instance is within exactly one realm. So a
FileID is a triplet of numbers, like 0.1.2 for entity number 2 within realm 1 within shard 0.
Each realm maintains a single counter for assigning numbers, so if there is a file with ID
0.1.2, then there won't be an account or smart contract instance with ID 0.1.2.
Everything is partitioned into realms so that each Solidity smart contract can access everything
in just a single realm, locking all those entities while it's running, but other smart contracts
could potentially run in other realms in parallel. So realms allow Solidity to be parallelized
somewhat, even though the language itself assumes everything is serial.
Field | Type | Label | Description |
shardNum | int64 | the shard number (nonnegative) |
This message is DEPRECATED and UNUSABLE with network nodes. It is retained
here only for historical reasons.
Please use the SignaturePair and SignatureMap messages.
Field | Type | Label | Description |
contract | bytes | smart contract virtual signature (always length zero) |
|
ed25519 | bytes | ed25519 signature bytes |
|
RSA_3072 | bytes | RSA-3072 signature bytes |
|
ECDSA_384 | bytes | ECDSA p-384 signature bytes |
|
thresholdSignature | ThresholdSignature | 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. |
|
signatureList | SignatureList | A list of M signatures, each corresponding to a Key in a KeyList of the same length. |
This message is DEPRECATED and UNUSABLE with network nodes. It is retained
here only for historical reasons.
Please use the SignaturePair and SignatureMap messages.
Field | Type | Label | Description |
sigs | Signature | repeated | each signature corresponds to a Key in the KeyList |
A set of signatures corresponding to every unique public key used to sign a given transaction. If
one public key matches more than one prefixes on the signature map, the transaction containing
the map will fail immediately with the response code KEY_PREFIX_MISMATCH.
Field | Type | Label | Description |
sigPair | SignaturePair | repeated | Each signature pair corresponds to a unique Key required to sign the transaction. |
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 that only one primitive key is required
to sign the linked transaction; it will surely resolve to INVALID_SIGNATURE otherwise.
IMPORTANT: In the special case that a signature is being provided for a key used to
authorize a precompiled contract, the pubKeyPrefix must contain the entire public
key! That is, if the key is a Ed25519 key, the pubKeyPrefix should be 32 bytes
long. If the key is a ECDSA(secp256k1) key, the pubKeyPrefix should be 33 bytes long,
since we require the compressed form of the public key.
Only Ed25519 and ECDSA(secp256k1) keys and hence signatures are currently supported.
Field | Type | Label | Description |
pubKeyPrefix | bytes | First few bytes of the public key |
|
contract | bytes | smart contract virtual signature (always length zero) |
|
ed25519 | bytes | ed25519 signature |
|
RSA_3072 | bytes | RSA-3072 signature |
|
ECDSA_384 | bytes | ECDSA p-384 signature |
|
ECDSA_secp256k1 | bytes | ECDSA(secp256k1) signature |
Staking metadata for an account or a contract returned in CryptoGetInfo or ContractGetInfo queries
Field | Type | Label | Description |
decline_reward | bool | If true, this account or contract declined to receive a staking reward. |
|
stake_period_start | Timestamp | The staking period during which either the staking settings for this account or contract changed (such as starting staking or changing staked_node_id) or the most recent reward was earned, whichever is later. If this account or contract is not currently staked to a node, then this field is not set. |
|
pending_reward | int64 | The amount in tinybars that will be received in the next reward situation. |
|
staked_to_me | int64 | The total of balance of all accounts staked to this account or contract. |
|
staked_account_id | AccountID | The account to which this account or contract is staking. |
|
staked_node_id | int64 | The ID of the node this account or contract is staked to. |
A set of public keys that are used together to form a threshold signature. If the threshold is N
and there are M keys, then this is an N of M threshold signature. If an account is associated
with ThresholdKeys, then a transaction to move cryptocurrency out of it must be signed by a list
of M signatures, where at most M-N of them are blank, and the other at least N of them are valid
signatures corresponding to at least N of the public keys listed here.
Field | Type | Label | Description |
threshold | uint32 | A valid signature set must have at least this many signatures |
|
keys | KeyList | List of all the keys that can sign |
This message is DEPRECATED and UNUSABLE with network nodes. It is retained
here only for historical reasons.
Please use the SignaturePair and SignatureMap messages.
Field | Type | Label | Description |
sigs | SignatureList | for an N-of-M threshold key, this is a list of M signatures, at least N of which must be non-null |
A token - account association
Field | Type | Label | Description |
token_id | TokenID | The token involved in the association |
|
account_id | AccountID | The account involved in the association |
A number of transferable units of a certain token.
The transferable unit of a token is its smallest denomination, as given by the token's
decimals property---each minted token contains 10decimals
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.
Field | Type | Label | Description |
tokenId | TokenID | A unique token id |
|
balance | uint64 | Number of transferable units of the identified token. For token of type FUNGIBLE_COMMON - balance in the smallest denomination. For token of type NON_FUNGIBLE_UNIQUE - the number of NFTs held by the account |
|
decimals | uint32 | Tokens divide into <tt>10<sup>decimals</sup></tt> pieces |
A sequence of token balances
Field | Type | Label | Description |
tokenBalances | TokenBalance | repeated |
|
Unique identifier for a token
Field | Type | Label | Description |
shardNum | int64 | A nonnegative shard number |
|
realmNum | int64 | A nonnegative realm number |
|
tokenNum | int64 | A nonnegative token number |
Token's information related to the given Account
Field | Type | Label | Description |
tokenId | TokenID | The ID of the token |
|
symbol | string | The Symbol of the token |
|
balance | uint64 | For token of type FUNGIBLE_COMMON - the balance that the Account holds in the smallest denomination. For token of type NON_FUNGIBLE_UNIQUE - the number of NFTs held by the account |
|
kycStatus | TokenKycStatus | The KYC status of the account (KycNotApplicable, Granted or Revoked). If the token does not have KYC key, KycNotApplicable is returned |
|
freezeStatus | TokenFreezeStatus | The Freeze status of the account (FreezeNotApplicable, Frozen or Unfrozen). If the token does not have Freeze key, FreezeNotApplicable is returned |
|
decimals | uint32 | Tokens divide into <tt>10<sup>decimals</sup></tt> pieces |
|
automatic_association | bool | Specifies if the relationship is created implicitly. False : explicitly associated, True : implicitly associated. |
A list of token IDs and amounts representing the transferred out (negative) or into (positive)
amounts, represented in the lowest denomination of the token
Field | Type | Label | Description |
token | TokenID | The ID of the token |
|
transfers | AccountAmount | repeated | Applicable to tokens of type FUNGIBLE_COMMON. Multiple list of AccountAmounts, each of which has an account and amount |
nftTransfers | NftTransfer | repeated | Applicable to tokens of type NON_FUNGIBLE_UNIQUE. Multiple list of NftTransfers, each of which has a sender and receiver account, including the serial number of the NFT |
expected_decimals | google.protobuf.UInt32Value | If present, the number of decimals this fungible token type is expected to have. The transfer will fail with UNEXPECTED_TOKEN_DECIMALS if the actual decimals differ. |
Unique identifier for a topic (used by the consensus service)
Field | Type | Label | Description |
shardNum | int64 | The shard number (nonnegative) |
|
realmNum | int64 | The realm number (nonnegative) |
|
topicNum | int64 | Unique topic identifier within a realm (nonnegative). |
The fees for a specific transaction or query based on the fee data.
Field | Type | Label | Description |
hederaFunctionality | HederaFunctionality | A particular transaction or query |
|
feeData | FeeData | Deprecated. Resource price coefficients |
|
fees | FeeData | repeated | Resource price coefficients. Supports subtype price definition. |
Name | Option |
feeData | true |
The ID for a transaction. This is used for retrieving receipts and records for a transaction, for
appending to a file right after creating it, for instantiating a smart contract with bytecode in
a file just created, and internally by the network for detecting when duplicate transactions are
submitted. A user might get a transaction processed faster by submitting it to N 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 will not take effect. So this could make the transaction take effect faster,
if any given node might be slow. However, the full transaction fee is charged for each
transaction, so the total fee is N times as much if the transaction is sent to N nodes.
Applicable to Scheduled Transactions:
- The ID of a Scheduled Transaction has transactionValidStart and accountIDs inherited from the
ScheduleCreate transaction that created it. That is to say that they are equal
- The scheduled property is true for Scheduled Transactions
- transactionValidStart, accountID and scheduled properties should be omitted
Field | Type | Label | Description |
transactionValidStart | Timestamp | The transaction is invalid if consensusTimestamp < transactionID.transactionStartValid |
|
accountID | AccountID | The Account ID that paid for this transaction |
|
scheduled | bool | Whether the Transaction is of type Scheduled or no |
|
nonce | int32 | The identifier for an internal transaction 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.) 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 id with a different nonce. |
A list of accounts and amounts to transfer out of each account (negative) or into it (positive).
Field | Type | Label | Description |
accountAmounts | AccountAmount | repeated | Multiple list of AccountAmount pairs, each of which has an account and an amount to transfer into it (positive) or out of it (negative) |
Field | Type | Label | Description |
address | bytes | The 20-byte EVM address that is derived from the keccak-256 hash of a ECDSA_SECP256K1 primitive key. |
|
is_default | bool | Flag if this address should now be set or is the default address on the account. |
The transactions and queries supported by Hedera Hashgraph.
Name | Number | Description |
NONE | 0 | UNSPECIFIED - Need to keep first value as unspecified because first element is ignored and not parsed (0 is ignored by parser) |
CryptoTransfer | 1 | crypto transfer |
CryptoUpdate | 2 | crypto update account |
CryptoDelete | 3 | crypto delete account |
CryptoAddLiveHash | 4 | Add a livehash to a crypto account |
CryptoDeleteLiveHash | 5 | Delete a livehash from a crypto account |
ContractCall | 6 | Smart Contract Call |
ContractCreate | 7 | Smart Contract Create Contract |
ContractUpdate | 8 | Smart Contract update contract |
FileCreate | 9 | File Operation create file |
FileAppend | 10 | File Operation append file |
FileUpdate | 11 | File Operation update file |
FileDelete | 12 | File Operation delete file |
CryptoGetAccountBalance | 13 | crypto get account balance |
CryptoGetAccountRecords | 14 | crypto get account record |
CryptoGetInfo | 15 | Crypto get info |
ContractCallLocal | 16 | Smart Contract Call |
ContractGetInfo | 17 | Smart Contract get info |
ContractGetBytecode | 18 | Smart Contract, get the runtime code |
GetBySolidityID | 19 | Smart Contract, get by solidity ID |
GetByKey | 20 | Smart Contract, get by key |
CryptoGetLiveHash | 21 | Get a live hash from a crypto account |
CryptoGetStakers | 22 | Crypto, get the stakers for the node |
FileGetContents | 23 | File Operations get file contents |
FileGetInfo | 24 | File Operations get the info of the file |
TransactionGetRecord | 25 | Crypto get the transaction records |
ContractGetRecords | 26 | Contract get the transaction records |
CryptoCreate | 27 | crypto create account |
SystemDelete | 28 | system delete file |
SystemUndelete | 29 | system undelete file |
ContractDelete | 30 | delete contract |
Freeze | 31 | freeze |
CreateTransactionRecord | 32 | Create Tx Record |
CryptoAccountAutoRenew | 33 | Crypto Auto Renew |
ContractAutoRenew | 34 | Contract Auto Renew |
GetVersionInfo | 35 | Get Version |
TransactionGetReceipt | 36 | Transaction Get Receipt |
ConsensusCreateTopic | 50 | Create Topic |
ConsensusUpdateTopic | 51 | Update Topic |
ConsensusDeleteTopic | 52 | Delete Topic |
ConsensusGetTopicInfo | 53 | Get Topic information |
ConsensusSubmitMessage | 54 | Submit message to topic |
UncheckedSubmit | 55 | |
TokenCreate | 56 | Create Token |
TokenGetInfo | 58 | Get Token information |
TokenFreezeAccount | 59 | Freeze Account |
TokenUnfreezeAccount | 60 | Unfreeze Account |
TokenGrantKycToAccount | 61 | Grant KYC to Account |
TokenRevokeKycFromAccount | 62 | Revoke KYC from Account |
TokenDelete | 63 | Delete Token |
TokenUpdate | 64 | Update Token |
TokenMint | 65 | Mint tokens to treasury |
TokenBurn | 66 | Burn tokens from treasury |
TokenAccountWipe | 67 | Wipe token amount from Account holder |
TokenAssociateToAccount | 68 | Associate tokens to an account |
TokenDissociateFromAccount | 69 | Dissociate tokens from an account |
ScheduleCreate | 70 | Create Scheduled Transaction |
ScheduleDelete | 71 | Delete Scheduled Transaction |
ScheduleSign | 72 | Sign Scheduled Transaction |
ScheduleGetInfo | 73 | Get Scheduled Transaction Information |
TokenGetAccountNftInfos | 74 | Get Token Account Nft Information |
TokenGetNftInfo | 75 | Get Token Nft Information |
TokenGetNftInfos | 76 | Get Token Nft List Information |
TokenFeeScheduleUpdate | 77 | Update a token's custom fee schedule, if permissible |
NetworkGetExecutionTime | 78 | Get execution time(s) by TransactionID, if available |
TokenPause | 79 | Pause the Token |
TokenUnpause | 80 | Unpause the Token |
CryptoApproveAllowance | 81 | Approve allowance for a spender relative to the owner account |
CryptoDeleteAllowance | 82 | Deletes granted allowances on owner account |
GetAccountDetails | 83 | Gets all the information about an account, including balance and allowances. This does not get the list of account records. |
EthereumTransaction | 84 | Ethereum Transaction |
NodeStakeUpdate | 85 | Updates the staking info at the end of staking period to indicate new staking period has started. |
UtilPrng | 86 | Generates a pseudorandom number. |
Allows a set of resource prices to be scoped to a certain type of a HAPI operation.
For example, the resource prices for a TokenMint operation are different between minting fungible
and non-fungible tokens. This enum allows us to "mark" a set of prices as applying to one or the
other.
Similarly, the resource prices for a basic TokenCreate without a custom fee schedule yield a
total price of $1. The resource prices for a TokenCreate with a custom fee schedule are different
and yield a total base price of $2.
Name | Number | Description |
DEFAULT | 0 | The resource prices have no special scope |
TOKEN_FUNGIBLE_COMMON | 1 | The resource prices are scoped to an operation on a fungible common token |
TOKEN_NON_FUNGIBLE_UNIQUE | 2 | The resource prices are scoped to an operation on a non-fungible unique token |
TOKEN_FUNGIBLE_COMMON_WITH_CUSTOM_FEES | 3 | The resource prices are scoped to an operation on a fungible common token with a custom fee schedule |
TOKEN_NON_FUNGIBLE_UNIQUE_WITH_CUSTOM_FEES | 4 | The resource prices are scoped to an operation on a non-fungible unique token with a custom fee schedule |
SCHEDULE_CREATE_CONTRACT_CALL | 5 | The resource prices are scoped to a ScheduleCreate containing a ContractCall. |
Possible Freeze statuses returned on TokenGetInfoQuery or CryptoGetInfoResponse in
TokenRelationship
Name | Number | Description |
FreezeNotApplicable | 0 | UNDOCUMENTED |
Frozen | 1 | UNDOCUMENTED |
Unfrozen | 2 | UNDOCUMENTED |
Possible KYC statuses returned on TokenGetInfoQuery or CryptoGetInfoResponse in TokenRelationship
Name | Number | Description |
KycNotApplicable | 0 | UNDOCUMENTED |
Granted | 1 | UNDOCUMENTED |
Revoked | 2 | UNDOCUMENTED |
Possible Pause statuses returned on TokenGetInfoQuery
Name | Number | Description |
PauseNotApplicable | 0 | Indicates that a Token has no pauseKey |
Paused | 1 | Indicates that a Token is Paused |
Unpaused | 2 | Indicates that a Token is Unpaused. |
Possible Token Supply Types (IWA Compatibility).
Indicates how many tokens can have during its lifetime.
Name | Number | Description |
INFINITE | 0 | Indicates that tokens of that type have an upper bound of Long.MAX_VALUE. |
FINITE | 1 | Indicates that tokens of that type have an upper bound of maxSupply, provided on token creation. |
Possible Token Types (IWA Compatibility).
Apart from fungible and non-fungible, Tokens can have either a common or unique representation.
This distinction might seem subtle, but it is important when considering how tokens can be traced
and if they can have isolated and unique properties.
Name | Number | Description |
FUNGIBLE_COMMON | 0 | Interchangeable value with one another, where any quantity of them has the same value as another equal quantity if they are in the same class. Share a single set of properties, not distinct from one another. Simply represented as a balance or quantity to a given Hedera account. |
NON_FUNGIBLE_UNIQUE | 1 | Unique, not interchangeable with other tokens of the same type as they typically have different values. Individually traced and can carry unique properties (e.g. serial number). |
See [ConsensusService.createTopic()](#proto.ConsensusService)
Field | Type | Label | Description |
memo | string | Short publicly visible memo about the topic. No guarantee of uniqueness. |
|
adminKey | Key | Access control for updateTopic/deleteTopic. Anyone can increase the topic's expirationTime via ConsensusService.updateTopic(), regardless of the adminKey. If no adminKey is specified, updateTopic may only be used to extend the topic's expirationTime, and deleteTopic is disallowed. |
|
submitKey | Key | Access control for submitMessage. If unspecified, no access control is performed on ConsensusService.submitMessage (all submissions are allowed). |
|
autoRenewPeriod | Duration | The initial lifetime of the topic and the amount of time to attempt to extend the topic's lifetime by automatically at the topic's expirationTime, if the autoRenewAccount is configured (once autoRenew functionality is supported by HAPI). Limited to MIN_AUTORENEW_PERIOD and MAX_AUTORENEW_PERIOD value by server-side configuration. Required. |
|
autoRenewAccount | AccountID | Optional account to be used at the topic's expirationTime to extend the life of the topic (once autoRenew functionality is supported by HAPI). The topic lifetime will be extended up to a maximum of the autoRenewPeriod or however long the topic can be extended using all funds on the account (whichever is the smaller duration/amount and if any extension is possible with the account's funds). If specified, there must be an adminKey and the autoRenewAccount must sign this transaction. |
See [ConsensusService.deleteTopic()](#proto.ConsensusService)
Field | Type | Label | Description |
topicID | TopicID | Topic identifier |
See [ConsensusService.getTopicInfo()](#proto.ConsensusService)
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
topicID | TopicID | The Topic for which information is being requested |
Retrieve the parameters of and state of a consensus topic.
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither. |
|
topicID | TopicID | Topic identifier. |
|
topicInfo | ConsensusTopicInfo | Current state of the topic |
The Consensus Service provides the ability for Hedera 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.
Automatic renewal can be configured via an autoRenewAccount.
Any time an autoRenewAccount is added to a topic, that createTopic/updateTopic transaction must
be signed by the autoRenewAccount.
The autoRenewPeriod on an account must currently be set a value in createTopic between
MIN_AUTORENEW_PERIOD (6999999 seconds) and MAX_AUTORENEW_PERIOD (8000001 seconds). During
creation this sets the initial expirationTime of the topic (see more below).
If no adminKey is on a topic, there may not be an autoRenewAccount on the topic, deleteTopic is
not allowed, and the only change allowed via an updateTopic is to extend the expirationTime.
If an adminKey is on a topic, every updateTopic and deleteTopic transaction must be signed by the
adminKey, except for updateTopics which only extend the topic's expirationTime (no adminKey
authorization required).
If an updateTopic modifies the adminKey of a topic, the transaction signatures on the updateTopic
must fulfill both the pre-update and post-update adminKey signature requirements.
Mirrornet ConsensusService may be used to subscribe to changes on the topic, including changes to
the topic definition and the consensus ordering and timestamp of submitted messages.
Until autoRenew functionality is supported by HAPI, the topic will not expire, the
autoRenewAccount will not be charged, and the topic will not automatically be deleted.
Once autoRenew functionality is supported by HAPI:
1. Once the expirationTime is encountered, if an autoRenewAccount is configured on the topic, the
account will be charged automatically at the expirationTime, to extend the expirationTime of the
topic up to the topic's autoRenewPeriod (or as much extension as the account's balance will
supply).
2. If the topic expires and is not automatically renewed, the topic will enter the EXPIRED state.
All transactions on the topic will fail with TOPIC_EXPIRED, except an updateTopic() call that
modifies only the expirationTime. getTopicInfo() will succeed. This state will be available for
a AUTORENEW_GRACE_PERIOD grace period (7 days).
3. After the grace period, if the topic's expirationTime is not extended, the topic will be
automatically deleted and no transactions or queries on the topic will succeed after that point.
Method Name | Request Type | Response Type | Description |
createTopic | Transaction | TransactionResponse | Create a topic to be used for consensus. If an autoRenewAccount is specified, that account must also sign this transaction. If an adminKey is specified, the adminKey must sign the transaction. On success, the resulting TransactionReceipt contains the newly created TopicId. Request is [ConsensusCreateTopicTransactionBody](#proto.ConsensusCreateTopicTransactionBody) |
updateTopic | Transaction | TransactionResponse | Update a topic. If there is no adminKey, the only authorized update (available to anyone) is to extend the expirationTime. Otherwise transaction must be signed by the adminKey. If an adminKey is updated, the transaction must be signed by the pre-update adminKey and post-update adminKey. If a new autoRenewAccount is specified (not just being removed), that account must also sign the transaction. Request is [ConsensusUpdateTopicTransactionBody](#proto.ConsensusUpdateTopicTransactionBody) |
deleteTopic | Transaction | TransactionResponse | Delete a topic. No more transactions or queries on the topic (via HAPI) will succeed. If an adminKey is set, this transaction must be signed by that key. If there is no adminKey, this transaction will fail UNAUTHORIZED. Request is [ConsensusDeleteTopicTransactionBody](#proto.ConsensusDeleteTopicTransactionBody) |
getTopicInfo | Query | Response | Retrieve the latest state of a topic. This method is unrestricted and allowed on any topic by any payer account. Deleted accounts will not be returned. Request is [ConsensusGetTopicInfoQuery](#proto.ConsensusGetTopicInfoQuery) Response is [ConsensusGetTopicInfoResponse](#proto.ConsensusGetTopicInfoResponse) |
submitMessage | Transaction | TransactionResponse | Submit a message for consensus. Valid and authorized messages on valid topics will be ordered by the consensus service, gossipped to the mirror net, and published (in order) to all subscribers (from the mirror net) on this topic. The submitKey (if any) must sign this transaction. On success, the resulting TransactionReceipt contains the topic's updated topicSequenceNumber and topicRunningHash. Request is [ConsensusSubmitMessageTransactionBody](#proto.ConsensusSubmitMessageTransactionBody) |
UNDOCUMENTED
Field | Type | Label | Description |
initialTransactionID | TransactionID | TransactionID of the first chunk, gets copied to every subsequent chunk in a fragmented message. |
|
total | int32 | The total number of chunks in the message. |
|
number | int32 | The sequence number (from 1 to total) of the current chunk in the message. |
UNDOCUMENTED
Field | Type | Label | Description |
topicID | TopicID | Topic to submit message to. |
|
message | bytes | Message to be submitted. Max size of the Transaction (including signatures) is 6KiB. |
|
chunkInfo | ConsensusMessageChunkInfo | Optional information of the current chunk in a fragmented message. |
Current state of a topic.
Field | Type | Label | Description |
memo | string | The memo associated with the topic (UTF-8 encoding max 100 bytes) |
|
runningHash | bytes | When a topic is created, its running hash is initialized to 48 bytes of binary zeros. For each submitted message, the topic's running hash is then updated to the output of a particular SHA-384 digest whose input data include the previous running hash. See the TransactionReceipt.proto documentation for an exact description of the data included in the SHA-384 digest used for the update. |
|
sequenceNumber | uint64 | Sequence number (starting at 1 for the first submitMessage) of messages on the topic. |
|
expirationTime | Timestamp | Effective consensus timestamp at (and after) which submitMessage calls will no longer succeed on the topic and the topic will expire and after AUTORENEW_GRACE_PERIOD be automatically deleted. |
|
adminKey | Key | Access control for update/delete of the topic. Null if there is no key. |
|
submitKey | Key | Access control for ConsensusService.submitMessage. Null if there is no key. |
|
autoRenewPeriod | Duration | If an auto-renew account is specified, when the topic expires, its lifetime will be extended by up to this duration (depending on the solvency of the auto-renew account). If the auto-renew account has no funds at all, the topic will be deleted instead. |
|
autoRenewAccount | AccountID | The account, if any, to charge for automatic renewal of the topic's lifetime upon expiry. |
|
ledger_id | bytes | The ledger ID the response was returned from; please see <a href="https://github.com/hashgraph/hedera-improvement-proposal/blob/master/HIP/hip-198.md">HIP-198</a> for the network-specific IDs. |
All fields left null will not be updated.
See [ConsensusService.updateTopic()](#proto.ConsensusService)
Field | Type | Label | Description |
topicID | TopicID | UNDOCUMENTED |
|
memo | google.protobuf.StringValue | If set, the new memo to be associated with the topic (UTF-8 encoding max 100 bytes) |
|
expirationTime | Timestamp | Effective consensus timestamp at (and after) which all consensus transactions and queries will fail. The expirationTime may be no longer than MAX_AUTORENEW_PERIOD (8000001 seconds) from the consensus timestamp of this transaction. On topics with no adminKey, extending the expirationTime is the only updateTopic option allowed on the topic. If unspecified, no change. |
|
adminKey | Key | Access control for update/delete of the topic. If unspecified, no change. If empty keyList - the adminKey is cleared. |
|
submitKey | Key | Access control for ConsensusService.submitMessage. If unspecified, no change. If empty keyList - the submitKey is cleared. |
|
autoRenewPeriod | Duration | The amount of time to extend the topic's lifetime automatically at expirationTime if the autoRenewAccount is configured and has funds (once autoRenew functionality is supported by HAPI). Limited to between MIN_AUTORENEW_PERIOD (6999999 seconds) and MAX_AUTORENEW_PERIOD (8000001 seconds) by servers-side configuration (which may change). If unspecified, no change. |
|
autoRenewAccount | AccountID | Optional account to be used at the topic's expirationTime to extend the life of the topic. Once autoRenew functionality is supported by HAPI, the topic lifetime will be extended up to a maximum of the autoRenewPeriod or however long the topic can be extended using all funds on the account (whichever is the smaller duration/amount). If specified as the default value (0.0.0), the autoRenewAccount will be removed. If unspecified, no change. |
Call a function of the given smart contract instance, giving it functionParameters as its inputs.
The call can use at maximum the given amount of gas – the paying account will not be charged for
any unspent gas.
If this function results in data being stored, an amount of gas is calculated that reflects this
storage burden.
The amount of gas used, as well as other attributes of the transaction, e.g. size, number of
signatures to be verified, determine the fee for the transaction – which is charged to the paying
account.
Field | Type | Label | Description |
contractID | ContractID | The contract to call |
|
gas | int64 | the maximum amount of gas to use for the call |
|
amount | int64 | number of tinybars sent (the function must be payable if this is nonzero) |
|
functionParameters | bytes | which function to call, and the parameters to pass to the function |
Call a function of the given smart contract instance, giving it functionParameters as its inputs.
This is performed locally on the particular node that the client is communicating with.
It cannot change the state of the contract instance (and so, cannot spend anything from the instance's cryptocurrency account).
It will not have a consensus timestamp. It cannot generate a record or a receipt. The response will contain the output
returned by the function call. This is useful for calling getter functions, which purely read the state and don't change it.
It is faster and cheaper than a normal call, because it is purely local to a single node.
Unlike a ContractCall transaction, the node will consume the entire amount of provided gas in determining
the fee for this query.
Field | Type | Label | Description |
header | QueryHeader | standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). The payment must cover the fees and all of the gas offered. |
|
contractID | ContractID | The contract to make a static call against |
|
gas | int64 | The amount of gas to use for the call; all of the gas offered will be used and charged a corresponding fee |
|
functionParameters | bytes | which function to call, and the parameters to pass to the function |
|
maxResultSize | int64 | Deprecated. max number of bytes that the result might include. The run will fail if it would have returned more than this number of bytes. |
|
sender_id | AccountID | The account that is the "sender." If not present it is the accountId from the transactionId. Typically a different value than specified in the transactionId requires a valid signature over either the hedera transaction or foreign transaction data. |
Name | Option |
maxResultSize | true |
Response when the client sends the node ContractCallLocalQuery
Field | Type | Label | Description |
header | ResponseHeader | standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
functionResult | ContractFunctionResult | the value returned by the function (if it completed and didn't fail) |
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 or ContractCreateInstance
transaction. The ContractCreateInstance transaction record has the results of the call to the
constructor.
Field | Type | Label | Description |
contractID | ContractID | the smart contract instance whose function was called |
|
contractCallResult | bytes | the result returned by the function |
|
errorMessage | string | message In case there was an error during smart contract execution |
|
bloom | bytes | bloom filter for record |
|
gasUsed | uint64 | units of gas used to execute contract |
|
logInfo | ContractLoginfo | repeated | the log info for events returned by the function |
createdContractIDs | ContractID | repeated | Deprecated. [DEPRECATED] the list of smart contracts that were created by the function call. 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. (This is needed for contracts created with CREATE2, since there is no longer a simple relationship between the new contract's 0.0.X id and its Solidity address.) |
evm_address | google.protobuf.BytesValue | The new contract's 20-byte EVM address. Only populated after release 0.23, where each created contract will have its own record. (This is an important point--the field is not <tt>repeated</tt> because there will be a separate child record for each created contract.) Every contract has an EVM address determined by its <tt>shard.realm.num</tt> id. This address is 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> Contracts created via CREATE2 have an <b>additional, primary address</b> that is derived from the <a href="https://eips.ethereum.org/EIPS/eip-1014">EIP-1014</a> specification, and does not have a simple relation to a <tt>shard.realm.num</tt> id. (Please do note that CREATE2 contracts can also be referenced by the three-part EVM address described above.) |
|
gas | int64 | The amount of gas available for the call, aka the gasLimit. This field should only be populated when the paired TransactionBody in the record stream is not a ContractCreateTransactionBody or a ContractCallTransactionBody. |
|
amount | int64 | Number of tinybars sent (the function must be payable if this is nonzero). This field should only be populated when the paired TransactionBody in the record stream is not a ContractCreateTransactionBody or a ContractCallTransactionBody. |
|
functionParameters | bytes | The parameters passed into the contract call. This field should only be populated when the paired TransactionBody in the record stream is not a ContractCreateTransactionBody or a ContractCallTransactionBody. |
|
sender_id | AccountID | The account that is the "sender." If not present it is the accountId from the transactionId. This field should only be populated when the paired TransactionBody in the record stream is not a ContractCreateTransactionBody or a ContractCallTransactionBody. |
Name | Option |
createdContractIDs | true |
The log information for an event returned by a smart contract function call. One function call
may return several such events.
Field | Type | Label | Description |
contractID | ContractID | address of a contract that emitted the event |
|
bloom | bytes | bloom filter for a particular log |
|
topic | bytes | repeated | topics of a particular event |
data | bytes | event data |
Start a new smart contract instance. After the instance is created, the ContractID for it is in
the receipt, and can be retrieved by the Record or with a GetByKey query. The instance will run
the bytecode, either stored in a previously created file or in the transaction body itself for
small contracts.
The constructor will be executed using the given amount of gas, and any unspent gas will be
refunded to the paying account. Constructor inputs come from the given constructorParameters.
- The instance will exist for autoRenewPeriod seconds. When that is reached, it will renew
itself for another autoRenewPeriod seconds by charging its associated cryptocurrency account
(which it creates here). If it has insufficient cryptocurrency to extend that long, it will
extend as long as it can. If its balance is zero, the instance will be deleted.
- A smart contract instance normally enforces rules, so "the code is law". For example, an
ERC-20 contract prevents a transfer from being undone without a signature by the recipient of
the transfer. This is always enforced if the contract instance was created with the adminKeys
being null. But for some uses, it might be desirable to create something like an ERC-20
contract that has a specific group of trusted individuals who can act as a "supreme court"
with the ability to override the normal operation, when a sufficient number of them agree to
do so. If adminKeys is not null, then they can sign a transaction that can change the state of
the smart contract in arbitrary ways, such as to reverse a transaction that violates some
standard of behavior that is not covered by the code itself. The admin keys can also be used
to change the autoRenewPeriod, and change the adminKeys field itself. The API currently does
not implement this ability. But it does allow the adminKeys field to be set and queried, and
will in the future implement such admin abilities for any instance that has a non-null
adminKeys.
- If this constructor stores information, it is charged gas to store it. There is a fee in hbars
to maintain that storage until the expiration time, and that fee is added as part of the
transaction fee.
- An entity (account, file, or smart contract instance) must be created in a particular realm.
If the realmID is left null, then a new realm will be created with the given admin key. If a
new realm has a null adminKey, then anyone can create/modify/delete entities in that realm.
But if an admin key is given, then any transaction to create/modify/delete an entity in that
realm must be signed by that key, though anyone can still call functions on smart contract
instances that exist in that realm. A realm ceases to exist when everything within it has
expired and no longer exists.
- The current API ignores shardID, realmID, and newRealmAdminKey, and creates everything in
shard 0 and realm 0, with a null key. Future versions of the API will support multiple realms
and multiple shards.
- The optional memo field can contain a string whose length is up to 100 bytes. That is the size
after Unicode NFD then UTF-8 conversion. This field can be used to describe the smart contract.
It could also be used for other purposes. One recommended purpose is to hold a hexadecimal
string that is the SHA-384 hash of a PDF file containing a human-readable legal contract. Then,
if the admin keys are the public keys of human arbitrators, they can use that legal document to
guide their decisions during a binding arbitration tribunal, convened to consider any changes
to the smart contract in the future. The memo field can only be changed using the admin keys.
If there are no admin keys, then it cannot be changed after the smart contract is created.
Signing requirements: If an admin key is set, it must sign the transaction. If an
auto-renew account is set, its key must sign the transaction.
Field | Type | Label | Description |
fileID | FileID | The file containing the smart contract initcode. A copy will be made and held by the contract instance, and have the same expiration time as the instance. |
|
initcode | bytes | The bytes of the smart contract initcode. This is only useful if the smart contract init is less than the hedera transaction limit. In those cases fileID must be used. |
|
adminKey | Key | the state of the instance and its fields can be modified arbitrarily if this key signs a transaction to modify it. If this is null, then such modifications are not possible, and there is no administrator that can override the normal operation of this smart contract instance. Note that if it is created with no admin keys, then there is no administrator to authorize changing the admin keys, so there can never be any admin keys for that instance. |
|
gas | int64 | gas to run the constructor |
|
initialBalance | int64 | initial number of tinybars to put into the cryptocurrency account associated with and owned by the smart contract |
|
proxyAccountID | AccountID | Deprecated. [Deprecated] ID of the account to which this account is proxy staked. If proxyAccountID is null, or is an invalid account, or is an account that isn't a node, then this account is automatically proxy staked to a node chosen by the network, but without earning payments. If the proxyAccountID account refuses to accept proxy staking , or if it is not currently running a node, then it will behave as if proxyAccountID was null. |
|
autoRenewPeriod | Duration | the instance will charge its account every this many seconds to renew for this long |
|
constructorParameters | bytes | parameters to pass to the constructor |
|
shardID | ShardID | shard in which to create this |
|
realmID | RealmID | realm in which to create this (leave this null to create a new realm) |
|
newRealmAdminKey | Key | if realmID is null, then this the admin key for the new realm that will be created |
|
memo | string | the memo that was submitted as part of the contract (max 100 bytes) |
|
max_automatic_token_associations | int32 | The maximum number of tokens that this contract can be automatically associated with (i.e., receive air-drops from). |
|
auto_renew_account_id | AccountID | An account to charge for auto-renewal of this contract. If not set, or set to an account with zero hbar balance, the contract's own hbar balance will be used to cover auto-renewal fees. |
|
staked_account_id | AccountID | ID of the account to which this contract is staking. |
|
staked_node_id | int64 | ID of the node this contract is staked to. |
|
decline_reward | bool | If true, the contract declines receiving a staking reward. The default value is false. |
Name | Option |
proxyAccountID | true |
At consensus, marks a contract as deleted and transfers its remaining hBars, if any, to a
designated receiver. After a contract is deleted, it can no longer be called.
If the target contract is immutable (that is, was created without an admin key), then this
transaction resolves to MODIFYING_IMMUTABLE_CONTRACT.
--- Signing Requirements ---
1. The admin key of the target contract must sign.
2. If the transfer account or contract has receiverSigRequired, its associated key must also sign
Field | Type | Label | Description |
contractID | ContractID | The id of the contract to be deleted |
|
transferAccountID | AccountID | The id of an account to receive any remaining hBars from the deleted contract |
|
transferContractID | ContractID | The id of a contract to receive any remaining hBars from the deleted contract |
|
permanent_removal | bool | If set to true, means this is a "synthetic" system transaction being used to alert mirror nodes that the contract is being permanently removed from the ledger. <b>IMPORTANT:</b> User transactions cannot set this field to true, as permanent removal is always managed by the ledger itself. Any ContractDeleteTransactionBody submitted to HAPI with permanent_removal=true will be rejected with precheck status PERMANENT_REMOVAL_REQUIRES_SYSTEM_INITIATION. |
Get the runtime bytecode for a smart contract instance
Field | Type | Label | Description |
header | QueryHeader | standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
contractID | ContractID | the contract for which information is requested |
Response when the client sends the node ContractGetBytecodeQuery
Field | Type | Label | Description |
header | ResponseHeader | standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
bytecode | bytes | the runtime bytecode of the contract |
Get information about a smart contract instance. This includes the account that it uses, the file
containing its initcode (if a file was used to initialize the contract), and the time when it will expire.
Field | Type | Label | Description |
header | QueryHeader | standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
contractID | ContractID | the contract for which information is requested |
Response when the client sends the node ContractGetInfoQuery
Field | Type | Label | Description |
header | ResponseHeader | standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
contractInfo | ContractGetInfoResponse.ContractInfo | the information about this contract instance (a state proof can be generated for this) |
Field | Type | Label | Description |
contractID | ContractID | ID of the contract instance, in the format used in transactions |
|
accountID | AccountID | ID of the cryptocurrency account owned by the contract instance, in the format used in transactions |
|
contractAccountID | string | ID of both the contract instance and the cryptocurrency account owned by the contract instance, in the format used by Solidity |
|
adminKey | Key | the state of the instance and its fields can be modified arbitrarily if this key signs a transaction to modify it. If this is null, then such modifications are not possible, and there is no administrator that can override the normal operation of this smart contract instance. Note that if it is created with no admin keys, then there is no administrator to authorize changing the admin keys, so there can never be any admin keys for that instance. |
|
expirationTime | Timestamp | the current time at which this contract instance (and its account) is set to expire |
|
autoRenewPeriod | Duration | the expiration time will extend every this many seconds. If there are insufficient funds, then it extends as long as possible. If the account is empty when it expires, then it is deleted. |
|
storage | int64 | number of bytes of storage being used by this instance (which affects the cost to extend the expiration time) |
|
memo | string | the memo associated with the contract (max 100 bytes) |
|
balance | uint64 | The current balance, in tinybars |
|
deleted | bool | Whether the contract has been deleted |
|
tokenRelationships | TokenRelationship | repeated | Deprecated. [DEPRECATED] The metadata of the tokens associated to the contract. 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 associations. |
ledger_id | bytes | The ledger ID the response was returned from; please see <a href="https://github.com/hashgraph/hedera-improvement-proposal/blob/master/HIP/hip-198.md">HIP-198</a> for the network-specific IDs. |
|
auto_renew_account_id | AccountID | ID of the an account to charge for auto-renewal of this contract. If not set, or set to an account with zero hbar balance, the contract's own hbar balance will be used to cover auto-renewal fees. |
|
max_automatic_token_associations | int32 | The maximum number of tokens that a contract can be implicitly associated with. |
|
staking_info | StakingInfo | Staking metadata for this contract. |
Name | Option |
tokenRelationships | true |
Before v0.9.0, requested records of all transactions against the given contract in the last 25 hours.
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
contractID | ContractID | The smart contract instance for which the records should be retrieved |
Before v0.9.0, returned records of all transactions against the given contract in the last 25 hours.
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
contractID | ContractID | The smart contract instance that this record is for |
|
records | TransactionRecord | repeated | List of records, each with contractCreateResult or contractCallResult as its body |
At consensus, updates the fields of a smart contract to the given values.
If no value is given for a field, that field is left unchanged on the contract. For an immutable
smart contract (that is, a contract created without an adminKey), only the expirationTime may be
updated; setting any other field in this case will cause the transaction status to resolve to
MODIFYING_IMMUTABLE_CONTRACT.
--- Signing Requirements ---
1. Whether or not a contract has an admin key, its expiry can be extended with only the
transaction payer's signature.
2. Updating any other field of a mutable contract requires the admin key's signature.
3. If the update transaction includes a new admin key, this new key must also sign unless
it is exactly an empty KeyList. This special sentinel key removes the existing admin
key and causes the contract to become immutable. (Other Key structures without a
constituent Ed25519 key will be rejected with INVALID_ADMIN_KEY.)
4. If the update transaction sets the AccountID auto_renew_account_id wrapper field to anything
other than the sentinel 0.0.0 value, then the key of the referenced account must sign.
Field | Type | Label | Description |
contractID | ContractID | The id of the contract to be updated |
|
expirationTime | Timestamp | The new expiry of the contract, no earlier than the current expiry (resolves to EXPIRATION_REDUCTION_NOT_ALLOWED otherwise) |
|
adminKey | Key | The new key to control updates to the contract |
|
proxyAccountID | AccountID | Deprecated. [Deprecated] The new id of the account to which the contract is proxy staked |
|
autoRenewPeriod | Duration | If an auto-renew account is in use, the lifetime to be added by each auto-renewal. |
|
fileID | FileID | Deprecated. This field is unused and will have no impact on the specified smart contract. |
|
memo | string | Deprecated. [Deprecated] If set with a non-zero length, the new memo to be associated with the account (UTF-8 encoding max 100 bytes) |
|
memoWrapper | google.protobuf.StringValue | If set, the new memo to be associated with the account (UTF-8 encoding max 100 bytes) |
|
max_automatic_token_associations | google.protobuf.Int32Value | If set, the new maximum number of tokens that this contract can be automatically associated with (i.e., receive air-drops from). |
|
auto_renew_account_id | AccountID | If set to the sentinel <tt>0.0.0</tt> AccountID, this field removes the contract's auto-renew account. Otherwise it updates the contract's auto-renew account to the referenced account. |
|
staked_account_id | AccountID | ID of the new account to which this contract is staking. If set to the sentinel <tt>0.0.0</tt> AccountID, this field removes the contract's staked account ID. |
|
staked_node_id | int64 | ID of the new node this contract is staked to. If set to the sentinel <tt>-1</tt>, this field removes the contract's staked node ID. |
|
decline_reward | google.protobuf.BoolValue | If true, the contract declines receiving a staking reward. |
Name | Option |
proxyAccountID | true |
fileID | true |
memo | true |
At consensus, attaches the given livehash to the given account. The hash can be deleted by the
key controlling the account, or by any of the keys associated to the livehash. Hence livehashes
provide a revocation service for their implied credentials; for example, when an authority grants
a credential to the account, the account owner will cosign with the authority (or authorities) to
attach a hash of the credential to the account---hence proving the grant. If the credential is
revoked, then any of the authorities may delete it (or the account owner). In this way, the
livehash mechanism acts as a revocation service. An account cannot have two identical livehashes
associated. To modify the list of keys in a livehash, the livehash should first be deleted, then
recreated with a new list of keys.
Field | Type | Label | Description |
liveHash | LiveHash | A hash of some credential or certificate, along with the keys of the entities that asserted it validity |
A hash---presumably of some kind of credential or certificate---along with a list of keys, each
of which may be either a primitive or a threshold key.
Field | Type | Label | Description |
accountId | AccountID | The account to which the livehash is attached |
|
hash | bytes | The SHA-384 hash of a credential or certificate |
|
keys | KeyList | A list of keys (primitive or threshold), all of which must sign to attach the livehash to an account, and any one of which can later delete it. |
|
duration | Duration | The duration for which the livehash will remain valid |
Modifies or creates an hbar/token allowance for a spender relative to the payer account
of this transaction.
(So if account 0.0.X pays for this transaction, then at consensus the spender
account will have new allowances to spend hbar or tokens from 0.0.X).
If the allowance already exists, the hbar/token amount will be used to adjust the current
allowance balance. If this value is negative the approved allowance will be decreased.
The adjusted allowance balance cannot exceed the total supply of the token nor can it
be negative.
If the allowance does not exist, it will be created with the hbar/token amount being used
as the allowance balance.
IMPORTANT: If an allowance for the spender does not currently exist, this transaction
behaves like an allowance approval.
Field | Type | Label | Description |
cryptoAllowances | CryptoAllowance | repeated | List of hbar allowances approved by the account owner. |
nftAllowances | NftAllowance | repeated | List of non-fungible token allowances approved by the account owner. |
tokenAllowances | TokenAllowance | repeated | List of fungible token allowances approved by the account owner. |
An approved allowance of hbar transfers for a spender.
Field | Type | Label | Description |
owner | AccountID | The account ID of the hbar owner (ie. the grantor of the allowance). |
|
spender | AccountID | The account ID of the spender of the hbar allowance. |
|
amount | int64 | The amount of the spender's allowance in tinybars. |
Creates one or more hbar/token approved allowances relative to the owner account specified in the allowances of
this transaction. Each allowance grants a spender the right to transfer a pre-determined amount of the owner's
hbar/token to any other account of the spender's choice. If the owner is not specified in any allowance, the payer
of transaction is considered to be the owner for that particular allowance.
Setting the amount to zero in CryptoAllowance or TokenAllowance will remove the respective allowance for the spender.
(So if account 0.0.X pays for this transaction and owner is not specified in the allowance,
then at consensus each spender account will have new allowances to spend hbar or tokens from 0.0.X).
Field | Type | Label | Description |
cryptoAllowances | CryptoAllowance | repeated | List of hbar allowances approved by the account owner. |
nftAllowances | NftAllowance | repeated | List of non-fungible token allowances approved by the account owner. |
tokenAllowances | TokenAllowance | repeated | List of fungible token allowances approved by the account owner. |
An approved allowance of non-fungible token transfers for a spender.
Field | Type | Label | Description |
tokenId | TokenID | The NFT token type that the allowance pertains to. |
|
owner | AccountID | The account ID of the token owner (ie. the grantor of the allowance). |
|
spender | AccountID | The account ID of the token allowance spender. |
|
serial_numbers | int64 | repeated | The list of serial numbers that the spender is permitted to transfer. |
approved_for_all | google.protobuf.BoolValue | If true, the spender has access to all of the owner's NFT units of type tokenId (currently owned and any in the future). |
|
delegating_spender | AccountID | The account ID of the spender who is granted approvedForAll allowance and granting approval on an NFT serial to another spender. |
An approved allowance of fungible token transfers for a spender.
Field | Type | Label | Description |
tokenId | TokenID | The token that the allowance pertains to. |
|
owner | AccountID | The account ID of the token owner (ie. the grantor of the allowance). |
|
spender | AccountID | The account ID of the token allowance spender. |
|
amount | int64 | The amount of the spender's token allowance. |
Create a new account. After the account is created, the AccountID for it is in the receipt. It
can also be retrieved with a GetByKey query. Threshold values can be defined, and records are
generated and stored for 25 hours for any transfer that exceeds the thresholds. This account is
charged for each record generated, so the thresholds are useful for limiting record generation to
happen only for large transactions.
The Key field is the key used to sign transactions for this account. If the account has
receiverSigRequired set to true, then all cryptocurrency transfers must be signed by this
account's key, both for transfers in and out. If it is false, then only transfers out have to be
signed by it. When the account is created, the payer account is charged enough hbars so that the
new account will not expire for the next autoRenewPeriod seconds. When it reaches the expiration
time, the new account will then be automatically charged to renew for another autoRenewPeriod
seconds. If it does not have enough hbars to renew for that long, then the remaining hbars are
used to extend its expiration as long as possible. If it is has a zero balance when it expires,
then it is deleted. This transaction must be signed by the payer account. If receiverSigRequired
is false, then the transaction does not have to be signed by the keys in the keys field. If it is
true, then it must be signed by them, in addition to the keys of the payer account. If the
auto_renew_account field is set, the key of the referenced account must sign.
An entity (account, file, or smart contract instance) must be created in a particular realm. If
the realmID is left null, then a new realm will be created with the given admin key. If a new
realm has a null adminKey, then anyone can create/modify/delete entities in that realm. But if an
admin key is given, then any transaction to create/modify/delete an entity in that realm must be
signed by that key, though anyone can still call functions on smart contract instances that exist
in that realm. A realm ceases to exist when everything within it has expired and no longer
exists.
The current API ignores shardID, realmID, and newRealmAdminKey, and creates everything in shard 0
and realm 0, with a null key. Future versions of the API will support multiple realms and
multiple shards.
Field | Type | Label | Description |
key | Key | The key that must sign each transfer out of the account. If receiverSigRequired is true, then it must also sign any transfer into the account. |
|
initialBalance | uint64 | The initial number of tinybars to put into the account |
|
proxyAccountID | AccountID | Deprecated. [Deprecated] ID of the account to which this account is proxy staked. If proxyAccountID is null, or is an invalid account, or is an account that isn't a node, then this account is automatically proxy staked to a node chosen by the network, but without earning payments. If the proxyAccountID account refuses to accept proxy staking , or if it is not currently running a node, then it will behave as if proxyAccountID was null. |
|
sendRecordThreshold | uint64 | Deprecated. [Deprecated]. The threshold amount (in tinybars) for which an account record is created for any send/withdraw transaction |
|
receiveRecordThreshold | uint64 | Deprecated. [Deprecated]. The threshold amount (in tinybars) for which an account record is created for any receive/deposit transaction |
|
receiverSigRequired | bool | If true, this account's key must sign any transaction depositing into this account (in addition to all withdrawals) |
|
autoRenewPeriod | Duration | The account is charged to extend its expiration date every this many seconds. If it doesn't have enough balance, it extends as long as possible. If it is empty when it expires, then it is deleted. |
|
shardID | ShardID | The shard in which this account is created |
|
realmID | RealmID | The realm in which this account is created (leave this null to create a new realm) |
|
newRealmAdminKey | Key | If realmID is null, then this the admin key for the new realm that will be created |
|
memo | string | The memo associated with the account (UTF-8 encoding max 100 bytes) |
|
max_automatic_token_associations | int32 | The maximum number of tokens that an Account can be implicitly associated with. Defaults to 0 and up to a maximum value of 1000. |
|
staked_account_id | AccountID | ID of the account to which this account is staking. |
|
staked_node_id | int64 | ID of the node this account is staked to. |
|
decline_reward | bool | If true, the account declines receiving a staking reward. The default value is false. |
|
alias | bytes | The bytes to be used as the account's alias. It will be the serialization of a protobuf Key message for an ED25519/ECDSA_SECP256K1 primitive key type. Currently only primitive key bytes are supported as the key for an account with an alias. ThresholdKey, KeyList, ContractID, and delegatable_contract_id are not supported. A given alias can map to at most one account on the network at a time. This uniqueness will be enforced relative to aliases currently on the network at alias assignment. If a transaction creates an account using an alias, any further crypto transfers to that alias will simply be deposited in that account, without creating anything, and with no creation fee being charged. |
|
auto_renew_account | AccountID | An account to charge for auto-renewal of this account . If not set, or set to an account with zero hbar balance, the account's own hbar balance will be used to cover auto-renewal fees. |
|
evm_address | bytes | EOA 20-byte address to create that is derived from the keccak-256 hash of a ECDSA_SECP256K1 primitive key. |
Name | Option |
proxyAccountID | true |
sendRecordThreshold | true |
receiveRecordThreshold | true |
Mark an account as deleted, moving all its current hbars to another account. It will remain in
the ledger, marked as deleted, until it expires. Transfers into it a deleted account fail. But a
deleted account can still have its expiration extended in the normal way.
Field | Type | Label | Description |
transferAccountID | AccountID | The account ID which will receive all remaining hbars |
|
deleteAccountID | AccountID | The account ID which should be deleted |
Deletes one or more non-fungible approved allowances from an owner's account. This operation
will remove the allowances granted to one or more specific non-fungible token serial numbers. Each owner account
listed as wiping an allowance must sign the transaction. Hbar and fungible token allowances
can be removed by setting the amount to zero in CryptoApproveAllowance.
Field | Type | Label | Description |
nftAllowances | NftRemoveAllowance | repeated | List of non-fungible token allowances to remove. |
Nft allowances to be removed on an owner account
Field | Type | Label | Description |
token_id | TokenID | The token that the allowance pertains to. |
|
owner | AccountID | The account ID of the token owner (ie. the grantor of the allowance). |
|
serial_numbers | int64 | repeated | The list of serial numbers to remove allowances from. |
At consensus, deletes a livehash associated to the given account. The transaction must be signed
by either the key of the owning account, or at least one of the keys associated to the livehash.
Field | Type | Label | Description |
accountOfLiveHash | AccountID | The account owning the livehash |
|
liveHashToDelete | bytes | The SHA-384 livehash to delete from the account |
Get the balance of a cryptocurrency account. This returns only the balance, so it is a smaller
reply than CryptoGetInfo, which returns the balance plus additional information.
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
accountID | AccountID | The account ID for which information is requested |
|
contractID | ContractID | The account ID for which information is requested |
Response when the client sends the node CryptoGetAccountBalanceQuery
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither. |
|
accountID | AccountID | The account ID that is being described (this is useful with state proofs, for proving to a third party) |
|
balance | uint64 | The current balance, in tinybars. |
|
tokenBalances | TokenBalance | repeated | Deprecated. [DEPRECATED] The balances of the tokens associated to the account. 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. |
Name | Option |
tokenBalances | true |
Requests records of all transactions for which the given account was the effective payer in the last 3 minutes of consensus time and ledger.keepRecordsInState=true was true during handleTransaction.
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
accountID | AccountID | The account ID for which the records should be retrieved |
Returns records of all transactions for which the given account was the effective payer in the last 3 minutes of consensus time and ledger.keepRecordsInState=true was true during handleTransaction.
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
accountID | AccountID | The account that this record is for |
|
records | TransactionRecord | repeated | List of records |
Get all the information about an account, including the balance. This does not get the list of
account records.
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
accountID | AccountID | The account ID for which information is requested |
Response when the client sends the node CryptoGetInfoQuery
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
accountInfo | CryptoGetInfoResponse.AccountInfo | Info about the account (a state proof can be generated for this) |
Field | Type | Label | Description |
accountID | AccountID | The account ID for which this information applies |
|
contractAccountID | string | The Contract Account ID comprising of both the contract instance and the cryptocurrency account owned by the contract instance, in the format used by Solidity |
|
deleted | bool | If true, then this account has been deleted, it will disappear when it expires, and all transactions for it will fail except the transaction to extend its expiration date |
|
proxyAccountID | AccountID | Deprecated. [Deprecated] The Account ID of the account to which this is proxy staked. If proxyAccountID is null, or is an invalid account, or is an account that isn't a node, then this account is automatically proxy staked to a node chosen by the network, but without earning payments. If the proxyAccountID account refuses to accept proxy staking , or if it is not currently running a node, then it will behave as if proxyAccountID was null. |
|
proxyReceived | int64 | The total number of tinybars proxy staked to this account |
|
key | Key | The key for the account, which must sign in order to transfer out, or to modify the account in any way other than extending its expiration date. |
|
balance | uint64 | The current balance of account in tinybars |
|
generateSendRecordThreshold | uint64 | Deprecated. [Deprecated]. The threshold amount, in tinybars, at which a record is created of any transaction that decreases the balance of this account by more than the threshold |
|
generateReceiveRecordThreshold | uint64 | Deprecated. [Deprecated]. The threshold amount, in tinybars, at which a record is created of any transaction that increases the balance of this account by more than the threshold |
|
receiverSigRequired | bool | If true, no transaction can transfer to this account unless signed by this account's key |
|
expirationTime | Timestamp | The TimeStamp time at which this account is set to expire |
|
autoRenewPeriod | Duration | The duration for expiration time will extend every this many seconds. If there are insufficient funds, then it extends as long as possible. If it is empty when it expires, then it is deleted. |
|
liveHashes | LiveHash | repeated | 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) |
tokenRelationships | TokenRelationship | repeated | Deprecated. [DEPRECATED] The metadata of the tokens associated to the account. 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 associations. |
memo | string | The memo associated with the account |
|
ownedNfts | int64 | The number of NFTs owned by this account |
|
max_automatic_token_associations | int32 | The maximum number of tokens that an Account can be implicitly associated with. |
|
alias | bytes | The alias of this account |
|
ledger_id | bytes | The ledger ID the response was returned from; please see <a href="https://github.com/hashgraph/hedera-improvement-proposal/blob/master/HIP/hip-198.md">HIP-198</a> for the network-specific IDs. |
|
ethereum_nonce | int64 | The ethereum transaction nonce associated with this account. |
|
staking_info | StakingInfo | Staking metadata for this account. |
|
auto_renew_account | AccountID | If present, the account that will be charged for auto-renewal of this account. If not set, or set to an account with zero hbar balance, the account's own hbar balance will be used to cover auto-renewal fees. |
|
virtual_addresses | VirtualAddress | repeated | List of virtual addresses each of which is an EVM address that maps to an ECDSA key pair a user must prove ownership of. |
Name | Option |
proxyAccountID | true |
generateSendRecordThreshold | true |
generateReceiveRecordThreshold | true |
tokenRelationships | true |
Requests a livehash associated to an account.
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
accountID | AccountID | The account to which the livehash is associated |
|
hash | bytes | The SHA-384 data in the livehash |
Returns the full livehash associated to an account, if it is present. Note that the only way to
obtain a state proof exhibiting the absence of a livehash from an account is to retrieve a state
proof of the entire account with its list of livehashes.
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
liveHash | LiveHash | The livehash, if present |
all of the accounts proxy staking to a given account, and the amounts proxy staked
Field | Type | Label | Description |
accountID | AccountID | The Account ID that is being proxy staked to |
|
proxyStaker | ProxyStaker | repeated | Each of the proxy staking accounts, and the amount they are proxy staking |
Get all the accounts that are proxy staking to this account. For each of them, give the amount
currently staked. This is not yet implemented, but will be in a future version of the API.
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
accountID | AccountID | The Account ID for which the records should be retrieved |
Response when the client sends the node CryptoGetStakersQuery
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
stakers | AllProxyStakers | List of accounts proxy staking to this account, and the amount each is currently proxy staking |
information about a single account that is proxy staking
Field | Type | Label | Description |
accountID | AccountID | The Account ID that is proxy staking |
|
amount | int64 | The number of hbars that are currently proxy staked |
Transactions and queries for the Crypto Service
Method Name | Request Type | Response Type | Description |
createAccount | Transaction | TransactionResponse | Creates a new account by submitting the transaction |
updateAccount | Transaction | TransactionResponse | Updates an account by submitting the transaction |
cryptoTransfer | Transaction | TransactionResponse | Initiates a transfer by submitting the transaction |
cryptoDelete | Transaction | TransactionResponse | Deletes and account by submitting the transaction |
approveAllowances | Transaction | TransactionResponse | Adds one or more approved allowances for spenders to transfer the paying account's hbar or tokens. |
deleteAllowances | Transaction | TransactionResponse | Deletes one or more of the specific approved NFT serial numbers on an owner account. |
addLiveHash | Transaction | TransactionResponse | (NOT CURRENTLY SUPPORTED) Adds a livehash |
deleteLiveHash | Transaction | TransactionResponse | (NOT CURRENTLY SUPPORTED) Deletes a livehash |
getLiveHash | Query | Response | (NOT CURRENTLY SUPPORTED) Retrieves a livehash for an account |
getAccountRecords | Query | Response | Returns all transactions in the last 180s of consensus time for which the given account was the effective payer <b>and</b> network property <tt>ledger.keepRecordsInState</tt> was <tt>true</tt>. |
cryptoGetBalance | Query | Response | Retrieves the balance of an account |
getAccountInfo | Query | Response | Retrieves the metadata of an account |
getTransactionReceipts | Query | Response | Retrieves the latest receipt for a transaction that is either awaiting consensus, or reached consensus in the last 180 seconds |
getFastTransactionRecord | Query | Response | (NOT CURRENTLY SUPPORTED) Returns the records of transactions recently funded by an account |
getTxRecordByTxID | Query | Response | Retrieves the record of a transaction that is either awaiting consensus, or reached consensus in the last 180 seconds |
getStakersByAccountID | Query | Response | (NOT CURRENTLY SUPPORTED) Retrieves the stakers for a node by account id |
Transfers cryptocurrency among two or more accounts by making the desired adjustments to their
balances. Each transfer list can specify up to 10 adjustments. Each negative amount is withdrawn
from the corresponding account (a sender), and each positive one is added to the corresponding
account (a receiver). The amounts list must sum to zero. Each amount is a number of tinybars
(there are 100,000,000 tinybars in one hbar). If any sender account fails to have sufficient
hbars, then the entire transaction fails, and none of those transfers occur, though the
transaction fee is still charged. This transaction must be signed by the keys for all the sending
accounts, and for any receiving accounts that have receiverSigRequired == true. The signatures
are in the same order as the accounts, skipping those accounts that don't need a signature.
Field | Type | Label | Description |
transfers | TransferList | The desired hbar balance adjustments |
|
tokenTransfers | TokenTransferList | repeated | The desired token unit balance adjustments; if any custom fees are assessed, the ledger will try to deduct them from the payer of this CryptoTransfer, resolving the transaction to INSUFFICIENT_PAYER_BALANCE_FOR_CUSTOM_FEE if this is not possible |
Change properties for the given account. Any null field is ignored (left unchanged). This
transaction must be signed by the existing key for this account. If the transaction is changing
the key field, then the transaction must be signed by both the old key (from before the change)
and the new key. The old key must sign for security. The new key must sign as a safeguard to
avoid accidentally changing to an invalid key, and then having no way to recover.
If the update transaction sets the auto_renew_account field to anything other
than the sentinel 0.0.0, the key of the referenced account must sign.
Field | Type | Label | Description |
accountIDToUpdate | AccountID | The account ID which is being updated in this transaction |
|
key | Key | The new key |
|
proxyAccountID | AccountID | Deprecated. [Deprecated] ID of the account to which this account is proxy staked. If proxyAccountID is null, or is an invalid account, or is an account that isn't a node, then this account is automatically proxy staked to a node chosen by the network, but without earning payments. If the proxyAccountID account refuses to accept proxy staking , or if it is not currently running a node, then it will behave as if proxyAccountID was null. |
|
proxyFraction | int32 | Deprecated. [Deprecated]. Payments earned from proxy staking are shared between the node and this account, with proxyFraction / 10000 going to this account |
|
sendRecordThreshold | uint64 | Deprecated. [Deprecated]. The new threshold amount (in tinybars) for which an account record is created for any send/withdraw transaction |
|
sendRecordThresholdWrapper | google.protobuf.UInt64Value | Deprecated. [Deprecated]. The new threshold amount (in tinybars) for which an account record is created for any send/withdraw transaction |
|
receiveRecordThreshold | uint64 | Deprecated. [Deprecated]. The new threshold amount (in tinybars) for which an account record is created for any receive/deposit transaction. |
|
receiveRecordThresholdWrapper | google.protobuf.UInt64Value | Deprecated. [Deprecated]. The new threshold amount (in tinybars) for which an account record is created for any receive/deposit transaction. |
|
autoRenewPeriod | Duration | The duration in which it will automatically extend the expiration period. If it doesn't have enough balance, it extends as long as possible. If it is empty when it expires, then it is deleted. |
|
expirationTime | Timestamp | The new expiration time to extend to (ignored if equal to or before the current one) |
|
receiverSigRequired | bool | Deprecated. [Deprecated] 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. |
|
receiverSigRequiredWrapper | google.protobuf.BoolValue | If true, this account's key must sign any transaction depositing into this account (in addition to all withdrawals) |
|
memo | google.protobuf.StringValue | If set, the new memo to be associated with the account (UTF-8 encoding max 100 bytes) |
|
max_automatic_token_associations | google.protobuf.Int32Value | The maximum number of tokens that an Account can be implicitly associated with. Up to a 1000 including implicit and explicit associations. |
|
staked_account_id | AccountID | ID of the new account to which this account is staking. If set to the sentinel <tt>0.0.0</tt> AccountID, this field removes this account's staked account ID. |
|
staked_node_id | int64 | ID of the new node this account is staked to. If set to the sentinel <tt>-1</tt>, this field removes this account's staked node ID. |
|
decline_reward | google.protobuf.BoolValue | If true, the account declines receiving a staking reward. The default value is false. |
|
auto_renew_account | AccountID | If set to the sentinel <tt>0.0.0</tt> AccountID, this field removes the account's auto-renew account. Otherwise it updates the account's auto-renew account to the referenced account. |
|
add | VirtualAddress | The virtual address to be added. |
|
remove | bytes | The 20-byte EVM address of the virtual address that is being removed. |
Name | Option |
proxyAccountID | true |
proxyFraction | true |
sendRecordThreshold | true |
sendRecordThresholdWrapper | true |
receiveRecordThreshold | true |
receiveRecordThresholdWrapper | true |
receiverSigRequired | true |
A custom transfer fee that was assessed during handling of a CryptoTransfer.
Field | Type | Label | Description |
amount | int64 | The number of units assessed for the fee |
|
token_id | TokenID | The denomination of the fee; taken as hbar if left unset |
|
fee_collector_account_id | AccountID | The account to receive the assessed fee |
|
effective_payer_account_id | AccountID | repeated | The account(s) whose final balances would have been higher in the absence of this assessed fee |
A transfer fee to assess during a CryptoTransfer that transfers 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. Only positive fees may be assessed.
Field | Type | Label | Description |
fixed_fee | FixedFee | Fixed fee to be charged |
|
fractional_fee | FractionalFee | Fractional fee to be charged |
|
royalty_fee | RoyaltyFee | Royalty fee to be charged |
|
fee_collector_account_id | AccountID | The account to receive the custom fee |
|
all_collectors_are_exempt | bool | If true, exempts all the token's fee collection accounts from this fee. (The token's treasury and the above fee_collector_account_id will always be exempt. Please see <a href="https://hips.hedera.com/hip/hip-573">HIP-573</a> for details.) |
A fixed number of units (hbar or token) to assess as a fee during a CryptoTransfer that transfers
units of the token to which this fixed fee is attached.
Field | Type | Label | Description |
amount | int64 | The number of units to assess as a fee |
|
denominating_token_id | TokenID | The denomination of the fee; taken as hbar if left unset and, in a TokenCreate, taken as the id of the newly created token if set to the sentinel value of 0.0.0 |
A fraction of the transferred units of a token to assess as a fee. The amount assessed will never
be less than the given minimum_amount, and never greater than the given maximum_amount. The
denomination is always units of the token to which this fractional fee is attached.
Field | Type | Label | Description |
fractional_amount | Fraction | The fraction of the transferred units to assess as a fee |
|
minimum_amount | int64 | The minimum amount to assess |
|
maximum_amount | int64 | The maximum amount to assess (zero implies no maximum) |
|
net_of_transfers | bool | If true, assesses the fee to the sender, so the receiver gets the full amount from the token transfer list, and the sender is charged an additional fee; if false, the receiver does NOT get the full amount, but only what is left over after paying the fractional fee |
A fee to assess during a CryptoTransfer that changes ownership of an NFT. Defines the fraction of
the fungible value exchanged for an NFT that the ledger should collect as a royalty. ("Fungible
value" includes both ℏ 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 tokens of type type NON_FUNGIBLE_UNIQUE.
**IMPORTANT:** Users must understand that native royalty fees are _strictly_ a convenience feature,
and that the network cannot enforce inescapable royalties on the exchange of a non-fractional NFT.
For example, if the counterparties agree to split their value transfer and NFT exchange into separate
transactions, the network cannot possibly intervene. (And note the counterparties could use a smart
contract to make this split transaction atomic if they do not trust each other.)
Counterparties that _do_ wish to respect creator royalties should follow the pattern the network
recognizes: The NFT sender and receiver should both sign a single `CryptoTransfer` that credits
the sender with all the fungible value the receiver is exchanging for the NFT.
Similarly, a marketplace using an approved spender account for an escrow transaction should credit
the account selling the NFT in the same `CryptoTransfer` that deducts fungible value from the buying
account.
There is an [open HIP discussion](https://github.com/hashgraph/hedera-improvement-proposal/discussions/578)
that proposes to broaden the class of transactions for which the network automatically collects
royalties. If this interests or concerns you, please add your voice to that discussion.
Field | Type | Label | Description |
exchange_value_fraction | Fraction | The fraction of fungible value exchanged for an NFT to collect as royalty |
|
fallback_fee | FixedFee | If present, the fixed fee to assess to the NFT receiver when no fungible value is exchanged with the sender |
A length of time in seconds.
Field | Type | Label | Description |
seconds | int64 | The number of seconds |
Field | Type | Label | Description |
ethereum_data | bytes | The raw Ethereum transaction (RLP encoded type 0, 1, and 2). Complete unless the callData field is set. |
|
call_data | FileID | For large transactions (for example contract create) this is the callData of the ethereumData. The data in the ethereumData will be re-written with the callData element as a zero length string with the original contents in the referenced file at time of execution. The ethereumData will need to be "rehydrated" with the callData for signature validation to pass. |
|
max_gas_allowance | int64 | The maximum amount, in tinybars, that the payer of the hedera transaction is willing to pay to complete the transaction. Ordinarily the account with the ECDSA alias corresponding to the public key that is extracted from the ethereum_data signature is responsible for fees that result from the execution of the transaction. If that amount of authorized fees is not sufficient then the payer of the transaction can be charged, up to but not exceeding this amount. If the ethereum_data transaction authorized an amount that was insufficient then the payer will only be charged the amount needed to make up the difference. If the gas price in the transaction was set to zero then the payer will be assessed the entire fee. |
An exchange rate between hbar and cents (USD) and the time at which the exchange rate will
expire, and be superseded by a new exchange rate.
Field | Type | Label | Description |
hbarEquiv | int32 | Denominator in calculation of exchange rate between hbar and cents |
|
centEquiv | int32 | Numerator in calculation of exchange rate between hbar and cents |
|
expirationTime | TimestampSeconds | Expiration time in seconds for this exchange rate |
Two sets of exchange rates
Field | Type | Label | Description |
currentRate | ExchangeRate | Current exchange rate |
|
nextRate | ExchangeRate | Next exchange rate which will take effect when current rate expires |
Append the given contents to the end of the specified file. If a file is too big to create with a
single FileCreateTransaction, then it can be created with the first part of its contents, and
then appended as many times as necessary to create the entire file. This transaction must be
signed by all initial M-of-M KeyList keys. If keys contains additional KeyList or ThresholdKey
then M-of-M secondary KeyList or ThresholdKey signing requirements must be meet.
Field | Type | Label | Description |
fileID | FileID | The file to which the bytes will be appended |
|
contents | bytes | The bytes that will be appended to the end of the specified file |
Create a new file, containing the given contents.
After the file is created, the FileID for it can be found in the receipt, or record, or retrieved
with a GetByKey query.
The file contains the specified contents (possibly empty). The file will automatically disappear
at the expirationTime, unless its expiration is extended by another transaction before that time.
If the file is deleted, then its contents will become empty and it will be marked as deleted
until it expires, and then it will cease to exist.
The keys field is a list of keys. All keys within the top-level key list must sign (M-M) to
create or modify a file. However, to delete the file, only one key (1-M) is required to sign from
the top-level key list. Each of those "keys" may itself be threshold key containing other keys
(including other threshold keys). In other words, the behavior is an AND for create/modify, OR
for delete. This is useful for acting as a revocation server. If it is desired to have the
behavior be AND for all 3 operations (or OR for all 3), then the list should have only a single
Key, which is a threshold key, with N=1 for OR, N=M for AND. If the auto_renew_account field
is set, the key of the referenced account must sign.
If a file is created without ANY keys in the keys field, the file is immutable and ONLY the
expirationTime of the file can be changed with a FileUpdate transaction. The file contents or its
keys cannot be changed.
An entity (account, file, or smart contract instance) must be created in a particular realm. If
the realmID is left null, then a new realm will be created with the given admin key. If a new
realm has a null adminKey, then anyone can create/modify/delete entities in that realm. But if an
admin key is given, then any transaction to create/modify/delete an entity in that realm must be
signed by that key, though anyone can still call functions on smart contract instances that exist
in that realm. A realm ceases to exist when everything within it has expired and no longer
exists.
The current API ignores shardID, realmID, and newRealmAdminKey, and creates everything in shard 0
and realm 0, with a null key. Future versions of the API will support multiple realms and
multiple shards.
Field | Type | Label | Description |
expirationTime | Timestamp | The time at which this file should expire (unless FileUpdateTransaction is used before then to extend its life) |
|
keys | KeyList | All keys at the top level of a key list must sign to create or modify the file. Any one of the keys at the top level key list can sign to delete the file. |
|
contents | bytes | The bytes that are the contents of the file |
|
shardID | ShardID | Shard in which this file is created |
|
realmID | RealmID | The Realm in which to the file is created (leave this null to create a new realm) |
|
newRealmAdminKey | Key | If realmID is null, then this the admin key for the new realm that will be created |
|
memo | string | The memo associated with the file (UTF-8 encoding max 100 bytes) |
|
auto_renew_account | AccountID | An account to charge for auto-renewal of this file. If not set, or set to an account with zero hbar balance, the file's expiration must be manually extended using a FileUpdate transaction, since the network will not have authorization for any kind of auto-renewal fee collection. |
|
auto_renew_period | Duration | If an auto-renew account is in use, the lifetime to be added by each auto-renewal. When both auto-renew account and auto-renew period are set in the create transaction, the initial expiry of the file will be the valid start of the create transaction plus the auto-renew period. (I.e., the expirationTime field will be ignored.) |
Delete the given file. After deletion, it will be marked as deleted and will have no contents.
But information about it will continue to exist until it expires. A list of keys was given when
the file was created. All the top level keys on that list must sign transactions to create or
modify the file, but any single one of the top level keys can be used to delete the file. This
transaction must be signed by 1-of-M KeyList keys. If keys contains additional KeyList or
ThresholdKey then 1-of-M secondary KeyList or ThresholdKey signing requirements must be meet.
Field | Type | Label | Description |
fileID | FileID | The file to delete. It will be marked as deleted until it expires. Then it will disappear. |
Get the contents of a file. The content field is empty (no bytes) if the file is empty.
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
fileID | FileID | The file ID of the file whose contents are requested |
Response when the client sends the node FileGetContentsQuery
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
fileContents | FileGetContentsResponse.FileContents | the file ID and contents (a state proof can be generated for this) |
Field | Type | Label | Description |
fileID | FileID | The file ID of the file whose contents are being returned |
|
contents | bytes | The bytes contained in the file |
Get all of the information about a file, except for its contents. When a file expires, it no
longer exists, and there will be no info about it, and the fileInfo field will be blank. If a
transaction or smart contract deletes the file, but it has not yet expired, then the fileInfo
field will be non-empty, the deleted field will be true, its size will be 0, and its contents
will be empty.
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
fileID | FileID | The file ID of the file for which information is requested |
Response when the client sends the node FileGetInfoQuery
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
fileInfo | FileGetInfoResponse.FileInfo | The information about the file |
Field | Type | Label | Description |
fileID | FileID | The file ID of the file for which information is requested |
|
size | int64 | Number of bytes in contents |
|
expirationTime | Timestamp | The current time at which this account is set to expire |
|
deleted | bool | True if deleted but not yet expired |
|
keys | KeyList | One of these keys must sign in order to modify or delete the file |
|
memo | string | The memo associated with the file |
|
ledger_id | bytes | The ledger ID the response was returned from; please see <a href="https://github.com/hashgraph/hedera-improvement-proposal/blob/master/HIP/hip-198.md">HIP-198</a> for the network-specific IDs. |
|
auto_renew_account | AccountID | If set, the account that is used to pay for auto-renewal of the file. |
|
auto_renew_period | Duration | If an auto-renew account is in use, the added lifetime (in seconds) of each auto-renewal. |
Transactions and queries for the file service.
Method Name | Request Type | Response Type | Description |
createFile | Transaction | TransactionResponse | Creates a file |
updateFile | Transaction | TransactionResponse | Updates a file |
deleteFile | Transaction | TransactionResponse | Deletes a file |
appendContent | Transaction | TransactionResponse | Appends to a file |
getFileContent | Query | Response | Retrieves the file contents |
getFileInfo | Query | Response | Retrieves the file information |
systemDelete | Transaction | TransactionResponse | Deletes a file if the submitting account has network admin privileges |
systemUndelete | Transaction | TransactionResponse | Undeletes a file if the submitting account has network admin privileges |
Modify the metadata and/or contents of a file. If a field is not set in the transaction body, the
corresponding file attribute will be unchanged. This transaction must be signed by all the keys
in the top level of a key list (M-of-M) of the file being updated. If the keys themselves are
being updated, then the transaction must also be signed by all the new keys. If the keys contain
additional KeyList or ThresholdKey then M-of-M secondary KeyList or ThresholdKey signing
requirements must be meet If the update transaction sets the auto_renew_account_id field
to anything other than the sentinel 0.0.0, the key of the referenced account must sign.
Field | Type | Label | Description |
fileID | FileID | The ID of the file to update |
|
expirationTime | Timestamp | The new expiry time (ignored if not later than the current expiry) |
|
keys | KeyList | The new list of keys that can modify or delete the file |
|
contents | bytes | The new contents that should overwrite the file's current contents |
|
memo | google.protobuf.StringValue | If set, the new memo to be associated with the file (UTF-8 encoding max 100 bytes) |
|
auto_renew_account | AccountID | If set to the sentinel <tt>0.0.0</tt> AccountID, this field removes the file's auto-renew account. Otherwise it updates the file's auto-renew account to the referenced account. |
|
auto_renew_period | Duration | If an auto-renew account is in use, the lifetime to be added by each auto-renewal. |
At consensus, sets the consensus time at which the platform should stop creating events and
accepting transactions, and enter a maintenance window.
Field | Type | Label | Description |
startHour | int32 | Deprecated. !! DEPRECATED and REJECTED by nodes The start hour (in UTC time), a value between 0 and 23 |
|
startMin | int32 | Deprecated. !! DEPRECATED and REJECTED by nodes The start minute (in UTC time), a value between 0 and 59 |
|
endHour | int32 | Deprecated. !! DEPRECATED and REJECTED by nodes The end hour (in UTC time), a value between 0 and 23 |
|
endMin | int32 | Deprecated. !! DEPRECATED and REJECTED by nodes The end minute (in UTC time), a value between 0 and 59 |
|
update_file | FileID | If set, the file whose contents should be used for a network software update during the maintenance window. |
|
file_hash | bytes | If set, the expected hash of the contents of the update file (used to verify the update). |
|
start_time | Timestamp | The consensus time at which the maintenance window should begin. |
|
freeze_type | FreezeType | The type of network freeze or upgrade operation to perform. |
Name | Option |
startHour | true |
startMin | true |
endHour | true |
endMin | true |
The request and responses for freeze service.
Method Name | Request Type | Response Type | Description |
freeze | Transaction | TransactionResponse | Freezes the nodes by submitting the transaction. The grpc server returns the TransactionResponse |
The type of network freeze or upgrade operation to be performed. This type dictates which
fields are required.
Name | Number | Description |
UNKNOWN_FREEZE_TYPE | 0 | An (invalid) default value for this enum, to ensure the client explicitly sets the intended type of freeze transaction. |
FREEZE_ONLY | 1 | Freezes the network at the specified time. The start_time field must be provided and must reference a future time. Any values specified for the update_file and file_hash fields will be ignored. This transaction does not perform any network changes or upgrades and requires manual intervention to restart the network. |
PREPARE_UPGRADE | 2 | A non-freezing operation that initiates network wide preparation in advance of a scheduled freeze upgrade. The update_file and file_hash fields must be provided and valid. The start_time field may be omitted and any value present will be ignored. |
FREEZE_UPGRADE | 3 | Freezes the network at the specified time and performs the previously prepared automatic upgrade across the entire network. |
FREEZE_ABORT | 4 | Aborts a pending network freeze operation. |
TELEMETRY_UPGRADE | 5 | Performs an immediate upgrade on auxilary services and containers providing telemetry/metrics. Does not impact network operations. |
Gets all the information about an account, including balance and allowances. This does not get the list of
account records.
Field | Type | Label | Description |
header | QueryHeader | Account details sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
account_id | AccountID | The account ID for which information is requested |
Response when the client sends the node GetAccountDetailsQuery
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
account_details | GetAccountDetailsResponse.AccountDetails | Details of the account (a state proof can be generated for this) |
Field | Type | Label | Description |
account_id | AccountID | The account ID for which this information applies |
|
contract_account_id | string | The Contract Account ID comprising of both the contract instance and the cryptocurrency account owned by the contract instance, in the format used by Solidity |
|
deleted | bool | If true, then this account has been deleted, it will disappear when it expires, and all transactions for it will fail except the transaction to extend its expiration date |
|
proxy_account_id | AccountID | Deprecated. [Deprecated] The Account ID of the account to which this is proxy staked. If proxyAccountID is null, or is an invalid account, or is an account that isn't a node, then this account is automatically proxy staked to a node chosen by the network, but without earning payments. If the proxyAccountID account refuses to accept proxy staking , or if it is not currently running a node, then it will behave as if proxyAccountID was null. |
|
proxy_received | int64 | The total number of tinybars proxy staked to this account |
|
key | Key | The key for the account, which must sign in order to transfer out, or to modify the account in any way other than extending its expiration date. |
|
balance | uint64 | The current balance of account in tinybars |
|
receiver_sig_required | bool | If true, no transaction can transfer to this account unless signed by this account's key |
|
expiration_time | Timestamp | The TimeStamp time at which this account is set to expire |
|
auto_renew_period | Duration | The duration for expiration time will extend every this many seconds. If there are insufficient funds, then it extends as long as possible. If it is empty when it expires, then it is deleted. |
|
token_relationships | TokenRelationship | repeated | All tokens related to this account |
memo | string | The memo associated with the account |
|
owned_nfts | int64 | The number of NFTs owned by this account |
|
max_automatic_token_associations | int32 | The maximum number of tokens that an Account can be implicitly associated with. |
|
alias | bytes | The alias of this account |
|
ledger_id | bytes | The ledger ID the response was returned from; please see <a href="https://github.com/hashgraph/hedera-improvement-proposal/blob/master/HIP/hip-198.md">HIP-198</a> for the network-specific IDs. |
|
granted_crypto_allowances | GrantedCryptoAllowance | repeated | All of the hbar allowances approved by the account owner. |
granted_nft_allowances | GrantedNftAllowance | repeated | All of the non-fungible token allowances approved by the account owner. |
granted_token_allowances | GrantedTokenAllowance | repeated | All of the fungible token allowances approved by the account owner. |
Name | Option |
proxy_account_id | true |
A granted allowance of hbar transfers for a spender relative to the owner account.
Field | Type | Label | Description |
spender | AccountID | The account ID of the spender of the hbar allowance. |
|
amount | int64 | The amount of the spender's allowance in tinybars. |
A granted allowance for all the NFTs of a token for a spender relative to the owner account.
Field | Type | Label | Description |
token_id | TokenID | The token that the allowance pertains to. |
|
spender | AccountID | The account ID of the spender that has been granted access to all NFTs of the owner |
A granted allowance of fungible token transfers for a spender relative to the owner account.
Field | Type | Label | Description |
token_id | TokenID | The token that the allowance pertains to. |
|
spender | AccountID | The account ID of the token allowance spender. |
|
amount | int64 | The amount of the spender's token allowance. |
the ID for a single entity (account, livehash, file, or smart contract instance)
Field | Type | Label | Description |
accountID | AccountID | The Account ID for the cryptocurrency account |
|
liveHash | LiveHash | A uniquely identifying livehash of an acount |
|
fileID | FileID | The file ID of the file |
|
contractID | ContractID | The smart contract ID that identifies instance |
Get all accounts, claims, files, and smart contract instances whose associated keys include the
given Key. The given Key must not be a contractID or a ThresholdKey. This is not yet implemented
in the API, but will be in the future.
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
key | Key | The key to search for. It must not contain a contractID nor a ThresholdSignature. |
Response when the client sends the node GetByKeyQuery
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
entities | EntityID | repeated | The list of entities that include this public key in their associated Key list |
Get the IDs in the format used by transactions, given the ID in the format used by Solidity. If
the Solidity ID is for a smart contract instance, then both the ContractID and associated
AccountID will be returned.
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
solidityID | string | The ID in the format used by Solidity |
Response when the client sends the node GetBySolidityIDQuery
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
accountID | AccountID | The Account ID for the cryptocurrency account |
|
fileID | FileID | The file Id for the file |
|
contractID | ContractID | A smart contract ID for the instance (if this is included, then the associated accountID will also be included) |
Gets the time in nanoseconds spent in handleTransaction for one or more
TransactionIDs (assuming they have reached consensus "recently", since only a limited
number of execution times are kept in-memory, depending on the value of the node-local
property stats.executionTimesToTrack).
Field | Type | Label | Description |
header | QueryHeader | standard info sent from client to node including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
transaction_ids | TransactionID | repeated | The id(s) of the transactions to get the execution time(s) of |
Response when the client sends the node NetworkGetExecutionTimeQuery; returns
INVALID_TRANSACTION_ID if any of the given TransactionIDs do not have available
execution times in the answering node.
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
execution_times | uint64 | repeated | The execution time(s) of the requested TransactionIDs, if available |
Get the deployed versions of Hedera Services and the HAPI proto in semantic version format
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
Response when the client sends the node NetworkGetVersionInfoQuery
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
hapiProtoVersion | SemanticVersion | The Hedera API (HAPI) protobuf version recognized by the responding node. |
|
hederaServicesVersion | SemanticVersion | The version of the Hedera Services software deployed on the responding node. |
The requests and responses for different network services.
Method Name | Request Type | Response Type | Description |
getVersionInfo | Query | Response | Retrieves the active versions of Hedera Services and HAPI proto |
getExecutionTime | Query | Response | Retrieves the time in nanoseconds spent in <tt>handleTransaction</tt> for one or more TransactionIDs (assuming they have reached consensus "recently", since only a limited number of execution times are kept in-memory, depending on the value of the node-local property <tt>stats.executionTimesToTrack</tt>). |
uncheckedSubmit | Transaction | TransactionResponse | Submits a "wrapped" transaction to the network, skipping its standard prechecks. (Note that the "wrapper" <tt>UncheckedSubmit</tt> transaction is still subject to normal prechecks, including an authorization requirement that its payer be either the treasury or system admin account.) |
getAccountDetails | Query | Response | Get all the information about an account, including balance and allowances. This does not get the list of account records. |
Staking info for each node at the end of a staking period.
Field | Type | Label | Description |
max_stake | int64 | The maximum stake (rewarded or not rewarded) this node can have as consensus weight. If its stake to reward is above this maximum at the start of a period, then accounts staking to the node in that period will be rewarded at a lower rate scaled by (maxStake / stakeRewardStart). |
|
min_stake | int64 | The minimum stake (rewarded or not rewarded) this node must reach before having non-zero consensus weight. If its total stake is below this minimum at the start of a period, then accounts staking to the node in that period will receive no rewards. |
|
node_id | int64 | The id of this node. |
|
reward_rate | int64 | The reward rate _per whole hbar_ that was staked to this node with declineReward=false from the start of the staking period that is ending. |
|
stake | int64 | Consensus weight of this node for the new staking period. |
|
stake_not_rewarded | int64 | Total of (balance + stakedToMe) for all accounts staked to this node with declineReward=true, at the beginning of the new staking period. |
|
stake_rewarded | int64 | Total of (balance + stakedToMe) for all accounts staked to this node with declineReward=false, at the beginning of the new staking period. |
Updates the staking info at the end of staking period to indicate new staking period has started.
Field | Type | Label | Description |
end_of_staking_period | Timestamp | Time and date of the end of the staking period that is ending |
|
node_stake | NodeStake | repeated | Staking info of each node at the beginning of the new staking period |
max_staking_reward_rate_per_hbar | int64 | The maximum reward rate, in tinybars per whole hbar, that any account can receive in a day. |
|
node_reward_fee_fraction | Fraction | The fraction of the network and service fees paid to the node reward account 0.0.801. |
|
staking_periods_stored | int64 | The maximum number of trailing periods for which a user can collect rewards. For example, if this is 365 with a UTC calendar day period, then users must collect rewards at least once per calendar year to avoid missing any value. |
|
staking_period | int64 | The number of minutes in a staking period. Note for the special case of 1440 minutes, periods are treated as UTC calendar days, rather than repeating 1440 minute periods left-aligned at the epoch. |
|
staking_reward_fee_fraction | Fraction | The fraction of the network and service fees paid to the staking reward account 0.0.800. |
|
staking_start_threshold | int64 | The minimum balance of staking reward account 0.0.800 required to active rewards. |
|
staking_reward_rate | int64 | The total number of tinybars to be distributed as staking rewards each period. |
Extension | Type | Base | Number | Description |
enum_java_package | string | .google.protobuf.EnumOptions | 69879 | |
java_package | string | .google.protobuf.FileOptions | 69877 | |
message_java_package | string | .google.protobuf.MessageOptions | 69878 |
Generates a pseudorandom number
Field | Type | Label | Description |
range | int32 | If provided and is positive, returns a 32-bit pseudorandom number from the given range in the transaction record. If not set or set to zero, will return a 384-bit pseudorandom number in the record. |
A single query, which is sent from the client to a node. This includes all possible queries. Each
Query should not have more than 50 levels.
Field | Type | Label | Description |
getByKey | GetByKeyQuery | Get all entities associated with a given key |
|
getBySolidityID | GetBySolidityIDQuery | Get the IDs in the format used in transactions, given the format used in Solidity |
|
contractCallLocal | ContractCallLocalQuery | Call a function of a smart contract instance |
|
contractGetInfo | ContractGetInfoQuery | Get information about a smart contract instance |
|
contractGetBytecode | ContractGetBytecodeQuery | Get runtime code used by a smart contract instance |
|
ContractGetRecords | ContractGetRecordsQuery | Get Records of the contract instance |
|
cryptogetAccountBalance | CryptoGetAccountBalanceQuery | Get the current balance in a cryptocurrency account |
|
cryptoGetAccountRecords | CryptoGetAccountRecordsQuery | Get all the records that currently exist for transactions involving an account |
|
cryptoGetInfo | CryptoGetInfoQuery | Get all information about an account |
|
cryptoGetLiveHash | CryptoGetLiveHashQuery | Get a single livehash from a single account, if present |
|
cryptoGetProxyStakers | CryptoGetStakersQuery | Get all the accounts that proxy stake to a given account, and how much they proxy stake (not yet implemented in the current API) |
|
fileGetContents | FileGetContentsQuery | Get the contents of a file (the bytes stored in it) |
|
fileGetInfo | FileGetInfoQuery | Get information about a file, such as its expiration date |
|
transactionGetReceipt | TransactionGetReceiptQuery | Get a receipt for a transaction (lasts 180 seconds) |
|
transactionGetRecord | TransactionGetRecordQuery | Get a record for a transaction |
|
transactionGetFastRecord | TransactionGetFastRecordQuery | Get a record for a transaction (lasts 180 seconds) |
|
consensusGetTopicInfo | ConsensusGetTopicInfoQuery | Get the parameters of and state of a consensus topic. |
|
networkGetVersionInfo | NetworkGetVersionInfoQuery | Get the versions of the HAPI protobuf and Hedera Services software deployed on the responding node. |
|
tokenGetInfo | TokenGetInfoQuery | Get all information about a token |
|
scheduleGetInfo | ScheduleGetInfoQuery | Get all information about a scheduled entity |
|
tokenGetAccountNftInfos | TokenGetAccountNftInfosQuery | Get a list of NFTs associated with the account |
|
tokenGetNftInfo | TokenGetNftInfoQuery | Get all information about a NFT |
|
tokenGetNftInfos | TokenGetNftInfosQuery | Get a list of NFTs for the token |
|
networkGetExecutionTime | NetworkGetExecutionTimeQuery | Gets <tt>handleTransaction</tt> times for one or more "sufficiently recent" TransactionIDs |
|
accountDetails | GetAccountDetailsQuery | Gets all information about an account including allowances granted by the account |
Each query from the client to the node will contain the QueryHeader, which gives the requested
response type, and includes a payment transaction that will compensate the node for responding to
the query. The payment can be blank if the query is free.
Field | Type | Label | Description |
payment | Transaction | A signed CryptoTransferTransaction to pay the node a fee for handling this query |
|
responseType | ResponseType | The requested response, asking for cost, state proof, both, or neither |
The client uses the ResponseType to indicate that it desires the node send just the answer, or
both the answer and a state proof. It can also ask for just the cost and not the answer itself
(allowing it to tailor the payment transaction accordingly). If the payment in the query fails
the precheck, then the response may have some fields blank. The state proof is only available for
some types of information. It is available for a Record, but not a receipt. It is available for
the information in each kind of *GetInfo request.
Name | Number | Description |
ANSWER_ONLY | 0 | Response returns answer |
ANSWER_STATE_PROOF | 1 | (NOT YET SUPPORTED) Response returns both answer and state proof |
COST_ANSWER | 2 | Response returns the cost of answer |
COST_ANSWER_STATE_PROOF | 3 | (NOT YET SUPPORTED) Response returns the total cost of answer and state proof |
A single response, which is returned from the node to the client, after the client sent the node
a query. This includes all responses.
Field | Type | Label | Description |
getByKey | GetByKeyResponse | Get all entities associated with a given key |
|
getBySolidityID | GetBySolidityIDResponse | Get the IDs in the format used in transactions, given the format used in Solidity |
|
contractCallLocal | ContractCallLocalResponse | Response to call a function of a smart contract instance |
|
contractGetBytecodeResponse | ContractGetBytecodeResponse | Get the runtime code for a smart contract instance |
|
contractGetInfo | ContractGetInfoResponse | Get information about a smart contract instance |
|
contractGetRecordsResponse | ContractGetRecordsResponse | Get all existing records for a smart contract instance |
|
cryptogetAccountBalance | CryptoGetAccountBalanceResponse | Get the current balance in a cryptocurrency account |
|
cryptoGetAccountRecords | CryptoGetAccountRecordsResponse | Get all the records that currently exist for transactions involving an account |
|
cryptoGetInfo | CryptoGetInfoResponse | Get all information about an account |
|
cryptoGetLiveHash | CryptoGetLiveHashResponse | Contains a livehash associated to an account |
|
cryptoGetProxyStakers | CryptoGetStakersResponse | Get all the accounts that proxy stake to a given account, and how much they proxy stake |
|
fileGetContents | FileGetContentsResponse | Get the contents of a file (the bytes stored in it) |
|
fileGetInfo | FileGetInfoResponse | Get information about a file, such as its expiration date |
|
transactionGetReceipt | TransactionGetReceiptResponse | Get a receipt for a transaction |
|
transactionGetRecord | TransactionGetRecordResponse | Get a record for a transaction |
|
transactionGetFastRecord | TransactionGetFastRecordResponse | Get a record for a transaction (lasts 180 seconds) |
|
consensusGetTopicInfo | ConsensusGetTopicInfoResponse | Parameters of and state of a consensus topic.. |
|
networkGetVersionInfo | NetworkGetVersionInfoResponse | Semantic versions of Hedera Services and HAPI proto |
|
tokenGetInfo | TokenGetInfoResponse | Get all information about a token |
|
scheduleGetInfo | ScheduleGetInfoResponse | Get all information about a schedule entity |
|
tokenGetAccountNftInfos | TokenGetAccountNftInfosResponse | A list of the NFTs associated with the account |
|
tokenGetNftInfo | TokenGetNftInfoResponse | All information about an NFT |
|
tokenGetNftInfos | TokenGetNftInfosResponse | A list of the NFTs for the token |
|
networkGetExecutionTime | NetworkGetExecutionTimeResponse | Execution times of "sufficiently recent" transactions |
|
accountDetails | GetAccountDetailsResponse | Gets all information about an account including allowances granted by the account |
UNDOCUMENTED
Name | Number | Description |
OK | 0 | The transaction passed the precheck validations. |
INVALID_TRANSACTION | 1 | For any error not handled by specific error codes listed below. |
PAYER_ACCOUNT_NOT_FOUND | 2 | Payer account does not exist. |
INVALID_NODE_ACCOUNT | 3 | Node Account provided does not match the node account of the node the transaction was submitted to. |
TRANSACTION_EXPIRED | 4 | Pre-Check error when TransactionValidStart + transactionValidDuration is less than current consensus time. |
INVALID_TRANSACTION_START | 5 | Transaction start time is greater than current consensus time |
INVALID_TRANSACTION_DURATION | 6 | The given transactionValidDuration was either non-positive, or greater than the maximum valid duration of 180 secs. |
INVALID_SIGNATURE | 7 | The transaction signature is not valid |
MEMO_TOO_LONG | 8 | Transaction memo size exceeded 100 bytes |
INSUFFICIENT_TX_FEE | 9 | The fee provided in the transaction is insufficient for this type of transaction |
INSUFFICIENT_PAYER_BALANCE | 10 | The payer account has insufficient cryptocurrency to pay the transaction fee |
DUPLICATE_TRANSACTION | 11 | This transaction ID is a duplicate of one that was submitted to this node or reached consensus in the last 180 seconds (receipt period) |
BUSY | 12 | If API is throttled out |
NOT_SUPPORTED | 13 | The API is not currently supported |
INVALID_FILE_ID | 14 | The file id is invalid or does not exist |
INVALID_ACCOUNT_ID | 15 | The account id is invalid or does not exist |
INVALID_CONTRACT_ID | 16 | The contract id is invalid or does not exist |
INVALID_TRANSACTION_ID | 17 | Transaction id is not valid |
RECEIPT_NOT_FOUND | 18 | Receipt for given transaction id does not exist |
RECORD_NOT_FOUND | 19 | Record for given transaction id does not exist |
INVALID_SOLIDITY_ID | 20 | The solidity id is invalid or entity with this solidity id does not exist |
UNKNOWN | 21 | The responding node has submitted the transaction to the network. Its final status is still unknown. |
SUCCESS | 22 | The transaction succeeded |
FAIL_INVALID | 23 | There was a system error and the transaction failed because of invalid request parameters. |
FAIL_FEE | 24 | There was a system error while performing fee calculation, reserved for future. |
FAIL_BALANCE | 25 | There was a system error while performing balance checks, reserved for future. |
KEY_REQUIRED | 26 | Key not provided in the transaction body |
BAD_ENCODING | 27 | Unsupported algorithm/encoding used for keys in the transaction |
INSUFFICIENT_ACCOUNT_BALANCE | 28 | When the account balance is not sufficient for the transfer |
INVALID_SOLIDITY_ADDRESS | 29 | During an update transaction when the system is not able to find the Users Solidity address |
INSUFFICIENT_GAS | 30 | Not enough gas was supplied to execute transaction |
CONTRACT_SIZE_LIMIT_EXCEEDED | 31 | contract byte code size is over the limit |
LOCAL_CALL_MODIFICATION_EXCEPTION | 32 | local execution (query) is requested for a function which changes state |
CONTRACT_REVERT_EXECUTED | 33 | Contract REVERT OPCODE executed |
CONTRACT_EXECUTION_EXCEPTION | 34 | For any contract execution related error not handled by specific error codes listed above. |
INVALID_RECEIVING_NODE_ACCOUNT | 35 | In Query validation, account with +ve(amount) value should be Receiving node account, the receiver account should be only one account in the list |
MISSING_QUERY_HEADER | 36 | Header is missing in Query request |
ACCOUNT_UPDATE_FAILED | 37 | The update of the account failed |
INVALID_KEY_ENCODING | 38 | Provided key encoding was not supported by the system |
NULL_SOLIDITY_ADDRESS | 39 | null solidity address |
CONTRACT_UPDATE_FAILED | 40 | update of the contract failed |
INVALID_QUERY_HEADER | 41 | the query header is invalid |
INVALID_FEE_SUBMITTED | 42 | Invalid fee submitted |
INVALID_PAYER_SIGNATURE | 43 | Payer signature is invalid |
KEY_NOT_PROVIDED | 44 | The keys were not provided in the request. |
INVALID_EXPIRATION_TIME | 45 | Expiration time provided in the transaction was invalid. |
NO_WACL_KEY | 46 | WriteAccess Control Keys are not provided for the file |
FILE_CONTENT_EMPTY | 47 | The contents of file are provided as empty. |
INVALID_ACCOUNT_AMOUNTS | 48 | The crypto transfer credit and debit do not sum equal to 0 |
EMPTY_TRANSACTION_BODY | 49 | Transaction body provided is empty |
INVALID_TRANSACTION_BODY | 50 | Invalid transaction body provided |
INVALID_SIGNATURE_TYPE_MISMATCHING_KEY | 51 | the type of key (base ed25519 key, KeyList, or ThresholdKey) does not match the type of signature (base ed25519 signature, SignatureList, or ThresholdKeySignature) |
INVALID_SIGNATURE_COUNT_MISMATCHING_KEY | 52 | 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. |
EMPTY_LIVE_HASH_BODY | 53 | the livehash body is empty |
EMPTY_LIVE_HASH | 54 | the livehash data is missing |
EMPTY_LIVE_HASH_KEYS | 55 | the keys for a livehash are missing |
INVALID_LIVE_HASH_SIZE | 56 | the livehash data is not the output of a SHA-384 digest |
EMPTY_QUERY_BODY | 57 | the query body is empty |
EMPTY_LIVE_HASH_QUERY | 58 | the crypto livehash query is empty |
LIVE_HASH_NOT_FOUND | 59 | the livehash is not present |
ACCOUNT_ID_DOES_NOT_EXIST | 60 | the account id passed has not yet been created. |
LIVE_HASH_ALREADY_EXISTS | 61 | the livehash already exists for a given account |
INVALID_FILE_WACL | 62 | File WACL keys are invalid |
SERIALIZATION_FAILED | 63 | Serialization failure |
TRANSACTION_OVERSIZE | 64 | The size of the Transaction is greater than transactionMaxBytes |
TRANSACTION_TOO_MANY_LAYERS | 65 | The Transaction has more than 50 levels |
CONTRACT_DELETED | 66 | Contract is marked as deleted |
PLATFORM_NOT_ACTIVE | 67 | the platform node is either disconnected or lagging behind. |
KEY_PREFIX_MISMATCH | 68 | one public key matches more than one prefixes on the signature map |
PLATFORM_TRANSACTION_NOT_CREATED | 69 | transaction not created by platform due to large backlog |
INVALID_RENEWAL_PERIOD | 70 | auto renewal period is not a positive number of seconds |
INVALID_PAYER_ACCOUNT_ID | 71 | the response code when a smart contract id is passed for a crypto API request |
ACCOUNT_DELETED | 72 | the account has been marked as deleted |
FILE_DELETED | 73 | the file has been marked as deleted |
ACCOUNT_REPEATED_IN_ACCOUNT_AMOUNTS | 74 | same accounts repeated in the transfer account list |
SETTING_NEGATIVE_ACCOUNT_BALANCE | 75 | attempting to set negative balance value for crypto account |
OBTAINER_REQUIRED | 76 | when deleting smart contract that has crypto balance either transfer account or transfer smart contract is required |
OBTAINER_SAME_CONTRACT_ID | 77 | when deleting smart contract that has crypto balance you can not use the same contract id as transferContractId as the one being deleted |
OBTAINER_DOES_NOT_EXIST | 78 | transferAccountId or transferContractId specified for contract delete does not exist |
MODIFYING_IMMUTABLE_CONTRACT | 79 | attempting to modify (update or delete a immutable smart contract, i.e. one created without a admin key) |
FILE_SYSTEM_EXCEPTION | 80 | Unexpected exception thrown by file system functions |
AUTORENEW_DURATION_NOT_IN_RANGE | 81 | the duration is not a subset of [MINIMUM_AUTORENEW_DURATION,MAXIMUM_AUTORENEW_DURATION] |
ERROR_DECODING_BYTESTRING | 82 | Decoding the smart contract binary to a byte array failed. Check that the input is a valid hex string. |
CONTRACT_FILE_EMPTY | 83 | File to create a smart contract was of length zero |
CONTRACT_BYTECODE_EMPTY | 84 | Bytecode for smart contract is of length zero |
INVALID_INITIAL_BALANCE | 85 | Attempt to set negative initial balance |
INVALID_RECEIVE_RECORD_THRESHOLD | 86 | [Deprecated]. attempt to set negative receive record threshold |
INVALID_SEND_RECORD_THRESHOLD | 87 | [Deprecated]. attempt to set negative send record threshold |
ACCOUNT_IS_NOT_GENESIS_ACCOUNT | 88 | Special Account Operations should be performed by only Genesis account, return this code if it is not Genesis Account |
PAYER_ACCOUNT_UNAUTHORIZED | 89 | The fee payer account doesn't have permission to submit such Transaction |
INVALID_FREEZE_TRANSACTION_BODY | 90 | FreezeTransactionBody is invalid |
FREEZE_TRANSACTION_BODY_NOT_FOUND | 91 | FreezeTransactionBody does not exist |
TRANSFER_LIST_SIZE_LIMIT_EXCEEDED | 92 | Exceeded the number of accounts (both from and to) allowed for crypto transfer list |
RESULT_SIZE_LIMIT_EXCEEDED | 93 | Smart contract result size greater than specified maxResultSize |
NOT_SPECIAL_ACCOUNT | 94 | The payer account is not a special account(account 0.0.55) |
CONTRACT_NEGATIVE_GAS | 95 | Negative gas was offered in smart contract call |
CONTRACT_NEGATIVE_VALUE | 96 | Negative value / initial balance was specified in a smart contract call / create |
INVALID_FEE_FILE | 97 | Failed to update fee file |
INVALID_EXCHANGE_RATE_FILE | 98 | Failed to update exchange rate file |
INSUFFICIENT_LOCAL_CALL_GAS | 99 | Payment tendered for contract local call cannot cover both the fee and the gas |
ENTITY_NOT_ALLOWED_TO_DELETE | 100 | Entities with Entity ID below 1000 are not allowed to be deleted |
AUTHORIZATION_FAILED | 101 | 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). |
FILE_UPLOADED_PROTO_INVALID | 102 | Fee Schedule Proto uploaded but not valid (append or update is required) |
FILE_UPLOADED_PROTO_NOT_SAVED_TO_DISK | 103 | Fee Schedule Proto uploaded but not valid (append or update is required) |
FEE_SCHEDULE_FILE_PART_UPLOADED | 104 | Fee Schedule Proto File Part uploaded |
EXCHANGE_RATE_CHANGE_LIMIT_EXCEEDED | 105 | The change on Exchange Rate exceeds Exchange_Rate_Allowed_Percentage |
MAX_CONTRACT_STORAGE_EXCEEDED | 106 | Contract permanent storage exceeded the currently allowable limit |
TRANSFER_ACCOUNT_SAME_AS_DELETE_ACCOUNT | 107 | Transfer Account should not be same as Account to be deleted |
TOTAL_LEDGER_BALANCE_INVALID | 108 | |
EXPIRATION_REDUCTION_NOT_ALLOWED | 110 | The expiration date/time on a smart contract may not be reduced |
MAX_GAS_LIMIT_EXCEEDED | 111 | Gas exceeded currently allowable gas limit per transaction |
MAX_FILE_SIZE_EXCEEDED | 112 | File size exceeded the currently allowable limit |
RECEIVER_SIG_REQUIRED | 113 | When a valid signature is not provided for operations on account with receiverSigRequired=true |
INVALID_TOPIC_ID | 150 | The Topic ID specified is not in the system. |
INVALID_ADMIN_KEY | 155 | 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.. |
INVALID_SUBMIT_KEY | 156 | A provided submit key was invalid. |
UNAUTHORIZED | 157 | An attempted operation was not authorized (ie - a deleteTopic for a topic with no adminKey). |
INVALID_TOPIC_MESSAGE | 158 | A ConsensusService message is empty. |
INVALID_AUTORENEW_ACCOUNT | 159 | The autoRenewAccount specified is not a valid, active account. |
AUTORENEW_ACCOUNT_NOT_ALLOWED | 160 | An adminKey was not specified on the topic, so there must not be an autoRenewAccount. |
TOPIC_EXPIRED | 162 | 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. |
INVALID_CHUNK_NUMBER | 163 | chunk number must be from 1 to total (chunks) inclusive. |
INVALID_CHUNK_TRANSACTION_ID | 164 | 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_FROZEN_FOR_TOKEN | 165 | Account is frozen and cannot transact with the token |
TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED | 166 | An involved account already has more than <tt>tokens.maxPerAccount</tt> associations with non-deleted tokens. |
INVALID_TOKEN_ID | 167 | The token is invalid or does not exist |
INVALID_TOKEN_DECIMALS | 168 | Invalid token decimals |
INVALID_TOKEN_INITIAL_SUPPLY | 169 | Invalid token initial supply |
INVALID_TREASURY_ACCOUNT_FOR_TOKEN | 170 | Treasury Account does not exist or is deleted |
INVALID_TOKEN_SYMBOL | 171 | Token Symbol is not UTF-8 capitalized alphabetical string |
TOKEN_HAS_NO_FREEZE_KEY | 172 | Freeze key is not set on token |
TRANSFERS_NOT_ZERO_SUM_FOR_TOKEN | 173 | Amounts in transfer list are not net zero |
MISSING_TOKEN_SYMBOL | 174 | A token symbol was not provided |
TOKEN_SYMBOL_TOO_LONG | 175 | The provided token symbol was too long |
ACCOUNT_KYC_NOT_GRANTED_FOR_TOKEN | 176 | KYC must be granted and account does not have KYC granted |
TOKEN_HAS_NO_KYC_KEY | 177 | KYC key is not set on token |
INSUFFICIENT_TOKEN_BALANCE | 178 | Token balance is not sufficient for the transaction |
TOKEN_WAS_DELETED | 179 | Token transactions cannot be executed on deleted token |
TOKEN_HAS_NO_SUPPLY_KEY | 180 | Supply key is not set on token |
TOKEN_HAS_NO_WIPE_KEY | 181 | Wipe key is not set on token |
INVALID_TOKEN_MINT_AMOUNT | 182 | The requested token mint amount would cause an invalid total supply |
INVALID_TOKEN_BURN_AMOUNT | 183 | The requested token burn amount would cause an invalid total supply |
TOKEN_NOT_ASSOCIATED_TO_ACCOUNT | 184 | A required token-account relationship is missing |
CANNOT_WIPE_TOKEN_TREASURY_ACCOUNT | 185 | The target of a wipe operation was the token treasury account |
INVALID_KYC_KEY | 186 | The provided KYC key was invalid. |
INVALID_WIPE_KEY | 187 | The provided wipe key was invalid. |
INVALID_FREEZE_KEY | 188 | The provided freeze key was invalid. |
INVALID_SUPPLY_KEY | 189 | The provided supply key was invalid. |
MISSING_TOKEN_NAME | 190 | Token Name is not provided |
TOKEN_NAME_TOO_LONG | 191 | Token Name is too long |
INVALID_WIPING_AMOUNT | 192 | The provided wipe amount must not be negative, zero or bigger than the token holder balance |
TOKEN_IS_IMMUTABLE | 193 | Token does not have Admin key set, thus update/delete transactions cannot be performed |
TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT | 194 | An <tt>associateToken</tt> operation specified a token already associated to the account |
TRANSACTION_REQUIRES_ZERO_TOKEN_BALANCES | 195 | An attempted operation is invalid until all token balances for the target account are zero |
ACCOUNT_IS_TREASURY | 196 | An attempted operation is invalid because the account is a treasury |
TOKEN_ID_REPEATED_IN_TOKEN_LIST | 197 | Same TokenIDs present in the token list |
TOKEN_TRANSFER_LIST_SIZE_LIMIT_EXCEEDED | 198 | Exceeded the number of token transfers (both from and to) allowed for token transfer list |
EMPTY_TOKEN_TRANSFER_BODY | 199 | TokenTransfersTransactionBody has no TokenTransferList |
EMPTY_TOKEN_TRANSFER_ACCOUNT_AMOUNTS | 200 | TokenTransfersTransactionBody has a TokenTransferList with no AccountAmounts |
INVALID_SCHEDULE_ID | 201 | The Scheduled entity does not exist; or has now expired, been deleted, or been executed |
SCHEDULE_IS_IMMUTABLE | 202 | The Scheduled entity cannot be modified. Admin key not set |
INVALID_SCHEDULE_PAYER_ID | 203 | The provided Scheduled Payer does not exist |
INVALID_SCHEDULE_ACCOUNT_ID | 204 | The Schedule Create Transaction TransactionID account does not exist |
NO_NEW_VALID_SIGNATURES | 205 | The provided sig map did not contain any new valid signatures from required signers of the scheduled transaction |
UNRESOLVABLE_REQUIRED_SIGNERS | 206 | The required signers for a scheduled transaction cannot be resolved, for example because they do not exist or have been deleted |
SCHEDULED_TRANSACTION_NOT_IN_WHITELIST | 207 | Only whitelisted transaction types may be scheduled |
SOME_SIGNATURES_WERE_INVALID | 208 | At least one of the signatures in the provided sig map did not represent a valid signature for any required signer |
TRANSACTION_ID_FIELD_NOT_ALLOWED | 209 | The scheduled field in the TransactionID may not be set to true |
IDENTICAL_SCHEDULE_ALREADY_CREATED | 210 | A schedule already exists with the same identifying fields of an attempted ScheduleCreate (that is, all fields other than scheduledPayerAccountID) |
INVALID_ZERO_BYTE_IN_STRING | 211 | A string field in the transaction has a UTF-8 encoding with the prohibited zero byte |
SCHEDULE_ALREADY_DELETED | 212 | A schedule being signed or deleted has already been deleted |
SCHEDULE_ALREADY_EXECUTED | 213 | A schedule being signed or deleted has already been executed |
MESSAGE_SIZE_TOO_LARGE | 214 | ConsensusSubmitMessage request's message size is larger than allowed. |
OPERATION_REPEATED_IN_BUCKET_GROUPS | 215 | An operation was assigned to more than one throttle group in a given bucket |
BUCKET_CAPACITY_OVERFLOW | 216 | The capacity needed to satisfy all opsPerSec groups in a bucket overflowed a signed 8-byte integral type |
NODE_CAPACITY_NOT_SUFFICIENT_FOR_OPERATION | 217 | 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 |
BUCKET_HAS_NO_THROTTLE_GROUPS | 218 | A bucket was defined without any throttle groups |
THROTTLE_GROUP_HAS_ZERO_OPS_PER_SEC | 219 | A throttle group was granted zero opsPerSec |
SUCCESS_BUT_MISSING_EXPECTED_OPERATION | 220 | The throttle definitions file was updated, but some supported operations were not assigned a bucket |
UNPARSEABLE_THROTTLE_DEFINITIONS | 221 | The new contents for the throttle definitions system file were not valid protobuf |
INVALID_THROTTLE_DEFINITIONS | 222 | The new throttle definitions system file were invalid, and no more specific error could be divined |
ACCOUNT_EXPIRED_AND_PENDING_REMOVAL | 223 | 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 | 224 | Invalid token max supply |
INVALID_TOKEN_NFT_SERIAL_NUMBER | 225 | Invalid token nft serial number |
INVALID_NFT_ID | 226 | Invalid nft id |
METADATA_TOO_LONG | 227 | Nft metadata is too long |
BATCH_SIZE_LIMIT_EXCEEDED | 228 | Repeated operations count exceeds the limit |
INVALID_QUERY_RANGE | 229 | The range of data to be gathered is out of the set boundaries |
FRACTION_DIVIDES_BY_ZERO | 230 | A custom fractional fee set a denominator of zero |
INSUFFICIENT_PAYER_BALANCE_FOR_CUSTOM_FEE | 231 | The transaction payer could not afford a custom fee |
CUSTOM_FEES_LIST_TOO_LONG | 232 | More than 10 custom fees were specified |
INVALID_CUSTOM_FEE_COLLECTOR | 233 | Any of the feeCollector accounts for customFees is invalid |
INVALID_TOKEN_ID_IN_CUSTOM_FEES | 234 | Any of the token Ids in customFees is invalid |
TOKEN_NOT_ASSOCIATED_TO_FEE_COLLECTOR | 235 | Any of the token Ids in customFees are not associated to feeCollector |
TOKEN_MAX_SUPPLY_REACHED | 236 | A token cannot have more units minted due to its configured supply ceiling |
SENDER_DOES_NOT_OWN_NFT_SERIAL_NO | 237 | The transaction attempted to move an NFT serial number from an account other than its owner |
CUSTOM_FEE_NOT_FULLY_SPECIFIED | 238 | A custom fee schedule entry did not specify either a fixed or fractional fee |
CUSTOM_FEE_MUST_BE_POSITIVE | 239 | Only positive fees may be assessed at this time |
TOKEN_HAS_NO_FEE_SCHEDULE_KEY | 240 | Fee schedule key is not set on token |
CUSTOM_FEE_OUTSIDE_NUMERIC_RANGE | 241 | A fractional custom fee exceeded the range of a 64-bit signed integer |
ROYALTY_FRACTION_CANNOT_EXCEED_ONE | 242 | A royalty cannot exceed the total fungible value exchanged for an NFT |
FRACTIONAL_FEE_MAX_AMOUNT_LESS_THAN_MIN_AMOUNT | 243 | Each fractional custom fee must have its maximum_amount, if specified, at least its minimum_amount |
CUSTOM_SCHEDULE_ALREADY_HAS_NO_FEES | 244 | A fee schedule update tried to clear the custom fees from a token whose fee schedule was already empty |
CUSTOM_FEE_DENOMINATION_MUST_BE_FUNGIBLE_COMMON | 245 | Only tokens of type FUNGIBLE_COMMON can be used to as fee schedule denominations |
CUSTOM_FRACTIONAL_FEE_ONLY_ALLOWED_FOR_FUNGIBLE_COMMON | 246 | Only tokens of type FUNGIBLE_COMMON can have fractional fees |
INVALID_CUSTOM_FEE_SCHEDULE_KEY | 247 | The provided custom fee schedule key was invalid |
INVALID_TOKEN_MINT_METADATA | 248 | The requested token mint metadata was invalid |
INVALID_TOKEN_BURN_METADATA | 249 | The requested token burn metadata was invalid |
CURRENT_TREASURY_STILL_OWNS_NFTS | 250 | The treasury for a unique token cannot be changed until it owns no NFTs |
ACCOUNT_STILL_OWNS_NFTS | 251 | An account cannot be dissociated from a unique token if it owns NFTs for the token |
TREASURY_MUST_OWN_BURNED_NFT | 252 | A NFT can only be burned when owned by the unique token's treasury |
ACCOUNT_DOES_NOT_OWN_WIPED_NFT | 253 | An account did not own the NFT to be wiped |
ACCOUNT_AMOUNT_TRANSFERS_ONLY_ALLOWED_FOR_FUNGIBLE_COMMON | 254 | An AccountAmount token transfers list referenced a token type other than FUNGIBLE_COMMON |
MAX_NFTS_IN_PRICE_REGIME_HAVE_BEEN_MINTED | 255 | All the NFTs allowed in the current price regime have already been minted |
PAYER_ACCOUNT_DELETED | 256 | The payer account has been marked as deleted |
CUSTOM_FEE_CHARGING_EXCEEDED_MAX_RECURSION_DEPTH | 257 | The reference chain of custom fees for a transferred token exceeded the maximum length of 2 |
CUSTOM_FEE_CHARGING_EXCEEDED_MAX_ACCOUNT_AMOUNTS | 258 | More than 20 balance adjustments were to satisfy a CryptoTransfer and its implied custom fee payments |
INSUFFICIENT_SENDER_ACCOUNT_BALANCE_FOR_CUSTOM_FEE | 259 | The sender account in the token transfer transaction could not afford a custom fee |
SERIAL_NUMBER_LIMIT_REACHED | 260 | Currently no more than 4,294,967,295 NFTs may be minted for a given unique token type |
CUSTOM_ROYALTY_FEE_ONLY_ALLOWED_FOR_NON_FUNGIBLE_UNIQUE | 261 | Only tokens of type NON_FUNGIBLE_UNIQUE can have royalty fees |
NO_REMAINING_AUTOMATIC_ASSOCIATIONS | 262 | The account has reached the limit on the automatic associations count. |
EXISTING_AUTOMATIC_ASSOCIATIONS_EXCEED_GIVEN_LIMIT | 263 | Already existing automatic associations are more than the new maximum automatic associations. |
REQUESTED_NUM_AUTOMATIC_ASSOCIATIONS_EXCEEDS_ASSOCIATION_LIMIT | 264 | Cannot set the number of automatic associations for an account more than the maximum allowed token associations <tt>tokens.maxPerAccount</tt>. |
TOKEN_IS_PAUSED | 265 | Token is paused. This Token cannot be a part of any kind of Transaction until unpaused. |
TOKEN_HAS_NO_PAUSE_KEY | 266 | Pause key is not set on token |
INVALID_PAUSE_KEY | 267 | The provided pause key was invalid |
FREEZE_UPDATE_FILE_DOES_NOT_EXIST | 268 | The update file in a freeze transaction body must exist. |
FREEZE_UPDATE_FILE_HASH_DOES_NOT_MATCH | 269 | The hash of the update file in a freeze transaction body must match the in-memory hash. |
NO_UPGRADE_HAS_BEEN_PREPARED | 270 | A FREEZE_UPGRADE transaction was handled with no previous update prepared. |
NO_FREEZE_IS_SCHEDULED | 271 | A FREEZE_ABORT transaction was handled with no scheduled freeze. |
UPDATE_FILE_HASH_CHANGED_SINCE_PREPARE_UPGRADE | 272 | The update file hash when handling a FREEZE_UPGRADE transaction differs from the file hash at the time of handling the PREPARE_UPGRADE transaction. |
FREEZE_START_TIME_MUST_BE_FUTURE | 273 | The given freeze start time was in the (consensus) past. |
PREPARED_UPDATE_FILE_IS_IMMUTABLE | 274 | The prepared update file cannot be updated or appended until either the upgrade has been completed, or a FREEZE_ABORT has been handled. |
FREEZE_ALREADY_SCHEDULED | 275 | Once a freeze is scheduled, it must be aborted before any other type of freeze can can be performed. |
FREEZE_UPGRADE_IN_PROGRESS | 276 | 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.) |
UPDATE_FILE_ID_DOES_NOT_MATCH_PREPARED | 277 | 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. |
UPDATE_FILE_HASH_DOES_NOT_MATCH_PREPARED | 278 | 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_GAS_EXHAUSTED | 279 | Consensus throttle did not allow execution of this transaction. System is throttled at consensus level. |
REVERTED_SUCCESS | 280 | A precompiled contract succeeded, but was later reverted. |
MAX_STORAGE_IN_PRICE_REGIME_HAS_BEEN_USED | 281 | All contract storage allocated to the current price regime has been consumed. |
INVALID_ALIAS_KEY | 282 | 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. |
UNEXPECTED_TOKEN_DECIMALS | 283 | A fungible token transfer expected a different number of decimals than the involved type actually has. |
INVALID_PROXY_ACCOUNT_ID | 284 | [Deprecated] The proxy account id is invalid or does not exist. |
INVALID_TRANSFER_ACCOUNT_ID | 285 | The transfer account id in CryptoDelete transaction is invalid or does not exist. |
INVALID_FEE_COLLECTOR_ACCOUNT_ID | 286 | The fee collector account id in TokenFeeScheduleUpdate is invalid or does not exist. |
ALIAS_IS_IMMUTABLE | 287 | The alias already set on an account cannot be updated using CryptoUpdate transaction. |
SPENDER_ACCOUNT_SAME_AS_OWNER | 288 | An approved allowance specifies a spender account that is the same as the hbar/token owner account. |
AMOUNT_EXCEEDS_TOKEN_MAX_SUPPLY | 289 | The establishment or adjustment of an approved allowance cause the token allowance to exceed the token maximum supply. |
NEGATIVE_ALLOWANCE_AMOUNT | 290 | The specified amount for an approved allowance cannot be negative. |
CANNOT_APPROVE_FOR_ALL_FUNGIBLE_COMMON | 291 | [Deprecated] The approveForAll flag cannot be set for a fungible token. |
SPENDER_DOES_NOT_HAVE_ALLOWANCE | 292 | The spender does not have an existing approved allowance with the hbar/token owner. |
AMOUNT_EXCEEDS_ALLOWANCE | 293 | The transfer amount exceeds the current approved allowance for the spender account. |
MAX_ALLOWANCES_EXCEEDED | 294 | The payer account of an approveAllowances or adjustAllowance transaction is attempting to go beyond the maximum allowed number of allowances. |
EMPTY_ALLOWANCES | 295 | No allowances have been specified in the approval transaction. |
SPENDER_ACCOUNT_REPEATED_IN_ALLOWANCES | 296 | [Deprecated] Spender is repeated more than once in Crypto or Token or NFT allowance lists in a single CryptoApproveAllowance transaction. |
REPEATED_SERIAL_NUMS_IN_NFT_ALLOWANCES | 297 | [Deprecated] Serial numbers are repeated in nft allowance for a single spender account |
FUNGIBLE_TOKEN_IN_NFT_ALLOWANCES | 298 | Fungible common token used in NFT allowances |
NFT_IN_FUNGIBLE_TOKEN_ALLOWANCES | 299 | Non fungible token used in fungible token allowances |
INVALID_ALLOWANCE_OWNER_ID | 300 | The account id specified as the owner is invalid or does not exist. |
INVALID_ALLOWANCE_SPENDER_ID | 301 | The account id specified as the spender is invalid or does not exist. |
REPEATED_ALLOWANCES_TO_DELETE | 302 | [Deprecated] If the CryptoDeleteAllowance transaction has repeated crypto or token or Nft allowances to delete. |
INVALID_DELEGATING_SPENDER | 303 | If the account Id specified as the delegating spender is invalid or does not exist. |
DELEGATING_SPENDER_CANNOT_GRANT_APPROVE_FOR_ALL | 304 | The delegating Spender cannot grant approveForAll allowance on a NFT token type for another spender. |
DELEGATING_SPENDER_DOES_NOT_HAVE_APPROVE_FOR_ALL | 305 | The delegating Spender cannot grant allowance on a NFT serial for another spender as it doesnt not have approveForAll granted on token-owner. |
SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE | 306 | The scheduled transaction could not be created because it's expiration_time was too far in the future. |
SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME | 307 | The scheduled transaction could not be created because it's expiration_time was less than or equal to the consensus time. |
SCHEDULE_FUTURE_THROTTLE_EXCEEDED | 308 | The scheduled transaction could not be created because it would cause throttles to be violated on the specified expiration_time. |
SCHEDULE_FUTURE_GAS_LIMIT_EXCEEDED | 309 | The scheduled transaction could not be created because it would cause the gas limit to be violated on the specified expiration_time. |
INVALID_ETHEREUM_TRANSACTION | 310 | The ethereum transaction either failed parsing or failed signature validation, or some other EthereumTransaction error not covered by another response code. |
WRONG_CHAIN_ID | 311 | EthereumTransaction was signed against a chainId that this network does not support. |
WRONG_NONCE | 312 | This transaction specified an ethereumNonce that is not the current ethereumNonce of the account. |
ACCESS_LIST_UNSUPPORTED | 313 | The ethereum transaction specified an access list, which the network does not support. |
SCHEDULE_PENDING_EXPIRATION | 314 | A schedule being signed or deleted has passed it's expiration date and is pending execution if needed and then expiration. |
CONTRACT_IS_TOKEN_TREASURY | 315 | A selfdestruct or ContractDelete targeted a contract that is a token treasury. |
CONTRACT_HAS_NON_ZERO_TOKEN_BALANCES | 316 | A selfdestruct or ContractDelete targeted a contract with non-zero token balances. |
CONTRACT_EXPIRED_AND_PENDING_REMOVAL | 317 | 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. |
CONTRACT_HAS_NO_AUTO_RENEW_ACCOUNT | 318 | A ContractUpdate requested removal of a contract's auto-renew account, but that contract has no auto-renew account. |
PERMANENT_REMOVAL_REQUIRES_SYSTEM_INITIATION | 319 | A delete transaction submitted via HAPI set permanent_removal=true |
PROXY_ACCOUNT_ID_FIELD_IS_DEPRECATED | 320 | A CryptoCreate or ContractCreate used the deprecated proxyAccountID field. |
SELF_STAKING_IS_NOT_ALLOWED | 321 | An account set the staked_account_id to itself in CryptoUpdate or ContractUpdate transactions. |
INVALID_STAKING_ID | 322 | The staking account id or staking node id given is invalid or does not exist. |
STAKING_NOT_ENABLED | 323 | Native staking, while implemented, has not yet enabled by the council. |
INVALID_PRNG_RANGE | 324 | The range provided in UtilPrng transaction is negative. |
MAX_ENTITIES_IN_PRICE_REGIME_HAVE_BEEN_CREATED | 325 | The maximum number of entities allowed in the current price regime have been created. |
INVALID_FULL_PREFIX_SIGNATURE_FOR_PRECOMPILE | 326 | The full prefix signature for precompile is not valid |
INSUFFICIENT_BALANCES_FOR_STORAGE_RENT | 327 | 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. |
MAX_CHILD_RECORDS_EXCEEDED | 328 | A contract transaction tried to use more than the allowed number of child records, via either system contract records or internal contract creations. |
INSUFFICIENT_BALANCES_FOR_RENEWAL_FEES | 329 | 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. |
TRANSACTION_HAS_UNKNOWN_FIELDS | 330 | A transaction's protobuf message includes unknown fields; could mean that a client expects not-yet-released functionality to be available. |
ACCOUNT_IS_IMMUTABLE | 331 | The account cannot be modified. Account's key is not set |
Every query receives a response containing the QueryResponseHeader. Either or both of the cost
and stateProof fields may be blank, if the responseType didn't ask for the cost or stateProof.
Field | Type | Label | Description |
nodeTransactionPrecheckCode | ResponseCodeEnum | Result of fee transaction precheck, saying it passed, or why it failed |
|
responseType | ResponseType | The requested response is repeated back here, for convenience |
|
cost | uint64 | The fee that would be charged to get the requested information (if a cost was requested). Note: This cost only includes the query fee and does not include the transfer fee(which is required to execute the transfer transaction to debit the payer account and credit the node account with query fee) |
|
stateProof | bytes | The state proof for this information (if a state proof was requested, and is available) |
A schedulable transaction. Note that the global/dynamic system property
scheduling.whitelist controls which transaction types may be scheduled. As of Hedera
Services 0.24.0 this list includes ConsensusSubmitMessage, CryptoTransfer, TokenMint, and TokenBurn
functions.
Field | Type | Label | Description |
transactionFee | uint64 | The maximum transaction fee the client is willing to pay |
|
memo | string | A memo to include the execution record; the UTF-8 encoding may be up to 100 bytes and must not include the zero byte |
|
contractCall | ContractCallTransactionBody | Calls a function of a contract instance |
|
contractCreateInstance | ContractCreateTransactionBody | Creates a contract instance |
|
contractUpdateInstance | ContractUpdateTransactionBody | Updates a contract |
|
contractDeleteInstance | ContractDeleteTransactionBody | Delete contract and transfer remaining balance into specified account |
|
cryptoApproveAllowance | CryptoApproveAllowanceTransactionBody | Adds one or more approved allowances for spenders to transfer the paying account's hbar or tokens. |
|
cryptoDeleteAllowance | CryptoDeleteAllowanceTransactionBody | Deletes one or more of the specific approved NFT serial numbers on an owner account. |
|
cryptoCreateAccount | CryptoCreateTransactionBody | Create a new cryptocurrency account |
|
cryptoDelete | CryptoDeleteTransactionBody | Delete a cryptocurrency account (mark as deleted, and transfer hbars out) |
|
cryptoTransfer | CryptoTransferTransactionBody | Transfer amount between accounts |
|
cryptoUpdateAccount | CryptoUpdateTransactionBody | Modify information such as the expiration date for an account |
|
fileAppend | FileAppendTransactionBody | Add bytes to the end of the contents of a file |
|
fileCreate | FileCreateTransactionBody | Create a new file |
|
fileDelete | FileDeleteTransactionBody | Delete a file (remove contents and mark as deleted until it expires) |
|
fileUpdate | FileUpdateTransactionBody | Modify information such as the expiration date for a file |
|
systemDelete | SystemDeleteTransactionBody | Hedera administrative deletion of a file or smart contract |
|
systemUndelete | SystemUndeleteTransactionBody | To undelete an entity deleted by SystemDelete |
|
freeze | FreezeTransactionBody | Freeze the nodes |
|
consensusCreateTopic | ConsensusCreateTopicTransactionBody | Creates a topic |
|
consensusUpdateTopic | ConsensusUpdateTopicTransactionBody | Updates a topic |
|
consensusDeleteTopic | ConsensusDeleteTopicTransactionBody | Deletes a topic |
|
consensusSubmitMessage | ConsensusSubmitMessageTransactionBody | Submits message to a topic |
|
tokenCreation | TokenCreateTransactionBody | Creates a token instance |
|
tokenFreeze | TokenFreezeAccountTransactionBody | Freezes account not to be able to transact with a token |
|
tokenUnfreeze | TokenUnfreezeAccountTransactionBody | Unfreezes account for a token |
|
tokenGrantKyc | TokenGrantKycTransactionBody | Grants KYC to an account for a token |
|
tokenRevokeKyc | TokenRevokeKycTransactionBody | Revokes KYC of an account for a token |
|
tokenDeletion | TokenDeleteTransactionBody | Deletes a token instance |
|
tokenUpdate | TokenUpdateTransactionBody | Updates a token instance |
|
tokenMint | TokenMintTransactionBody | Mints new tokens to a token's treasury account |
|
tokenBurn | TokenBurnTransactionBody | Burns tokens from a token's treasury account |
|
tokenWipe | TokenWipeAccountTransactionBody | Wipes amount of tokens from an account |
|
tokenAssociate | TokenAssociateTransactionBody | Associate tokens to an account |
|
tokenDissociate | TokenDissociateTransactionBody | Dissociate tokens from an account |
|
token_fee_schedule_update | TokenFeeScheduleUpdateTransactionBody | Updates a token's custom fee schedule |
|
token_pause | TokenPauseTransactionBody | Pauses the Token |
|
token_unpause | TokenUnpauseTransactionBody | Unpauses the Token |
|
scheduleDelete | ScheduleDeleteTransactionBody | Marks a schedule in the network's action queue as deleted, preventing it from executing |
|
util_prng | UtilPrngTransactionBody | Generates a pseudorandom number. |
Create a new schedule entity (or simply, schedule) in the network's action queue.
Upon SUCCESS, the receipt contains the `ScheduleID` of the created schedule. A schedule
entity includes a scheduledTransactionBody to be executed.
When the schedule has collected enough signing Ed25519 keys to satisfy the schedule's signing
requirements, the schedule can be executed.
If Long Term Scheduled Transactions are enabled and wait_for_expiry is set to true, then the schedule
will execute at it's expiration_time.
Otherwise it will execute immediately after the transaction that provided enough Ed25519 keys, a ScheduleCreate
or ScheduleSign.
Upon `SUCCESS`, the receipt also includes the scheduledTransactionID to
use to query for the record of the scheduled transaction's execution (if it occurs).
The expiration time of a schedule is controlled by it's expiration_time. It remains in state and can be queried
using GetScheduleInfo until expiration, no matter if the scheduled transaction has
executed or marked deleted. If Long Term Scheduled Transactions are disabled, the expiration_time is always
30 minutes in the future.
If the adminKey field is omitted, the resulting schedule is immutable. If the
adminKey is set, the ScheduleDelete transaction can be used to mark it as
deleted. The creator may also specify an optional memo whose UTF-8 encoding is at most
100 bytes and does not include the zero byte is also supported.
When a scheduledTransactionBody is executed, the
network only charges its payer the service fee, and not the node and network fees. If the
optional payerAccountID is set, the network charges this account. Otherwise it charges
the payer of the originating ScheduleCreate.
Two ScheduleCreate transactions are identical if they are equal in all their
fields other than payerAccountID. (For the scheduledTransactionBody field,
"equal" should be understood in the sense of
gRPC object equality in the network software runtime. In particular, a gRPC object with href="https://developers.google.com/protocol-buffers/docs/proto3#unknowns">unknown fields
not equal to a gRPC object without unknown fields, even if they agree on all known fields.)
A ScheduleCreate transaction that attempts to re-create an identical schedule already in
state will receive a receipt with status IDENTICAL_SCHEDULE_ALREADY_CREATED; the receipt
will include the ScheduleID of the extant schedule, which may be used in a subsequent
ScheduleSign transaction. (The receipt will also include the TransactionID to
use in querying for the receipt or record of the scheduled transaction.)
Other notable response codes include, INVALID_ACCOUNT_ID,
UNSCHEDULABLE_TRANSACTION, UNRESOLVABLE_REQUIRED_SIGNERS,
INVALID_SIGNATURE. For more information please see the section of this documentation on
the ResponseCode enum.
Field | Type | Label | Description |
scheduledTransactionBody | SchedulableTransactionBody | The scheduled transaction |
|
memo | string | An optional memo with a UTF-8 encoding of no more than 100 bytes which does not contain the zero byte |
|
adminKey | Key | An optional Hedera key which can be used to sign a ScheduleDelete and remove the schedule |
|
payerAccountID | AccountID | An optional id of the account to be charged the service fee for the scheduled transaction at the consensus time that it executes (if ever); defaults to the ScheduleCreate payer if not given |
|
expiration_time | Timestamp | An optional timestamp for specifying when the transaction should be evaluated for execution and then expire. Defaults to 30 minutes after the transaction's consensus timestamp. Note: This field is unused and forced to be unset until Long Term Scheduled Transactions are enabled - Transactions will always expire in 30 minutes if Long Term Scheduled Transactions are not enabled. |
|
wait_for_expiry | bool | When set to true, the transaction will be evaluated for execution at expiration_time instead of when all required signatures are received. When set to false, the transaction will execute immediately after sufficient signatures are received to sign the contained transaction. During the initial ScheduleCreate transaction or via ScheduleSign transactions. Defaults to false. Setting this to false does not necessarily mean that the transaction will never execute at expiration_time. For Example - If the signature requirements for a Scheduled Transaction change via external means (e.g. CryptoUpdate) such that the Scheduled Transaction would be allowed to execute, it will do so autonomously at expiration_time, unless a ScheduleSign comes in to “poke” it and force it to go through immediately. Note: This field is unused and forced to be unset until Long Term Scheduled Transactions are enabled. Before Long Term Scheduled Transactions are enabled, Scheduled Transactions will _never_ execute at expiration - they will _only_ execute during the initial ScheduleCreate transaction or via ScheduleSign transactions and will _always_ expire at expiration_time. |
Marks a schedule in the network's action queue as deleted. Must be signed by the admin key of the
target schedule. A deleted schedule cannot receive any additional signing keys, nor will it be
executed.
Other notable response codes include, INVALID_SCHEDULE_ID, SCHEDULE_PENDING_EXPIRATION,
SCHEDULE_ALREADY_DELETED, SCHEDULE_ALREADY_EXECUTED, SCHEDULE_IS_IMMUTABLE.
For more information please see the section of this documentation on the ResponseCode
enum.
Field | Type | Label | Description |
scheduleID | ScheduleID | The ID of the Scheduled Entity |
Gets information about a schedule in the network's action queue.
Responds with INVALID_SCHEDULE_ID if the requested schedule doesn't exist.
Field | Type | Label | Description |
header | QueryHeader | standard info sent from client to node including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
scheduleID | ScheduleID | The id of the schedule to interrogate |
Response wrapper for the ScheduleInfo
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
scheduleInfo | ScheduleInfo | The information requested about this schedule instance |
Information summarizing schedule state
Field | Type | Label | Description |
scheduleID | ScheduleID | The id of the schedule |
|
deletion_time | Timestamp | If the schedule has been deleted, the consensus time when this occurred |
|
execution_time | Timestamp | If the schedule has been executed, the consensus time when this occurred |
|
expirationTime | Timestamp | The time at which the schedule will be evaluated for execution and then expire. Note: Before Long Term Scheduled Transactions are enabled, Scheduled Transactions will _never_ execute at expiration - they will _only_ execute during the initial ScheduleCreate transaction or via ScheduleSign transactions and will _always_ expire at expirationTime. |
|
scheduledTransactionBody | SchedulableTransactionBody | The scheduled transaction |
|
memo | string | The publicly visible memo of the schedule |
|
adminKey | Key | The key used to delete the schedule from state |
|
signers | KeyList | The Ed25519 keys the network deems to have signed the scheduled transaction |
|
creatorAccountID | AccountID | The id of the account that created the schedule |
|
payerAccountID | AccountID | The id of the account responsible for the service fee of the scheduled transaction |
|
scheduledTransactionID | TransactionID | The transaction id that will be used in the record of the scheduled transaction (if it executes) |
|
ledger_id | bytes | The ledger ID the response was returned from; please see <a href="https://github.com/hashgraph/hedera-improvement-proposal/blob/master/HIP/hip-198.md">HIP-198</a> for the network-specific IDs. |
|
wait_for_expiry | bool | When set to true, the transaction will be evaluated for execution at expiration_time instead of when all required signatures are received. When set to false, the transaction will execute immediately after sufficient signatures are received to sign the contained transaction. During the initial ScheduleCreate transaction or via ScheduleSign transactions. Note: this field is unused until Long Term Scheduled Transactions are enabled. |
Transactions and queries for the Schedule Service
The Schedule Service allows transactions to be submitted without all the required signatures and
allows anyone to provide the required signatures independently after a transaction has already
been created. The transactions can be executed immediately when all required signatures are received
or at a future date if Long Term Scheduled Transactions are enabled.
Execution:
Scheduled Transactions are executed in two different modes.
1. If Long Term Scheduled Transactions are enabled and wait_for_expiry was set to true on the
ScheduleCreate, then the transaction will be executed at the expiration_time specified on the
ScheduleCreate.
2. Otherwise Scheduled Transactions are executed once all required signatures are collected and witnessed.
Every time new signature is provided, a check is performed on the "readiness" of the execution.
The Scheduled Transaction will be executed immediately after the transaction that triggered it.
NOTICE:
A Scheduled Transaction being ready to execute, or even not ready to execute, at the time a ScheduleCreate or
ScheduleSign comes in does not guarantee it will stay that way. Any number of things can happen over time that
impact the transaction.
For example, account keys can change, accounts can be deleted, and account balances can change.
A particularly noteworthy case is if Long Term Scheduled Transactions are enabled and signature requirements for a Scheduled
Transaction change such that existing signatures become sufficient to allow the transaction to go through. In this case the transaction
will execute at expiration_time unless a ScheduleSign comes in to push it through.
Transaction Record:
If a Scheduled Transaction is executed immediately following the transaction that provided all required signatures,
the timestamp of the Scheduled Transaction will be equal to consensusTimestamp + 1 nano, where
consensusTimestamp is the timestamp of the transaction that triggered the execution.
The Transaction ID of the Scheduled Transaction will have the scheduled property set to true and
inherit the transactionValidStart and accountID from the ScheduleCreate transaction.
The scheduleRef property of the transaction record will be populated with the ScheduleID of the
Scheduled Transaction.
Post execution:
After execution, a Scheduled Transaction will remain in state and can be queried using GetScheduleInfo until expiration.
Expiry:
The expiration time of a schedule is controlled by it's expiration_time. If Long Term Scheduled Transactions are disabled,
the expiration_time is always 30 minutes in the future.
Once a given Scheduled Transaction expires, it will be removed from the ledger and any upcoming
operation referring the ScheduleID will resolve to INVALID_SCHEDULE_ID.
Method Name | Request Type | Response Type | Description |
createSchedule | Transaction | TransactionResponse | Creates a new Schedule by submitting the transaction |
signSchedule | Transaction | TransactionResponse | Signs a new Schedule by submitting the transaction |
deleteSchedule | Transaction | TransactionResponse | Deletes a new Schedule by submitting the transaction |
getScheduleInfo | Query | Response | Retrieves the metadata of a schedule entity |
Adds zero or more signing keys to a schedule.
If Long Term Scheduled Transactions are enabled and wait_for_expiry was set to true on the
ScheduleCreate then the transaction will always wait till it's `expiration_time` to execute.
Otherwise, if the resulting set of signing keys satisfy the
scheduled transaction's signing requirements, it will be executed immediately after the
triggering ScheduleSign.
Upon SUCCESS, the receipt includes the scheduledTransactionID to use to query
for the record of the scheduled transaction's execution (if it occurs).
Other notable response codes include INVALID_SCHEDULE_ID, SCHEDULE_ALREADY_DELETED,
SCHEDULE_PENDING_EXPIRATION, SCHEDULE_ALREADY_EXPIRED,
INVALID_ACCOUNT_ID, UNRESOLVABLE_REQUIRED_SIGNERS,
SOME_SIGNATURES_WERE_INVALID, and NO_NEW_VALID_SIGNATURES. For more information
please see the section of this documentation on the ResponseCode enum.
Field | Type | Label | Description |
scheduleID | ScheduleID | The id of the schedule to add signing keys to |
Transactions and queries for the file service.
Method Name | Request Type | Response Type | Description |
createContract | Transaction | TransactionResponse | Creates a contract |
updateContract | Transaction | TransactionResponse | Updates a contract with the content |
contractCallMethod | Transaction | TransactionResponse | Calls a contract |
getContractInfo | Query | Response | Retrieves the contract information |
contractCallLocalMethod | Query | Response | Calls a smart contract to be run on a single node |
ContractGetBytecode | Query | Response | Retrieves the runtime code of a contract |
getBySolidityID | Query | Response | Retrieves a contract by its Solidity address |
getTxRecordByContractID | Query | Response | Always returns an empty record list, as contract accounts are never effective payers for transactions |
deleteContract | Transaction | TransactionResponse | Deletes a contract instance and transfers any remaining hbars to a specified receiver |
systemDelete | Transaction | TransactionResponse | Deletes a contract if the submitting account has network admin privileges |
systemUndelete | Transaction | TransactionResponse | Undeletes a contract if the submitting account has network admin privileges |
callEthereum | Transaction | TransactionResponse | Ethereum transaction |
Method Name | Option |
getTxRecordByContractID | true |
Delete a file or smart contract - can only be done with a Hedera administrative multisignature.
When it is deleted, it immediately disappears from the system as seen by the user, but is still
stored internally until the expiration time, at which time it is truly and permanently deleted.
Until that time, it can be undeleted by the Hedera administrative multisignature. When a smart
contract is deleted, the cryptocurrency account within it continues to exist, and is not affected
by the expiration time here.
Field | Type | Label | Description |
fileID | FileID | The file ID of the file to delete, in the format used in transactions |
|
contractID | ContractID | The contract ID instance to delete, in the format used in transactions |
|
expirationTime | TimestampSeconds | The timestamp in seconds at which the "deleted" file should truly be permanently deleted |
Undelete a file or smart contract that was deleted by SystemDelete; requires a Hedera
administrative multisignature.
Field | Type | Label | Description |
fileID | FileID | The file ID to undelete, in the format used in transactions |
|
contractID | ContractID | The contract ID instance to undelete, in the format used in transactions |
A list of throttle groups that should all compete for the same internal bucket.
Field | Type | Label | Description |
name | string | A name for this bucket (primarily for use in logs) |
|
burstPeriodMs | uint64 | The number of milliseconds required for this bucket to drain completely when full. The product of this number and the least common multiple of the milliOpsPerSec values in this bucket must not exceed 9223372036. |
|
throttleGroups | ThrottleGroup | repeated | The throttle groups competing for this bucket |
A list of throttle buckets which, simultaneously enforced, define the system's throttling policy.
or it will be throttled.
Field | Type | Label | Description |
throttleBuckets | ThrottleBucket | repeated |
|
A set of operations which should be collectively throttled at a given milli-ops-per-second limit.
Field | Type | Label | Description |
operations | HederaFunctionality | repeated | The operations to be throttled |
milliOpsPerSec | uint64 | The number of total operations per second across the entire network, multiplied by 1000. So, to choose 3 operations per second (which on a network of 30 nodes is a tenth of an operation per second for each node), set milliOpsPerSec = 3000. And to choose 3.6 ops per second, use milliOpsPerSec = 3600. Minimum allowed value is 1, and maximum allowed value is 9223372. |
An exact date and time. This is the same data structure as the protobuf Timestamp.proto (see the
comments in https://github.com/google/protobuf/blob/master/src/google/protobuf/timestamp.proto)
Field | Type | Label | Description |
seconds | int64 | Number of complete seconds since the start of the epoch |
|
nanos | int32 | Number of nanoseconds since the start of the last second |
An exact date and time, with a resolution of one second (no nanoseconds).
Field | Type | Label | Description |
seconds | int64 | Number of complete seconds since the start of the epoch |
Associates the provided account with the provided tokens. Must be signed by the provided
Account's key.
If the provided account is not found, the transaction will resolve to INVALID_ACCOUNT_ID.
If the provided account has been deleted, the transaction will resolve to ACCOUNT_DELETED.
If any of the provided tokens is not found, the transaction will resolve to INVALID_TOKEN_REF.
If any of the provided tokens has been deleted, the transaction will resolve to TOKEN_WAS_DELETED.
If an association between the provided account and any of the tokens already exists, the
transaction will resolve to TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT.
If the provided account's associations count exceed the constraint of maximum token associations
per account, the transaction will resolve to TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED.
On success, associations between the provided account and tokens are made and the account is
ready to interact with the tokens.
Field | Type | Label | Description |
account | AccountID | The account to be associated with the provided tokens |
|
tokens | TokenID | repeated | The tokens to be associated with the provided account. In the case of NON_FUNGIBLE_UNIQUE Type, once an account is associated, it can hold any number of NFTs (serial numbers) of that token type |
Burns tokens from the Token's treasury Account. If no Supply Key is defined, the transaction will
resolve to TOKEN_HAS_NO_SUPPLY_KEY.
The operation decreases the Total Supply of the Token. Total supply cannot go below zero.
The amount provided must be in the lowest denomination possible. Example:
Token A has 2 decimals. In order to burn 100 tokens, one must provide amount of 10000. In order
to burn 100.55 tokens, one must provide amount of 10055.
For non fungible tokens the transaction body accepts serialNumbers list of integers as a parameter.
If the serialNumbers don't get filled for non-fungible token type, a INVALID_TOKEN_BURN_AMOUNT response
code will be returned.
If a zero amount is provided for a fungible token type, it will be treated as a regular transaction.
If both amount and serialNumbers get filled, a INVALID_TRANSACTION_BODY response code will be
returned.
If the serialNumbers' list count is greater than the batch size limit global dynamic property, a
BATCH_SIZE_LIMIT_EXCEEDED response code will be returned.
If the serialNumbers list contains a non-positive integer as a serial number, a INVALID_NFT_ID
response code will be returned.
Field | Type | Label | Description |
token | TokenID | The token for which to burn tokens. If token does not exist, transaction results in INVALID_TOKEN_ID |
|
amount | uint64 | Applicable to tokens of type FUNGIBLE_COMMON. The amount to burn from the Treasury Account. Amount must be a positive non-zero number, not bigger than the token balance of the treasury account (0; balance], represented in the lowest denomination. |
|
serialNumbers | int64 | repeated | Applicable to tokens of type NON_FUNGIBLE_UNIQUE. The list of serial numbers to be burned. |
Create a new token. After the token is created, the Token ID for it is in the receipt.
The specified Treasury Account is receiving the initial supply of tokens as-well as the tokens
from the Token Mint operation once executed. The balance of the treasury account is decreased
when the Token Burn operation is executed.
The initialSupply is the initial supply of the smallest parts of a token (like a
tinybar, not an hbar). These are the smallest units of the token which may be transferred.
The supply can change over time. If the total supply at some moment is S parts of tokens,
and the token is using D decimals, then S must be less than or equal to
263-1, which is 9,223,372,036,854,775,807. The number of whole tokens (not parts) will
be S / 10D.
If decimals is 8 or 11, then the number of whole tokens can be at most a few billions or
millions, respectively. For example, it could match Bitcoin (21 million whole tokens with 8
decimals) or hbars (50 billion whole tokens with 8 decimals). It could even match Bitcoin with
milli-satoshis (21 million whole tokens with 11 decimals).
Note that a created token is immutable if the adminKey is omitted. No property of
an immutable token can ever change, with the sole exception of its expiry. Anyone can pay to
extend the expiry time of an immutable token.
A token can be either FUNGIBLE_COMMON or NON_FUNGIBLE_UNIQUE, based on its
TokenType. If it has been omitted, FUNGIBLE_COMMON type is used.
A token can have either INFINITE or FINITE supply type, based on its
TokenType. If it has been omitted, INFINITE type is used.
If a FUNGIBLE TokenType is used, initialSupply should explicitly be set to a
non-negative. If not, the transaction will resolve to INVALID_TOKEN_INITIAL_SUPPLY.
If a NON_FUNGIBLE_UNIQUE TokenType is used, initialSupply should explicitly be set
to 0. If not, the transaction will resolve to INVALID_TOKEN_INITIAL_SUPPLY.
If an INFINITE TokenSupplyType is used, maxSupply should explicitly be set to 0. If
it is not 0, the transaction will resolve to INVALID_TOKEN_MAX_SUPPLY.
If a FINITE TokenSupplyType is used, maxSupply should be explicitly set to a
non-negative value. If it is not, the transaction will resolve to INVALID_TOKEN_MAX_SUPPLY.
Field | Type | Label | Description |
name | string | The publicly visible name of the token. The token name is specified as a Unicode string. Its UTF-8 encoding cannot exceed 100 bytes, and cannot contain the 0 byte (NUL). |
|
symbol | string | The publicly visible token symbol. The token symbol is specified as a Unicode string. Its UTF-8 encoding cannot exceed 100 bytes, and cannot contain the 0 byte (NUL). |
|
decimals | uint32 | For tokens of type FUNGIBLE_COMMON - the number of decimal places a token is divisible by. For tokens of type NON_FUNGIBLE_UNIQUE - value must be 0 |
|
initialSupply | uint64 | Specifies the initial supply of tokens to be put in circulation. The initial supply is sent to the Treasury Account. The supply is in the lowest denomination possible. In the case for NON_FUNGIBLE_UNIQUE Type the value must be 0 |
|
treasury | AccountID | The account which will act as a treasury for the token. This account will receive the specified initial supply or the newly minted NFTs in the case for NON_FUNGIBLE_UNIQUE Type |
|
adminKey | Key | The key which can perform update/delete operations on the token. If empty, the token can be perceived as immutable (not being able to be updated/deleted) |
|
kycKey | Key | The key which can grant or revoke KYC of an account for the token's transactions. If empty, KYC is not required, and KYC grant or revoke operations are not possible. |
|
freezeKey | Key | The key which can sign to freeze or unfreeze an account for token transactions. If empty, freezing is not possible |
|
wipeKey | Key | The key which can wipe the token balance of an account. If empty, wipe is not possible |
|
supplyKey | Key | The key which can change the supply of a token. The key is used to sign Token Mint/Burn operations |
|
freezeDefault | bool | The default Freeze status (frozen or unfrozen) of Hedera accounts relative to this token. If true, an account must be unfrozen before it can receive the token |
|
expiry | Timestamp | The epoch second at which the token should expire; if an auto-renew account and period are specified, this is coerced to the current epoch second plus the autoRenewPeriod |
|
autoRenewAccount | AccountID | An account which will be automatically charged to renew the token's expiration, at autoRenewPeriod interval |
|
autoRenewPeriod | Duration | The interval at which the auto-renew account will be charged to extend the token's expiry |
|
memo | string | The memo associated with the token (UTF-8 encoding max 100 bytes) |
|
tokenType | TokenType | IWA compatibility. Specifies the token type. Defaults to FUNGIBLE_COMMON |
|
supplyType | TokenSupplyType | IWA compatibility. Specified the token supply type. Defaults to INFINITE |
|
maxSupply | int64 | IWA Compatibility. Depends on TokenSupplyType. For tokens of type FUNGIBLE_COMMON - the maximum number of tokens that can be in circulation. For tokens of type NON_FUNGIBLE_UNIQUE - the maximum number of NFTs (serial numbers) that can be minted. This field can never be changed! |
|
fee_schedule_key | Key | The key which can change the token's custom fee schedule; must sign a TokenFeeScheduleUpdate transaction |
|
custom_fees | CustomFee | repeated | The custom fees to be assessed during a CryptoTransfer that transfers units of this token |
pause_key | Key | The Key which can pause and unpause the Token. If Empty the token pause status defaults to PauseNotApplicable, otherwise Unpaused. |
Marks a token as deleted, though it will remain in the ledger.
The operation must be signed by the specified Admin Key of the Token. If
admin key is not set, Transaction will result in TOKEN_IS_IMMUTABlE.
Once deleted update, mint, burn, wipe, freeze, unfreeze, grant kyc, revoke
kyc and token transfer transactions will resolve to TOKEN_WAS_DELETED.
Field | Type | Label | Description |
token | TokenID | The token to be deleted. If invalid token is specified, transaction will result in INVALID_TOKEN_ID |
Dissociates the provided account with the provided tokens. Must be signed by the provided
Account's key.
If the provided account is not found, the transaction will resolve to INVALID_ACCOUNT_ID.
If the provided account has been deleted, the transaction will resolve to ACCOUNT_DELETED.
If any of the provided tokens is not found, the transaction will resolve to INVALID_TOKEN_REF.
If any of the provided tokens has been deleted, the transaction will resolve to TOKEN_WAS_DELETED.
If an association between the provided account and any of the tokens does not exist, the
transaction will resolve to TOKEN_NOT_ASSOCIATED_TO_ACCOUNT.
If a token has not been deleted and has not expired, and the user has a nonzero balance, the
transaction will resolve to TRANSACTION_REQUIRES_ZERO_TOKEN_BALANCES.
If a fungible token has expired, the user can disassociate even if their token balance is
not zero.
If a non fungible token has expired, the user can not disassociate if their token
balance is not zero. The transaction will resolve to TRANSACTION_REQUIRED_ZERO_TOKEN_BALANCES.
On success, associations between the provided account and tokens are removed.
Field | Type | Label | Description |
account | AccountID | The account to be dissociated with the provided tokens |
|
tokens | TokenID | repeated | The tokens to be dissociated with the provided account |
At consensus, updates a token type's fee schedule to the given list of custom fees.
If the target token type has no fee_schedule_key, resolves to TOKEN_HAS_NO_FEE_SCHEDULE_KEY.
Otherwise this transaction must be signed to the fee_schedule_key, or the transaction will
resolve to INVALID_SIGNATURE.
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.
Field | Type | Label | Description |
token_id | TokenID | The token whose fee schedule is to be updated |
|
custom_fees | CustomFee | repeated | The new custom fees to be assessed during a CryptoTransfer that transfers units of this token |
Freezes transfers of the specified token for the account. Must be signed by the Token's freezeKey.
If the provided account is not found, the transaction will resolve to INVALID_ACCOUNT_ID.
If the provided account has been deleted, the transaction will resolve to ACCOUNT_DELETED.
If the provided token is not found, the transaction will resolve to INVALID_TOKEN_ID.
If the provided token has been deleted, the transaction will resolve to TOKEN_WAS_DELETED.
If an Association between the provided token and account is not found, the transaction will
resolve to TOKEN_NOT_ASSOCIATED_TO_ACCOUNT.
If no Freeze Key is defined, the transaction will resolve to TOKEN_HAS_NO_FREEZE_KEY.
Once executed the Account is marked as Frozen and will not be able to receive or send tokens
unless unfrozen. The operation is idempotent.
Field | Type | Label | Description |
token | TokenID | The token for which this account will be frozen. If token does not exist, transaction results in INVALID_TOKEN_ID |
|
account | AccountID | The account to be frozen |
Applicable only to tokens of type NON_FUNGIBLE_UNIQUE. Gets info on NFTs N through M owned by the
specified accountId.
Example: If Account A owns 5 NFTs (might be of different Token Entity), having start=0 and end=5
will return all of the NFTs
INVALID_QUERY_RANGE response code will be returned if:
1) Start > End
2) Start and End indices are non-positive
3) Start and End indices are out of boundaries for the retrieved nft list
4) The range between Start and End is bigger than the global dynamic property for maximum query
range
NOT_SUPPORTED response code will be returned if the queried token is of type FUNGIBLE_COMMON
INVALID_ACCOUNT_ID response code will be returned if the queried account does not exist
ACCOUNT_DELETED response code will be returned if the queried account has been deleted
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
accountID | AccountID | The Account for which information is requested |
|
start | int64 | Specifies the start index (inclusive) of the range of NFTs to query for. Value must be in the range [0; ownedNFTs-1] |
|
end | int64 | Specifies the end index (exclusive) of the range of NFTs to query for. Value must be in the range (start; ownedNFTs] |
UNDOCUMENTED
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
nfts | TokenNftInfo | repeated | List of NFTs associated to the account |
Gets information about Token instance
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither) |
|
token | TokenID | The token for which information is requested. If invalid token is provided, INVALID_TOKEN_ID response is returned. |
Response when the client sends the node TokenGetInfoQuery
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
tokenInfo | TokenInfo | The information requested about this token instance |
The metadata about a Token instance
Field | Type | Label | Description |
tokenId | TokenID | ID of the token instance |
|
name | string | The name of the token. It is a string of ASCII only characters |
|
symbol | string | The symbol of the token. It is a UTF-8 capitalized alphabetical string |
|
decimals | uint32 | The number of decimal places a token is divisible by. Always 0 for tokens of type NON_FUNGIBLE_UNIQUE |
|
totalSupply | uint64 | For tokens of type FUNGIBLE_COMMON - the total supply of tokens that are currently in circulation. For tokens of type NON_FUNGIBLE_UNIQUE - the number of NFTs created of this token instance |
|
treasury | AccountID | The ID of the account which is set as Treasury |
|
adminKey | Key | The key which can perform update/delete operations on the token. If empty, the token can be perceived as immutable (not being able to be updated/deleted) |
|
kycKey | Key | The key which can grant or revoke KYC of an account for the token's transactions. If empty, KYC is not required, and KYC grant or revoke operations are not possible. |
|
freezeKey | Key | The key which can freeze or unfreeze an account for token transactions. If empty, freezing is not possible |
|
wipeKey | Key | The key which can wipe token balance of an account. If empty, wipe is not possible |
|
supplyKey | Key | The key which can change the supply of a token. The key is used to sign Token Mint/Burn operations |
|
defaultFreezeStatus | TokenFreezeStatus | The default Freeze status (not applicable, frozen or unfrozen) of Hedera accounts relative to this token. FreezeNotApplicable is returned if Token Freeze Key is empty. Frozen is returned if Token Freeze Key is set and defaultFreeze is set to true. Unfrozen is returned if Token Freeze Key is set and defaultFreeze is set to false |
|
defaultKycStatus | TokenKycStatus | The default KYC status (KycNotApplicable or Revoked) of Hedera accounts relative to this token. KycNotApplicable is returned if KYC key is not set, otherwise Revoked |
|
deleted | bool | Specifies whether the token was deleted or not |
|
autoRenewAccount | AccountID | An account which will be automatically charged to renew the token's expiration, at autoRenewPeriod interval |
|
autoRenewPeriod | Duration | The interval at which the auto-renew account will be charged to extend the token's expiry |
|
expiry | Timestamp | The epoch second at which the token will expire |
|
memo | string | The memo associated with the token |
|
tokenType | TokenType | The token type |
|
supplyType | TokenSupplyType | The token supply type |
|
maxSupply | int64 | For tokens of type FUNGIBLE_COMMON - The Maximum number of fungible tokens that can be in circulation. For tokens of type NON_FUNGIBLE_UNIQUE - the maximum number of NFTs (serial numbers) that can be in circulation |
|
fee_schedule_key | Key | The key which can change the custom fee schedule of the token; if not set, the fee schedule is immutable |
|
custom_fees | CustomFee | repeated | The custom fees to be assessed during a CryptoTransfer that transfers units of this token |
pause_key | Key | The Key which can pause and unpause the Token. |
|
pause_status | TokenPauseStatus | Specifies whether the token is paused or not. PauseNotApplicable is returned if pauseKey is not set. |
|
ledger_id | bytes | The ledger ID the response was returned from; please see <a href="https://github.com/hashgraph/hedera-improvement-proposal/blob/master/HIP/hip-198.md">HIP-198</a> for the network-specific IDs. |
Represents an NFT on the Ledger
Field | Type | Label | Description |
tokenID | TokenID | The (non-fungible) token of which this NFT is an instance |
|
serialNumber | int64 | The unique identifier of this instance |
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
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
nftID | NftID | The ID of the NFT |
UNDOCUMENTED
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
nft | TokenNftInfo | The information about this NFT |
UNDOCUMENTED
Field | Type | Label | Description |
nftID | NftID | The ID of the NFT |
|
accountID | AccountID | The current owner of the NFT |
|
creationTime | Timestamp | The effective consensus timestamp at which the NFT was minted |
|
metadata | bytes | Represents the unique metadata of the NFT |
|
ledger_id | bytes | The ledger ID the response was returned from; please see <a href="https://github.com/hashgraph/hedera-improvement-proposal/blob/master/HIP/hip-198.md">HIP-198</a> for the network-specific IDs. |
|
spender_id | AccountID | If an allowance is granted for the NFT, its corresponding spender account |
Applicable only to tokens of type NON_FUNGIBLE_UNIQUE. Gets info on NFTs N through M on the list
of NFTs associated with a given NON_FUNGIBLE_UNIQUE Token.
Example: If there are 10 NFTs issued, having start=0 and end=5 will query for the first 5 NFTs.
Querying +all 10 NFTs will require start=0 and end=10
INVALID_QUERY_RANGE response code will be returned if:
1) Start > End
2) Start and End indices are non-positive
3) Start and End indices are out of boundaries for the retrieved nft list
4) The range between Start and End is bigger than the global dynamic property for maximum query
range
NOT_SUPPORTED response code will be returned if the queried token is of type FUNGIBLE_COMMON
INVALID_TOKEN_ID response code will be returned if the queried token does not exist
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
tokenID | TokenID | The ID of the token for which information is requested |
|
start | int64 | Specifies the start index (inclusive) of the range of NFTs to query for. Value must be in the range [0; ownedNFTs-1] |
|
end | int64 | Specifies the end index (exclusive) of the range of NFTs to query for. Value must be in the range (start; ownedNFTs] |
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
tokenID | TokenID | The Token with type NON_FUNGIBLE that this record is for |
|
nfts | TokenNftInfo | repeated | List of NFTs associated to the specified token |
Grants KYC to the account for the given token. Must be signed by the Token's kycKey.
If the provided account is not found, the transaction will resolve to INVALID_ACCOUNT_ID.
If the provided account has been deleted, the transaction will resolve to ACCOUNT_DELETED.
If the provided token is not found, the transaction will resolve to INVALID_TOKEN_ID.
If the provided token has been deleted, the transaction will resolve to TOKEN_WAS_DELETED.
If an Association between the provided token and account is not found, the transaction will
resolve to TOKEN_NOT_ASSOCIATED_TO_ACCOUNT.
If no KYC Key is defined, the transaction will resolve to TOKEN_HAS_NO_KYC_KEY.
Once executed the Account is marked as KYC Granted.
Field | Type | Label | Description |
token | TokenID | The token for which this account will be granted KYC. If token does not exist, transaction results in INVALID_TOKEN_ID |
|
account | AccountID | The account to be KYCed |
Mints tokens to the Token's treasury Account. If no Supply Key is defined, the transaction will
resolve to TOKEN_HAS_NO_SUPPLY_KEY.
The operation increases the Total Supply of the Token. The maximum total supply a token can have
is 2^63-1.
The amount provided must be in the lowest denomination possible. Example:
Token A has 2 decimals. In order to mint 100 tokens, one must provide amount of 10000. In order
to mint 100.55 tokens, one must provide amount of 10055.
If both amount and metadata list get filled, a INVALID_TRANSACTION_BODY response code will be
returned.
If the metadata list contains metadata which is too large, a METADATA_TOO_LONG response code will
be returned.
If the metadata list is not filled for a non-fungible token type, a INVALID_TOKEN_MINT_AMOUNT response
code will be returned.
If a zero amount is provided for a fungible token type, it will be treated as a regular transaction.
If the metadata list count is greater than the batch size limit global dynamic property, a
BATCH_SIZE_LIMIT_EXCEEDED response code will be returned.
Field | Type | Label | Description |
token | TokenID | The token for which to mint tokens. If token does not exist, transaction results in INVALID_TOKEN_ID |
|
amount | uint64 | Applicable to tokens of type FUNGIBLE_COMMON. The amount to mint to the Treasury Account. Amount must be a positive non-zero number represented in the lowest denomination of the token. The new supply must be lower than 2^63. |
|
metadata | bytes | repeated | Applicable to tokens of type NON_FUNGIBLE_UNIQUE. A list of metadata that are being created. Maximum allowed size of each metadata is 100 bytes |
Pauses the Token from being involved in any kind of Transaction until it is unpaused.
Must be signed with the Token's pause key.
If the provided token is not found, the transaction will resolve to INVALID_TOKEN_ID.
If the provided token has been deleted, the transaction will resolve to TOKEN_WAS_DELETED.
If no Pause Key is defined, the transaction will resolve to TOKEN_HAS_NO_PAUSE_KEY.
Once executed the Token is marked as paused and will be not able to be a part of any transaction.
The operation is idempotent - becomes a no-op if the Token is already Paused.
Field | Type | Label | Description |
token | TokenID | The token to be paused. |
Revokes KYC to the account for the given token. Must be signed by the Token's kycKey.
If the provided account is not found, the transaction will resolve to INVALID_ACCOUNT_ID.
If the provided account has been deleted, the transaction will resolve to ACCOUNT_DELETED.
If the provided token is not found, the transaction will resolve to INVALID_TOKEN_ID.
If the provided token has been deleted, the transaction will resolve to TOKEN_WAS_DELETED.
If an Association between the provided token and account is not found, the transaction will
resolve to TOKEN_NOT_ASSOCIATED_TO_ACCOUNT.
If no KYC Key is defined, the transaction will resolve to TOKEN_HAS_NO_KYC_KEY.
Once executed the Account is marked as KYC Revoked
Field | Type | Label | Description |
token | TokenID | The token for which this account will get his KYC revoked. If token does not exist, transaction results in INVALID_TOKEN_ID |
|
account | AccountID | The account to be KYC Revoked |
Transactions and queries for the Token Service
Method Name | Request Type | Response Type | Description |
createToken | Transaction | TransactionResponse | Creates a new Token by submitting the transaction |
updateToken | Transaction | TransactionResponse | Updates the account by submitting the transaction |
mintToken | Transaction | TransactionResponse | Mints an amount of the token to the defined treasury account |
burnToken | Transaction | TransactionResponse | Burns an amount of the token from the defined treasury account |
deleteToken | Transaction | TransactionResponse | Deletes a Token |
wipeTokenAccount | Transaction | TransactionResponse | Wipes the provided amount of tokens from the specified Account ID |
freezeTokenAccount | Transaction | TransactionResponse | Freezes the transfer of tokens to or from the specified Account ID |
unfreezeTokenAccount | Transaction | TransactionResponse | Unfreezes the transfer of tokens to or from the specified Account ID |
grantKycToTokenAccount | Transaction | TransactionResponse | Flags the provided Account ID as having gone through KYC |
revokeKycFromTokenAccount | Transaction | TransactionResponse | Removes the KYC flag of the provided Account ID |
associateTokens | Transaction | TransactionResponse | Associates tokens to an account |
dissociateTokens | Transaction | TransactionResponse | Dissociates tokens from an account |
updateTokenFeeSchedule | Transaction | TransactionResponse | Updates the custom fee schedule on a token |
getTokenInfo | Query | Response | Retrieves the metadata of a token |
getAccountNftInfos | Query | Response | (DEPRECATED) Gets info on NFTs N through M on the list of NFTs associated with a given account |
getTokenNftInfo | Query | Response | Retrieves the metadata of an NFT by TokenID and serial number |
getTokenNftInfos | Query | Response | (DEPRECATED) Gets info on NFTs N through M on the list of NFTs associated with a given Token of type NON_FUNGIBLE |
pauseToken | Transaction | TransactionResponse | Pause the token |
unpauseToken | Transaction | TransactionResponse | Unpause the token |
Method Name | Option |
getAccountNftInfos | true |
getTokenNftInfos | true |
Unfreezes transfers of the specified token for the account. Must be signed by the Token's
freezeKey.
If the provided account is not found, the transaction will resolve to INVALID_ACCOUNT_ID.
If the provided account has been deleted, the transaction will resolve to ACCOUNT_DELETED.
If the provided token is not found, the transaction will resolve to INVALID_TOKEN_ID.
If the provided token has been deleted, the transaction will resolve to TOKEN_WAS_DELETED.
If an Association between the provided token and account is not found, the transaction will
resolve to TOKEN_NOT_ASSOCIATED_TO_ACCOUNT.
If no Freeze Key is defined, the transaction will resolve to TOKEN_HAS_NO_FREEZE_KEY.
Once executed the Account is marked as Unfrozen and will be able to receive or send tokens. The
operation is idempotent.
Field | Type | Label | Description |
token | TokenID | The token for which this account will be unfrozen. If token does not exist, transaction results in INVALID_TOKEN_ID |
|
account | AccountID | The account to be unfrozen |
Unpauses the Token. Must be signed with the Token's pause key.
If the provided token is not found, the transaction will resolve to INVALID_TOKEN_ID.
If the provided token has been deleted, the transaction will resolve to TOKEN_WAS_DELETED.
If no Pause Key is defined, the transaction will resolve to TOKEN_HAS_NO_PAUSE_KEY.
Once executed the Token is marked as Unpaused and can be used in Transactions.
The operation is idempotent - becomes a no-op if the Token is already unpaused.
Field | Type | Label | Description |
token | TokenID | The token to be unpaused. |
At consensus, updates an already created token to the given values.
If no value is given for a field, that field is left unchanged. For an immutable tokens (that is,
a token without an admin key), only the expiry may be updated. Setting any other field in that
case will cause the transaction status to resolve to TOKEN_IS_IMMUTABLE.
--- Signing Requirements ---
1. Whether or not a token has an admin key, its expiry can be extended with only the transaction
payer's signature.
2. Updating any other field of a mutable token requires the admin key's signature.
3. If a new admin key is set, this new key must sign unless it is exactly an empty
KeyList. This special sentinel key removes the existing admin key and causes the
token to become immutable. (Other Key structures without a constituent
Ed25519 key will be rejected with INVALID_ADMIN_KEY.)
4. If a new treasury is set, the new treasury account's key must sign the transaction.
--- Nft Requirements ---
1. If a non fungible token has a positive treasury balance, the operation will abort with
CURRENT_TREASURY_STILL_OWNS_NFTS.
Field | Type | Label | Description |
token | TokenID | The Token to be updated |
|
symbol | string | The new publicly visible token symbol. The token symbol is specified as a Unicode string. Its UTF-8 encoding cannot exceed 100 bytes, and cannot contain the 0 byte (NUL). |
|
name | string | The new publicly visible name of the token. The token name is specified as a Unicode string. Its UTF-8 encoding cannot exceed 100 bytes, and cannot contain the 0 byte (NUL). |
|
treasury | AccountID | The new Treasury account of the Token. If the provided treasury account is not existing or deleted, the response will be INVALID_TREASURY_ACCOUNT_FOR_TOKEN. If successful, the Token balance held in the previous Treasury Account is transferred to the new one. |
|
adminKey | Key | The new admin key of the Token. If Token is immutable, transaction will resolve to TOKEN_IS_IMMUTABlE. |
|
kycKey | Key | The new KYC key of the Token. If Token does not have currently a KYC key, transaction will resolve to TOKEN_HAS_NO_KYC_KEY. |
|
freezeKey | Key | The new Freeze key of the Token. If the Token does not have currently a Freeze key, transaction will resolve to TOKEN_HAS_NO_FREEZE_KEY. |
|
wipeKey | Key | The new Wipe key of the Token. If the Token does not have currently a Wipe key, transaction will resolve to TOKEN_HAS_NO_WIPE_KEY. |
|
supplyKey | Key | The new Supply key of the Token. If the Token does not have currently a Supply key, transaction will resolve to TOKEN_HAS_NO_SUPPLY_KEY. |
|
autoRenewAccount | AccountID | The new account which will be automatically charged to renew the token's expiration, at autoRenewPeriod interval. |
|
autoRenewPeriod | Duration | The new interval at which the auto-renew account will be charged to extend the token's expiry. |
|
expiry | Timestamp | The new expiry time of the token. Expiry can be updated even if admin key is not set. If the provided expiry is earlier than the current token expiry, transaction wil resolve to INVALID_EXPIRATION_TIME |
|
memo | google.protobuf.StringValue | If set, the new memo to be associated with the token (UTF-8 encoding max 100 bytes) |
|
fee_schedule_key | Key | If set, the new key to use to update the token's custom fee schedule; if the token does not currently have this key, transaction will resolve to TOKEN_HAS_NO_FEE_SCHEDULE_KEY |
|
pause_key | Key | The Key which can pause and unpause the Token. If the Token does not currently have a pause key, transaction will resolve to TOKEN_HAS_NO_PAUSE_KEY |
Wipes the provided amount of tokens from the specified Account. Must be signed by the Token's
Wipe key.
If the provided account is not found, the transaction will resolve to INVALID_ACCOUNT_ID.
If the provided account has been deleted, the transaction will resolve to ACCOUNT_DELETED.
If the provided token is not found, the transaction will resolve to INVALID_TOKEN_ID.
If the provided token has been deleted, the transaction will resolve to TOKEN_WAS_DELETED.
If an Association between the provided token and account is not found, the transaction will
resolve to TOKEN_NOT_ASSOCIATED_TO_ACCOUNT.
If Wipe Key is not present in the Token, transaction results in TOKEN_HAS_NO_WIPE_KEY.
If the provided account is the Token's Treasury Account, transaction results in
CANNOT_WIPE_TOKEN_TREASURY_ACCOUNT
On success, tokens are removed from the account and the total supply of the token is decreased by
the wiped amount.
If both amount and serialNumbers get filled, a INVALID_TRANSACTION_BODY response code will be
returned.
If the serialNumbers don't get filled for a non-fungible token type, a INVALID_WIPING_AMOUNT response
code will be returned.
If a zero amount is provided for a fungible token type, it will be treated as a regular transaction.
If the serialNumbers list contains a non-positive integer as a serial number, a INVALID_NFT_ID
response code will be returned.
If the serialNumbers' list count is greater than the batch size limit global dynamic property, a
BATCH_SIZE_LIMIT_EXCEEDED response code will be returned.
The amount provided is in the lowest denomination possible. Example:
Token A has 2 decimals. In order to wipe 100 tokens from account, one must provide amount of
10000. In order to wipe 100.55 tokens, one must provide amount of 10055.
Field | Type | Label | Description |
token | TokenID | The token for which the account will be wiped. If token does not exist, transaction results in INVALID_TOKEN_ID |
|
account | AccountID | The account to be wiped |
|
amount | uint64 | Applicable to tokens of type FUNGIBLE_COMMON. The amount of tokens to wipe from the specified account. Amount must be a positive non-zero number in the lowest denomination possible, not bigger than the token balance of the account (0; balance] |
|
serialNumbers | int64 | repeated | Applicable to tokens of type NON_FUNGIBLE_UNIQUE. The list of serial numbers to be wiped. |
A single signed transaction, including all its signatures. The SignatureList will have a
Signature for each Key in the transaction, either explicit or implicit, in the order that they
appear in the transaction. For example, a CryptoTransfer will first have a Signature
corresponding to the Key for the paying account, followed by a Signature corresponding to the Key
for each account that is sending or receiving cryptocurrency in the transfer. Each Transaction
should not have more than 50 levels.
The SignatureList field is deprecated and succeeded by SignatureMap.
Field | Type | Label | Description |
body | TransactionBody | Deprecated. the body of the transaction, which needs to be signed |
|
sigs | SignatureList | Deprecated. The signatures on the body, to authorize the transaction; deprecated and to be succeeded by SignatureMap field |
|
sigMap | SignatureMap | Deprecated. The signatures on the body with the new format, to authorize the transaction |
|
bodyBytes | bytes | Deprecated. TransactionBody serialized into bytes, which needs to be signed |
|
signedTransactionBytes | bytes | SignedTransaction serialized into bytes |
Name | Option |
body | true |
sigs | true |
sigMap | true |
bodyBytes | true |
A single transaction. All transaction types are possible here.
Field | Type | Label | Description |
transactionID | TransactionID | The ID for this transaction, which includes the payer's account (the account paying the transaction fee). If two transactions have the same transactionID, they won't both have an effect |
|
nodeAccountID | AccountID | The account of the node that submits the client's transaction to the network |
|
transactionFee | uint64 | The maximum transaction fee the client is willing to pay |
|
transactionValidDuration | Duration | The transaction is invalid if consensusTimestamp > transactionID.transactionValidStart + transactionValidDuration |
|
generateRecord | bool | Deprecated. Should a record of this transaction be generated? (A receipt is always generated, but the record is optional) |
|
memo | string | Any notes or descriptions that should be put into the record (max length 100) |
|
contractCall | ContractCallTransactionBody | Calls a function of a contract instance |
|
contractCreateInstance | ContractCreateTransactionBody | Creates a contract instance |
|
contractUpdateInstance | ContractUpdateTransactionBody | Updates a contract |
|
contractDeleteInstance | ContractDeleteTransactionBody | Delete contract and transfer remaining balance into specified account |
|
ethereumTransaction | EthereumTransactionBody | An Ethereum encoded transaction. |
|
cryptoAddLiveHash | CryptoAddLiveHashTransactionBody | Attach a new livehash to an account |
|
cryptoApproveAllowance | CryptoApproveAllowanceTransactionBody | Adds one or more approved allowances for spenders to transfer the paying account's hbar or tokens. |
|
cryptoDeleteAllowance | CryptoDeleteAllowanceTransactionBody | Deletes one or more of the specific approved NFT serial numbers on an owner account. |
|
cryptoCreateAccount | CryptoCreateTransactionBody | Create a new cryptocurrency account |
|
cryptoDelete | CryptoDeleteTransactionBody | Delete a cryptocurrency account (mark as deleted, and transfer hbars out) |
|
cryptoDeleteLiveHash | CryptoDeleteLiveHashTransactionBody | Remove a livehash from an account |
|
cryptoTransfer | CryptoTransferTransactionBody | Transfer amount between accounts |
|
cryptoUpdateAccount | CryptoUpdateTransactionBody | Modify information such as the expiration date for an account |
|
fileAppend | FileAppendTransactionBody | Add bytes to the end of the contents of a file |
|
fileCreate | FileCreateTransactionBody | Create a new file |
|
fileDelete | FileDeleteTransactionBody | Delete a file (remove contents and mark as deleted until it expires) |
|
fileUpdate | FileUpdateTransactionBody | Modify information such as the expiration date for a file |
|
systemDelete | SystemDeleteTransactionBody | Hedera administrative deletion of a file or smart contract |
|
systemUndelete | SystemUndeleteTransactionBody | To undelete an entity deleted by SystemDelete |
|
freeze | FreezeTransactionBody | Freeze the nodes |
|
consensusCreateTopic | ConsensusCreateTopicTransactionBody | Creates a topic |
|
consensusUpdateTopic | ConsensusUpdateTopicTransactionBody | Updates a topic |
|
consensusDeleteTopic | ConsensusDeleteTopicTransactionBody | Deletes a topic |
|
consensusSubmitMessage | ConsensusSubmitMessageTransactionBody | Submits message to a topic |
|
uncheckedSubmit | UncheckedSubmitBody | UNDOCUMENTED |
|
tokenCreation | TokenCreateTransactionBody | Creates a token instance |
|
tokenFreeze | TokenFreezeAccountTransactionBody | Freezes account not to be able to transact with a token |
|
tokenUnfreeze | TokenUnfreezeAccountTransactionBody | Unfreezes account for a token |
|
tokenGrantKyc | TokenGrantKycTransactionBody | Grants KYC to an account for a token |
|
tokenRevokeKyc | TokenRevokeKycTransactionBody | Revokes KYC of an account for a token |
|
tokenDeletion | TokenDeleteTransactionBody | Deletes a token instance |
|
tokenUpdate | TokenUpdateTransactionBody | Updates a token instance |
|
tokenMint | TokenMintTransactionBody | Mints new tokens to a token's treasury account |
|
tokenBurn | TokenBurnTransactionBody | Burns tokens from a token's treasury account |
|
tokenWipe | TokenWipeAccountTransactionBody | Wipes amount of tokens from an account |
|
tokenAssociate | TokenAssociateTransactionBody | Associate tokens to an account |
|
tokenDissociate | TokenDissociateTransactionBody | Dissociate tokens from an account |
|
token_fee_schedule_update | TokenFeeScheduleUpdateTransactionBody | Updates a token's custom fee schedule |
|
token_pause | TokenPauseTransactionBody | Pauses the Token |
|
token_unpause | TokenUnpauseTransactionBody | Unpauses the Token |
|
scheduleCreate | ScheduleCreateTransactionBody | Creates a schedule in the network's action queue |
|
scheduleDelete | ScheduleDeleteTransactionBody | Deletes a schedule from the network's action queue |
|
scheduleSign | ScheduleSignTransactionBody | Adds one or more Ed25519 keys to the affirmed signers of a scheduled transaction |
|
node_stake_update | NodeStakeUpdateTransactionBody | Updates the staking info at the end of staking period to indicate new staking period has started. |
|
util_prng | UtilPrngTransactionBody | Generates a pseudorandom number. |
Name | Option |
generateRecord | true |
Field | Type | Label | Description |
bodyBytes | bytes | TransactionBody serialized into bytes, which needs to be signed |
|
sigMap | SignatureMap | The signatures on the body with the new format, to authorize the transaction |
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. This query is free (the payment field is left empty).
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
transactionID | TransactionID | 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.
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
transactionRecord | TransactionRecord | The requested transaction records |
Get the receipt 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. This query is free (the payment field is left empty). No
State proof is available for this response
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
transactionID | TransactionID | The ID of the transaction for which the receipt is requested. |
|
includeDuplicates | bool | Whether receipts of processing duplicate transactions should be returned along with the receipt of processing the first consensus transaction with the given id whose status was neither <tt>INVALID_NODE_ACCOUNT</tt> nor <tt>INVALID_PAYER_SIGNATURE</tt>; <b>or</b>, if no such receipt exists, the receipt of processing the first transaction to reach consensus with the given transaction id. |
|
include_child_receipts | bool | Whether the response should include the receipts of any child transactions spawned by the top-level transaction with the given transactionID. |
Response when the client sends the node TransactionGetReceiptQuery. 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. No State proof is available for this response
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither |
|
receipt | TransactionReceipt | Either the receipt of processing the first consensus transaction with the given id whose status was neither <tt>INVALID_NODE_ACCOUNT</tt> nor <tt>INVALID_PAYER_SIGNATURE</tt>; <b>or</b>, if no such receipt exists, the receipt of processing the first transaction to reach consensus with the given transaction id. |
|
duplicateTransactionReceipts | TransactionReceipt | repeated | The receipts of processing all transactions with the given id, in consensus time order. |
child_transaction_receipts | TransactionReceipt | repeated | The receipts (if any) of all child transactions spawned by the transaction with the given top-level id, in consensus order. Always empty if the top-level status is UNKNOWN. |
Get the record for a transaction. If the transaction requested a record, then the record lasts
for one hour, and a state proof is available for it. If the transaction created an account, file,
or smart contract instance, then the record will contain the ID for what it created. If the
transaction called a smart contract function, then the record contains the result of that call.
If the transaction was a cryptocurrency transfer, then the record includes the TransferList which
gives the details of that transfer. If the transaction didn't return anything that should be in
the record, then the results field will be set to nothing.
Field | Type | Label | Description |
header | QueryHeader | Standard info sent from client to node, including the signed payment, and what kind of response is requested (cost, state proof, both, or neither). |
|
transactionID | TransactionID | The ID of the transaction for which the record is requested. |
|
includeDuplicates | bool | Whether records of processing duplicate transactions should be returned along with the record of processing the first consensus transaction with the given id whose status was neither <tt>INVALID_NODE_ACCOUNT</tt> nor <tt>INVALID_PAYER_SIGNATURE</tt>; <b>or</b>, if no such record exists, the record of processing the first transaction to reach consensus with the given transaction id.. |
|
include_child_records | bool | Whether the response should include the records of any child transactions spawned by the top-level transaction with the given transactionID. |
Response when the client sends the node TransactionGetRecordQuery
Field | Type | Label | Description |
header | ResponseHeader | Standard response from node to client, including the requested fields: cost, or state proof, or both, or neither. |
|
transactionRecord | TransactionRecord | Either the record of processing the first consensus transaction with the given id whose status was neither <tt>INVALID_NODE_ACCOUNT</tt> nor <tt>INVALID_PAYER_SIGNATURE</tt>; <b>or</b>, if no such record exists, the record of processing the first transaction to reach consensus with the given transaction id. |
|
duplicateTransactionRecords | TransactionRecord | repeated | The records of processing all consensus transaction with the same id as the distinguished record above, in chronological order. |
child_transaction_records | TransactionRecord | repeated | The records of processing all child transaction spawned by the transaction with the given top-level id, in consensus order. Always empty if the top-level status is UNKNOWN. |
The summary of a transaction's result so far. If the transaction has not reached consensus, this
result will be necessarily incomplete.
Field | Type | Label | Description |
status | ResponseCodeEnum | The consensus status of the transaction; is UNKNOWN if consensus has not been reached, or if the associated transaction did not have a valid payer signature |
|
accountID | AccountID | In the receipt of a CryptoCreate, the id of the newly created account |
|
fileID | FileID | In the receipt of a FileCreate, the id of the newly created file |
|
contractID | ContractID | In the receipt of a ContractCreate, the id of the newly created contract |
|
exchangeRate | ExchangeRateSet | The exchange rates in effect when the transaction reached consensus |
|
topicID | TopicID | In the receipt of a ConsensusCreateTopic, the id of the newly created topic. |
|
topicSequenceNumber | uint64 | In the receipt of a ConsensusSubmitMessage, the new sequence number of the topic that received the message |
|
topicRunningHash | bytes | In the receipt of a ConsensusSubmitMessage, the new running hash of the topic that received the message. This 48-byte field is the output of a particular SHA-384 digest whose input data are determined by the value of the topicRunningHashVersion below. The bytes of each uint64 or uint32 are to be in Big-Endian format. IF the topicRunningHashVersion is '0' or '1', then the input data to the SHA-384 digest are, in order: --- 1. The previous running hash of the topic (48 bytes) 2. The topic's shard (8 bytes) 3. The topic's realm (8 bytes) 4. The topic's number (8 bytes) 5. The number of seconds since the epoch before the ConsensusSubmitMessage reached consensus (8 bytes) 6. The number of nanoseconds since 5. before the ConsensusSubmitMessage reached consensus (4 bytes) 7. The topicSequenceNumber from above (8 bytes) 8. The message bytes from the ConsensusSubmitMessage (variable). IF the topicRunningHashVersion is '2', then the input data to the SHA-384 digest are, in order: --- 1. The previous running hash of the topic (48 bytes) 2. The topicRunningHashVersion below (8 bytes) 3. The topic's shard (8 bytes) 4. The topic's realm (8 bytes) 5. The topic's number (8 bytes) 6. The number of seconds since the epoch before the ConsensusSubmitMessage reached consensus (8 bytes) 7. The number of nanoseconds since 6. before the ConsensusSubmitMessage reached consensus (4 bytes) 8. The topicSequenceNumber from above (8 bytes) 9. The output of the SHA-384 digest of the message bytes from the consensusSubmitMessage (48 bytes) Otherwise, IF the topicRunningHashVersion is '3', then the input data to the SHA-384 digest are, in order: --- 1. The previous running hash of the topic (48 bytes) 2. The topicRunningHashVersion below (8 bytes) 3. The payer account's shard (8 bytes) 4. The payer account's realm (8 bytes) 5. The payer account's number (8 bytes) 6. The topic's shard (8 bytes) 7. The topic's realm (8 bytes) 8. The topic's number (8 bytes) 9. The number of seconds since the epoch before the ConsensusSubmitMessage reached consensus (8 bytes) 10. The number of nanoseconds since 9. before the ConsensusSubmitMessage reached consensus (4 bytes) 11. The topicSequenceNumber from above (8 bytes) 12. The output of the SHA-384 digest of the message bytes from the consensusSubmitMessage (48 bytes) |
|
topicRunningHashVersion | uint64 | In the receipt of a ConsensusSubmitMessage, the version of the SHA-384 digest used to update the running hash. |
|
tokenID | TokenID | In the receipt of a CreateToken, the id of the newly created token |
|
newTotalSupply | uint64 | In the receipt of TokenMint, TokenWipe, TokenBurn, For fungible tokens - the current total supply of this token. For non fungible tokens - the total number of NFTs issued for a given tokenID |
|
scheduleID | ScheduleID | In the receipt of a ScheduleCreate, the id of the newly created Scheduled Entity |
|
scheduledTransactionID | TransactionID | In the receipt of a ScheduleCreate or ScheduleSign that resolves to SUCCESS, the TransactionID that should be used to query for the receipt or record of the relevant scheduled transaction |
|
serialNumbers | int64 | repeated | In the receipt of a TokenMint for tokens of type NON_FUNGIBLE_UNIQUE, the serial numbers of the newly created NFTs |
Response when the client sends the node TransactionGetRecordResponse
Field | Type | Label | Description |
receipt | TransactionReceipt | The status (reach consensus, or failed, or is unknown) and the ID of any new account/file/instance created. |
|
transactionHash | bytes | The hash of the Transaction that executed (not the hash of any Transaction that failed for having a duplicate TransactionID) |
|
consensusTimestamp | Timestamp | The consensus timestamp (or null if didn't reach consensus yet) |
|
transactionID | TransactionID | The ID of the transaction this record represents |
|
memo | string | The memo that was submitted as part of the transaction (max 100 bytes) |
|
transactionFee | uint64 | The actual transaction fee charged, not the original transactionFee value from TransactionBody |
|
contractCallResult | ContractFunctionResult | Record of the value returned by the smart contract function (if it completed and didn't fail) from ContractCallTransaction |
|
contractCreateResult | ContractFunctionResult | Record of the value returned by the smart contract constructor (if it completed and didn't fail) from ContractCreateTransaction |
|
transferList | TransferList | All hbar transfers as a result of this transaction, such as fees, or transfers performed by the transaction, or by a smart contract it calls, or by the creation of threshold records that it triggers. |
|
tokenTransferLists | TokenTransferList | repeated | All Token transfers as a result of this transaction |
scheduleRef | ScheduleID | Reference to the scheduled transaction ID that this transaction record represent |
|
assessed_custom_fees | AssessedCustomFee | repeated | All custom fees that were assessed during a CryptoTransfer, and must be paid if the transaction status resolved to SUCCESS |
automatic_token_associations | TokenAssociation | repeated | All token associations implicitly created while handling this transaction |
parent_consensus_timestamp | Timestamp | In the record of an internal transaction, the consensus timestamp of the user transaction that spawned it. |
|
alias | bytes | In the record of a CryptoCreate transaction triggered by a user transaction with a (previously unused) alias, the new account's alias. |
|
ethereum_hash | bytes | The keccak256 hash of the ethereumData. This field will only be populated for EthereumTransaction. |
|
paid_staking_rewards | AccountAmount | repeated | List of accounts with the corresponding staking rewards paid as a result of a transaction. |
prng_bytes | bytes | In the record of a UtilPrng transaction with no output range, a pseudorandom 384-bit string. |
|
prng_number | int32 | In the record of a PRNG transaction with an output range, the output of a PRNG whose input was a 384-bit string. |
|
evm_address | bytes | The new default EVM address of the account created by this transaction. This field is populated only when the EVM address is not specified in the related transaction body. |
When the client sends the node a transaction of any kind, the node replies with this, which
simply says that the transaction passed the precheck (so the node will submit it to the network)
or it failed (so it won't). If the fee offered was insufficient, this will also contain the
amount of the required fee. To learn the consensus result, the client should later obtain a
receipt (free), or can buy a more detailed record (not free).
Field | Type | Label | Description |
nodeTransactionPrecheckCode | ResponseCodeEnum | The response code that indicates the current status of the transaction. |
|
cost | uint64 | If the response code was INSUFFICIENT_TX_FEE, the actual transaction fee that would be required to execute the transaction. |
Submit an arbitrary (serialized) Transaction to the network without prechecks. Requires superuser
privileges.
Field | Type | Label | Description |
transactionBytes | bytes | The serialized bytes of the Transaction to be submitted without prechecks |
Generates a pseudorandom number
Field | Type | Label | Description |
range | int32 | If provided and is positive, returns a 32-bit pseudorandom number from the given range in the transaction record. If not set or set to zero, will return a 384-bit pseudorandom number in the record. |
The requests and responses for different utility services.
Method Name | Request Type | Response Type | Description |
prng | Transaction | TransactionResponse | Generates a pseudorandom number. |
.proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby |
double | double | double | float | float64 | double | float | Float | |
float | float | float | float | float32 | float | float | Float | |
int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum |
uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) |
uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) |
sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum |
fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) |
fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum |
sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum |
bool | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass | |
string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) |
bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |