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 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,45 @@
1
+ ## Counters testing tool
2
+
3
+ The purpose of this tool is to detect counters altertions in zkrom code.
4
+ A unit test is created for each function and opcode of the zkEVM. The structure of the test is the following:
5
+ `````
6
+ INCLUDE "../initIncludes.zkasm" // Include the files imported at the beginning of the test
7
+
8
+ start:
9
+ 1000000 => GAS
10
+
11
+ operation:
12
+ 2 :MSTORE(SP++)
13
+ 2 :MSTORE(SP++)
14
+ :JMP(opADD)
15
+ // Assert counters. Check for each function, the exact number of each counter is matched
16
+ checkCounters:
17
+ %OPADD_STEP - STEP:JMPN(failedCounters)
18
+ %OPADD_CNT_BINARY - CNT_BINARY :JMPNZ(failedCounters)
19
+ %OPADD_CNT_ARITH - CNT_ARITH :JMPNZ(failedCounters)
20
+ %OPADD_CNT_KECCAK_F - CNT_KECCAK_F :JMPNZ(failedCounters)
21
+ %OPADD_CNT_MEM_ALIGN - CNT_MEM_ALIGN :JMPNZ(failedCounters)
22
+ %OPADD_CNT_PADDING_PG - CNT_PADDING_PG :JMPNZ(failedCounters)
23
+ %OPADD_CNT_POSEIDON_G - CNT_POSEIDON_G :JMPNZ(failedCounters)
24
+ // Finalize execution
25
+ 0 => A,B,C,D,E,CTX, SP, PC, GAS, SR, HASHPOS, RR ; Set all registers to 0
26
+ finalizeExecution:
27
+ :JMP(finalWait)
28
+ readCode:
29
+ txType:
30
+ :JMP(checkCounters)
31
+ failedCounters: // Force failed assert
32
+ 2 => A
33
+ 1 :ASSERT
34
+ INCLUDE "../endIncludes.zkasm" // Include the files imported at the end of the test
35
+ `````
36
+
37
+ Run all tests:
38
+ `````
39
+ node counters/counters-executor.js
40
+ `````
41
+ Limitations:
42
+ - Not all the tests are implemented yet, just the most complex ones
43
+ - For some test (the simplest ones), the counters it should spend are stored in `countersConstants.zkasm` file. For tests with a lot of utils calls or a lot of complexity, the values of the counters are hardcoded in the test.
44
+ - The tests always try to cover as much coverage as posible and always with the worst case counters scenario but this approach gets a bit tricky for complex opcodes as they have different contexts and behaviours.
45
+ - The objective is to keep adding tests with already not implemented functions but also adding tests for already implemented opcodes but with different scenarios (Example: calldatacopy from a call or from a create2)
@@ -0,0 +1,80 @@
1
+ /* eslint-disable import/no-extraneous-dependencies */
2
+ /* eslint-disable no-use-before-define */
3
+ /* eslint-disable no-restricted-syntax */
4
+ const path = require('path');
5
+ const fs = require('fs');
6
+ const smMain = require('@0xpolygonhermez/zkevm-proverjs/src/sm/sm_main/sm_main');
7
+
8
+ const fileCachePil = path.join(__dirname, '../node_modules/@0xpolygonhermez/zkevm-proverjs/cache-main-pil.json');
9
+ const emptyInput = require('@0xpolygonhermez/zkevm-proverjs/test/inputs/empty_input.json');
10
+ const buildPoseidon = require('@0xpolygonhermez/zkevm-commonjs').getPoseidon;
11
+
12
+ const pathMainPil = path.join(__dirname, '../node_modules/@0xpolygonhermez/zkevm-proverjs/pil/main.pil');
13
+ const { newCommitPolsArray } = require('pilcom');
14
+ const { compile } = require('pilcom');
15
+ const zkasm = require('@0xpolygonhermez/zkasmcom');
16
+
17
+ const testFilesDir = path.join(__dirname, './tests');
18
+ const { argv } = require('yargs');
19
+
20
+ async function main() {
21
+ // Compile pil
22
+ const cmPols = await compilePil();
23
+
24
+ // Get all zkasm files
25
+ const files = getTestFiles();
26
+
27
+ // Run all zkasm files
28
+ for (const file of files) {
29
+ await runTest(file, cmPols);
30
+ }
31
+ }
32
+
33
+ async function runTest(testName, cmPols) {
34
+ const zkasmFile = `${testFilesDir}/${testName}`;
35
+ // Compile rom
36
+ const configZkasm = {
37
+ defines: [],
38
+ allowUndefinedLabels: true,
39
+ };
40
+
41
+ const rom = await zkasm.compile(zkasmFile, null, configZkasm);
42
+ const config = {
43
+ debug: true,
44
+ stepsN: 8388608,
45
+ };
46
+ console.log(`Running ${testName}`);
47
+ // Execute test
48
+ const res = await smMain.execute(cmPols.Main, emptyInput, rom, config);
49
+ console.log(res.counters);
50
+ }
51
+
52
+ // Get all zkasm counter test files
53
+ function getTestFiles() {
54
+ if (argv.test) {
55
+ return [`${argv.test}.zkasm`];
56
+ }
57
+ const files = fs.readdirSync(testFilesDir).filter((name) => name.endsWith('.zkasm'));
58
+
59
+ return files;
60
+ }
61
+
62
+ async function compilePil() {
63
+ if (!fs.existsSync(fileCachePil)) {
64
+ const poseidon = await buildPoseidon();
65
+ const { F } = poseidon;
66
+ const pilConfig = {
67
+ defines: { N: 4096 },
68
+ namespaces: ['Main', 'Global'],
69
+ disableUnusedError: true,
70
+ };
71
+ const p = await compile(F, pathMainPil, null, pilConfig);
72
+ fs.writeFileSync(fileCachePil, `${JSON.stringify(p, null, 1)}\n`, 'utf8');
73
+ }
74
+
75
+ const pil = JSON.parse(fs.readFileSync(fileCachePil));
76
+
77
+ return newCommitPolsArray(pil);
78
+ }
79
+
80
+ main();
@@ -0,0 +1,370 @@
1
+ ;divArith
2
+ CONST %DIVARITH_STEP = 50
3
+ CONST %DIVARITH_CNT_BINARY = 3
4
+ CONST %DIVARITH_CNT_ARITH = 1
5
+ CONST %DIVARITH_CNT_KECCAK_F = 0
6
+ CONST %DIVARITH_CNT_MEM_ALIGN = 0
7
+ CONST %DIVARITH_CNT_PADDING_PG = 0
8
+ CONST %DIVARITH_CNT_POSEIDON_G = 0
9
+ ; SHRarith
10
+ CONST %SHRARITH_STEP = 50 + %DIVARITH_STEP
11
+ CONST %SHRARITH_CNT_BINARY = 2 + %DIVARITH_CNT_BINARY
12
+ CONST %SHRARITH_CNT_ARITH = 1 + %DIVARITH_CNT_ARITH
13
+ CONST %SHRARITH_CNT_KECCAK_F = 0 + %DIVARITH_CNT_KECCAK_F
14
+ CONST %SHRARITH_CNT_MEM_ALIGN = 0 + %DIVARITH_CNT_MEM_ALIGN
15
+ CONST %SHRARITH_CNT_PADDING_PG = 0 + %DIVARITH_CNT_PADDING_PG
16
+ CONST %SHRARITH_CNT_POSEIDON_G = 0 + %DIVARITH_CNT_POSEIDON_G
17
+ ; SHRarithBit
18
+ CONST %SHRARITHBIT_STEP = 30 + %DIVARITH_STEP
19
+ CONST %SHRARITHBIT_CNT_BINARY = 2 + %DIVARITH_CNT_BINARY
20
+ CONST %SHRARITHBIT_CNT_ARITH = 0 + %DIVARITH_CNT_ARITH
21
+ CONST %SHRARITHBIT_CNT_KECCAK_F = 0 + %DIVARITH_CNT_KECCAK_F
22
+ CONST %SHRARITHBIT_CNT_MEM_ALIGN = 0 + %DIVARITH_CNT_MEM_ALIGN
23
+ CONST %SHRARITHBIT_CNT_PADDING_PG = 0 + %DIVARITH_CNT_PADDING_PG
24
+ CONST %SHRARITHBIT_CNT_POSEIDON_G = 0 + %DIVARITH_CNT_POSEIDON_G
25
+ ;offsetUtil
26
+ CONST %OFFSETUTIL_STEP = 20
27
+ CONST %OFFSETUTIL_CNT_BINARY = 1
28
+ CONST %OFFSETUTIL_CNT_ARITH = 0
29
+ CONST %OFFSETUTIL_CNT_KECCAK_F = 0
30
+ CONST %OFFSETUTIL_CNT_MEM_ALIGN = 0
31
+ CONST %OFFSETUTIL_CNT_PADDING_PG = 0
32
+ CONST %OFFSETUTIL_CNT_POSEIDON_G = 0
33
+ ; SHLarith
34
+ CONST %SHLARITH_STEP = 100
35
+ CONST %SHLARITH_CNT_BINARY = 2
36
+ CONST %SHLARITH_CNT_ARITH = 2
37
+ CONST %SHLARITH_CNT_KECCAK_F = 0
38
+ CONST %SHLARITH_CNT_MEM_ALIGN = 0
39
+ CONST %SHLARITH_CNT_PADDING_PG = 0
40
+ CONST %SHLARITH_CNT_POSEIDON_G = 0
41
+ ; SHLarithBit
42
+ CONST %SHLARITHBIT_STEP = 100
43
+ CONST %SHLARITHBIT_CNT_BINARY = 2
44
+ CONST %SHLARITHBIT_CNT_ARITH = 1
45
+ CONST %SHLARITHBIT_CNT_KECCAK_F = 0
46
+ CONST %SHLARITHBIT_CNT_MEM_ALIGN = 0
47
+ CONST %SHLARITHBIT_CNT_PADDING_PG = 0
48
+ CONST %SHLARITHBIT_CNT_POSEIDON_G = 0
49
+ ; MLOADX
50
+ CONST %MLOADX_STEP = 100 + %SHRARITH_STEP + %SHLARITH_STEP + %OFFSETUTIL_STEP
51
+ CONST %MLOADX_CNT_BINARY = 1 + %SHRARITH_CNT_BINARY + %SHLARITH_CNT_BINARY + %OFFSETUTIL_CNT_BINARY
52
+ CONST %MLOADX_CNT_ARITH = 0 + %SHRARITH_CNT_ARITH + %SHLARITH_CNT_ARITH + %OFFSETUTIL_CNT_ARITH
53
+ CONST %MLOADX_CNT_KECCAK_F = 0 + %SHRARITH_CNT_KECCAK_F + %SHLARITH_CNT_KECCAK_F + %OFFSETUTIL_CNT_KECCAK_F
54
+ CONST %MLOADX_CNT_MEM_ALIGN = 1 + %SHRARITH_CNT_MEM_ALIGN + %SHLARITH_CNT_MEM_ALIGN + %OFFSETUTIL_CNT_MEM_ALIGN
55
+ CONST %MLOADX_CNT_PADDING_PG = 0 + %SHRARITH_CNT_PADDING_PG + %SHLARITH_CNT_PADDING_PG + %OFFSETUTIL_CNT_PADDING_PG
56
+ CONST %MLOADX_CNT_POSEIDON_G = 0 + %SHRARITH_CNT_POSEIDON_G + %SHLARITH_CNT_POSEIDON_G + %OFFSETUTIL_CNT_POSEIDON_G
57
+ ; MLOAD32
58
+ CONST %MLOAD32_STEP = 100 + %OFFSETUTIL_STEP
59
+ CONST %MLOAD32_CNT_BINARY = 1 + %OFFSETUTIL_CNT_BINARY
60
+ CONST %MLOAD32_CNT_ARITH = 0 + %OFFSETUTIL_CNT_ARITH
61
+ CONST %MLOAD32_CNT_KECCAK_F = 0 + %OFFSETUTIL_CNT_KECCAK_F
62
+ CONST %MLOAD32_CNT_MEM_ALIGN = 1 + %OFFSETUTIL_CNT_MEM_ALIGN
63
+ CONST %MLOAD32_CNT_PADDING_PG = 0 + %OFFSETUTIL_CNT_PADDING_PG
64
+ CONST %MLOAD32_CNT_POSEIDON_G = 0 + %OFFSETUTIL_CNT_POSEIDON_G
65
+ ; abs
66
+ CONST %ABS_STEP = 20
67
+ CONST %ABS_CNT_BINARY = 2
68
+ CONST %ABS_CNT_ARITH = 0
69
+ CONST %ABS_CNT_KECCAK_F = 0
70
+ CONST %ABS_CNT_MEM_ALIGN = 0
71
+ CONST %ABS_CNT_PADDING_PG = 0
72
+ CONST %ABS_CNT_POSEIDON_G = 0
73
+
74
+ ; mulARITH
75
+ CONST %MULARITH_STEP = 50
76
+ CONST %MULARITH_CNT_BINARY = 1
77
+ CONST %MULARITH_CNT_ARITH = 1
78
+ CONST %MULARITH_CNT_KECCAK_F = 0
79
+ CONST %MULARITH_CNT_MEM_ALIGN = 0
80
+ CONST %MULARITH_CNT_PADDING_PG = 0
81
+ CONST %MULARITH_CNT_POSEIDON_G = 0
82
+ ; getLenBytes
83
+ CONST %GETLENBYTES_STEP = 20
84
+ CONST %GETLENBYTES_CNT_BINARY = 0
85
+ CONST %GETLENBYTES_CNT_ARITH = 0
86
+ CONST %GETLENBYTES_CNT_KECCAK_F = 0
87
+ CONST %GETLENBYTES_CNT_MEM_ALIGN = 0
88
+ CONST %GETLENBYTES_CNT_PADDING_PG = 0
89
+ CONST %GETLENBYTES_CNT_POSEIDON_G = 0
90
+ ; getLenBits
91
+ CONST %GETLENBITS_STEP = 20
92
+ CONST %GETLENBITS_CNT_BINARY = 0
93
+ CONST %GETLENBITS_CNT_ARITH = 0
94
+ CONST %GETLENBITS_CNT_KECCAK_F = 0
95
+ CONST %GETLENBITS_CNT_MEM_ALIGN = 0
96
+ CONST %GETLENBITS_CNT_PADDING_PG = 0
97
+ CONST %GETLENBITS_CNT_POSEIDON_G = 0
98
+ ;expAD
99
+ CONST %EXPAD_STEP = 20 + %GETLENBITS_STEP
100
+ CONST %EXPAD_CNT_BINARY = 2 + %GETLENBITS_CNT_BINARY
101
+ CONST %EXPAD_CNT_ARITH = 0 + %GETLENBITS_CNT_ARITH
102
+ CONST %EXPAD_CNT_KECCAK_F = 0 + %GETLENBITS_CNT_KECCAK_F
103
+ CONST %EXPAD_CNT_MEM_ALIGN = 0 + %GETLENBITS_CNT_MEM_ALIGN
104
+ CONST %EXPAD_CNT_PADDING_PG = 0 + %GETLENBITS_CNT_PADDING_PG
105
+ CONST %EXPAD_CNT_POSEIDON_G = 0 + %GETLENBITS_CNT_POSEIDON_G
106
+ ;opAdd
107
+ CONST %OPADD_STEP = 20
108
+ CONST %OPADD_CNT_BINARY = 1
109
+ CONST %OPADD_CNT_ARITH = 0
110
+ CONST %OPADD_CNT_KECCAK_F = 0
111
+ CONST %OPADD_CNT_MEM_ALIGN = 0
112
+ CONST %OPADD_CNT_PADDING_PG = 0
113
+ CONST %OPADD_CNT_POSEIDON_G = 0
114
+ ;opMUL
115
+ CONST %OPMUL_STEP = 20 + %MULARITH_STEP
116
+ CONST %OPMUL_CNT_BINARY = 0 + %MULARITH_CNT_BINARY
117
+ CONST %OPMUL_CNT_ARITH = 0 + %MULARITH_CNT_ARITH
118
+ CONST %OPMUL_CNT_KECCAK_F = 0 + %MULARITH_CNT_KECCAK_F
119
+ CONST %OPMUL_CNT_MEM_ALIGN = 0 + %MULARITH_CNT_MEM_ALIGN
120
+ CONST %OPMUL_CNT_PADDING_PG = 0 + %MULARITH_CNT_PADDING_PG
121
+ CONST %OPMUL_CNT_POSEIDON_G = 0 + %MULARITH_CNT_POSEIDON_G
122
+ ;opSUB
123
+ CONST %OPSUB_STEP = 20
124
+ CONST %OPSUB_CNT_BINARY = 1
125
+ CONST %OPSUB_CNT_ARITH = 0
126
+ CONST %OPSUB_CNT_KECCAK_F = 0
127
+ CONST %OPSUB_CNT_MEM_ALIGN = 0
128
+ CONST %OPSUB_CNT_PADDING_PG = 0
129
+ CONST %OPSUB_CNT_POSEIDON_G = 0
130
+ ;opDIV
131
+ CONST %OPDIV_STEP = 20 + %DIVARITH_STEP
132
+ CONST %OPDIV_CNT_BINARY = 0 + %DIVARITH_CNT_BINARY
133
+ CONST %OPDIV_CNT_ARITH = 0 + %DIVARITH_CNT_ARITH
134
+ CONST %OPDIV_CNT_KECCAK_F = 0 + %DIVARITH_CNT_KECCAK_F
135
+ CONST %OPDIV_CNT_MEM_ALIGN = 0 + %DIVARITH_CNT_MEM_ALIGN
136
+ CONST %OPDIV_CNT_PADDING_PG = 0 + %DIVARITH_CNT_PADDING_PG
137
+ CONST %OPDIV_CNT_POSEIDON_G = 0 + %DIVARITH_CNT_POSEIDON_G
138
+ ;opSDIV
139
+ CONST %OPSDIV_STEP = 20 + %DIVARITH_STEP + %ABS_STEP*2
140
+ CONST %OPSDIV_CNT_BINARY = 1 + %DIVARITH_CNT_BINARY + %ABS_CNT_BINARY*2
141
+ CONST %OPSDIV_CNT_ARITH = 0 + %DIVARITH_CNT_ARITH + %ABS_CNT_ARITH*2
142
+ CONST %OPSDIV_CNT_KECCAK_F = 0 + %DIVARITH_CNT_KECCAK_F + %ABS_CNT_KECCAK_F*2
143
+ CONST %OPSDIV_CNT_MEM_ALIGN = 0 + %DIVARITH_CNT_MEM_ALIGN + %ABS_CNT_MEM_ALIGN*2
144
+ CONST %OPSDIV_CNT_PADDING_PG = 0 + %DIVARITH_CNT_PADDING_PG + %ABS_CNT_PADDING_PG*2
145
+ CONST %OPSDIV_CNT_POSEIDON_G = 0 + %DIVARITH_CNT_POSEIDON_G + %ABS_CNT_POSEIDON_G*2
146
+ ;opMOD
147
+ CONST %OPMOD_STEP = 20 + %DIVARITH_STEP
148
+ CONST %OPMOD_CNT_BINARY = 0 + %DIVARITH_CNT_BINARY
149
+ CONST %OPMOD_CNT_ARITH = 0 + %DIVARITH_CNT_ARITH
150
+ CONST %OPMOD_CNT_KECCAK_F = 0 + %DIVARITH_CNT_KECCAK_F
151
+ CONST %OPMOD_CNT_MEM_ALIGN = 0 + %DIVARITH_CNT_MEM_ALIGN
152
+ CONST %OPMOD_CNT_PADDING_PG = 0 + %DIVARITH_CNT_PADDING_PG
153
+ CONST %OPMOD_CNT_POSEIDON_G = 0 + %DIVARITH_CNT_POSEIDON_G
154
+ ;opSMOD
155
+ CONST %OPSMOD_STEP = 20 + %DIVARITH_STEP + %ABS_STEP*2
156
+ CONST %OPSMOD_CNT_BINARY = 1 + %DIVARITH_CNT_BINARY + %ABS_CNT_BINARY*2
157
+ CONST %OPSMOD_CNT_ARITH = 0 + %DIVARITH_CNT_ARITH + %ABS_CNT_ARITH*2
158
+ CONST %OPSMOD_CNT_KECCAK_F = 0 + %DIVARITH_CNT_KECCAK_F + %ABS_CNT_KECCAK_F*2
159
+ CONST %OPSMOD_CNT_MEM_ALIGN = 0 + %DIVARITH_CNT_MEM_ALIGN + %ABS_CNT_MEM_ALIGN*2
160
+ CONST %OPSMOD_CNT_PADDING_PG = 0 + %DIVARITH_CNT_PADDING_PG + %ABS_CNT_PADDING_PG*2
161
+ CONST %OPSMOD_CNT_POSEIDON_G = 0 + %DIVARITH_CNT_POSEIDON_G + %ABS_CNT_POSEIDON_G*2
162
+ ;opADDMOD
163
+ CONST %OPADDMOD_STEP = 50
164
+ CONST %OPADDMOD_CNT_BINARY = 3
165
+ CONST %OPADDMOD_CNT_ARITH = 1
166
+ CONST %OPADDMOD_CNT_KECCAK_F = 0
167
+ CONST %OPADDMOD_CNT_MEM_ALIGN = 0
168
+ CONST %OPADDMOD_CNT_PADDING_PG = 0
169
+ CONST %OPADDMOD_CNT_POSEIDON_G = 0
170
+ ;opMULMOD
171
+ CONST %OPMULMOD_STEP = 120 + %MULARITH_STEP
172
+ CONST %OPMULMOD_CNT_BINARY = 4 + %MULARITH_CNT_BINARY
173
+ CONST %OPMULMOD_CNT_ARITH = 2 + %MULARITH_CNT_ARITH
174
+ CONST %OPMULMOD_CNT_KECCAK_F = 0 + %MULARITH_CNT_KECCAK_F
175
+ CONST %OPMULMOD_CNT_MEM_ALIGN = 0 + %MULARITH_CNT_MEM_ALIGN
176
+ CONST %OPMULMOD_CNT_PADDING_PG = 0 + %MULARITH_CNT_PADDING_PG
177
+ CONST %OPMULMOD_CNT_POSEIDON_G = 0 + %MULARITH_CNT_POSEIDON_G
178
+ ;opEXP
179
+ CONST %OPEXP_STEP = 20 + %EXPAD_STEP + %GETLENBYTES_STEP
180
+ CONST %OPEXP_CNT_BINARY = 0 + %EXPAD_CNT_BINARY + %GETLENBYTES_CNT_BINARY
181
+ CONST %OPEXP_CNT_ARITH = 0 + %EXPAD_CNT_ARITH + %GETLENBYTES_CNT_ARITH
182
+ CONST %OPEXP_CNT_KECCAK_F = 0 + %EXPAD_CNT_KECCAK_F + %GETLENBYTES_CNT_KECCAK_F
183
+ CONST %OPEXP_CNT_MEM_ALIGN = 0 + %EXPAD_CNT_MEM_ALIGN + %GETLENBYTES_CNT_MEM_ALIGN
184
+ CONST %OPEXP_CNT_PADDING_PG = 0 + %EXPAD_CNT_PADDING_PG + %GETLENBYTES_CNT_PADDING_PG
185
+ CONST %OPEXP_CNT_POSEIDON_G = 0 + %EXPAD_CNT_POSEIDON_G + %GETLENBYTES_CNT_POSEIDON_G
186
+ ; opSIGNEXTEND
187
+ CONST %OPSIGNEXTEND_STEP = 100
188
+ CONST %OPSIGNEXTEND_CNT_BINARY = 6
189
+ CONST %OPSIGNEXTEND_CNT_ARITH = 0
190
+ CONST %OPSIGNEXTEND_CNT_KECCAK_F = 0
191
+ CONST %OPSIGNEXTEND_CNT_MEM_ALIGN = 0
192
+ CONST %OPSIGNEXTEND_CNT_PADDING_PG = 0
193
+ CONST %OPSIGNEXTEND_CNT_POSEIDON_G = 0
194
+ ; opBLOCKHASH
195
+ CONST %OPBLOCKHASH_STEP = 100
196
+ CONST %OPBLOCKHASH_CNT_BINARY = 0
197
+ CONST %OPBLOCKHASH_CNT_ARITH = 0
198
+ CONST %OPBLOCKHASH_CNT_KECCAK_F = 1
199
+ CONST %OPBLOCKHASH_CNT_MEM_ALIGN = 0
200
+ CONST %OPBLOCKHASH_CNT_PADDING_PG = 0
201
+ CONST %OPBLOCKHASH_CNT_POSEIDON_G = 2
202
+ ; opCALLDATALOAD
203
+ CONST %OPCALLDATALOAD_STEP = 100 + %SHLARITH_STEP + %SHRARITH_STEP + %DIVARITH_STEP
204
+ CONST %OPCALLDATALOAD_CNT_BINARY = 3
205
+ CONST %OPCALLDATALOAD_CNT_ARITH = 0
206
+ CONST %OPCALLDATALOAD_CNT_KECCAK_F = 0 + %SHLARITH_CNT_KECCAK_F + %SHRARITH_CNT_KECCAK_F + %DIVARITH_CNT_KECCAK_F
207
+ CONST %OPCALLDATALOAD_CNT_MEM_ALIGN = 1
208
+ CONST %OPCALLDATALOAD_CNT_PADDING_PG = 0 + %SHLARITH_CNT_PADDING_PG + %SHRARITH_CNT_PADDING_PG + %DIVARITH_CNT_PADDING_PG
209
+ CONST %OPCALLDATALOAD_CNT_POSEIDON_G = 0 + %SHLARITH_CNT_POSEIDON_G + %SHRARITH_CNT_POSEIDON_G + %DIVARITH_CNT_POSEIDON_G
210
+ ; opCALLDATACOPY - COMPLEX - hardcoded values at test
211
+ CONST %OPCALLDATACOPY_STEP = 500
212
+ CONST %OPCALLDATACOPY_CNT_BINARY = 21
213
+ CONST %OPCALLDATACOPY_CNT_ARITH = 8
214
+ CONST %OPCALLDATACOPY_CNT_KECCAK_F = 0
215
+ CONST %OPCALLDATACOPY_CNT_MEM_ALIGN = 2
216
+ CONST %OPCALLDATACOPY_CNT_PADDING_PG = 0
217
+ CONST %OPCALLDATACOPY_CNT_POSEIDON_G = 0
218
+ ; opRETURNDATACOPY - COMPLEX - hardcoded values at test
219
+ CONST %OPRETURNDATACOPY_STEP = 100
220
+ CONST %OPRETURNDATACOPY_CNT_BINARY = 30
221
+ CONST %OPRETURNDATACOPY_CNT_ARITH = 13
222
+ CONST %OPRETURNDATACOPY_CNT_KECCAK_F = 0
223
+ CONST %OPRETURNDATACOPY_CNT_MEM_ALIGN = 2
224
+ CONST %OPRETURNDATACOPY_CNT_PADDING_PG = 0
225
+ CONST %OPRETURNDATACOPY_CNT_POSEIDON_G = 0
226
+ ; opCODECOPY - COMPLEX - hardcoded values at test
227
+ CONST %OPCODECOPY_STEP = 1700
228
+ CONST %OPCODECOPY_CNT_BINARY = 100
229
+ CONST %OPCODECOPY_CNT_ARITH = 4
230
+ CONST %OPCODECOPY_CNT_KECCAK_F = 0
231
+ CONST %OPCODECOPY_CNT_MEM_ALIGN = 43
232
+ CONST %OPCODECOPY_CNT_PADDING_PG = 0
233
+ CONST %OPCODECOPY_CNT_POSEIDON_G = 0
234
+ ; opEXTCODECOPY - COMPLEX - hardcoded values at test
235
+ CONST %OPEXTCODECOPY_STEP = 2000
236
+ CONST %OPEXTCODECOPY_CNT_BINARY = 104
237
+ CONST %OPEXTCODECOPY_CNT_ARITH = 4
238
+ CONST %OPEXTCODECOPY_CNT_KECCAK_F = 0
239
+ CONST %OPEXTCODECOPY_CNT_MEM_ALIGN = 43
240
+ CONST %OPEXTCODECOPY_CNT_PADDING_PG = 0
241
+ CONST %OPEXTCODECOPY_CNT_POSEIDON_G = 8
242
+ ; opCREATE - COMPLEX - hardcoded values at test
243
+ CONST %OPCREATE_STEP = 400
244
+ CONST %OPCREATE_CNT_BINARY = 16
245
+ CONST %OPCREATE_CNT_ARITH = 1
246
+ CONST %OPCREATE_CNT_KECCAK_F = 0
247
+ CONST %OPCREATE_CNT_MEM_ALIGN = 0
248
+ CONST %OPCREATE_CNT_PADDING_PG = 0
249
+ CONST %OPCREATE_CNT_POSEIDON_G = 23
250
+ ; opCREATE2 - COMPLEX - hardcoded values at test
251
+ CONST %OPCREATE2_STEP = 400
252
+ CONST %OPCREATE2_CNT_BINARY = 21
253
+ CONST %OPCREATE2_CNT_ARITH = 2
254
+ CONST %OPCREATE2_CNT_KECCAK_F = 0
255
+ CONST %OPCREATE2_CNT_MEM_ALIGN = 0
256
+ CONST %OPCREATE2_CNT_PADDING_PG = 0
257
+ CONST %OPCREATE2_CNT_POSEIDON_G = 27
258
+ ; opCALL - COMPLEX - hardcoded values at test
259
+ CONST %OPCALL_STEP = 600
260
+ CONST %OPCALL_CNT_BINARY = 27
261
+ CONST %OPCALL_CNT_ARITH = 3
262
+ CONST %OPCALL_CNT_KECCAK_F = 0
263
+ CONST %OPCALL_CNT_MEM_ALIGN = 0
264
+ CONST %OPCALL_CNT_PADDING_PG = 0
265
+ CONST %OPCALL_CNT_POSEIDON_G = 14
266
+ ; opCALLCODE - COMPLEX - hardcoded values at test
267
+ CONST %OPCALLCODE_STEP = 600
268
+ CONST %OPCALLCODE_CNT_BINARY = 26
269
+ CONST %OPCALLCODE_CNT_ARITH = 3
270
+ CONST %OPCALLCODE_CNT_KECCAK_F = 0
271
+ CONST %OPCALLCODE_CNT_MEM_ALIGN = 0
272
+ CONST %OPCALLCODE_CNT_PADDING_PG = 0
273
+ CONST %OPCALLCODE_CNT_POSEIDON_G = 10
274
+ ; opRETURN - COMPLEX - hardcoded values at test
275
+ CONST %OPRETURN_STEP = 700
276
+ CONST %OPRETURN_CNT_BINARY = 35
277
+ CONST %OPRETURN_CNT_ARITH = 11
278
+ CONST %OPRETURN_CNT_KECCAK_F = 0
279
+ CONST %OPRETURN_CNT_MEM_ALIGN = 4
280
+ CONST %OPRETURN_CNT_PADDING_PG = 0
281
+ CONST %OPRETURN_CNT_POSEIDON_G = 0
282
+ ; opREVERT - COMPLEX - hardcoded values at test
283
+ CONST %OPREVERT_STEP = 700
284
+ CONST %OPREVERT_CNT_BINARY = 35
285
+ CONST %OPREVERT_CNT_ARITH = 11
286
+ CONST %OPREVERT_CNT_KECCAK_F = 0
287
+ CONST %OPREVERT_CNT_MEM_ALIGN = 4
288
+ CONST %OPREVERT_CNT_PADDING_PG = 0
289
+ CONST %OPREVERT_CNT_POSEIDON_G = 0
290
+ ; opDELEGATECALL - COMPLEX - hardcoded values at test
291
+ CONST %OPDELEGATECALL_STEP = 600
292
+ CONST %OPDELEGATECALL_CNT_BINARY = 23
293
+ CONST %OPDELEGATECALL_CNT_ARITH = 3
294
+ CONST %OPDELEGATECALL_CNT_KECCAK_F = 0
295
+ CONST %OPDELEGATECALL_CNT_MEM_ALIGN = 0
296
+ CONST %OPDELEGATECALL_CNT_PADDING_PG = 0
297
+ CONST %OPDELEGATECALL_CNT_POSEIDON_G = 6
298
+ ; opSTATICCALL - COMPLEX - hardcoded values at test
299
+ CONST %OPSTATICCALL_STEP = 600
300
+ CONST %OPSTATICCALL_CNT_BINARY = 23
301
+ CONST %OPSTATICCALL_CNT_ARITH = 3
302
+ CONST %OPSTATICCALL_CNT_KECCAK_F = 0
303
+ CONST %OPSTATICCALL_CNT_MEM_ALIGN = 0
304
+ CONST %OPSTATICCALL_CNT_PADDING_PG = 0
305
+ CONST %OPSTATICCALL_CNT_POSEIDON_G = 6
306
+ ; opSHA3 - COMPLEX - hardcoded values at test
307
+ CONST %OPSHA3_STEP = 3300
308
+ CONST %OPSHA3_CNT_BINARY = 146
309
+ CONST %OPSHA3_CNT_ARITH = 9
310
+ CONST %OPSHA3_CNT_KECCAK_F = 15
311
+ CONST %OPSHA3_CNT_MEM_ALIGN = 63
312
+ CONST %OPSHA3_CNT_PADDING_PG = 0
313
+ CONST %OPSHA3_CNT_POSEIDON_G = 0
314
+ ; MSTORE32
315
+ CONST %MSTORE32_STEP = 50 + %OFFSETUTIL_STEP
316
+ CONST %MSTORE32_CNT_BINARY = 1 + %OFFSETUTIL_CNT_BINARY
317
+ CONST %MSTORE32_CNT_ARITH = 0 + %OFFSETUTIL_CNT_ARITH
318
+ CONST %MSTORE32_CNT_KECCAK_F = 0 + %OFFSETUTIL_CNT_KECCAK_F
319
+ CONST %MSTORE32_CNT_MEM_ALIGN = 1 + %OFFSETUTIL_CNT_MEM_ALIGN
320
+ CONST %MSTORE32_CNT_PADDING_PG = 0 + %OFFSETUTIL_CNT_PADDING_PG
321
+ CONST %MSTORE32_CNT_POSEIDON_G = 0 + %OFFSETUTIL_CNT_POSEIDON_G
322
+ ; MSTOREX
323
+ CONST %MSTOREX_STEP = 100 + %MSTORE32_STEP + %SHRARITH_STEP*3 + %SHLARITH_STEP*2 + %OFFSETUTIL_STEP
324
+ CONST %MSTOREX_CNT_BINARY = 0 + %MSTORE32_CNT_BINARY + %SHRARITH_CNT_BINARY*3 + %SHLARITH_CNT_BINARY*2 + %OFFSETUTIL_CNT_BINARY
325
+ CONST %MSTOREX_CNT_ARITH = 0 + %MSTORE32_CNT_ARITH + %SHRARITH_CNT_ARITH*3 + %SHLARITH_CNT_ARITH*2 + %OFFSETUTIL_CNT_ARITH
326
+ CONST %MSTOREX_CNT_KECCAK_F = 0 + %MSTORE32_CNT_KECCAK_F + %SHRARITH_CNT_KECCAK_F*3 + %SHLARITH_CNT_KECCAK_F*2 + %OFFSETUTIL_CNT_KECCAK_F
327
+ CONST %MSTOREX_CNT_MEM_ALIGN = 0 + %MSTORE32_CNT_MEM_ALIGN + %SHRARITH_CNT_MEM_ALIGN*3 + %SHLARITH_CNT_MEM_ALIGN*2 + %OFFSETUTIL_CNT_MEM_ALIGN
328
+ CONST %MSTOREX_CNT_PADDING_PG = 0 + %MSTORE32_CNT_PADDING_PG + %SHRARITH_CNT_PADDING_PG*3 + %SHLARITH_CNT_PADDING_PG*2 + %OFFSETUTIL_CNT_PADDING_PG
329
+ CONST %MSTOREX_CNT_POSEIDON_G = 0 + %MSTORE32_CNT_POSEIDON_G + %SHRARITH_CNT_POSEIDON_G*3 + %SHLARITH_CNT_POSEIDON_G*2 + %OFFSETUTIL_CNT_POSEIDON_G
330
+ ; isEmptyAccount
331
+ CONST %ISEMPTYACCOUNT_STEP = 50
332
+ CONST %ISEMPTYACCOUNT_CNT_BINARY = 3
333
+ CONST %ISEMPTYACCOUNT_CNT_ARITH = 0
334
+ CONST %ISEMPTYACCOUNT_CNT_KECCAK_F = 0
335
+ CONST %ISEMPTYACCOUNT_CNT_MEM_ALIGN = 0
336
+ CONST %ISEMPTYACCOUNT_CNT_PADDING_PG = 0
337
+ CONST %ISEMPTYACCOUNT_CNT_POSEIDON_G = 6
338
+ ; computeGasSendCall
339
+ CONST %COMPUTEGASSENDCALL_STEP = 30
340
+ CONST %COMPUTEGASSENDCALL_CNT_BINARY = 2
341
+ CONST %COMPUTEGASSENDCALL_CNT_ARITH = 0
342
+ CONST %COMPUTEGASSENDCALL_CNT_KECCAK_F = 0
343
+ CONST %COMPUTEGASSENDCALL_CNT_MEM_ALIGN = 0
344
+ CONST %COMPUTEGASSENDCALL_CNT_PADDING_PG = 0
345
+ CONST %COMPUTEGASSENDCALL_CNT_POSEIDON_G = 0
346
+ ; saveMem
347
+ CONST %SAVEMEM_STEP = 100 + %MULARITH_STEP + %DIVARITH_STEP
348
+ CONST %SAVEMEM_CNT_BINARY = 5 + %MULARITH_CNT_BINARY + %DIVARITH_CNT_BINARY
349
+ CONST %SAVEMEM_CNT_ARITH = 0 + %MULARITH_CNT_ARITH + %DIVARITH_CNT_ARITH
350
+ CONST %SAVEMEM_CNT_KECCAK_F = 0 + %MULARITH_CNT_KECCAK_F + %DIVARITH_CNT_KECCAK_F
351
+ CONST %SAVEMEM_CNT_MEM_ALIGN = 0 + %MULARITH_CNT_MEM_ALIGN + %DIVARITH_CNT_MEM_ALIGN
352
+ CONST %SAVEMEM_CNT_PADDING_PG = 0 + %MULARITH_CNT_PADDING_PG + %DIVARITH_CNT_PADDING_PG
353
+ CONST %SAVEMEM_CNT_POSEIDON_G = 0 + %MULARITH_CNT_POSEIDON_G + %DIVARITH_CNT_POSEIDON_G
354
+ ;addBatchHash
355
+ CONST %ADDBATCHHASH_STEP = 10 + %SHRARITH_STEP
356
+ CONST %ADDBATCHHASH_CNT_BINARY = 155
357
+ CONST %ADDBATCHHASH_CNT_ARITH = 31
358
+ CONST %ADDBATCHHASH_CNT_KECCAK_F = 0 + %SHRARITH_CNT_KECCAK_F
359
+ CONST %ADDBATCHHASH_CNT_MEM_ALIGN = 0 + %SHRARITH_CNT_MEM_ALIGN
360
+ CONST %ADDBATCHHASH_CNT_PADDING_PG = 0 + %SHRARITH_CNT_PADDING_PG
361
+ CONST %ADDBATCHHASH_CNT_POSEIDON_G = 0 + %SHRARITH_CNT_POSEIDON_G
362
+
363
+
364
+ ; %MLOADX_STEP - STEP:JMPN(failedCounters)
365
+ ; %MLOADX_CNT_BINARY - CNT_BINARY :JMPN(failedCounters)
366
+ ; %MLOADX_CNT_ARITH - CNT_ARITH :JMPN(failedCounters)
367
+ ; %MLOADX_CNT_KECCAK_F - CNT_KECCAK_F :JMPN(failedCounters)
368
+ ; %MLOADX_CNT_MEM_ALIGN - CNT_MEM_ALIGN :JMPN(failedCounters)
369
+ ; %MLOADX_CNT_PADDING_PG - CNT_PADDING_PG :JMPN(failedCounters)
370
+ ; %MLOADX_CNT_POSEIDON_G - CNT_POSEIDON_G :JMPN(failedCounters)
@@ -0,0 +1,18 @@
1
+ INCLUDE "../main/load-tx-rlp-utils.zkasm"
2
+ INCLUDE "../main/tables/2-exp.zkasm"
3
+ INCLUDE "../main/vars.zkasm"
4
+ INCLUDE "../main/utils.zkasm"
5
+ INCLUDE "../main/opcodes/calldata-returndata-code.zkasm"
6
+ INCLUDE "../main/opcodes/arithmetic.zkasm"
7
+ INCLUDE "../main/opcodes/block.zkasm"
8
+ INCLUDE "../main/opcodes/comparison.zkasm"
9
+ INCLUDE "../main/opcodes/context-information.zkasm"
10
+ INCLUDE "../main/opcodes/create-terminate-context.zkasm"
11
+ INCLUDE "../main/opcodes/crypto.zkasm"
12
+ INCLUDE "../main/opcodes/flow-control.zkasm"
13
+ INCLUDE "../main/opcodes/logs.zkasm"
14
+ INCLUDE "../main/opcodes/stack-operations.zkasm"
15
+ INCLUDE "../main/opcodes/storage-memory.zkasm"
16
+ INCLUDE "../main/touched.zkasm"
17
+ INCLUDE "../main/end.zkasm"
18
+ INCLUDE "../main/block-info.zkasm"
@@ -0,0 +1,2 @@
1
+ INCLUDE "countersConstants.zkasm"
2
+ INCLUDE "../main/constants.zkasm"
@@ -0,0 +1,27 @@
1
+ INCLUDE "../initIncludes.zkasm"
2
+
3
+ start:
4
+ 1000000 => GAS
5
+
6
+ operation:
7
+ 50 => E
8
+ :CALL(MLOAD32)
9
+
10
+ %MLOAD32_STEP - STEP:JMPN(failedCounters)
11
+ %MLOAD32_CNT_BINARY - CNT_BINARY :JMPNZ(failedCounters)
12
+ %MLOAD32_CNT_ARITH - CNT_ARITH :JMPNZ(failedCounters)
13
+ %MLOAD32_CNT_KECCAK_F - CNT_KECCAK_F :JMPNZ(failedCounters)
14
+ %MLOAD32_CNT_MEM_ALIGN - CNT_MEM_ALIGN :JMPNZ(failedCounters)
15
+ %MLOAD32_CNT_PADDING_PG - CNT_PADDING_PG :JMPNZ(failedCounters)
16
+ %MLOAD32_CNT_POSEIDON_G - CNT_POSEIDON_G :JMPNZ(failedCounters)
17
+
18
+ 0 => A,B,C,D,E,CTX, SP, PC, GAS, SR, HASHPOS, RR ; Set all registers to 0
19
+ finalizeExecution:
20
+ :JMP(finalWait)
21
+ readCode:
22
+ :RETURN
23
+ failedCounters:
24
+ 2 => A
25
+ 1 :ASSERT
26
+
27
+ INCLUDE "../endIncludes.zkasm"
@@ -0,0 +1,30 @@
1
+ INCLUDE "../initIncludes.zkasm"
2
+
3
+ start:
4
+ 1000000 => GAS
5
+
6
+ operation:
7
+ 50 => E
8
+ 31 => C
9
+ :CALL(MLOADX)
10
+
11
+ %MLOADX_STEP - STEP :JMPN(failedCounters)
12
+ 5 - CNT_BINARY :JMPNZ(failedCounters)
13
+ ;%MLOADX_CNT_BINARY - CNT_BINARY :JMPNZ(failedCounters)
14
+ 3 - CNT_ARITH :JMPNZ(failedCounters)
15
+ ;%MLOADX_CNT_ARITH - CNT_ARITH :JMPNZ(failedCounters)
16
+ %MLOADX_CNT_KECCAK_F - CNT_KECCAK_F :JMPNZ(failedCounters)
17
+ %MLOADX_CNT_MEM_ALIGN - CNT_MEM_ALIGN :JMPNZ(failedCounters)
18
+ %MLOADX_CNT_PADDING_PG - CNT_PADDING_PG :JMPNZ(failedCounters)
19
+ %MLOADX_CNT_POSEIDON_G - CNT_POSEIDON_G :JMPNZ(failedCounters)
20
+
21
+ 0 => A,B,C,D,E,CTX, SP, PC, GAS, SR, HASHPOS, RR ; Set all registers to 0
22
+ finalizeExecution:
23
+ :JMP(finalWait)
24
+ readCode:
25
+ :RETURN
26
+ failedCounters:
27
+ 2 => A
28
+ 1 :ASSERT
29
+
30
+ INCLUDE "../endIncludes.zkasm"
@@ -0,0 +1,32 @@
1
+ INCLUDE "../initIncludes.zkasm"
2
+
3
+ start:
4
+ 1000000 => GAS
5
+
6
+ operation:
7
+ ; @info save value to memory 32 bytes with offset
8
+ ; @in bytesToStore => bytes to store in memory
9
+ ; @in E => offset
10
+ ; @out E => new offset
11
+ 0x3fc1363ea8654a6e41d29644fef3f756784774c3e315c9796e4d483969d1d5a6n :MSTORE(bytesToStore)
12
+ 50 => E
13
+ :CALL(MSTORE32)
14
+
15
+ %MSTORE32_STEP - STEP:JMPN(failedCounters)
16
+ %MSTORE32_CNT_BINARY - CNT_BINARY :JMPNZ(failedCounters)
17
+ %MSTORE32_CNT_ARITH - CNT_ARITH :JMPNZ(failedCounters)
18
+ %MSTORE32_CNT_KECCAK_F - CNT_KECCAK_F :JMPNZ(failedCounters)
19
+ %MSTORE32_CNT_MEM_ALIGN - CNT_MEM_ALIGN :JMPNZ(failedCounters)
20
+ %MSTORE32_CNT_PADDING_PG - CNT_PADDING_PG :JMPNZ(failedCounters)
21
+ %MSTORE32_CNT_POSEIDON_G - CNT_POSEIDON_G :JMPNZ(failedCounters)
22
+
23
+ 0 => A,B,C,D,E,CTX, SP, PC, GAS, SR, HASHPOS, RR ; Set all registers to 0
24
+ finalizeExecution:
25
+ :JMP(finalWait)
26
+ readCode:
27
+ :RETURN
28
+ failedCounters:
29
+ 2 => A
30
+ 1 :ASSERT
31
+
32
+ INCLUDE "../endIncludes.zkasm"
@@ -0,0 +1,36 @@
1
+ INCLUDE "../initIncludes.zkasm"
2
+
3
+ start:
4
+ 1000000 => GAS
5
+
6
+ operation:
7
+ ; @info save value to memory < 32 bytes with offset
8
+ ; @in bytesToStore => bytes to store in memory
9
+ ; @in E => offset
10
+ ; @in C => length
11
+ ; @out E => new offset
12
+ 0x3fc1363ea8654a6e41d29644fef3f756784774c3e315c9796e4d483969d1d5a6n :MSTORE(bytesToStore)
13
+ 50 => E
14
+ 15 => C
15
+ :CALL(MSTOREX)
16
+
17
+ %MSTOREX_STEP - STEP:JMPN(failedCounters)
18
+ 12 - CNT_BINARY :JMPNZ(failedCounters)
19
+ ;%MSTOREX_CNT_BINARY - CNT_BINARY :JMPNZ(failedCounters)
20
+ 7 - CNT_ARITH :JMPNZ(failedCounters)
21
+ ;%MSTOREX_CNT_ARITH - CNT_ARITH :JMPNZ(failedCounters)
22
+ %MSTOREX_CNT_KECCAK_F - CNT_KECCAK_F :JMPNZ(failedCounters)
23
+ %MSTOREX_CNT_MEM_ALIGN - CNT_MEM_ALIGN :JMPNZ(failedCounters)
24
+ %MSTOREX_CNT_PADDING_PG - CNT_PADDING_PG :JMPNZ(failedCounters)
25
+ %MSTOREX_CNT_POSEIDON_G - CNT_POSEIDON_G :JMPNZ(failedCounters)
26
+
27
+ 0 => A,B,C,D,E,CTX, SP, PC, GAS, SR, HASHPOS, RR ; Set all registers to 0
28
+ finalizeExecution:
29
+ :JMP(finalWait)
30
+ readCode:
31
+ :RETURN
32
+ failedCounters:
33
+ 2 => A
34
+ 1 :ASSERT
35
+
36
+ INCLUDE "../endIncludes.zkasm"
@@ -0,0 +1,28 @@
1
+ INCLUDE "../initIncludes.zkasm"
2
+
3
+ start:
4
+ 1000000 => GAS
5
+
6
+ operation:
7
+ 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFn => A
8
+ 1 => D
9
+ :CALL(SHLarith)
10
+
11
+ %SHLARITH_STEP - STEP:JMPN(failedCounters)
12
+ %SHLARITH_CNT_BINARY - CNT_BINARY :JMPNZ(failedCounters)
13
+ %SHLARITH_CNT_ARITH - CNT_ARITH :JMPNZ(failedCounters)
14
+ %SHLARITH_CNT_KECCAK_F - CNT_KECCAK_F :JMPNZ(failedCounters)
15
+ %SHLARITH_CNT_MEM_ALIGN - CNT_MEM_ALIGN :JMPNZ(failedCounters)
16
+ %SHLARITH_CNT_PADDING_PG - CNT_PADDING_PG :JMPNZ(failedCounters)
17
+ %SHLARITH_CNT_POSEIDON_G - CNT_POSEIDON_G :JMPNZ(failedCounters)
18
+
19
+ 0 => A,B,C,D,E,CTX, SP, PC, GAS, SR, HASHPOS, RR ; Set all registers to 0
20
+ finalizeExecution:
21
+ :JMP(finalWait)
22
+ readCode:
23
+ :RETURN
24
+ failedCounters:
25
+ 2 => A
26
+ 1 :ASSERT
27
+
28
+ INCLUDE "../endIncludes.zkasm"