github.com/ledgerwatch/erigon-lib@v1.0.0/common/fixedgas/protocol.go (about)

     1  /*
     2     Copyright 2021 The Erigon contributors
     3  
     4     Licensed under the Apache License, Version 2.0 (the "License");
     5     you may not use this file except in compliance with the License.
     6     You may obtain a copy of the License at
     7  
     8         http://www.apache.org/licenses/LICENSE-2.0
     9  
    10     Unless required by applicable law or agreed to in writing, software
    11     distributed under the License is distributed on an "AS IS" BASIS,
    12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13     See the License for the specific language governing permissions and
    14     limitations under the License.
    15  */
    16  
    17  package fixedgas
    18  
    19  const (
    20  	GasLimitBoundDivisor uint64 = 1024    // The bound divisor of the gas limit, used in update calculations.
    21  	MinGasLimit          uint64 = 5000    // Minimum the gas limit may ever be.
    22  	GenesisGasLimit      uint64 = 4712388 // Gas limit of the Genesis block.
    23  
    24  	MaximumExtraDataSize  uint64 = 32    // Maximum size extra data may be after Genesis.
    25  	ExpByteGas            uint64 = 10    // Times ceil(log256(exponent)) for the EXP instruction.
    26  	SloadGas              uint64 = 50    // Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added.
    27  	CallValueTransferGas  uint64 = 9000  // Paid for CALL when the value transfer is non-zero.
    28  	CallNewAccountGas     uint64 = 25000 // Paid for CALL when the destination address didn't exist prior.
    29  	TxGas                 uint64 = 21000 // Per transaction not creating a contract. NOTE: Not payable on data of calls between transactions.
    30  	TxGasContractCreation uint64 = 53000 // Per transaction that creates a contract. NOTE: Not payable on data of calls between transactions.
    31  	TxDataZeroGas         uint64 = 4     // Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions.
    32  	QuadCoeffDiv          uint64 = 512   // Divisor for the quadratic particle of the memory cost equation.
    33  	LogDataGas            uint64 = 8     // Per byte in a LOG* operation's data.
    34  	CallStipend           uint64 = 2300  // Free gas given at beginning of call.
    35  
    36  	Sha3Gas     uint64 = 30 // Once per SHA3 operation.
    37  	Sha3WordGas uint64 = 6  // Once per word of the SHA3 operation's data.
    38  
    39  	SstoreSetGas    uint64 = 20000 // Once per SLOAD operation.
    40  	SstoreResetGas  uint64 = 5000  // Once per SSTORE operation if the zeroness changes from zero.
    41  	SstoreClearGas  uint64 = 5000  // Once per SSTORE operation if the zeroness doesn't change.
    42  	SstoreRefundGas uint64 = 15000 // Once per SSTORE operation if the zeroness changes to zero.
    43  
    44  	NetSstoreNoopGas  uint64 = 200   // Once per SSTORE operation if the value doesn't change.
    45  	NetSstoreInitGas  uint64 = 20000 // Once per SSTORE operation from clean zero.
    46  	NetSstoreCleanGas uint64 = 5000  // Once per SSTORE operation from clean non-zero.
    47  	NetSstoreDirtyGas uint64 = 200   // Once per SSTORE operation from dirty.
    48  
    49  	NetSstoreClearRefund      uint64 = 15000 // Once per SSTORE operation for clearing an originally existing storage slot
    50  	NetSstoreResetRefund      uint64 = 4800  // Once per SSTORE operation for resetting to the original non-zero value
    51  	NetSstoreResetClearRefund uint64 = 19800 // Once per SSTORE operation for resetting to the original zero value
    52  
    53  	SstoreSentryGasEIP2200            uint64 = 2300  // Minimum gas required to be present for an SSTORE call, not consumed
    54  	SstoreSetGasEIP2200               uint64 = 20000 // Once per SSTORE operation from clean zero to non-zero
    55  	SstoreResetGasEIP2200             uint64 = 5000  // Once per SSTORE operation from clean non-zero to something else
    56  	SstoreClearsScheduleRefundEIP2200 uint64 = 15000 // Once per SSTORE operation for clearing an originally existing storage slot
    57  
    58  	ColdAccountAccessCostEIP2929 = uint64(2600) // COLD_ACCOUNT_ACCESS_COST
    59  	ColdSloadCostEIP2929         = uint64(2100) // COLD_SLOAD_COST
    60  	WarmStorageReadCostEIP2929   = uint64(100)  // WARM_STORAGE_READ_COST
    61  
    62  	// In EIP-2200: SstoreResetGas was 5000.
    63  	// In EIP-2929: SstoreResetGas was changed to '5000 - COLD_SLOAD_COST'.
    64  	// In EIP-3529: SSTORE_CLEARS_SCHEDULE is defined as SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST
    65  	// Which becomes: 5000 - 2100 + 1900 = 4800
    66  	SstoreClearsScheduleRefundEIP3529 uint64 = SstoreResetGasEIP2200 - ColdSloadCostEIP2929 + TxAccessListStorageKeyGas
    67  
    68  	JumpdestGas   uint64 = 1     // Once per JUMPDEST operation.
    69  	EpochDuration uint64 = 30000 // Duration between proof-of-work epochs.
    70  
    71  	CreateDataGas         uint64 = 200   //
    72  	CallCreateDepth       uint64 = 1024  // Maximum depth of call/create stack.
    73  	ExpGas                uint64 = 10    // Once per EXP instruction
    74  	LogGas                uint64 = 375   // Per LOG* operation.
    75  	CopyGas               uint64 = 3     //
    76  	StackLimit            uint64 = 1024  // Maximum size of VM stack allowed.
    77  	TierStepGas           uint64 = 0     // Once per operation, for a selection of them.
    78  	LogTopicGas           uint64 = 375   // Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas.
    79  	CreateGas             uint64 = 32000 // Once per CREATE operation & contract-creation transaction.
    80  	Create2Gas            uint64 = 32000 // Once per CREATE2 operation
    81  	SelfdestructRefundGas uint64 = 24000 // Refunded following a selfdestruct operation.
    82  	MemoryGas             uint64 = 3     // Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL.
    83  
    84  	TxDataNonZeroGasFrontier  uint64 = 68   // Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions.
    85  	TxDataNonZeroGasEIP2028   uint64 = 16   // Per byte of non zero data attached to a transaction after EIP 2028 (part in Istanbul)
    86  	TxAccessListAddressGas    uint64 = 2400 // Per address specified in EIP 2930 access list
    87  	TxAccessListStorageKeyGas uint64 = 1900 // Per storage key specified in EIP 2930 access list
    88  
    89  	// These have been changed during the course of the chain
    90  	CallGasFrontier              uint64 = 40  // Once per CALL operation & message call transaction.
    91  	CallGasEIP150                uint64 = 700 // Static portion of gas for CALL-derivates after EIP 150 (Tangerine)
    92  	BalanceGasFrontier           uint64 = 20  // The cost of a BALANCE operation
    93  	BalanceGasEIP150             uint64 = 400 // The cost of a BALANCE operation after Tangerine
    94  	BalanceGasEIP1884            uint64 = 700 // The cost of a BALANCE operation after EIP 1884 (part of Istanbul)
    95  	ExtcodeSizeGasFrontier       uint64 = 20  // Cost of EXTCODESIZE before EIP 150 (Tangerine)
    96  	ExtcodeSizeGasEIP150         uint64 = 700 // Cost of EXTCODESIZE after EIP 150 (Tangerine)
    97  	SloadGasFrontier             uint64 = 50
    98  	SloadGasEIP150               uint64 = 200
    99  	SloadGasEIP1884              uint64 = 800  // Cost of SLOAD after EIP 1884 (part of Istanbul)
   100  	SloadGasEIP2200              uint64 = 800  // Cost of SLOAD after EIP 2200 (part of Istanbul)
   101  	ExtcodeHashGasConstantinople uint64 = 400  // Cost of EXTCODEHASH (introduced in Constantinople)
   102  	ExtcodeHashGasEIP1884        uint64 = 700  // Cost of EXTCODEHASH after EIP 1884 (part in Istanbul)
   103  	SelfdestructGasEIP150        uint64 = 5000 // Cost of SELFDESTRUCT post EIP 150 (Tangerine)
   104  
   105  	// EXP has a dynamic portion depending on the size of the exponent
   106  	ExpByteFrontier uint64 = 10 // was set to 10 in Frontier
   107  	ExpByteEIP158   uint64 = 50 // was raised to 50 during Eip158 (Spurious Dragon)
   108  
   109  	// Extcodecopy has a dynamic AND a static cost. This represents only the
   110  	// static portion of the gas. It was changed during EIP 150 (Tangerine)
   111  	ExtcodeCopyBaseFrontier uint64 = 20
   112  	ExtcodeCopyBaseEIP150   uint64 = 700
   113  
   114  	// CreateBySelfdestructGas is used when the refunded account is one that does
   115  	// not exist. This logic is similar to call.
   116  	// Introduced in Tangerine Whistle (Eip 150)
   117  	CreateBySelfdestructGas uint64 = 25000
   118  
   119  	BaseFeeChangeDenominator = 8          // Bounds the amount the base fee can change between blocks.
   120  	ElasticityMultiplier     = 2          // Bounds the maximum gas limit an EIP-1559 block may have.
   121  	InitialBaseFee           = 1000000000 // Initial base fee for EIP-1559 blocks.
   122  
   123  	MaxCodeSize = 24576 // Maximum bytecode to permit for a contract
   124  
   125  	// Precompiled contract gas prices
   126  
   127  	EcrecoverGas        uint64 = 3000 // Elliptic curve sender recovery gas price
   128  	Sha256BaseGas       uint64 = 60   // Base price for a SHA256 operation
   129  	Sha256PerWordGas    uint64 = 12   // Per-word price for a SHA256 operation
   130  	Ripemd160BaseGas    uint64 = 600  // Base price for a RIPEMD160 operation
   131  	Ripemd160PerWordGas uint64 = 120  // Per-word price for a RIPEMD160 operation
   132  	IdentityBaseGas     uint64 = 15   // Base price for a data copy operation
   133  	IdentityPerWordGas  uint64 = 3    // Per-work price for a data copy operation
   134  
   135  	Bn256AddGasByzantium             uint64 = 500    // Byzantium gas needed for an elliptic curve addition
   136  	Bn256AddGasIstanbul              uint64 = 150    // Gas needed for an elliptic curve addition
   137  	Bn256ScalarMulGasByzantium       uint64 = 40000  // Byzantium gas needed for an elliptic curve scalar multiplication
   138  	Bn256ScalarMulGasIstanbul        uint64 = 6000   // Gas needed for an elliptic curve scalar multiplication
   139  	Bn256PairingBaseGasByzantium     uint64 = 100000 // Byzantium base price for an elliptic curve pairing check
   140  	Bn256PairingBaseGasIstanbul      uint64 = 45000  // Base price for an elliptic curve pairing check
   141  	Bn256PairingPerPointGasByzantium uint64 = 80000  // Byzantium per-point price for an elliptic curve pairing check
   142  	Bn256PairingPerPointGasIstanbul  uint64 = 34000  // Per-point price for an elliptic curve pairing check
   143  
   144  	Bls12381G1AddGas          uint64 = 600    // Price for BLS12-381 elliptic curve G1 point addition
   145  	Bls12381G1MulGas          uint64 = 12000  // Price for BLS12-381 elliptic curve G1 point scalar multiplication
   146  	Bls12381G2AddGas          uint64 = 4500   // Price for BLS12-381 elliptic curve G2 point addition
   147  	Bls12381G2MulGas          uint64 = 55000  // Price for BLS12-381 elliptic curve G2 point scalar multiplication
   148  	Bls12381PairingBaseGas    uint64 = 115000 // Base gas price for BLS12-381 elliptic curve pairing check
   149  	Bls12381PairingPerPairGas uint64 = 23000  // Per-point pair gas price for BLS12-381 elliptic curve pairing check
   150  	Bls12381MapG1Gas          uint64 = 5500   // Gas price for BLS12-381 mapping field element to G1 operation
   151  	Bls12381MapG2Gas          uint64 = 110000 // Gas price for BLS12-381 mapping field element to G2 operation
   152  
   153  	// The Refund Quotient is the cap on how much of the used gas can be refunded. Before EIP-3529,
   154  	// up to half the consumed gas could be refunded. Redefined as 1/5th in EIP-3529
   155  	RefundQuotient        uint64 = 2
   156  	RefundQuotientEIP3529 uint64 = 5
   157  
   158  	// EIP-3860 to limit size of initcode
   159  	MaxInitCodeSize = 2 * MaxCodeSize // Maximum initcode to permit in a creation transaction and create instructions
   160  	InitCodeWordGas = 2
   161  
   162  	// EIP-4844: Shard Blob Transactions
   163  	FieldElementsPerBlob         = 4096 // each field element is 32 bytes
   164  	BlobSize                     = FieldElementsPerBlob * 32
   165  	BlobGasPerBlob        uint64 = 0x20000
   166  	TargetBlobGasPerBlock uint64 = 0x60000
   167  	MaxBlobGasPerBlock    uint64 = 0xC0000
   168  	MaxBlobsPerBlock      uint64 = MaxBlobGasPerBlock / BlobGasPerBlob
   169  )