You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/checklist_templates/eip_testing_checklist_template.md
+33-45Lines changed: 33 additions & 45 deletions
Original file line number
Diff line number
Diff line change
@@ -61,10 +61,8 @@ The EIP introduces one or more new opcodes to the EVM.
61
61
- [] Initcode of a contract creating opcode (including itself if opcode creates a contract).
62
62
-[ ] Verify opcode behavior on re-entry using the same initcode and same address (e.g. CREATE2->REVERT->CREATE2).
63
63
-[ ] Set-code delegated account: Verify opcode operations are applied to the set-code account and do not affect the address that is the target of the delegation.
64
-
-[ ] Transaction context
65
-
-[ ] If opcode changes behavior depending on particular transaction properties, test using multiple values for each property.
66
-
-[ ] Block context
67
-
-[ ] If opcode changes behavior depending on particular block properties, test using multiple values for each property.
64
+
-[ ] Transaction context: If opcode changes behavior depending on particular transaction properties, test using multiple values for each property.
65
+
-[ ] Block context: If opcode changes behavior depending on particular block properties, test using multiple values for each property.
68
66
-[ ] Return data
69
67
-[ ] Verify proper return data buffer overwriting if the opcode is meant to interact with it, otherwise verify that the return data buffer is unnaffected:
70
68
- [] At current call context.
@@ -74,8 +72,9 @@ The EIP introduces one or more new opcodes to the EVM.
74
72
-[ ] Memory expansion: Verify that the memory expansion correctly follows the gas calculation
75
73
-[ ] Out-of-gas during opcode execution: Verify that attempting to execute the opcode when gas available is 1 less than the required gas results in exeptional abort.
76
74
-[ ] Out-of-gas during memory expansion: Verify that the expansion of memory can result in out-of-gas exeptional abort.
77
-
-[ ] Order-of-operations:
78
-
-[ ] If the opcode requires different gas stipends for other operations (e.g. contract creation, cold/warm account access), create one case for each operation (ideally independent of eachother) and create a case for success and another for OOG (with a 1-gas-difference).
75
+
-[ ] Order-of-operations: If the opcode requires different gas stipends for other operations (e.g. contract creation, cold/warm account access), create one case for each operation (ideally independent of eachother) and the following cases for each:
76
+
-[ ] Success using the exact amount of gas required for the stipend.
77
+
-[ ] OOG with a 1-gas-difference from the gas required for the stipend.
79
78
-[ ] Terminating opcode
80
79
-[ ] If an opcode is terminating, meaning it results in the current call context to end execution, test the following scenarios
81
80
- [] Top-level call termination
@@ -91,10 +90,8 @@ The EIP introduces one or more new opcodes to the EVM.
91
90
-[ ] Verify if the opcode has out-of-bounds conditions in its parameters and verify:
92
91
- [] Max value for each parameter
93
92
- [] Max value + 1 for each parameter
94
-
-[ ] Exeptional Abort
95
-
-[ ] Verify behavior that is supposed to cause an exeptional abort, other than stack over or underflow, or out-of-gas errors.
96
-
-[ ] Data portion
97
-
-[ ] If an opcode has data portion that affects its behavior, verify checklist items with multiple interesting values (E.g. if data portion size is 1 byte, use at least 0x00, 0x01, 0x7F, 0xFF).
93
+
-[ ] Exeptional Abort: Verify behavior that is supposed to cause an exeptional abort, other than stack over or underflow, or out-of-gas errors.
94
+
-[ ] Data portion: If an opcode has data portion that affects its behavior, verify checklist items with multiple interesting values (E.g. if data portion size is 1 byte, use at least 0x00, 0x01, 0x7F, 0xFF).
98
95
-[ ] Contract creation
99
96
-[ ] Verify contract is created at the expected address given multiple inputs to the opcode parameters.
100
97
-[ ] Verify that contract is not created in case of:
@@ -162,8 +159,7 @@ The EIP introduces one or more new precompiles.
162
159
-[ ] Precompile has dynamic gas usage
163
160
-[ ] Verify exact gas consumption, given different valid inputs.
164
161
-[ ] Verify exact gas consumption minus one results in out-of-gas error, given different valid inputs.
165
-
-[ ] Excessive Gas Cases
166
-
-[ ] Verify spending all block gas in calls to the precompile (Use `Environment().gas_limit` as max amount).
162
+
-[ ] Excessive Gas Cases: Verify spending all block gas in calls to the precompile (Use `Environment().gas_limit` as max amount).
167
163
-[ ] Fork transition
168
164
-[ ] Verify that calling the precompile before its activation fork results in a valid call even for inputs that are expected to be invalid for the precompile.
169
165
-[ ] Verify that calling the precompile before its activation fork with zero gas results in a valid call.
@@ -203,7 +199,7 @@ The EIP removes one or more precompiles from the existing list of precompiles.
203
199
-[ ] Contract creating opcode
204
200
-[ ] Inputs
205
201
-[ ] Verify combinations of valid inputs to the system contract
206
-
- [] Verify interesting edge values given the system contract functionality.
202
+
-[ ] Verify interesting boundary values given the system contract functionality.
207
203
-[ ] Verify all zeros input.
208
204
-[ ] Verify 2^N-1 where N is a single or multiple valid bit-lengths.
209
205
-[ ] Verify combinations of invalid inputs to the precompile.
@@ -237,13 +233,15 @@ The EIP removes one or more precompiles from the existing list of precompiles.
237
233
-[ ] Verify deployment transaction results in the system contract being deployed to the expected address.
238
234
<!-- TODO: Missing contract at fork check -->
239
235
-[ ] Contract Variations
240
-
-[ ] Verify execution of the different variations of the contract for different networks (if any) results in the expected behavior
241
-
-[ ] Contract Substitution
242
-
-[ ] Substitute the contract to modify its behavior when called by the system address (at the end of the block execution):
243
-
- [] Modified return value lengths
244
-
- [] Modify emitted logs
245
-
-[ ] Fork transition
246
-
-[ ] Verify calling the system contract before its activation fork results in correct behavior (depends on the system contract implementation).
236
+
-[ ] Verify execution of the different variations of the contract for different networks (if any) results in the expected behavior,
237
+
-[ ] Verify execution of a variation that causes an exception.
238
+
-[ ] Verify execution of a variation that consumes:
239
+
-[ ] 30,000,000 million gas exactly, execution should be successful.
240
+
-[ ] 30,000,001 million gas exactly, execution should fail.
241
+
-[ ] Contract Substitution: Substitute the contract to modify its behavior when called by the system address (at the end of the block execution):
242
+
-[ ] Modified return value lengths
243
+
-[ ] Modify emitted logs
244
+
-[ ] Fork transition: Verify calling the system contract before its activation fork results in correct behavior (depends on the system contract implementation).
@@ -258,21 +256,15 @@ The EIP removes one or more precompiles from the existing list of precompiles.
258
256
-[ ] Gas Limit: For each new field that affects the intrinsic gas cost of the transaction:
259
257
- [] Verify the transaction (and the block it is included in) is valid by providing the exact intrinsic gas as `gas_limit` value to the transaction with all multiple combinations of values to the field.
260
258
- [] Verify the transaction (and the block it is included in) is invalid by providing the exact intrinsic gas minus one as `gas_limit` value to the transaction with all multiple combinations of values to the field.
261
-
-[ ] Max fee per gas:
262
-
-[ ] Verify the transaction (and the block it is included in) is invalid if its max-priority-fee-per-gas value is lower than the max-fee-per-gas.
263
-
-[ ] Verify the transaction (and the block it is included in) is invalid if its max-fee-per-gas value is lower than the blocks base-fee-per-gas.
264
-
-[ ] Chain ID:
265
-
-[ ] Verify the transaction (and the block it is included in) is invalid if its chain-id value does not match the network configuration.
266
-
-[ ] Nonce:
267
-
-[ ] Verify the transaction (and the block it is included in) is invalid if its nonce value does not match the account's current nonce.
268
-
-[ ] To:
269
-
-[ ] Verify the transaction (and the block it is included in) is invalid if the transaction type does not allow contract creation and the to-address field is empty.
270
-
-[ ] Value:
271
-
-[ ] Verify the transaction (and the block it is included in) is invalid if the transaction contains a value of 1 and the account does not contain enough funds to cover the intrinsic transaction cost plus 1.
272
-
-[ ] Data:
273
-
-[ ] Verify the transaction (and the block it is included in) is invalid if the transaction contains enough data so the data floor cost is higher than the intrinsic gas cost and the gas_limit is equal to the intrinsic gas gost.
274
-
-[ ] Sender balance:
275
-
-[ ] Verify the transaction (and the block it is included in) is invalid when the sender account does not have enough balance to cover the gas limit multiplied by the max fee per gas.
259
+
-[ ] Max fee per gas: Verify the transaction (and the block it is included in) is invalid if:
260
+
-[ ] Its max-priority-fee-per-gas value is lower than the max-fee-per-gas.
261
+
-[ ] Its max-fee-per-gas value is lower than the blocks base-fee-per-gas.
262
+
-[ ] Chain ID: Verify the transaction (and the block it is included in) is invalid if its chain-id value does not match the network configuration.
263
+
-[ ] Nonce: Verify the transaction (and the block it is included in) is invalid if its nonce value does not match the account's current nonce.
264
+
-[ ] To: Verify the transaction (and the block it is included in) is invalid if the transaction type does not allow contract creation and the to-address field is empty.
265
+
-[ ] Value: Verify the transaction (and the block it is included in) is invalid if the transaction contains a value of 1 and the account does not contain enough funds to cover the intrinsic transaction cost plus 1.
266
+
-[ ] Data: Verify the transaction (and the block it is included in) is invalid if the transaction contains enough data so the data floor cost is higher than the intrinsic gas cost and the gas_limit is equal to the intrinsic gas gost.
267
+
-[ ] Sender balance: Verify the transaction (and the block it is included in) is invalid when the sender account does not have enough balance to cover the gas limit multiplied by the max fee per gas.
276
268
-[ ] Signature:
277
269
-[ ] Verify the transaction is correctly rejected if it contains an invalid signature:
278
270
- [] V, R, S represent a value that is inside of the field but outside of the curve.
@@ -321,12 +313,10 @@ The EIP removes one or more precompiles from the existing list of precompiles.
321
313
-[ ] Verify transaction is correctly rejected if the serialized bytes object has extra bytes
322
314
-[ ] If the transaction contains fields with new serializable types, perform all previous tests on the new type/field, plus:
323
315
-[ ] Verify transaction rejection if the serializable field is incorrectly encoded as bytes instead of using the correct encoding.
324
-
-[ ] Out-of-bounds checks
325
-
-[ ] Verify if the transaction has out-of-bounds conditions in its fields and verify:
326
-
- [] Max value for each field
327
-
- [] Max value + 1 for each field
328
-
-[ ] Contract creation
329
-
-[ ] Verify that the transaction can create new contracts if the transaction type supports it.
316
+
-[ ] Out-of-bounds checks: Verify if the transaction has out-of-bounds conditions in its fields and verify:
317
+
-[ ] Max value for each field
318
+
-[ ] Max value + 1 for each field
319
+
-[ ] Contract creation: Verify that the transaction can create new contracts if the transaction type supports it.
330
320
-[ ] Sender account modifications
331
321
-[ ] Verify that the sender account of the new transaction type transaction has its nonce incremented at least by one after the transaction is included in a block (or more if the transaction type introduces a new mechanism that bumps the nonce by more than one).
332
322
-[ ] Verify that the sender account of the new transaction type transaction has its balance reduced by the correct amount (gas consumed and value) at the start of execution (e.g. using Op.BALANCE).
@@ -340,8 +330,7 @@ The EIP removes one or more precompiles from the existing list of precompiles.
340
330
- [] Rejected if `(block.txs[0].gas_used + block.txs[1].gas_limit == block.gas_limit + 1) and (block.txs[0].gas_used < block.gas_limit)`
341
331
-[ ] Verify a transaction of the new type is rejected if its gas limit exceeds the [EIP-7825](https://eips.ethereum.org/EIPS/eip-7825) gas limit for the current fork.
342
332
-[ ] Verify a block with all transactions types including the new type is executed correctly.
343
-
-[ ] Fork transition
344
-
-[ ] Verify that a block prior to fork activation where the new transaction type is introduced and containing the new transaction type is invalid.
333
+
-[ ] Fork transition: Verify that a block prior to fork activation where the new transaction type is introduced and containing the new transaction type is invalid.
345
334
-[ ] RPC Tests
346
335
-[ ]* Verify `eth_estimateGas` behavior for different valid combinations of the new transaction type
347
336
-[ ] Verify `eth_sendRawTransaction` using `execute`
@@ -358,8 +347,7 @@ The EIP removes one or more precompiles from the existing list of precompiles.
358
347
359
348
### <!-- id:new_block_header_field/test --> Test Vectors
360
349
361
-
-[ ] Genesis value
362
-
-[ ] Verify, if possible, that the value can be set at genesis if the network starting fork is the activation fork, and that clients can consume such genesis.
350
+
-[ ] Genesis value: Verify, if possible, that the value can be set at genesis if the network starting fork is the activation fork, and that clients can consume such genesis.
363
351
-[ ] Value behavior
364
352
-[ ] Verify, given multiple initial values, that a block is accepted if the value is the correct expected for the current block, depending on the circumstances that affect the value as defined in the EIP.
365
353
-[ ] Verify, given multiple initial values, that a block is rejected if the value is modified (using `block.rlp_modifier`) to an incorrect value for the current block, depending on the circumstances that affect the value as defined in the EIP.
0 commit comments