@zkasm/zkevm-rom 0.0.1-security → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @zkasm/zkevm-rom might be problematic. Click here for more details.

Files changed (232) hide show
  1. package/.eslintrc.js +33 -0
  2. package/.github/CODEOWNERS +14 -0
  3. package/.github/ISSUE_TEMPLATE/bug.yml +38 -0
  4. package/.github/ISSUE_TEMPLATE/feature.yml +26 -0
  5. package/.github/ISSUE_TEMPLATE/question.yml +26 -0
  6. package/.github/workflows/main.yaml +40 -0
  7. package/LICENSE +636 -0
  8. package/README.md +23 -5
  9. package/audits/Hexens_Polygon_zkEVM_PUBLIC_27.02.23.pdf +0 -0
  10. package/audits/Polygon-zkEVM-Public-v1.1-verichains-19-03-2024.pdf +0 -0
  11. package/audits/zkEVM-ROM-upgrade-1-Spearbit-30-May.pdf +0 -0
  12. package/audits/zkEVM-ROM-upgrade-2-Spearbit-21-August.pdf +0 -0
  13. package/audits/zkEVM-engagement-1-Spearbit-27-March.pdf +0 -0
  14. package/audits/zkEVM-engagement-2-Spearbit-27-March.pdf +0 -0
  15. package/audits/zkEVM-engagement-3-Spearbit-6-April.pdf +0 -0
  16. package/counters/README.md +45 -0
  17. package/counters/counters-executor.js +80 -0
  18. package/counters/countersConstants.zkasm +370 -0
  19. package/counters/endIncludes.zkasm +18 -0
  20. package/counters/initIncludes.zkasm +2 -0
  21. package/counters/tests/MLOAD32.zkasm +27 -0
  22. package/counters/tests/MLOADX.zkasm +30 -0
  23. package/counters/tests/MSTORE32.zkasm +32 -0
  24. package/counters/tests/MSTOREX.zkasm +36 -0
  25. package/counters/tests/SHLarith.zkasm +28 -0
  26. package/counters/tests/SHLarithBit.zkasm +28 -0
  27. package/counters/tests/SHRarith.zkasm +28 -0
  28. package/counters/tests/SHRarithBit.zkasm +28 -0
  29. package/counters/tests/abs.zkasm +29 -0
  30. package/counters/tests/addBatchHashByteByByte.zkasm +31 -0
  31. package/counters/tests/computeGasSendCall.zkasm +30 -0
  32. package/counters/tests/divArith.zkasm +27 -0
  33. package/counters/tests/expAD.zkasm +30 -0
  34. package/counters/tests/getLenBits.zkasm +30 -0
  35. package/counters/tests/getLenBytes.zkasm +32 -0
  36. package/counters/tests/isEmptyAccount.zkasm +30 -0
  37. package/counters/tests/mulARITH.zkasm +28 -0
  38. package/counters/tests/offsetUtil.zkasm +29 -0
  39. package/counters/tests/opADDMOD.zkasm +28 -0
  40. package/counters/tests/opAdd.zkasm +27 -0
  41. package/counters/tests/opBLOCKHASH.zkasm +28 -0
  42. package/counters/tests/opCALL.zkasm +41 -0
  43. package/counters/tests/opCALLCODE.zkasm +41 -0
  44. package/counters/tests/opCALLDATACOPY.zkasm +28 -0
  45. package/counters/tests/opCALLDATALOAD.zkasm +27 -0
  46. package/counters/tests/opCODECOPY.zkasm +28 -0
  47. package/counters/tests/opCREATE.zkasm +35 -0
  48. package/counters/tests/opCREATE2.zkasm +35 -0
  49. package/counters/tests/opDELEGATECALL.zkasm +35 -0
  50. package/counters/tests/opDIV.zkasm +27 -0
  51. package/counters/tests/opEXP.zkasm +29 -0
  52. package/counters/tests/opEXTCODECOPY.zkasm +29 -0
  53. package/counters/tests/opMOD.zkasm +27 -0
  54. package/counters/tests/opMUL.zkasm +27 -0
  55. package/counters/tests/opMULMOD.zkasm +28 -0
  56. package/counters/tests/opRETURN.zkasm +32 -0
  57. package/counters/tests/opRETURNDATACOPY.zkasm +29 -0
  58. package/counters/tests/opREVERT.zkasm +32 -0
  59. package/counters/tests/opSDIV.zkasm +28 -0
  60. package/counters/tests/opSHA3.zkasm +28 -0
  61. package/counters/tests/opSIGNEXTEND.zkasm +27 -0
  62. package/counters/tests/opSMOD.zkasm +28 -0
  63. package/counters/tests/opSTATICCALL.zkasm +35 -0
  64. package/counters/tests/opSUB.zkasm +27 -0
  65. package/counters/tests/saveMem.zkasm +31 -0
  66. package/docs/opcode-cost-zk-counters.md +315 -0
  67. package/docs/usage-ecrecover.md +51 -0
  68. package/index.js +43 -0
  69. package/main/block-info.zkasm +204 -0
  70. package/main/constants.zkasm +145 -0
  71. package/main/ecrecover/addFpEc.zkasm +31 -0
  72. package/main/ecrecover/checkSqrtFpEc.zkasm +1558 -0
  73. package/main/ecrecover/constEc.zkasm +13 -0
  74. package/main/ecrecover/ecrecover.zkasm +280 -0
  75. package/main/ecrecover/invFnEc.zkasm +44 -0
  76. package/main/ecrecover/invFpEc.zkasm +45 -0
  77. package/main/ecrecover/mulFnEc.zkasm +36 -0
  78. package/main/ecrecover/mulFpEc.zkasm +36 -0
  79. package/main/ecrecover/mulPointEc.zkasm +311 -0
  80. package/main/ecrecover/sqFpEc.zkasm +38 -0
  81. package/main/ecrecover/sqrtFpEc.zkasm +70 -0
  82. package/main/end.zkasm +4 -0
  83. package/main/l2-tx-hash.zkasm +159 -0
  84. package/main/load-change-l2-block-utils.zkasm +11 -0
  85. package/main/load-change-l2-block.zkasm +28 -0
  86. package/main/load-tx-rlp-utils.zkasm +72 -0
  87. package/main/load-tx-rlp.zkasm +431 -0
  88. package/main/main.zkasm +237 -0
  89. package/main/map-opcodes.zkasm +274 -0
  90. package/main/modexp/array_lib/array_add_AGTB.zkasm +123 -0
  91. package/main/modexp/array_lib/array_add_short.zkasm +85 -0
  92. package/main/modexp/array_lib/array_div.zkasm +215 -0
  93. package/main/modexp/array_lib/array_div_long.zkasm +284 -0
  94. package/main/modexp/array_lib/array_div_short.zkasm +222 -0
  95. package/main/modexp/array_lib/array_mul.zkasm +97 -0
  96. package/main/modexp/array_lib/array_mul_long.zkasm +156 -0
  97. package/main/modexp/array_lib/array_mul_short.zkasm +127 -0
  98. package/main/modexp/array_lib/array_square.zkasm +246 -0
  99. package/main/modexp/array_lib/unused/array_add.zkasm +100 -0
  100. package/main/modexp/array_lib/unused/array_is_odd.zkasm +23 -0
  101. package/main/modexp/array_lib/unused/array_is_one.zkasm +33 -0
  102. package/main/modexp/array_lib/unused/array_is_zero.zkasm +34 -0
  103. package/main/modexp/array_lib/unused/array_sub_AGTB.zkasm +111 -0
  104. package/main/modexp/array_lib/unused/array_unshift.zkasm +37 -0
  105. package/main/modexp/array_lib/utils/array_compare.zkasm +82 -0
  106. package/main/modexp/array_lib/utils/array_trim.zkasm +49 -0
  107. package/main/modexp/constants.zkasm +5 -0
  108. package/main/modexp/modexp.zkasm +296 -0
  109. package/main/modexp/modexp_utils.zkasm +230 -0
  110. package/main/opcodes/arithmetic.zkasm +357 -0
  111. package/main/opcodes/block.zkasm +163 -0
  112. package/main/opcodes/calldata-returndata-code.zkasm +619 -0
  113. package/main/opcodes/comparison.zkasm +446 -0
  114. package/main/opcodes/context-information.zkasm +169 -0
  115. package/main/opcodes/create-terminate-context.zkasm +1011 -0
  116. package/main/opcodes/crypto.zkasm +96 -0
  117. package/main/opcodes/flow-control.zkasm +126 -0
  118. package/main/opcodes/logs.zkasm +193 -0
  119. package/main/opcodes/stack-operations.zkasm +658 -0
  120. package/main/opcodes/storage-memory.zkasm +313 -0
  121. package/main/pairings/BN254/addPointBN254.zkasm +245 -0
  122. package/main/pairings/BN254/ecAdd.zkasm +312 -0
  123. package/main/pairings/BN254/ecMul.zkasm +159 -0
  124. package/main/pairings/BN254/escalarMulBN254.zkasm +155 -0
  125. package/main/pairings/BN254/lineDiffPointsBN254.zkasm +83 -0
  126. package/main/pairings/BN254/lineSamePointsBN254.zkasm +96 -0
  127. package/main/pairings/FP12BN254/CYCLOFP12BN254/compressFp12BN254.zkasm +49 -0
  128. package/main/pairings/FP12BN254/CYCLOFP12BN254/decompressFp12BN254.zkasm +236 -0
  129. package/main/pairings/FP12BN254/CYCLOFP12BN254/expByXCompCycloFp12BN254.zkasm +444 -0
  130. package/main/pairings/FP12BN254/CYCLOFP12BN254/squareCompCycloFp12BN254.zkasm +212 -0
  131. package/main/pairings/FP12BN254/CYCLOFP12BN254/squareCycloFp12BN254.zkasm +228 -0
  132. package/main/pairings/FP12BN254/CYCLOFP12BN254/xBinDecompBN254.zkasm +64 -0
  133. package/main/pairings/FP12BN254/frob2Fp12BN254.zkasm +80 -0
  134. package/main/pairings/FP12BN254/frob3Fp12BN254.zkasm +96 -0
  135. package/main/pairings/FP12BN254/frobFp12BN254.zkasm +96 -0
  136. package/main/pairings/FP12BN254/inverseFp12BN254.zkasm +289 -0
  137. package/main/pairings/FP12BN254/mulFp12BN254.zkasm +408 -0
  138. package/main/pairings/FP12BN254/sparseMulAFp12BN254.zkasm +296 -0
  139. package/main/pairings/FP12BN254/sparseMulBFp12BN254.zkasm +291 -0
  140. package/main/pairings/FP12BN254/squareFp12BN254.zkasm +376 -0
  141. package/main/pairings/FP2BN254/addFp2BN254.zkasm +19 -0
  142. package/main/pairings/FP2BN254/escalarMulFp2BN254.zkasm +20 -0
  143. package/main/pairings/FP2BN254/invFp2BN254.zkasm +66 -0
  144. package/main/pairings/FP2BN254/mulFp2BN254.zkasm +19 -0
  145. package/main/pairings/FP2BN254/squareFp2BN254.zkasm +21 -0
  146. package/main/pairings/FP2BN254/subFp2BN254.zkasm +19 -0
  147. package/main/pairings/FP4BN254/squareFp4BN254.zkasm +76 -0
  148. package/main/pairings/FP6BN254/addFp6BN254.zkasm +59 -0
  149. package/main/pairings/FP6BN254/escalarMulFp6BN254.zkasm +51 -0
  150. package/main/pairings/FP6BN254/inverseFp6BN254.zkasm +208 -0
  151. package/main/pairings/FP6BN254/mulFp6BN254.zkasm +201 -0
  152. package/main/pairings/FP6BN254/sparseMulAFp6BN254.zkasm +65 -0
  153. package/main/pairings/FP6BN254/sparseMulBFp6BN254.zkasm +134 -0
  154. package/main/pairings/FP6BN254/sparseMulCFp6BN254.zkasm +128 -0
  155. package/main/pairings/FP6BN254/squareFp6BN254.zkasm +147 -0
  156. package/main/pairings/FP6BN254/subFp6BN254.zkasm +59 -0
  157. package/main/pairings/FPBN254/addFpBN254.zkasm +29 -0
  158. package/main/pairings/FPBN254/invFpBN254.zkasm +55 -0
  159. package/main/pairings/FPBN254/mulFpBN254.zkasm +29 -0
  160. package/main/pairings/FPBN254/reduceFpBN254.zkasm +25 -0
  161. package/main/pairings/FPBN254/squareFpBN254.zkasm +31 -0
  162. package/main/pairings/FPBN254/subFpBN254.zkasm +36 -0
  163. package/main/pairings/FRBN254/reduceFrBN254.zkasm +25 -0
  164. package/main/pairings/constants.zkasm +62 -0
  165. package/main/pairings/ecPairing.zkasm +244 -0
  166. package/main/pairings/finalExpBN254.zkasm +2095 -0
  167. package/main/pairings/halfPairingBN254.zkasm +428 -0
  168. package/main/pairings/loopLengthBN254.zkasm +75 -0
  169. package/main/pairings/millerLoopBN254.zkasm +741 -0
  170. package/main/pairings/pairingBN254.zkasm +481 -0
  171. package/main/pairings/unused/addFp12BN254.zkasm +130 -0
  172. package/main/pairings/unused/expByXCycloFp12BN254.zkasm +411 -0
  173. package/main/pairings/unused/expFp12BN254.zkasm +333 -0
  174. package/main/pairings/unused/subFp12BN254.zkasm +130 -0
  175. package/main/pairings/unused/xPseudoBinDecompBN254.zkasm +68 -0
  176. package/main/pairings/utilsTests/expCycloFp12BN254.zkasm +334 -0
  177. package/main/precompiled/end.zkasm +42 -0
  178. package/main/precompiled/identity.zkasm +99 -0
  179. package/main/precompiled/pre-ecAdd.zkasm +84 -0
  180. package/main/precompiled/pre-ecMul.zkasm +82 -0
  181. package/main/precompiled/pre-ecPairing.zkasm +72 -0
  182. package/main/precompiled/pre-ecrecover.zkasm +71 -0
  183. package/main/precompiled/pre-modexp.zkasm +367 -0
  184. package/main/precompiled/pre-sha2-256.zkasm +125 -0
  185. package/main/precompiled/revert-precompiled.zkasm +25 -0
  186. package/main/precompiled/selector.zkasm +77 -0
  187. package/main/process-change-l2-block.zkasm +147 -0
  188. package/main/process-tx.zkasm +587 -0
  189. package/main/tables/2-exp.zkasm +260 -0
  190. package/main/touched.zkasm +118 -0
  191. package/main/utils.zkasm +2335 -0
  192. package/main/vars.zkasm +117 -0
  193. package/package.json +62 -3
  194. package/test/bytes-length.zkasm +39 -0
  195. package/test/ecrecover.zkasm +538 -0
  196. package/test/lt4-test.zkasm +38 -0
  197. package/test/mstorex.zkasm +191 -0
  198. package/test/opcalldatacopy.ignore.zkasm +331 -0
  199. package/test/performance/read-push.zkasm +71 -0
  200. package/test/read-push.zkasm +304 -0
  201. package/test/testArrayArith.zkasm +1099 -0
  202. package/test/testArrayUtils.zkasm +335 -0
  203. package/test/testCycloFp12ArithBN254.zkasm +548 -0
  204. package/test/testEcAdd.zkasm +252 -0
  205. package/test/testEcMul.zkasm +231 -0
  206. package/test/testEcPairing.zkasm +436 -0
  207. package/test/testFinalExpBn254.zkasm +139 -0
  208. package/test/testFp12ArithBN254.zkasm +692 -0
  209. package/test/testFp2ArithBN254.zkasm +185 -0
  210. package/test/testFp4ArithBN254.zkasm +128 -0
  211. package/test/testFp6ArithBN254.zkasm +260 -0
  212. package/test/testFpArithBN254.zkasm +159 -0
  213. package/test/testFrArithBN254.zkasm +113 -0
  214. package/test/testHalfPairingBN254.zkasm +285 -0
  215. package/test/testModExp.zkasm +586 -0
  216. package/test/testModExpReturn.zkasm +81 -0
  217. package/test/testPairingBN254.zkasm +463 -0
  218. package/test/testPointArithBN254.zkasm +270 -0
  219. package/test/testSHA256.zkasm +27 -0
  220. package/test/touched-assert.zkasm +59 -0
  221. package/test/utils-expAD.zkasm +48 -0
  222. package/test/utils-getLenBytes.zkasm +36 -0
  223. package/tools/audit-tools/registry-op-checker.js +71 -0
  224. package/tools/get-not-used-labels.js +31 -0
  225. package/tools/helpers/helpers.js +47 -0
  226. package/tools/modexp-utils/README.md +5 -0
  227. package/tools/modexp-utils/modexp-test-gen.js +168 -0
  228. package/tools/modexp-utils/modexp-test-int.sage +37 -0
  229. package/tools/parallel-testing/checker.sh +6 -0
  230. package/tools/parallel-testing/gen-parallel-tests.js +78 -0
  231. package/tools/parallel-testing/parallel-tests-sample/sample.test.js +136 -0
  232. package/tools/run-tests-zkasm.js +83 -0
