Transaction Fees
The transaction fee for the current Klaytn virtual machine (KLVM) is computed as follows:
The
total gas used
is computed by KLVM based on the gas cost of the opcode and the intrinsic gas cost.unit price
is the price of gas defined in Klaytn.
This calculated transaction fee is subtracted from the sender's or enterprise account's balance, depending on the transaction.
Gas and Unit Price Overview
Gas
Every action that changes the state of the blockchain requires gas. When a node processes user's transaction such as sending KLAY, using ERC-20 tokens, or executing a contract, the user has to pay for the computation and storage usage. The amount of payment is decided by the amount of gas
required.
Gas
is a measuring unit representing how much calculation is needed to process the user's transaction.
Unit Price
Unit price
is the price for a single gas. The unit price (also called gas price
) is set in the system by the governance. It is currently set to 25 Gpeb (i.e., 25 x 10^9 peb) per gas and cannot be changed by user. The current value of the unit price can be obtained by calling the klay.gasPrice
API.
In Ethereum, users set the gas price for each transaction, and miners choose which transactions to be included in their block to maximize their reward. It is something like bidding for limited resources. This approach has been working because it is market-based. However, the transaction cost fluctuates and often becomes too high to guarantee the execution.
To solve the problem, Klaytn is using a fixed unit price and the price can be adjusted by the governance council. This policy ensures that every transaction will be handled equally and be guaranteed to be executed. Therefore, users do not need to struggle to determine the right unit price.
Transaction Validation against Unit Price
Klaytn only accepts transactions with gas prices, which can be set by the user, that are equal to the unit price of Klaytn; it rejects transactions with gas prices that are different from the unit price in Klaytn.
Unit Price Error
The error message invalid unit price
is returned when the gas price of a transaction is not equal to the unit price of Klaytn.
Transaction Replacement
Klaytn currently does not provide a way to replace a transaction using the unit price but may support different methods for the transaction replacement in the future. Note that in Ethereum, a transaction with a given nonce can be replaced by a new one with a higher gas price.
Klaytn's Gas table
Basically, Klaytn is keeping compatibility with Ethereum. So Klaytn's gas table is pretty similar with that of Ethereum. But because of the existence of unique features of Klaytn, there are several new constants for those features.
Common Fee
Item
Gas
Description
G_zero
0
Nothing paid for operations of the set Wzero
G_base
2
Amount of gas to pay for operations of the set Wbase
G_verylow
3
Amount of gas to pay for operations of the set Wverylow
G_low
5
Amount of gas to pay for operations of the set Wlow
G_mid
8
Amount of gas to pay for operations of the set Wmid
G_high
10
Amount of gas to pay for operations of the set Whigh
G_blockhash
20
Payment for BLOCKHASH operation
G_extcode
700
Amount of gas to pay for operations of the set Wextcode
G_balance
400
Amount of gas to pay for a BALANCE operation
G_sload
200
Paid for a SLOAD operation
G_jumpdest
1
Paid for a JUMPDEST operation
G_sset
20000
Paid for an SSTORE operation when the storage value is set to non-zero from zero
G_sreset
5000
Paid for an SSTORE operation when the storage value’s zeroness remains unchanged or is set to zero
G_sclear
15000
Refund given (added into refund counter) when the storage value is set to zero from non-zero
R_selfdestruct
24000
Refund given (added into refund counter) for self-destructing an account
G_selfdestruct
5000
Amount of gas to pay for a SELFDESTRUCT operation
G_create
32000
Paid for a CREATE operation
G_codedeposit
200
Paid per byte for a CREATE operation to succeed in placing code into state
G_call
700
Paid for a CALL operation
G_callvalue
9000
Paid for a non-zero value transfer as part of the CALL operation
G_callstipend
2300
A stipend for the called contract subtracted from Gcallvalue for a non-zero value transfer
G_newaccount
25000
Paid for a CALL or SELFDESTRUCT operation which creates an account
G_exp
10
Partial payment for an EXP operation
G_expbyte
50
Partial payment when multiplied by dlog256(exponent)e for the EXP operation
G_memory
3
Paid for every additional word when expanding memory
G_txcreate
32000
Paid by all contract-creating transactions
G_transaction
21000
Paid for every transaction
G_log
375
Partial payment for a LOG operation
G_logdata
8
Paid for each byte in a LOG operation’s data
G_logtopic
375
Paid for each topic of a LOG operation
G_sha3
30
Paid for each SHA3 operation
G_sha3word
6
Paid for each word (rounded up) for input data to a SHA3 operation
G_copy
3
Partial payment for *COPY operations, multiplied by words copied, rounded up
G_blockhash
20
Payment for BLOCKHASH operation
G_extcodehash
400
Paid for getting keccak256 hash of a contract's code
G_create2
32000
Paid for opcode CREATE2 which bahaves identically with CREATE but use different arguments
Precompiled Contracts
Precompiled contracts are special kind of contracts which usually perform complex cryptographic computations and are initiated by other contracts.
Item
Gas
Description
EcrecoverGas
3000
Perform ECRecover operation
Sha256BaseGas
60
Perform sha256 hash operation
Sha256PerWordGas
12
Ripemd160BaseGas
600
Perform Ripemd160 operation
Ripemd160PerWordGas
120
IdentityBaseGas
15
IdentityPerWordGas
3
ModExpQuadCoeffDiv
20
Bn256AddGas
500
Perform Bn256 elliptic curve operation
Bn256ScalarMulGas
40000
Bn256PairingBaseGas
100000
Bn256PairingPerPointGas
80000
VMLogBaseGas
100
Write logs to node's log file - Klaytn only
VMLogPerByteGas
20
Klaytn only
FeePayerGas
300
Get feePayer's address - Klaytn only
ValidateSenderGas
5000 per signature
Validate the sender's address and signature - Klaytn only
Total gas of those items which has XXXBaseGas and XXXPerWordGas (e.g. Sha256BaseGas, Sha256PerWordGas) are calculated as
ValidateSenderGas have to be paid per signature basis.
Account-related Gas Table
Item
Gas
Description
TxAccountCreationGasPerKey
20000
Gas required for a key-pair creation
TxValidationGasPerKey
15000
Gas required for a key validation
TxGasAccountUpdate
21000
Gas required for an account update
TxGasFeeDelegated
10000
Gas required for a fee delegation
TxGasFeeDelegatedWithRatio
15000
Gas required for a fee delegation with ratio
TxGasCancel
21000
Gas required to cancel a transaction which has a same nonce
TxGasValueTransfer
21000
Gas required to transfer KLAY
TxGasContractExecution
21000
Base gas for contract execution
TxDataGas
100
Gas required per transaction's single byte
Gas for payload data is calculated as below
Gas Formula for Transaction Types
TxType
Gas
LegacyTransaction
TxGas + PayloadGas + KeyValidationGas
ValueTransfer
TxGasValueTransfer + KeyValidationGas
ValueTransferMemo
TxGasValueTransfer + PayloadGas + KeyValidationGas
AccountUpdate
TxGasAccountUpdate + KeyCreationGas + KeyValidationGas
SmartContractDeploy
TxGasContractCreation + PayloadGas + KeyValidationGas
SmartContractExecution
TxGasContractExecution + PayloadGas + KeyValidationGas
Cancel
TxGasCancel + KeyValidationGas
KeyValidationGas is defined as below based on key type,
Key Type
Gas
Nil
N/A
Legacy
0
Fail
0
Public
0
MultiSig
(keys-1) * GasValidationPerKey (15000)
RoleBased
Based on keys in the role used in the validation
KeyCreationGas is defined as below based on key type,
Key Type
Gas
Nil
N/A
Legacy
0
Fail
0
Public
GasCreationPerKey (20000)
MultiSig
(keys) * GasCreationPerKey
RoleBased
Gas fee calculated based on keys in each role. e.g., GasRoleTransaction = (keys) GasCreationPerKey GasRoleAccountUpdate = (keys) GasCreationPerKey GasRoleFeePayer = (keys) * GasCreationPerKey
Last updated