@@ -0,0 +1,145 @@
1
+ ; ZK_EVM
2
+ CONSTL %ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2 = 0xa40D5f56745a118D0906a34E69aeC8C0Db1cB8fAn
3
+ CONSTL %ADDRESS_SYSTEM = 0x000000000000000000000000000000005ca1ab1en
4
+ CONST %MAX_STACK_SIZE = 1024
5
+ CONST %BATCH_DIFFICULTY = 0
6
+ CONST %TX_GAS_LIMIT = 30000000
7
+ CONSTL %BLOCK_GAS_LIMIT = 2**50
8
+ CONST %MAX_MEM_EXPANSION_BYTES = 0x3fffe0
9
+ CONST %FORK_ID = 9
10
+ CONST %L1INFO_TREE_LEVELS = 32
11
+ CONST %CALLDATA_RESERVED_CTX = 1
12
+ CONSTL %FOUR_GOLDILOCKS = 0xffffffff00000001ffffffff00000001ffffffff00000001ffffffff00000001n
13
+
14
+ ; GER manager storage positions constants
15
+ CONST %GLOBAL_EXIT_ROOT_STORAGE_POS = 0
16
+ CONST %LOCAL_EXIT_ROOT_STORAGE_POS = 1
17
+
18
+ ; System address storage positions constants
19
+ CONST %LAST_BLOCK_STORAGE_POS = 0
20
+ CONST %STATE_ROOT_STORAGE_POS = 1
21
+ CONST %TIMESTAMP_STORAGE_POS = 2
22
+ CONST %BLOCK_INFO_ROOT_STORAGE_POS = 3
23
+
24
+ ; RLP
25
+ CONST %MIN_VALUE_SHORT = 128
26
+ CONST %MIN_BYTES_LONG = 56
27
+
28
+ ; SMT STATE-TREE CONSTANT KEYS
29
+ CONST %SMT_KEY_BALANCE = 0
30
+ CONST %SMT_KEY_NONCE = 1
31
+ CONST %SMT_KEY_SC_CODE = 2
32
+ CONST %SMT_KEY_SC_STORAGE = 3
33
+ CONST %SMT_KEY_SC_LENGTH = 4
34
+
35
+ ; SMT TOUCHED-TREE CONSTANT KEYS
36
+ CONST %SMT_KEY_TOUCHED_ADDR = 5
37
+ CONST %SMT_KEY_TOUCHED_SLOTS = 6
38
+
39
+ ; SMT block header constants
40
+ CONST %SMT_KEY_BLOCK_HEADER_PARAM = 7
41
+ CONST %SMT_KEY_BLOCK_HEADER_TRANSACTION_HASH = 8
42
+ CONST %SMT_KEY_BLOCK_HEADER_STATUS = 9
43
+ CONST %SMT_KEY_BLOCK_HEADER_CUMULATIVE_GAS_USED = 10
44
+ CONST %SMT_KEY_BLOCK_HEADER_LOGS = 11
45
+ CONST %SMT_KEY_BLOCK_HEADER_EFFECTIVE_PERCENTAGE = 12
46
+
47
+ ; SMT block header data leaf keys
48
+ CONST %INDEX_BLOCK_HEADER_PARAM_BLOCK_HASH = 0
49
+ CONST %INDEX_BLOCK_HEADER_PARAM_COINBASE = 1
50
+ CONST %INDEX_BLOCK_HEADER_PARAM_NUMBER = 2
51
+ CONST %INDEX_BLOCK_HEADER_PARAM_GAS_LIMIT = 3
52
+ CONST %INDEX_BLOCK_HEADER_PARAM_TIMESTAMP = 4
53
+ CONST %INDEX_BLOCK_HEADER_PARAM_GER = 5
54
+ CONST %INDEX_BLOCK_HEADER_PARAM_BLOCK_HASH_L1 = 6
55
+ CONST %INDEX_BLOCK_HEADER_PARAM_GAS_USED = 7
56
+
57
+ ; GAS
58
+ CONST %BASE_TX_GAS = 21000
59
+ CONST %BASE_TX_DEPLOY_GAS = 53000
60
+ CONST %SLOAD_GAS = 100
61
+ CONST %GAS_QUICK_STEP = 2
62
+ CONST %GAS_FASTEST_STEP = 3
63
+ CONST %GAS_FAST_STEP = 5
64
+ CONST %GAS_MID_STEP = 8
65
+ CONST %GAS_SLOW_STEP = 10
66
+ CONST %GAS_EXT_STEP = 20
67
+ CONST %CALL_VALUE_TRANSFER_GAS = 9000 ; Paid for CALL when the value transfer is non-zero.
68
+ CONST %CALL_NEW_ACCOUNT_GAS = 25000 ; Paid for CALL when the destination address didn't exist prior.
69
+ CONST %CALL_STIPEND = 2300
70
+ CONST %ECRECOVER_GAS = 3000 ; Elliptic curve sender recovery gas price
71
+ CONST %IDENTITY_GAS = 15 ; Base price for a data copy operation
72
+ CONST %IDENTITY_WORD_GAS = 3 ; Per-work price for a data copy operation
73
+ CONST %ECADD_GAS = 150; ecAdd gas price
74
+ CONST %ECMUL_GAS = 6000; ecMul gas price
75
+ CONST %ECPAIRING_GAS = 45000; ecPairing gas price
76
+ CONST %SHA2_256_GAS = 60 ; sha256 static gas
77
+ CONST %SHA2_256_WORD_GAS = 12 ; sha256 word gas
78
+ CONST %KECCAK_GAS = 30 ; Once per KECCAK256 operation.
79
+ CONST %KECCAK_WORD_GAS = 6 ; Once per word of the KECCAK256 operation's data.
80
+ CONST %LOG_GAS = 375 ; Per LOG* operation.
81
+ CONST %LOG_TOPIC_GAS = 375 ; Per LOG topic operation.
82
+ CONST %JUMP_DEST_GAS = 1 ; Once per JUMPDEST operation.
83
+ CONST %WARM_STORAGE_READ_GAS = 100 ; WarmStorageReadCostEIP2929
84
+ CONST %COLD_ACCOUNT_ACCESS_COST_REDUCED = 2500 ; ColdAccountAccessCostEIP2929 reduced(2600)
85
+ CONST %COLD_ACCOUNT_ACCESS_COST = 2600 ; ColdAccountAccessCostEIP2929
86
+ CONST %EXP_BYTE_GAS = 50 ; was raised to 50 during Eip158 (Spurious Dragon)
87
+ CONST %RETURN_GAS_COST = 200; 200 * returned_code_size
88
+ CONST %CREATE_GAS = 32000
89
+ CONST %CREATE_2_GAS = 32000
90
+ CONST %SENDALL_GAS = 5000
91
+ CONST %LOG_DATA_GAS = 8
92
+ ; sstore
93
+ CONST %SSTORE_ENTRY_EIP_2200_GAS = 2300 ; Minimum gas required to be present for an SSTORE call, not consumed
94
+ CONST %SSTORE_SET_EIP_2200_GAS = 20000 ; Once per SSTORE operation from clean zero to non-zero
95
+ CONST %COLD_SLOAD_COST = 2100 ; Cost of using a cols memory slot
96
+ CONST %COLD_SLOAD_COST_REDUCED = 2000 ; Cost of using a cols memory slot reduced
97
+ CONST %SSTORE_DYNAMIC_GAS = 100
98
+ CONST %SSTORE_SET_GAS = 20000
99
+ CONST %SSTORE_SET_GAS_REDUCED = 19900 ; sstore gas cost reduced base_dynamic_gas(original_value == 0) - base_dynamic_gas(100)
100
+ CONST %SSTORE_RESET_GAS = 2900
101
+ CONST %SSTORE_RESET_GAS_REDUCED = 2800 ; sstore update gas cost reduced base_dynamic_gas(original_value == 0) - base_dynamic_gas(100)
102
+ CONST %SSTORE_CLEARS_SCHEDULE = 15000
103
+
104
+ ; COUNTERS
105
+ CONST %MIN_STEPS_FINISH_BATCH = 200 ; min steps to finish tx
106
+ CONST %TOTAL_STEPS_LIMIT = 2**23
107
+
108
+ CONST %MAX_CNT_STEPS_LIMIT = %TOTAL_STEPS_LIMIT - %MIN_STEPS_FINISH_BATCH
109
+ CONST %MAX_CNT_ARITH_LIMIT = %TOTAL_STEPS_LIMIT / 32
110
+ CONST %MAX_CNT_BINARY_LIMIT = %TOTAL_STEPS_LIMIT / 16
111
+ CONST %MAX_CNT_MEM_ALIGN_LIMIT = %TOTAL_STEPS_LIMIT / 32
112
+ CONST %MAX_CNT_KECCAK_F_LIMIT = (%TOTAL_STEPS_LIMIT / 155286) * 44
113
+ CONST %MAX_CNT_PADDING_PG_LIMIT = (%TOTAL_STEPS_LIMIT / 56)
114
+ CONST %MAX_CNT_POSEIDON_G_LIMIT = (%TOTAL_STEPS_LIMIT / 30)
115
+ CONST %MAX_CNT_SHA256_F_LIMIT = ((%TOTAL_STEPS_LIMIT - 1) / 31488) * 7
116
+
117
+ CONST %SAFE_RANGE = 20 ; safe guard counters to not take into account (%RANGE = 1 / SAFE_RANGE)
118
+
119
+ CONST %MAX_CNT_STEPS = %MAX_CNT_STEPS_LIMIT - (%MAX_CNT_STEPS_LIMIT / %SAFE_RANGE)
120
+ CONST %MAX_CNT_ARITH = %MAX_CNT_ARITH_LIMIT - (%MAX_CNT_ARITH_LIMIT / %SAFE_RANGE)
121
+ CONST %MAX_CNT_BINARY = %MAX_CNT_BINARY_LIMIT - (%MAX_CNT_BINARY_LIMIT / %SAFE_RANGE)
122
+ CONST %MAX_CNT_MEM_ALIGN = %MAX_CNT_MEM_ALIGN_LIMIT - (%MAX_CNT_MEM_ALIGN_LIMIT / %SAFE_RANGE)
123
+ CONST %MAX_CNT_KECCAK_F = %MAX_CNT_KECCAK_F_LIMIT - (%MAX_CNT_KECCAK_F_LIMIT / %SAFE_RANGE)
124
+ CONST %MAX_CNT_PADDING_PG = %MAX_CNT_PADDING_PG_LIMIT - (%MAX_CNT_PADDING_PG_LIMIT / %SAFE_RANGE)
125
+ CONST %MAX_CNT_POSEIDON_G = %MAX_CNT_POSEIDON_G_LIMIT - (%MAX_CNT_POSEIDON_G_LIMIT / %SAFE_RANGE)
126
+ CONST %MAX_CNT_SHA256_F = %MAX_CNT_SHA256_F_LIMIT - (%MAX_CNT_SHA256_F_LIMIT / %SAFE_RANGE)
127
+ CONST %MAX_CNT_POSEIDON_SLOAD_SSTORE = 518
128
+
129
+ CONST %MIN_CNT_KECCAK_BATCH = 1 ; minimum necessary keccaks to compute global hash
130
+
131
+ ; ETHEREUM CONSTANTS
132
+ CONSTL %MAX_NONCE = 0xffffffffffffffffn
133
+ CONSTL %MAX_UINT_256 = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn
134
+ CONST %CODE_SIZE_LIMIT = 0x6000
135
+ CONST %BYTECODE_STARTS_EF = 0xEF
136
+ CONST %MAX_SIZE_MODEXP = 1024
137
+ CONST %MAX_GAS_WORD_MODEXP = 9487
138
+ CONSTL %MAX_GAS_IT_MODEXP = 90000000 ; %TX_GAS_LIMIT * 3
139
+
140
+ ; CONSTANTS TX CHANGEL2BLOCK
141
+ CONST %CHANGE_L2_BLOCK_TX_TYPE = 0x0b
142
+ CONST %DELTA_TIMESTAMP_NUM_BYTES = 4
143
+ CONST %INDEX_L1INFOTREE_NUM_BYTES = 4
144
+ CONST %TX_TYPE_NUM_BYTES = 1
145
+ CONSTL %L1_INFO_DATA_ZERO = 0x3cac317908c699fe873a7f6ee4e8cd63fbe9918b2315c97be91585590168e301n
@@ -0,0 +1,31 @@
1
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
+ ;;
3
+ ;; addFpEc C = (A + C) % FpEc
4
+ ;;
5
+ ;; PRE: A,C no alias-free
6
+ ;; POST: C no alias-free (on MAP)
7
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8
+
9
+ ; RESOURCES:
10
+ ; 2 ariths + 7 steps
11
+
12
+ addFpEc:
13
+ 1 => B
14
+
15
+ ; A + C = [D] * 2 ** 256 + [E]
16
+
17
+ $${var _addFpEc_AC = A + C}
18
+
19
+ ${_addFpEc_AC >> 256} => D
20
+ ${_addFpEc_AC} => E :ARITH
21
+
22
+ ;
23
+ ; with committed E,D
24
+ ; FpEc * [k] + [C] = D * 2 ** 256 + E
25
+ ;
26
+
27
+ ${_addFpEc_AC / const.FPEC} => B ; times p
28
+ ${_addFpEc_AC % const.FPEC} => C ; A + C (256 bits)
29
+ %FPEC => A
30
+
31
+ E :ARITH,RETURN