@feelyourprotocol/evm 8141.0.0

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.
Files changed (565) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +690 -0
  3. package/dist/cjs/binaryTreeAccessWitness.d.ts +61 -0
  4. package/dist/cjs/binaryTreeAccessWitness.d.ts.map +1 -0
  5. package/dist/cjs/binaryTreeAccessWitness.js +314 -0
  6. package/dist/cjs/binaryTreeAccessWitness.js.map +1 -0
  7. package/dist/cjs/chunkCache.d.ts +13 -0
  8. package/dist/cjs/chunkCache.d.ts.map +1 -0
  9. package/dist/cjs/chunkCache.js +30 -0
  10. package/dist/cjs/chunkCache.js.map +1 -0
  11. package/dist/cjs/constructors.d.ts +11 -0
  12. package/dist/cjs/constructors.d.ts.map +1 -0
  13. package/dist/cjs/constructors.js +30 -0
  14. package/dist/cjs/constructors.js.map +1 -0
  15. package/dist/cjs/eip7708.d.ts +24 -0
  16. package/dist/cjs/eip7708.d.ts.map +1 -0
  17. package/dist/cjs/eip7708.js +37 -0
  18. package/dist/cjs/eip7708.js.map +1 -0
  19. package/dist/cjs/eof/constants.d.ts +22 -0
  20. package/dist/cjs/eof/constants.d.ts.map +1 -0
  21. package/dist/cjs/eof/constants.js +31 -0
  22. package/dist/cjs/eof/constants.js.map +1 -0
  23. package/dist/cjs/eof/container.d.ts +87 -0
  24. package/dist/cjs/eof/container.d.ts.map +1 -0
  25. package/dist/cjs/eof/container.js +380 -0
  26. package/dist/cjs/eof/container.js.map +1 -0
  27. package/dist/cjs/eof/errors.d.ts +66 -0
  28. package/dist/cjs/eof/errors.d.ts.map +1 -0
  29. package/dist/cjs/eof/errors.js +200 -0
  30. package/dist/cjs/eof/errors.js.map +1 -0
  31. package/dist/cjs/eof/setup.d.ts +9 -0
  32. package/dist/cjs/eof/setup.d.ts.map +1 -0
  33. package/dist/cjs/eof/setup.js +26 -0
  34. package/dist/cjs/eof/setup.js.map +1 -0
  35. package/dist/cjs/eof/stackDelta.d.ts +10 -0
  36. package/dist/cjs/eof/stackDelta.d.ts.map +1 -0
  37. package/dist/cjs/eof/stackDelta.js +164 -0
  38. package/dist/cjs/eof/stackDelta.js.map +1 -0
  39. package/dist/cjs/eof/util.d.ts +8 -0
  40. package/dist/cjs/eof/util.d.ts.map +1 -0
  41. package/dist/cjs/eof/util.js +18 -0
  42. package/dist/cjs/eof/util.js.map +1 -0
  43. package/dist/cjs/eof/verify.d.ts +38 -0
  44. package/dist/cjs/eof/verify.d.ts.map +1 -0
  45. package/dist/cjs/eof/verify.js +436 -0
  46. package/dist/cjs/eof/verify.js.map +1 -0
  47. package/dist/cjs/errors.d.ts +40 -0
  48. package/dist/cjs/errors.d.ts.map +1 -0
  49. package/dist/cjs/errors.js +43 -0
  50. package/dist/cjs/errors.js.map +1 -0
  51. package/dist/cjs/evm.d.ts +181 -0
  52. package/dist/cjs/evm.d.ts.map +1 -0
  53. package/dist/cjs/evm.js +1142 -0
  54. package/dist/cjs/evm.js.map +1 -0
  55. package/dist/cjs/frameContext.d.ts +50 -0
  56. package/dist/cjs/frameContext.d.ts.map +1 -0
  57. package/dist/cjs/frameContext.js +17 -0
  58. package/dist/cjs/frameContext.js.map +1 -0
  59. package/dist/cjs/index.d.ts +18 -0
  60. package/dist/cjs/index.d.ts.map +1 -0
  61. package/dist/cjs/index.js +43 -0
  62. package/dist/cjs/index.js.map +1 -0
  63. package/dist/cjs/interpreter.d.ts +361 -0
  64. package/dist/cjs/interpreter.d.ts.map +1 -0
  65. package/dist/cjs/interpreter.js +1057 -0
  66. package/dist/cjs/interpreter.js.map +1 -0
  67. package/dist/cjs/journal.d.ts +69 -0
  68. package/dist/cjs/journal.d.ts.map +1 -0
  69. package/dist/cjs/journal.js +247 -0
  70. package/dist/cjs/journal.js.map +1 -0
  71. package/dist/cjs/logger.d.ts +38 -0
  72. package/dist/cjs/logger.d.ts.map +1 -0
  73. package/dist/cjs/logger.js +126 -0
  74. package/dist/cjs/logger.js.map +1 -0
  75. package/dist/cjs/memory.d.ts +29 -0
  76. package/dist/cjs/memory.d.ts.map +1 -0
  77. package/dist/cjs/memory.js +75 -0
  78. package/dist/cjs/memory.js.map +1 -0
  79. package/dist/cjs/message.d.ts +70 -0
  80. package/dist/cjs/message.d.ts.map +1 -0
  81. package/dist/cjs/message.js +51 -0
  82. package/dist/cjs/message.js.map +1 -0
  83. package/dist/cjs/opcodes/EIP1283.d.ts +13 -0
  84. package/dist/cjs/opcodes/EIP1283.d.ts.map +1 -0
  85. package/dist/cjs/opcodes/EIP1283.js +58 -0
  86. package/dist/cjs/opcodes/EIP1283.js.map +1 -0
  87. package/dist/cjs/opcodes/EIP2200.d.ts +13 -0
  88. package/dist/cjs/opcodes/EIP2200.d.ts.map +1 -0
  89. package/dist/cjs/opcodes/EIP2200.js +64 -0
  90. package/dist/cjs/opcodes/EIP2200.js.map +1 -0
  91. package/dist/cjs/opcodes/EIP2929.d.ts +68 -0
  92. package/dist/cjs/opcodes/EIP2929.d.ts.map +1 -0
  93. package/dist/cjs/opcodes/EIP2929.js +146 -0
  94. package/dist/cjs/opcodes/EIP2929.js.map +1 -0
  95. package/dist/cjs/opcodes/codes.d.ts +45 -0
  96. package/dist/cjs/opcodes/codes.d.ts.map +1 -0
  97. package/dist/cjs/opcodes/codes.js +453 -0
  98. package/dist/cjs/opcodes/codes.js.map +1 -0
  99. package/dist/cjs/opcodes/functions.d.ts +11 -0
  100. package/dist/cjs/opcodes/functions.d.ts.map +1 -0
  101. package/dist/cjs/opcodes/functions.js +1778 -0
  102. package/dist/cjs/opcodes/functions.js.map +1 -0
  103. package/dist/cjs/opcodes/gas.d.ts +15 -0
  104. package/dist/cjs/opcodes/gas.d.ts.map +1 -0
  105. package/dist/cjs/opcodes/gas.js +1016 -0
  106. package/dist/cjs/opcodes/gas.js.map +1 -0
  107. package/dist/cjs/opcodes/index.d.ts +4 -0
  108. package/dist/cjs/opcodes/index.d.ts.map +1 -0
  109. package/dist/cjs/opcodes/index.js +20 -0
  110. package/dist/cjs/opcodes/index.js.map +1 -0
  111. package/dist/cjs/opcodes/util.d.ts +86 -0
  112. package/dist/cjs/opcodes/util.d.ts.map +1 -0
  113. package/dist/cjs/opcodes/util.js +281 -0
  114. package/dist/cjs/opcodes/util.js.map +1 -0
  115. package/dist/cjs/package.json +3 -0
  116. package/dist/cjs/params.d.ts +3 -0
  117. package/dist/cjs/params.d.ts.map +1 -0
  118. package/dist/cjs/params.js +424 -0
  119. package/dist/cjs/params.js.map +1 -0
  120. package/dist/cjs/precompiles/01-ecrecover.d.ts +4 -0
  121. package/dist/cjs/precompiles/01-ecrecover.d.ts.map +1 -0
  122. package/dist/cjs/precompiles/01-ecrecover.js +58 -0
  123. package/dist/cjs/precompiles/01-ecrecover.js.map +1 -0
  124. package/dist/cjs/precompiles/02-sha256.d.ts +4 -0
  125. package/dist/cjs/precompiles/02-sha256.d.ts.map +1 -0
  126. package/dist/cjs/precompiles/02-sha256.js +27 -0
  127. package/dist/cjs/precompiles/02-sha256.js.map +1 -0
  128. package/dist/cjs/precompiles/03-ripemd160.d.ts +4 -0
  129. package/dist/cjs/precompiles/03-ripemd160.d.ts.map +1 -0
  130. package/dist/cjs/precompiles/03-ripemd160.js +26 -0
  131. package/dist/cjs/precompiles/03-ripemd160.js.map +1 -0
  132. package/dist/cjs/precompiles/04-identity.d.ts +4 -0
  133. package/dist/cjs/precompiles/04-identity.d.ts.map +1 -0
  134. package/dist/cjs/precompiles/04-identity.js +24 -0
  135. package/dist/cjs/precompiles/04-identity.js.map +1 -0
  136. package/dist/cjs/precompiles/05-modexp.d.ts +5 -0
  137. package/dist/cjs/precompiles/05-modexp.d.ts.map +1 -0
  138. package/dist/cjs/precompiles/05-modexp.js +185 -0
  139. package/dist/cjs/precompiles/05-modexp.js.map +1 -0
  140. package/dist/cjs/precompiles/06-bn254-add.d.ts +4 -0
  141. package/dist/cjs/precompiles/06-bn254-add.d.ts.map +1 -0
  142. package/dist/cjs/precompiles/06-bn254-add.js +42 -0
  143. package/dist/cjs/precompiles/06-bn254-add.js.map +1 -0
  144. package/dist/cjs/precompiles/07-bn254-mul.d.ts +4 -0
  145. package/dist/cjs/precompiles/07-bn254-mul.d.ts.map +1 -0
  146. package/dist/cjs/precompiles/07-bn254-mul.js +43 -0
  147. package/dist/cjs/precompiles/07-bn254-mul.js.map +1 -0
  148. package/dist/cjs/precompiles/08-bn254-pairing.d.ts +4 -0
  149. package/dist/cjs/precompiles/08-bn254-pairing.d.ts.map +1 -0
  150. package/dist/cjs/precompiles/08-bn254-pairing.js +45 -0
  151. package/dist/cjs/precompiles/08-bn254-pairing.js.map +1 -0
  152. package/dist/cjs/precompiles/09-blake2f.d.ts +5 -0
  153. package/dist/cjs/precompiles/09-blake2f.d.ts.map +1 -0
  154. package/dist/cjs/precompiles/09-blake2f.js +201 -0
  155. package/dist/cjs/precompiles/09-blake2f.js.map +1 -0
  156. package/dist/cjs/precompiles/0a-kzg-point-evaluation.d.ts +5 -0
  157. package/dist/cjs/precompiles/0a-kzg-point-evaluation.d.ts.map +1 -0
  158. package/dist/cjs/precompiles/0a-kzg-point-evaluation.js +68 -0
  159. package/dist/cjs/precompiles/0a-kzg-point-evaluation.js.map +1 -0
  160. package/dist/cjs/precompiles/0b-bls12-g1add.d.ts +4 -0
  161. package/dist/cjs/precompiles/0b-bls12-g1add.d.ts.map +1 -0
  162. package/dist/cjs/precompiles/0b-bls12-g1add.js +49 -0
  163. package/dist/cjs/precompiles/0b-bls12-g1add.js.map +1 -0
  164. package/dist/cjs/precompiles/0c-bls12-g1msm.d.ts +4 -0
  165. package/dist/cjs/precompiles/0c-bls12-g1msm.d.ts.map +1 -0
  166. package/dist/cjs/precompiles/0c-bls12-g1msm.js +62 -0
  167. package/dist/cjs/precompiles/0c-bls12-g1msm.js.map +1 -0
  168. package/dist/cjs/precompiles/0d-bls12-g2add.d.ts +4 -0
  169. package/dist/cjs/precompiles/0d-bls12-g2add.d.ts.map +1 -0
  170. package/dist/cjs/precompiles/0d-bls12-g2add.js +51 -0
  171. package/dist/cjs/precompiles/0d-bls12-g2add.js.map +1 -0
  172. package/dist/cjs/precompiles/0e-bls12-g2msm.d.ts +4 -0
  173. package/dist/cjs/precompiles/0e-bls12-g2msm.d.ts.map +1 -0
  174. package/dist/cjs/precompiles/0e-bls12-g2msm.js +60 -0
  175. package/dist/cjs/precompiles/0e-bls12-g2msm.js.map +1 -0
  176. package/dist/cjs/precompiles/0f-bls12-pairing.d.ts +4 -0
  177. package/dist/cjs/precompiles/0f-bls12-pairing.d.ts.map +1 -0
  178. package/dist/cjs/precompiles/0f-bls12-pairing.js +66 -0
  179. package/dist/cjs/precompiles/0f-bls12-pairing.js.map +1 -0
  180. package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.d.ts +4 -0
  181. package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.d.ts.map +1 -0
  182. package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.js +44 -0
  183. package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.js.map +1 -0
  184. package/dist/cjs/precompiles/100-p256verify.d.ts +4 -0
  185. package/dist/cjs/precompiles/100-p256verify.d.ts.map +1 -0
  186. package/dist/cjs/precompiles/100-p256verify.js +131 -0
  187. package/dist/cjs/precompiles/100-p256verify.js.map +1 -0
  188. package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.d.ts +4 -0
  189. package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.d.ts.map +1 -0
  190. package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.js +47 -0
  191. package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.js.map +1 -0
  192. package/dist/cjs/precompiles/bls12_381/constants.d.ts +10 -0
  193. package/dist/cjs/precompiles/bls12_381/constants.d.ts.map +1 -0
  194. package/dist/cjs/precompiles/bls12_381/constants.js +274 -0
  195. package/dist/cjs/precompiles/bls12_381/constants.js.map +1 -0
  196. package/dist/cjs/precompiles/bls12_381/index.d.ts +5 -0
  197. package/dist/cjs/precompiles/bls12_381/index.d.ts.map +1 -0
  198. package/dist/cjs/precompiles/bls12_381/index.js +24 -0
  199. package/dist/cjs/precompiles/bls12_381/index.js.map +1 -0
  200. package/dist/cjs/precompiles/bls12_381/mcl.d.ts +45 -0
  201. package/dist/cjs/precompiles/bls12_381/mcl.d.ts.map +1 -0
  202. package/dist/cjs/precompiles/bls12_381/mcl.js +264 -0
  203. package/dist/cjs/precompiles/bls12_381/mcl.js.map +1 -0
  204. package/dist/cjs/precompiles/bls12_381/noble.d.ts +39 -0
  205. package/dist/cjs/precompiles/bls12_381/noble.d.ts.map +1 -0
  206. package/dist/cjs/precompiles/bls12_381/noble.js +228 -0
  207. package/dist/cjs/precompiles/bls12_381/noble.js.map +1 -0
  208. package/dist/cjs/precompiles/bls12_381/util.d.ts +35 -0
  209. package/dist/cjs/precompiles/bls12_381/util.d.ts.map +1 -0
  210. package/dist/cjs/precompiles/bls12_381/util.js +68 -0
  211. package/dist/cjs/precompiles/bls12_381/util.js.map +1 -0
  212. package/dist/cjs/precompiles/bn254/index.d.ts +3 -0
  213. package/dist/cjs/precompiles/bn254/index.d.ts.map +1 -0
  214. package/dist/cjs/precompiles/bn254/index.js +8 -0
  215. package/dist/cjs/precompiles/bn254/index.js.map +1 -0
  216. package/dist/cjs/precompiles/bn254/noble.d.ts +13 -0
  217. package/dist/cjs/precompiles/bn254/noble.d.ts.map +1 -0
  218. package/dist/cjs/precompiles/bn254/noble.js +124 -0
  219. package/dist/cjs/precompiles/bn254/noble.js.map +1 -0
  220. package/dist/cjs/precompiles/bn254/rustbn.d.ts +16 -0
  221. package/dist/cjs/precompiles/bn254/rustbn.d.ts.map +1 -0
  222. package/dist/cjs/precompiles/bn254/rustbn.js +33 -0
  223. package/dist/cjs/precompiles/bn254/rustbn.js.map +1 -0
  224. package/dist/cjs/precompiles/index.d.ts +67 -0
  225. package/dist/cjs/precompiles/index.d.ts.map +1 -0
  226. package/dist/cjs/precompiles/index.js +262 -0
  227. package/dist/cjs/precompiles/index.js.map +1 -0
  228. package/dist/cjs/precompiles/types.d.ts +13 -0
  229. package/dist/cjs/precompiles/types.d.ts.map +1 -0
  230. package/dist/cjs/precompiles/types.js +3 -0
  231. package/dist/cjs/precompiles/types.js.map +1 -0
  232. package/dist/cjs/precompiles/util.d.ts +30 -0
  233. package/dist/cjs/precompiles/util.d.ts.map +1 -0
  234. package/dist/cjs/precompiles/util.js +63 -0
  235. package/dist/cjs/precompiles/util.js.map +1 -0
  236. package/dist/cjs/stack.d.ts +55 -0
  237. package/dist/cjs/stack.d.ts.map +1 -0
  238. package/dist/cjs/stack.js +143 -0
  239. package/dist/cjs/stack.js.map +1 -0
  240. package/dist/cjs/stemCache.d.ts +20 -0
  241. package/dist/cjs/stemCache.d.ts.map +1 -0
  242. package/dist/cjs/stemCache.js +37 -0
  243. package/dist/cjs/stemCache.js.map +1 -0
  244. package/dist/cjs/transientStorage.d.ts +54 -0
  245. package/dist/cjs/transientStorage.d.ts.map +1 -0
  246. package/dist/cjs/transientStorage.js +113 -0
  247. package/dist/cjs/transientStorage.js.map +1 -0
  248. package/dist/cjs/types.d.ts +465 -0
  249. package/dist/cjs/types.d.ts.map +1 -0
  250. package/dist/cjs/types.js +28 -0
  251. package/dist/cjs/types.js.map +1 -0
  252. package/dist/esm/binaryTreeAccessWitness.d.ts +61 -0
  253. package/dist/esm/binaryTreeAccessWitness.d.ts.map +1 -0
  254. package/dist/esm/binaryTreeAccessWitness.js +308 -0
  255. package/dist/esm/binaryTreeAccessWitness.js.map +1 -0
  256. package/dist/esm/chunkCache.d.ts +13 -0
  257. package/dist/esm/chunkCache.d.ts.map +1 -0
  258. package/dist/esm/chunkCache.js +26 -0
  259. package/dist/esm/chunkCache.js.map +1 -0
  260. package/dist/esm/constructors.d.ts +11 -0
  261. package/dist/esm/constructors.d.ts.map +1 -0
  262. package/dist/esm/constructors.js +27 -0
  263. package/dist/esm/constructors.js.map +1 -0
  264. package/dist/esm/eip7708.d.ts +24 -0
  265. package/dist/esm/eip7708.d.ts.map +1 -0
  266. package/dist/esm/eip7708.js +32 -0
  267. package/dist/esm/eip7708.js.map +1 -0
  268. package/dist/esm/eof/constants.d.ts +22 -0
  269. package/dist/esm/eof/constants.d.ts.map +1 -0
  270. package/dist/esm/eof/constants.js +28 -0
  271. package/dist/esm/eof/constants.js.map +1 -0
  272. package/dist/esm/eof/container.d.ts +87 -0
  273. package/dist/esm/eof/container.d.ts.map +1 -0
  274. package/dist/esm/eof/container.js +375 -0
  275. package/dist/esm/eof/container.js.map +1 -0
  276. package/dist/esm/eof/errors.d.ts +66 -0
  277. package/dist/esm/eof/errors.d.ts.map +1 -0
  278. package/dist/esm/eof/errors.js +195 -0
  279. package/dist/esm/eof/errors.js.map +1 -0
  280. package/dist/esm/eof/setup.d.ts +9 -0
  281. package/dist/esm/eof/setup.d.ts.map +1 -0
  282. package/dist/esm/eof/setup.js +23 -0
  283. package/dist/esm/eof/setup.js.map +1 -0
  284. package/dist/esm/eof/stackDelta.d.ts +10 -0
  285. package/dist/esm/eof/stackDelta.d.ts.map +1 -0
  286. package/dist/esm/eof/stackDelta.js +161 -0
  287. package/dist/esm/eof/stackDelta.js.map +1 -0
  288. package/dist/esm/eof/util.d.ts +8 -0
  289. package/dist/esm/eof/util.d.ts.map +1 -0
  290. package/dist/esm/eof/util.js +14 -0
  291. package/dist/esm/eof/util.js.map +1 -0
  292. package/dist/esm/eof/verify.d.ts +38 -0
  293. package/dist/esm/eof/verify.d.ts.map +1 -0
  294. package/dist/esm/eof/verify.js +432 -0
  295. package/dist/esm/eof/verify.js.map +1 -0
  296. package/dist/esm/errors.d.ts +40 -0
  297. package/dist/esm/errors.d.ts.map +1 -0
  298. package/dist/esm/errors.js +39 -0
  299. package/dist/esm/errors.js.map +1 -0
  300. package/dist/esm/evm.d.ts +181 -0
  301. package/dist/esm/evm.d.ts.map +1 -0
  302. package/dist/esm/evm.js +1131 -0
  303. package/dist/esm/evm.js.map +1 -0
  304. package/dist/esm/frameContext.d.ts +50 -0
  305. package/dist/esm/frameContext.d.ts.map +1 -0
  306. package/dist/esm/frameContext.js +14 -0
  307. package/dist/esm/frameContext.js.map +1 -0
  308. package/dist/esm/index.d.ts +18 -0
  309. package/dist/esm/index.d.ts.map +1 -0
  310. package/dist/esm/index.js +15 -0
  311. package/dist/esm/index.js.map +1 -0
  312. package/dist/esm/interpreter.d.ts +361 -0
  313. package/dist/esm/interpreter.d.ts.map +1 -0
  314. package/dist/esm/interpreter.js +1054 -0
  315. package/dist/esm/interpreter.js.map +1 -0
  316. package/dist/esm/journal.d.ts +69 -0
  317. package/dist/esm/journal.d.ts.map +1 -0
  318. package/dist/esm/journal.js +243 -0
  319. package/dist/esm/journal.js.map +1 -0
  320. package/dist/esm/logger.d.ts +38 -0
  321. package/dist/esm/logger.d.ts.map +1 -0
  322. package/dist/esm/logger.js +121 -0
  323. package/dist/esm/logger.js.map +1 -0
  324. package/dist/esm/memory.d.ts +29 -0
  325. package/dist/esm/memory.d.ts.map +1 -0
  326. package/dist/esm/memory.js +71 -0
  327. package/dist/esm/memory.js.map +1 -0
  328. package/dist/esm/message.d.ts +70 -0
  329. package/dist/esm/message.d.ts.map +1 -0
  330. package/dist/esm/message.js +47 -0
  331. package/dist/esm/message.js.map +1 -0
  332. package/dist/esm/opcodes/EIP1283.d.ts +13 -0
  333. package/dist/esm/opcodes/EIP1283.d.ts.map +1 -0
  334. package/dist/esm/opcodes/EIP1283.js +55 -0
  335. package/dist/esm/opcodes/EIP1283.js.map +1 -0
  336. package/dist/esm/opcodes/EIP2200.d.ts +13 -0
  337. package/dist/esm/opcodes/EIP2200.d.ts.map +1 -0
  338. package/dist/esm/opcodes/EIP2200.js +61 -0
  339. package/dist/esm/opcodes/EIP2200.js.map +1 -0
  340. package/dist/esm/opcodes/EIP2929.d.ts +68 -0
  341. package/dist/esm/opcodes/EIP2929.d.ts.map +1 -0
  342. package/dist/esm/opcodes/EIP2929.js +138 -0
  343. package/dist/esm/opcodes/EIP2929.js.map +1 -0
  344. package/dist/esm/opcodes/codes.d.ts +45 -0
  345. package/dist/esm/opcodes/codes.d.ts.map +1 -0
  346. package/dist/esm/opcodes/codes.js +448 -0
  347. package/dist/esm/opcodes/codes.js.map +1 -0
  348. package/dist/esm/opcodes/functions.d.ts +11 -0
  349. package/dist/esm/opcodes/functions.d.ts.map +1 -0
  350. package/dist/esm/opcodes/functions.js +1775 -0
  351. package/dist/esm/opcodes/functions.js.map +1 -0
  352. package/dist/esm/opcodes/gas.d.ts +15 -0
  353. package/dist/esm/opcodes/gas.d.ts.map +1 -0
  354. package/dist/esm/opcodes/gas.js +1013 -0
  355. package/dist/esm/opcodes/gas.js.map +1 -0
  356. package/dist/esm/opcodes/index.d.ts +4 -0
  357. package/dist/esm/opcodes/index.d.ts.map +1 -0
  358. package/dist/esm/opcodes/index.js +4 -0
  359. package/dist/esm/opcodes/index.js.map +1 -0
  360. package/dist/esm/opcodes/util.d.ts +86 -0
  361. package/dist/esm/opcodes/util.d.ts.map +1 -0
  362. package/dist/esm/opcodes/util.js +257 -0
  363. package/dist/esm/opcodes/util.js.map +1 -0
  364. package/dist/esm/package.json +3 -0
  365. package/dist/esm/params.d.ts +3 -0
  366. package/dist/esm/params.d.ts.map +1 -0
  367. package/dist/esm/params.js +421 -0
  368. package/dist/esm/params.js.map +1 -0
  369. package/dist/esm/precompiles/01-ecrecover.d.ts +4 -0
  370. package/dist/esm/precompiles/01-ecrecover.d.ts.map +1 -0
  371. package/dist/esm/precompiles/01-ecrecover.js +55 -0
  372. package/dist/esm/precompiles/01-ecrecover.js.map +1 -0
  373. package/dist/esm/precompiles/02-sha256.d.ts +4 -0
  374. package/dist/esm/precompiles/02-sha256.d.ts.map +1 -0
  375. package/dist/esm/precompiles/02-sha256.js +24 -0
  376. package/dist/esm/precompiles/02-sha256.js.map +1 -0
  377. package/dist/esm/precompiles/03-ripemd160.d.ts +4 -0
  378. package/dist/esm/precompiles/03-ripemd160.d.ts.map +1 -0
  379. package/dist/esm/precompiles/03-ripemd160.js +23 -0
  380. package/dist/esm/precompiles/03-ripemd160.js.map +1 -0
  381. package/dist/esm/precompiles/04-identity.d.ts +4 -0
  382. package/dist/esm/precompiles/04-identity.d.ts.map +1 -0
  383. package/dist/esm/precompiles/04-identity.js +21 -0
  384. package/dist/esm/precompiles/04-identity.js.map +1 -0
  385. package/dist/esm/precompiles/05-modexp.d.ts +5 -0
  386. package/dist/esm/precompiles/05-modexp.d.ts.map +1 -0
  387. package/dist/esm/precompiles/05-modexp.js +181 -0
  388. package/dist/esm/precompiles/05-modexp.js.map +1 -0
  389. package/dist/esm/precompiles/06-bn254-add.d.ts +4 -0
  390. package/dist/esm/precompiles/06-bn254-add.d.ts.map +1 -0
  391. package/dist/esm/precompiles/06-bn254-add.js +39 -0
  392. package/dist/esm/precompiles/06-bn254-add.js.map +1 -0
  393. package/dist/esm/precompiles/07-bn254-mul.d.ts +4 -0
  394. package/dist/esm/precompiles/07-bn254-mul.d.ts.map +1 -0
  395. package/dist/esm/precompiles/07-bn254-mul.js +40 -0
  396. package/dist/esm/precompiles/07-bn254-mul.js.map +1 -0
  397. package/dist/esm/precompiles/08-bn254-pairing.d.ts +4 -0
  398. package/dist/esm/precompiles/08-bn254-pairing.d.ts.map +1 -0
  399. package/dist/esm/precompiles/08-bn254-pairing.js +42 -0
  400. package/dist/esm/precompiles/08-bn254-pairing.js.map +1 -0
  401. package/dist/esm/precompiles/09-blake2f.d.ts +5 -0
  402. package/dist/esm/precompiles/09-blake2f.d.ts.map +1 -0
  403. package/dist/esm/precompiles/09-blake2f.js +197 -0
  404. package/dist/esm/precompiles/09-blake2f.js.map +1 -0
  405. package/dist/esm/precompiles/0a-kzg-point-evaluation.d.ts +5 -0
  406. package/dist/esm/precompiles/0a-kzg-point-evaluation.d.ts.map +1 -0
  407. package/dist/esm/precompiles/0a-kzg-point-evaluation.js +64 -0
  408. package/dist/esm/precompiles/0a-kzg-point-evaluation.js.map +1 -0
  409. package/dist/esm/precompiles/0b-bls12-g1add.d.ts +4 -0
  410. package/dist/esm/precompiles/0b-bls12-g1add.d.ts.map +1 -0
  411. package/dist/esm/precompiles/0b-bls12-g1add.js +46 -0
  412. package/dist/esm/precompiles/0b-bls12-g1add.js.map +1 -0
  413. package/dist/esm/precompiles/0c-bls12-g1msm.d.ts +4 -0
  414. package/dist/esm/precompiles/0c-bls12-g1msm.d.ts.map +1 -0
  415. package/dist/esm/precompiles/0c-bls12-g1msm.js +59 -0
  416. package/dist/esm/precompiles/0c-bls12-g1msm.js.map +1 -0
  417. package/dist/esm/precompiles/0d-bls12-g2add.d.ts +4 -0
  418. package/dist/esm/precompiles/0d-bls12-g2add.d.ts.map +1 -0
  419. package/dist/esm/precompiles/0d-bls12-g2add.js +48 -0
  420. package/dist/esm/precompiles/0d-bls12-g2add.js.map +1 -0
  421. package/dist/esm/precompiles/0e-bls12-g2msm.d.ts +4 -0
  422. package/dist/esm/precompiles/0e-bls12-g2msm.d.ts.map +1 -0
  423. package/dist/esm/precompiles/0e-bls12-g2msm.js +57 -0
  424. package/dist/esm/precompiles/0e-bls12-g2msm.js.map +1 -0
  425. package/dist/esm/precompiles/0f-bls12-pairing.d.ts +4 -0
  426. package/dist/esm/precompiles/0f-bls12-pairing.d.ts.map +1 -0
  427. package/dist/esm/precompiles/0f-bls12-pairing.js +63 -0
  428. package/dist/esm/precompiles/0f-bls12-pairing.js.map +1 -0
  429. package/dist/esm/precompiles/10-bls12-map-fp-to-g1.d.ts +4 -0
  430. package/dist/esm/precompiles/10-bls12-map-fp-to-g1.d.ts.map +1 -0
  431. package/dist/esm/precompiles/10-bls12-map-fp-to-g1.js +41 -0
  432. package/dist/esm/precompiles/10-bls12-map-fp-to-g1.js.map +1 -0
  433. package/dist/esm/precompiles/100-p256verify.d.ts +4 -0
  434. package/dist/esm/precompiles/100-p256verify.d.ts.map +1 -0
  435. package/dist/esm/precompiles/100-p256verify.js +128 -0
  436. package/dist/esm/precompiles/100-p256verify.js.map +1 -0
  437. package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.d.ts +4 -0
  438. package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.d.ts.map +1 -0
  439. package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.js +44 -0
  440. package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.js.map +1 -0
  441. package/dist/esm/precompiles/bls12_381/constants.d.ts +10 -0
  442. package/dist/esm/precompiles/bls12_381/constants.d.ts.map +1 -0
  443. package/dist/esm/precompiles/bls12_381/constants.js +271 -0
  444. package/dist/esm/precompiles/bls12_381/constants.js.map +1 -0
  445. package/dist/esm/precompiles/bls12_381/index.d.ts +5 -0
  446. package/dist/esm/precompiles/bls12_381/index.d.ts.map +1 -0
  447. package/dist/esm/precompiles/bls12_381/index.js +5 -0
  448. package/dist/esm/precompiles/bls12_381/index.js.map +1 -0
  449. package/dist/esm/precompiles/bls12_381/mcl.d.ts +45 -0
  450. package/dist/esm/precompiles/bls12_381/mcl.d.ts.map +1 -0
  451. package/dist/esm/precompiles/bls12_381/mcl.js +254 -0
  452. package/dist/esm/precompiles/bls12_381/mcl.js.map +1 -0
  453. package/dist/esm/precompiles/bls12_381/noble.d.ts +39 -0
  454. package/dist/esm/precompiles/bls12_381/noble.d.ts.map +1 -0
  455. package/dist/esm/precompiles/bls12_381/noble.js +218 -0
  456. package/dist/esm/precompiles/bls12_381/noble.js.map +1 -0
  457. package/dist/esm/precompiles/bls12_381/util.d.ts +35 -0
  458. package/dist/esm/precompiles/bls12_381/util.d.ts.map +1 -0
  459. package/dist/esm/precompiles/bls12_381/util.js +63 -0
  460. package/dist/esm/precompiles/bls12_381/util.js.map +1 -0
  461. package/dist/esm/precompiles/bn254/index.d.ts +3 -0
  462. package/dist/esm/precompiles/bn254/index.d.ts.map +1 -0
  463. package/dist/esm/precompiles/bn254/index.js +3 -0
  464. package/dist/esm/precompiles/bn254/index.js.map +1 -0
  465. package/dist/esm/precompiles/bn254/noble.d.ts +13 -0
  466. package/dist/esm/precompiles/bn254/noble.d.ts.map +1 -0
  467. package/dist/esm/precompiles/bn254/noble.js +120 -0
  468. package/dist/esm/precompiles/bn254/noble.js.map +1 -0
  469. package/dist/esm/precompiles/bn254/rustbn.d.ts +16 -0
  470. package/dist/esm/precompiles/bn254/rustbn.d.ts.map +1 -0
  471. package/dist/esm/precompiles/bn254/rustbn.js +29 -0
  472. package/dist/esm/precompiles/bn254/rustbn.js.map +1 -0
  473. package/dist/esm/precompiles/index.d.ts +67 -0
  474. package/dist/esm/precompiles/index.d.ts.map +1 -0
  475. package/dist/esm/precompiles/index.js +251 -0
  476. package/dist/esm/precompiles/index.js.map +1 -0
  477. package/dist/esm/precompiles/types.d.ts +13 -0
  478. package/dist/esm/precompiles/types.d.ts.map +1 -0
  479. package/dist/esm/precompiles/types.js +2 -0
  480. package/dist/esm/precompiles/types.js.map +1 -0
  481. package/dist/esm/precompiles/util.d.ts +30 -0
  482. package/dist/esm/precompiles/util.d.ts.map +1 -0
  483. package/dist/esm/precompiles/util.js +57 -0
  484. package/dist/esm/precompiles/util.js.map +1 -0
  485. package/dist/esm/stack.d.ts +55 -0
  486. package/dist/esm/stack.d.ts.map +1 -0
  487. package/dist/esm/stack.js +139 -0
  488. package/dist/esm/stack.js.map +1 -0
  489. package/dist/esm/stemCache.d.ts +20 -0
  490. package/dist/esm/stemCache.d.ts.map +1 -0
  491. package/dist/esm/stemCache.js +33 -0
  492. package/dist/esm/stemCache.js.map +1 -0
  493. package/dist/esm/transientStorage.d.ts +54 -0
  494. package/dist/esm/transientStorage.d.ts.map +1 -0
  495. package/dist/esm/transientStorage.js +109 -0
  496. package/dist/esm/transientStorage.js.map +1 -0
  497. package/dist/esm/types.d.ts +465 -0
  498. package/dist/esm/types.d.ts.map +1 -0
  499. package/dist/esm/types.js +23 -0
  500. package/dist/esm/types.js.map +1 -0
  501. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  502. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  503. package/package.json +98 -0
  504. package/src/binaryTreeAccessWitness.ts +447 -0
  505. package/src/chunkCache.ts +36 -0
  506. package/src/constructors.ts +35 -0
  507. package/src/eip7708.ts +47 -0
  508. package/src/eof/constants.ts +36 -0
  509. package/src/eof/container.ts +495 -0
  510. package/src/eof/errors.ts +214 -0
  511. package/src/eof/setup.ts +27 -0
  512. package/src/eof/stackDelta.ts +169 -0
  513. package/src/eof/util.ts +16 -0
  514. package/src/eof/verify.ts +531 -0
  515. package/src/errors.ts +45 -0
  516. package/src/evm.ts +1415 -0
  517. package/src/frameContext.ts +56 -0
  518. package/src/index.ts +75 -0
  519. package/src/interpreter.ts +1437 -0
  520. package/src/journal.ts +317 -0
  521. package/src/logger.ts +180 -0
  522. package/src/memory.ts +82 -0
  523. package/src/message.ts +114 -0
  524. package/src/opcodes/EIP1283.ts +77 -0
  525. package/src/opcodes/EIP2200.ts +87 -0
  526. package/src/opcodes/EIP2929.ts +173 -0
  527. package/src/opcodes/codes.ts +528 -0
  528. package/src/opcodes/functions.ts +1937 -0
  529. package/src/opcodes/gas.ts +1329 -0
  530. package/src/opcodes/index.ts +3 -0
  531. package/src/opcodes/util.ts +313 -0
  532. package/src/params.ts +423 -0
  533. package/src/precompiles/01-ecrecover.ts +77 -0
  534. package/src/precompiles/02-sha256.ts +32 -0
  535. package/src/precompiles/03-ripemd160.ts +32 -0
  536. package/src/precompiles/04-identity.ts +29 -0
  537. package/src/precompiles/05-modexp.ts +215 -0
  538. package/src/precompiles/06-bn254-add.ts +49 -0
  539. package/src/precompiles/07-bn254-mul.ts +50 -0
  540. package/src/precompiles/08-bn254-pairing.ts +54 -0
  541. package/src/precompiles/09-blake2f.ts +243 -0
  542. package/src/precompiles/0a-kzg-point-evaluation.ts +94 -0
  543. package/src/precompiles/0b-bls12-g1add.ts +63 -0
  544. package/src/precompiles/0c-bls12-g1msm.ts +87 -0
  545. package/src/precompiles/0d-bls12-g2add.ts +66 -0
  546. package/src/precompiles/0e-bls12-g2msm.ts +84 -0
  547. package/src/precompiles/0f-bls12-pairing.ts +86 -0
  548. package/src/precompiles/10-bls12-map-fp-to-g1.ts +58 -0
  549. package/src/precompiles/100-p256verify.ts +152 -0
  550. package/src/precompiles/11-bls12-map-fp2-to-g2.ts +61 -0
  551. package/src/precompiles/bls12_381/constants.ts +278 -0
  552. package/src/precompiles/bls12_381/index.ts +4 -0
  553. package/src/precompiles/bls12_381/mcl.ts +376 -0
  554. package/src/precompiles/bls12_381/noble.ts +307 -0
  555. package/src/precompiles/bls12_381/util.ts +78 -0
  556. package/src/precompiles/bn254/index.ts +2 -0
  557. package/src/precompiles/bn254/noble.ts +156 -0
  558. package/src/precompiles/bn254/rustbn.ts +35 -0
  559. package/src/precompiles/index.ts +344 -0
  560. package/src/precompiles/types.ts +15 -0
  561. package/src/precompiles/util.ts +70 -0
  562. package/src/stack.ts +166 -0
  563. package/src/stemCache.ts +45 -0
  564. package/src/transientStorage.ts +131 -0
  565. package/src/types.ts +538 -0
@@ -0,0 +1,308 @@
1
+ import { BinaryTreeAccessedStateType } from '@feelyourprotocol/common';
2
+ import { BIGINT_0, BINARY_TREE_BASIC_DATA_LEAF_KEY, BINARY_TREE_CODE_HASH_LEAF_KEY, BINARY_TREE_CODE_OFFSET, BINARY_TREE_HEADER_STORAGE_OFFSET, BINARY_TREE_MAIN_STORAGE_OFFSET, BINARY_TREE_NODE_WIDTH, bytesToHex, equalsBytes, getBinaryTreeIndicesForCodeChunk, getBinaryTreeIndicesForStorageSlot, getBinaryTreeKey, getBinaryTreeStem, hexToBytes, intToBytes, } from '@feelyourprotocol/util';
3
+ import debugDefault from 'debug';
4
+ import { ChunkCache } from "./chunkCache.js";
5
+ import { StemCache } from "./stemCache.js";
6
+ const debug = debugDefault('evm:binaryTree:aw');
7
+ /**
8
+ * Tree key constants.
9
+ */
10
+ const WitnessBranchReadCost = BigInt(1900);
11
+ const WitnessChunkReadCost = BigInt(200);
12
+ const WitnessBranchWriteCost = BigInt(3000);
13
+ const WitnessChunkWriteCost = BigInt(500);
14
+ const WitnessChunkFillCost = BigInt(6200);
15
+ export function decodeBinaryAccessState(treeIndex, chunkIndex) {
16
+ const position = BigInt(treeIndex) * BigInt(BINARY_TREE_NODE_WIDTH) + BigInt(chunkIndex);
17
+ switch (position) {
18
+ case BigInt(0):
19
+ return { type: BinaryTreeAccessedStateType.BasicData };
20
+ case BigInt(1):
21
+ return { type: BinaryTreeAccessedStateType.CodeHash };
22
+ default:
23
+ if (position < BINARY_TREE_HEADER_STORAGE_OFFSET) {
24
+ throw Error(`No attribute yet stored >=2 and <${BINARY_TREE_HEADER_STORAGE_OFFSET}`);
25
+ }
26
+ if (position >= BINARY_TREE_HEADER_STORAGE_OFFSET && position < BINARY_TREE_CODE_OFFSET) {
27
+ const slot = position - BigInt(BINARY_TREE_HEADER_STORAGE_OFFSET);
28
+ return { type: BinaryTreeAccessedStateType.Storage, slot };
29
+ }
30
+ else if (position >= BINARY_TREE_CODE_OFFSET &&
31
+ position < BINARY_TREE_MAIN_STORAGE_OFFSET) {
32
+ const codeChunkIdx = Number(position) - BINARY_TREE_CODE_OFFSET;
33
+ return {
34
+ type: BinaryTreeAccessedStateType.Code,
35
+ codeOffset: codeChunkIdx * 31,
36
+ };
37
+ }
38
+ else if (position >= BINARY_TREE_MAIN_STORAGE_OFFSET) {
39
+ const slot = BigInt(position - BINARY_TREE_MAIN_STORAGE_OFFSET);
40
+ return { type: BinaryTreeAccessedStateType.Storage, slot };
41
+ }
42
+ else {
43
+ throw Error(`Invalid treeIndex=${treeIndex} chunkIndex=${chunkIndex} for binary tree access`);
44
+ }
45
+ }
46
+ }
47
+ export class BinaryTreeAccessWitness {
48
+ constructor(opts) {
49
+ this.stemCache = new StemCache();
50
+ this.chunkCache = new ChunkCache();
51
+ this.hashFunction = opts.hashFunction;
52
+ this.stems = opts.stems ?? new Map();
53
+ this.chunks = opts.chunks ?? new Map();
54
+ }
55
+ readAccountBasicData(address) {
56
+ return this.touchAddressOnReadAndComputeGas(address, 0, BINARY_TREE_BASIC_DATA_LEAF_KEY);
57
+ }
58
+ writeAccountBasicData(address) {
59
+ return this.touchAddressOnWriteAndComputeGas(address, 0, BINARY_TREE_BASIC_DATA_LEAF_KEY);
60
+ }
61
+ readAccountCodeHash(address) {
62
+ return this.touchAddressOnReadAndComputeGas(address, 0, BINARY_TREE_CODE_HASH_LEAF_KEY);
63
+ }
64
+ writeAccountCodeHash(address) {
65
+ return this.touchAddressOnWriteAndComputeGas(address, 0, BINARY_TREE_CODE_HASH_LEAF_KEY);
66
+ }
67
+ readAccountHeader(address) {
68
+ let gas = BIGINT_0;
69
+ gas += this.readAccountBasicData(address);
70
+ gas += this.readAccountCodeHash(address);
71
+ return gas;
72
+ }
73
+ writeAccountHeader(address) {
74
+ let gas = BIGINT_0;
75
+ gas += this.writeAccountBasicData(address);
76
+ gas += this.writeAccountCodeHash(address);
77
+ return gas;
78
+ }
79
+ readAccountCodeChunks(contract, startPc, endPc) {
80
+ let gas = BIGINT_0;
81
+ for (let chunkNum = Math.floor(startPc / 31); chunkNum <= Math.floor(endPc / 31); chunkNum++) {
82
+ const { treeIndex, subIndex } = getBinaryTreeIndicesForCodeChunk(chunkNum);
83
+ gas += this.touchAddressOnReadAndComputeGas(contract, treeIndex, subIndex);
84
+ }
85
+ return gas;
86
+ }
87
+ writeAccountCodeChunks(contract, startPc, endPc) {
88
+ let gas = BIGINT_0;
89
+ for (let chunkNum = Math.floor(startPc / 31); chunkNum <= Math.floor(endPc / 31); chunkNum++) {
90
+ const { treeIndex, subIndex } = getBinaryTreeIndicesForCodeChunk(chunkNum);
91
+ gas += this.touchAddressOnWriteAndComputeGas(contract, treeIndex, subIndex);
92
+ }
93
+ return gas;
94
+ }
95
+ readAccountStorage(address, storageSlot) {
96
+ const { treeIndex, subIndex } = getBinaryTreeIndicesForStorageSlot(storageSlot);
97
+ return this.touchAddressOnReadAndComputeGas(address, treeIndex, subIndex);
98
+ }
99
+ writeAccountStorage(address, storageSlot) {
100
+ const { treeIndex, subIndex } = getBinaryTreeIndicesForStorageSlot(storageSlot);
101
+ return this.touchAddressOnWriteAndComputeGas(address, treeIndex, subIndex);
102
+ }
103
+ touchAddressOnWriteAndComputeGas(address, treeIndex, subIndex) {
104
+ return this.touchAddressAndComputeGas(address, treeIndex, subIndex, {
105
+ isWrite: true,
106
+ });
107
+ }
108
+ touchAddressOnReadAndComputeGas(address, treeIndex, subIndex) {
109
+ return this.touchAddressAndComputeGas(address, treeIndex, subIndex, {
110
+ isWrite: false,
111
+ });
112
+ }
113
+ touchAddressAndComputeGas(address, treeIndex, subIndex, { isWrite }) {
114
+ let gas = BIGINT_0;
115
+ const { stemRead, stemWrite, chunkRead, chunkWrite, chunkFill } = this.touchAddress(address, treeIndex, subIndex, { isWrite });
116
+ if (stemRead === true) {
117
+ gas += WitnessBranchReadCost;
118
+ }
119
+ if (stemWrite === true) {
120
+ gas += WitnessBranchWriteCost;
121
+ }
122
+ if (chunkRead === true) {
123
+ gas += WitnessChunkReadCost;
124
+ }
125
+ if (chunkWrite === true) {
126
+ gas += WitnessChunkWriteCost;
127
+ }
128
+ if (chunkFill === true) {
129
+ gas += WitnessChunkFillCost;
130
+ }
131
+ debug(`touchAddressAndComputeGas=${gas} address=${address} treeIndex=${treeIndex} subIndex=${subIndex}`);
132
+ return gas;
133
+ }
134
+ touchAddress(address, treeIndex, subIndex, { isWrite } = {}) {
135
+ let stemRead = false, stemWrite = false, chunkRead = false, chunkWrite = false;
136
+ // currently there are no gas charges for setting the chunk for the first time
137
+ // i.e. no fill cost is charged right now
138
+ const chunkFill = false;
139
+ const accessedStemKey = getBinaryTreeStem(this.hashFunction, address, treeIndex);
140
+ const accessedStemHex = bytesToHex(accessedStemKey);
141
+ let accessedStem = this.stemCache.get(accessedStemHex) ?? this.stems.get(accessedStemHex);
142
+ if (accessedStem === undefined) {
143
+ stemRead = true;
144
+ accessedStem = { address, treeIndex };
145
+ this.stemCache.set(accessedStemHex, accessedStem);
146
+ }
147
+ const accessedChunkKey = getBinaryTreeKey(accessedStemKey, typeof subIndex === 'number' ? intToBytes(subIndex) : subIndex);
148
+ const accessedChunkKeyHex = bytesToHex(accessedChunkKey);
149
+ let accessedChunk = this.chunkCache.get(accessedChunkKeyHex) ?? this.chunks.get(accessedChunkKeyHex);
150
+ if (accessedChunk === undefined) {
151
+ chunkRead = true;
152
+ accessedChunk = {};
153
+ this.chunkCache.set(accessedChunkKeyHex, accessedChunk);
154
+ }
155
+ if (isWrite === true) {
156
+ if (accessedStem.write !== true) {
157
+ stemWrite = true;
158
+ // this would also directly modify in the map
159
+ accessedStem.write = true;
160
+ }
161
+ if (accessedChunk.write !== true) {
162
+ chunkWrite = true;
163
+ // this would also directly modify in the map
164
+ accessedChunk.write = true;
165
+ }
166
+ }
167
+ debug(`${accessedChunkKeyHex}: isWrite=${isWrite} for stemRead=${stemRead} stemWrite=${stemWrite} chunkRead=${chunkRead} chunkWrite=${chunkWrite} chunkFill=${chunkFill}`);
168
+ return { stemRead, stemWrite, chunkRead, chunkWrite, chunkFill };
169
+ }
170
+ merge(accessWitness) {
171
+ for (const [chunkKey, chunkValue] of accessWitness.chunks.entries()) {
172
+ const stemKey = chunkKey.slice(0, chunkKey.length - 2);
173
+ const stem = accessWitness.stems.get(stemKey);
174
+ if (stem === undefined) {
175
+ throw Error(`Internal error: missing stem for the chunkKey=${chunkKey}`);
176
+ }
177
+ const thisStem = this.stems.get(stemKey);
178
+ if (thisStem === undefined) {
179
+ this.stems.set(stemKey, stem);
180
+ }
181
+ else {
182
+ thisStem.write = thisStem.write !== true ? stem.write : true;
183
+ }
184
+ const thisChunk = this.chunks.get(chunkKey);
185
+ if (thisChunk === undefined) {
186
+ this.chunks.set(chunkKey, chunkValue);
187
+ }
188
+ else {
189
+ thisChunk.write = thisChunk.write !== true ? chunkValue.write : true;
190
+ thisChunk.fill = thisChunk.fill !== true ? thisChunk.fill : true;
191
+ }
192
+ }
193
+ }
194
+ commit() {
195
+ const cachedStems = this.stemCache.commit();
196
+ for (const [stemKey, stemValue] of cachedStems) {
197
+ this.stems.set(stemKey, stemValue);
198
+ }
199
+ const cachedChunks = this.chunkCache.commit();
200
+ for (const [chunkKey, chunkValue] of cachedChunks) {
201
+ this.chunks.set(chunkKey, chunkValue);
202
+ }
203
+ }
204
+ revert() {
205
+ this.stemCache.clear();
206
+ this.chunkCache.clear();
207
+ }
208
+ debugWitnessCost() {
209
+ // Calculate the aggregate gas cost for binary access witness per type
210
+ let stemReads = 0, stemWrites = 0, chunkReads = 0, chunkWrites = 0;
211
+ for (const [_, { write }] of this.stems.entries()) {
212
+ stemReads++;
213
+ if (write === true) {
214
+ stemWrites++;
215
+ }
216
+ }
217
+ for (const [_, { write }] of this.chunks.entries()) {
218
+ chunkReads++;
219
+ if (write === true) {
220
+ chunkWrites++;
221
+ }
222
+ }
223
+ debug(`${stemReads} stem reads, totalling ${BigInt(stemReads) * WitnessBranchReadCost} gas units`);
224
+ debug(`${stemWrites} stem writes, totalling ${BigInt(stemWrites) * WitnessBranchWriteCost} gas units`);
225
+ debug(`${chunkReads} chunk reads, totalling ${BigInt(chunkReads) * WitnessChunkReadCost} gas units`);
226
+ debug(`${chunkWrites} chunk writes, totalling ${BigInt(chunkWrites) * WitnessChunkWriteCost} gas units`);
227
+ }
228
+ *rawAccesses() {
229
+ for (const chunkKey of this.chunks.keys()) {
230
+ // drop the last byte
231
+ const stemKey = chunkKey.slice(0, chunkKey.length - 2);
232
+ const stem = this.stems.get(stemKey);
233
+ if (stem === undefined) {
234
+ throw Error(`Internal error: missing stem for the chunkKey=${chunkKey}`);
235
+ }
236
+ const { address, treeIndex } = stem;
237
+ const chunkIndex = Number(`0x${chunkKey.slice(chunkKey.length - 2)}`);
238
+ const accessedState = { address, treeIndex, chunkIndex, chunkKey };
239
+ yield accessedState;
240
+ }
241
+ }
242
+ *accesses() {
243
+ for (const rawAccess of this.rawAccesses()) {
244
+ const { address, treeIndex, chunkIndex, chunkKey } = rawAccess;
245
+ const accessedState = decodeBinaryAccessState(treeIndex, chunkIndex);
246
+ yield { ...accessedState, address, chunkKey };
247
+ }
248
+ }
249
+ }
250
+ /**
251
+ * Generate a {@link BinaryTreeExecutionWitness} from a state manager and an access witness.
252
+ * @param stateManager - The state manager containing the state to generate the witness for.
253
+ * @param accessWitness - The access witness containing the accessed states.
254
+ * @param parentStateRoot - The parent state root (i.e. prestate root) to generate the witness for.
255
+ * @returns The generated binary tree execution witness
256
+ */
257
+ export const generateBinaryExecutionWitness = async (stateManager, accessWitness, parentStateRoot) => {
258
+ const tree = stateManager['_tree'];
259
+ await tree['_lock'].acquire();
260
+ const postStateRoot = await stateManager.getStateRoot();
261
+ const ew = {
262
+ stateDiff: [],
263
+ parentStateRoot: bytesToHex(parentStateRoot),
264
+ proof: undefined, // Binary proofs are not implemented
265
+ };
266
+ // Generate a map of all stems with their accessed suffixes
267
+ const accessedSuffixes = new Map();
268
+ for (const chunkKey of accessWitness['chunks'].keys()) {
269
+ const stem = chunkKey.slice(0, 64);
270
+ if (accessedSuffixes.has(stem)) {
271
+ const suffixes = accessedSuffixes.get(stem);
272
+ suffixes.push(parseInt(chunkKey.slice(64), 16));
273
+ accessedSuffixes.set(stem, suffixes);
274
+ }
275
+ else {
276
+ accessedSuffixes.set(stem, [parseInt(chunkKey.slice(64), 16)]);
277
+ }
278
+ }
279
+ // Get values from the tree for each stem and suffix
280
+ for (const stem of accessedSuffixes.keys()) {
281
+ tree.root(parentStateRoot);
282
+ const suffixes = accessedSuffixes.get(stem);
283
+ if (suffixes === undefined || suffixes.length === 0)
284
+ continue;
285
+ const currentValues = await tree.get(hexToBytes(stem), suffixes);
286
+ tree.root(postStateRoot);
287
+ const newValues = await tree.get(hexToBytes(stem), suffixes);
288
+ const stemStateDiff = [];
289
+ for (let x = 0; x < suffixes.length; x++) {
290
+ // skip if both are the same
291
+ const currentValue = currentValues[x];
292
+ const newValue = newValues[x];
293
+ if (currentValue instanceof Uint8Array &&
294
+ newValue instanceof Uint8Array &&
295
+ equalsBytes(currentValue, newValue))
296
+ continue;
297
+ stemStateDiff.push({
298
+ suffix: suffixes[x],
299
+ currentValue: currentValue ? bytesToHex(currentValue) : null,
300
+ newValue: newValue ? bytesToHex(newValue) : null,
301
+ });
302
+ }
303
+ ew.stateDiff.push({ stem, suffixDiffs: stemStateDiff });
304
+ }
305
+ tree['_lock'].release();
306
+ return ew;
307
+ };
308
+ //# sourceMappingURL=binaryTreeAccessWitness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binaryTreeAccessWitness.js","sourceRoot":"","sources":["../../src/binaryTreeAccessWitness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { PrefixedHexString } from '@feelyourprotocol/util';
2
+ import type { BinaryChunkAccessEvent } from './binaryTreeAccessWitness.ts';
3
+ export declare class ChunkCache {
4
+ cache: Map<PrefixedHexString, BinaryChunkAccessEvent>;
5
+ constructor();
6
+ set(stemKey: PrefixedHexString, accessedStem: BinaryChunkAccessEvent): void;
7
+ get(stemHex: PrefixedHexString): BinaryChunkAccessEvent | undefined;
8
+ del(stemHex: PrefixedHexString): void;
9
+ commit(): [PrefixedHexString, BinaryChunkAccessEvent][];
10
+ clear(): void;
11
+ size(): number;
12
+ }
13
+ //# sourceMappingURL=chunkCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunkCache.d.ts","sourceRoot":"","sources":["../../src/chunkCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAE1E,qBAAa,UAAU;IACrB,KAAK,EAAE,GAAG,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAA;;IAMrD,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,sBAAsB;IAIpE,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,sBAAsB,GAAG,SAAS;IAInE,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIrC,MAAM,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,EAAE;IAMvD,KAAK,IAAI,IAAI;IAIb,IAAI;CAGL"}
@@ -0,0 +1,26 @@
1
+ export class ChunkCache {
2
+ constructor() {
3
+ this.cache = new Map();
4
+ }
5
+ set(stemKey, accessedStem) {
6
+ this.cache.set(stemKey, accessedStem);
7
+ }
8
+ get(stemHex) {
9
+ return this.cache.get(stemHex);
10
+ }
11
+ del(stemHex) {
12
+ this.cache.delete(stemHex);
13
+ }
14
+ commit() {
15
+ const items = Array.from(this.cache.entries());
16
+ this.clear();
17
+ return items;
18
+ }
19
+ clear() {
20
+ this.cache.clear();
21
+ }
22
+ size() {
23
+ return this.cache.size;
24
+ }
25
+ }
26
+ //# sourceMappingURL=chunkCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunkCache.js","sourceRoot":"","sources":["../../src/chunkCache.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,UAAU;IAGrB;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAA6C,CAAA;IACnE,CAAC;IAED,GAAG,CAAC,OAA0B,EAAE,YAAoC;QAClE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACvC,CAAC;IAED,GAAG,CAAC,OAA0B;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAED,GAAG,CAAC,OAA0B;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAED,MAAM;QACJ,MAAM,KAAK,GAAkD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7F,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import { EVM } from './index.ts';
2
+ import type { EVMOpts } from './index.ts';
3
+ /**
4
+ * Use this async static constructor for the initialization
5
+ * of an EVM object
6
+ *
7
+ * @param createOpts The EVM options
8
+ * @returns A new EVM
9
+ */
10
+ export declare function createEVM(createOpts?: EVMOpts): Promise<EVM>;
11
+ //# sourceMappingURL=constructors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructors.d.ts","sourceRoot":"","sources":["../../src/constructors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAIhC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,gBAkBnD"}
@@ -0,0 +1,27 @@
1
+ import { Common, Mainnet } from '@feelyourprotocol/common';
2
+ import { SimpleStateManager } from '@feelyourprotocol/statemanager';
3
+ import { EVM } from "./index.js";
4
+ import { NobleBN254 } from "./precompiles/index.js";
5
+ import { EVMMockBlockchain } from "./types.js";
6
+ /**
7
+ * Use this async static constructor for the initialization
8
+ * of an EVM object
9
+ *
10
+ * @param createOpts The EVM options
11
+ * @returns A new EVM
12
+ */
13
+ export async function createEVM(createOpts) {
14
+ const opts = createOpts ?? {};
15
+ opts.bn254 = new NobleBN254();
16
+ if (opts.common === undefined) {
17
+ opts.common = new Common({ chain: Mainnet });
18
+ }
19
+ if (opts.blockchain === undefined) {
20
+ opts.blockchain = new EVMMockBlockchain();
21
+ }
22
+ if (opts.stateManager === undefined) {
23
+ opts.stateManager = new SimpleStateManager();
24
+ }
25
+ return new EVM(opts);
26
+ }
27
+ //# sourceMappingURL=constructors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../src/constructors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAI9C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAoB;IAClD,MAAM,IAAI,GAAG,UAAU,IAAK,EAAc,CAAA;IAE1C,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,EAAE,CAAA;IAE7B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAA;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAA;IAC9C,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;AACtB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { type Address } from '@feelyourprotocol/util';
2
+ import type { Log } from './types.ts';
3
+ /** EIP-7708 system address (canonical SYSTEM_ADDRESS_BYTES from util) */
4
+ export declare const EIP7708_SYSTEM_ADDRESS: Uint8Array<ArrayBufferLike>;
5
+ /**
6
+ * EIP-7708: keccak256('Transfer(address,address,uint256)')
7
+ * This matches the ERC-20 Transfer event signature
8
+ */
9
+ export declare const EIP7708_TRANSFER_TOPIC: Uint8Array<ArrayBufferLike>;
10
+ /**
11
+ * EIP-7708: keccak256('Selfdestruct(address,uint256)')
12
+ * Emitted when a contract selfdestructs and burns remaining balance
13
+ */
14
+ export declare const EIP7708_SELFDESTRUCT_TOPIC: Uint8Array<ArrayBufferLike>;
15
+ /**
16
+ * Creates an EIP-7708 ETH transfer log (used for CALL/CREATE value transfers).
17
+ * EIP-7708 logs are emitted from the system address with Transfer(address,address,uint256) topic.
18
+ */
19
+ export declare function createEIP7708TransferLog(from: Address, to: Address, value: bigint): Log;
20
+ /**
21
+ * Creates an EIP-7708 SELFDESTRUCT burn log for residual balance finalization.
22
+ */
23
+ export declare function createEIP7708SelfdestructLog(contract: Address, value: bigint): Log;
24
+ //# sourceMappingURL=eip7708.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eip7708.d.ts","sourceRoot":"","sources":["../../src/eip7708.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAKb,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAErC,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,6BAAuB,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,sBAAsB,6BAElC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,6BAEtC,CAAA;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAKvF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAIlF"}
@@ -0,0 +1,32 @@
1
+ import { SYSTEM_ADDRESS_BYTES, bigIntToBytes, hexToBytes, setLengthLeft, } from '@feelyourprotocol/util';
2
+ /** EIP-7708 system address (canonical SYSTEM_ADDRESS_BYTES from util) */
3
+ export const EIP7708_SYSTEM_ADDRESS = SYSTEM_ADDRESS_BYTES;
4
+ /**
5
+ * EIP-7708: keccak256('Transfer(address,address,uint256)')
6
+ * This matches the ERC-20 Transfer event signature
7
+ */
8
+ export const EIP7708_TRANSFER_TOPIC = hexToBytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef');
9
+ /**
10
+ * EIP-7708: keccak256('Selfdestruct(address,uint256)')
11
+ * Emitted when a contract selfdestructs and burns remaining balance
12
+ */
13
+ export const EIP7708_SELFDESTRUCT_TOPIC = hexToBytes('0x4bfaba3443c1a1836cd362418edc679fc96cae8449cbefccb6457cdf2c943083');
14
+ /**
15
+ * Creates an EIP-7708 ETH transfer log (used for CALL/CREATE value transfers).
16
+ * EIP-7708 logs are emitted from the system address with Transfer(address,address,uint256) topic.
17
+ */
18
+ export function createEIP7708TransferLog(from, to, value) {
19
+ const fromTopic = setLengthLeft(from.bytes, 32);
20
+ const toTopic = setLengthLeft(to.bytes, 32);
21
+ const data = setLengthLeft(bigIntToBytes(value), 32);
22
+ return [EIP7708_SYSTEM_ADDRESS, [EIP7708_TRANSFER_TOPIC, fromTopic, toTopic], data];
23
+ }
24
+ /**
25
+ * Creates an EIP-7708 SELFDESTRUCT burn log for residual balance finalization.
26
+ */
27
+ export function createEIP7708SelfdestructLog(contract, value) {
28
+ const contractTopic = setLengthLeft(contract.bytes, 32);
29
+ const data = setLengthLeft(bigIntToBytes(value), 32);
30
+ return [EIP7708_SYSTEM_ADDRESS, [EIP7708_SELFDESTRUCT_TOPIC, contractTopic], data];
31
+ }
32
+ //# sourceMappingURL=eip7708.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eip7708.js","sourceRoot":"","sources":["../../src/eip7708.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,aAAa,GACd,MAAM,kBAAkB,CAAA;AAGzB,yEAAyE;AACzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAA;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAC9C,oEAAoE,CACrE,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAClD,oEAAoE,CACrE,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAa,EAAE,EAAW,EAAE,KAAa;IAChF,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC3C,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;IACpD,OAAO,CAAC,sBAAsB,EAAE,CAAC,sBAAsB,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAA;AACrF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAAiB,EAAE,KAAa;IAC3E,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACvD,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;IACpD,OAAO,CAAC,sBAAsB,EAAE,CAAC,0BAA0B,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,CAAA;AACpF,CAAC"}
@@ -0,0 +1,22 @@
1
+ export declare const FORMAT = 239;
2
+ export declare const MAGIC = 0;
3
+ export declare const VERSION = 1;
4
+ export declare const MIN_HEADER_SIZE = 15;
5
+ export declare const MAX_HEADER_SIZE = 49152;
6
+ export declare const KIND_TYPE = 1;
7
+ export declare const KIND_CODE = 2;
8
+ export declare const KIND_CONTAINER = 3;
9
+ export declare const KIND_DATA = 4;
10
+ export declare const TERMINATOR = 0;
11
+ export declare const TYPE_MIN = 4;
12
+ export declare const TYPE_MAX = 4096;
13
+ export declare const TYPE_DIVISOR = 4;
14
+ export declare const CODE_MIN = 1;
15
+ export declare const CODE_SIZE_MIN = 1;
16
+ export declare const CONTAINER_MIN = 1;
17
+ export declare const CONTAINER_MAX = 256;
18
+ export declare const CONTAINER_SIZE_MIN = 1;
19
+ export declare const INPUTS_MAX = 127;
20
+ export declare const OUTPUTS_MAX = 128;
21
+ export declare const MAX_STACK_HEIGHT = 1023;
22
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/eof/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,MAAO,CAAA;AAC1B,eAAO,MAAM,KAAK,IAAO,CAAA;AACzB,eAAO,MAAM,OAAO,IAAO,CAAA;AAG3B,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,eAAO,MAAM,eAAe,QAAQ,CAAA;AAEpC,eAAO,MAAM,SAAS,IAAO,CAAA;AAC7B,eAAO,MAAM,SAAS,IAAO,CAAA;AAC7B,eAAO,MAAM,cAAc,IAAO,CAAA;AAClC,eAAO,MAAM,SAAS,IAAO,CAAA;AAC7B,eAAO,MAAM,UAAU,IAAO,CAAA;AAE9B,eAAO,MAAM,QAAQ,IAAS,CAAA;AAC9B,eAAO,MAAM,QAAQ,OAAS,CAAA;AAC9B,eAAO,MAAM,YAAY,IAAI,CAAA;AAE7B,eAAO,MAAM,QAAQ,IAAS,CAAA;AAE9B,eAAO,MAAM,aAAa,IAAI,CAAA;AAE9B,eAAO,MAAM,aAAa,IAAS,CAAA;AACnC,eAAO,MAAM,aAAa,MAAS,CAAA;AAEnC,eAAO,MAAM,kBAAkB,IAAI,CAAA;AAGnC,eAAO,MAAM,UAAU,MAAO,CAAA;AAC9B,eAAO,MAAM,WAAW,MAAO,CAAA;AAG/B,eAAO,MAAM,gBAAgB,OAAS,CAAA"}
@@ -0,0 +1,28 @@
1
+ // Constants, which are taken from https://eips.ethereum.org/EIPS/eip-3540
2
+ // The "starting bytes" of an EOF contract
3
+ export const FORMAT = 0xef;
4
+ export const MAGIC = 0x00;
5
+ export const VERSION = 0x01;
6
+ // The min/max sizes of valid headers
7
+ export const MIN_HEADER_SIZE = 15; // Min size used to invalidate an invalid container quickly
8
+ export const MAX_HEADER_SIZE = 49152; // Max initcode size, EIP 3860
9
+ export const KIND_TYPE = 0x01; // Type byte of types section
10
+ export const KIND_CODE = 0x02; // Type byte of code section
11
+ export const KIND_CONTAINER = 0x03; // Type byte of container section (the only optional section in the header)
12
+ export const KIND_DATA = 0x04; // Type byte of data section
13
+ export const TERMINATOR = 0x00; // Terminator byte of header
14
+ export const TYPE_MIN = 0x0004; // Minimum size of types section
15
+ export const TYPE_MAX = 0x1000; // Maximum size of types section
16
+ export const TYPE_DIVISOR = 4; // Divisor of types: the type section size should be a multiple of this
17
+ export const CODE_MIN = 0x0001; // Minimum size of code section
18
+ export const CODE_SIZE_MIN = 1; // Minimum size of a code section in the body (the actual code)
19
+ export const CONTAINER_MIN = 0x0001; // Minimum size of container section
20
+ export const CONTAINER_MAX = 0x0100; // Maximum size of container section
21
+ export const CONTAINER_SIZE_MIN = 1; // Minimum size of a container in the body
22
+ // Constants regarding the type section in the body of the container
23
+ export const INPUTS_MAX = 0x7f; // Max inputs to a code section in the body
24
+ export const OUTPUTS_MAX = 0x80; // Max outputs of a code section in the body
25
+ // Note: 0x80 special amount, marks the code section as "terminating"
26
+ // A terminating section will exit the current call frame, such as RETURN / STOP opcodes. It will not RETF to another code section
27
+ export const MAX_STACK_HEIGHT = 0x03ff; // Maximum stack height of a code section (enforces that the stack of this section cannot overflow)
28
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/eof/constants.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,0CAA0C;AAC1C,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAA;AAC1B,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,CAAA;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAA;AAE3B,qCAAqC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAA,CAAC,2DAA2D;AAC7F,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAA,CAAC,8BAA8B;AAEnE,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAA,CAAC,6BAA6B;AAC3D,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAA,CAAC,4BAA4B;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAA,CAAC,2EAA2E;AAC9G,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAA,CAAC,6BAA6B;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAA,CAAC,4BAA4B;AAE3D,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAA,CAAC,gCAAgC;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAA,CAAC,gCAAgC;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAA,CAAC,uEAAuE;AAErG,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAA,CAAC,+BAA+B;AAE9D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAA,CAAC,+DAA+D;AAE9F,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAA,CAAC,oCAAoC;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAA,CAAC,oCAAoC;AAExE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAA,CAAC,0CAA0C;AAE9E,oEAAoE;AACpE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAA,CAAC,2CAA2C;AAC1E,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAA,CAAC,4CAA4C;AAC5E,qEAAqE;AACrE,kIAAkI;AAClI,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAA,CAAC,mGAAmG"}
@@ -0,0 +1,87 @@
1
+ import { ContainerSectionType } from './verify.ts';
2
+ import type { EVM } from '../evm.ts';
3
+ export type EOFContainerMode = (typeof EOFContainerMode)[keyof typeof EOFContainerMode];
4
+ export declare const EOFContainerMode: {
5
+ readonly Default: "default";
6
+ readonly Initmode: "initMode";
7
+ readonly TxInitmode: "txInitMode";
8
+ };
9
+ /**
10
+ * The EOFHeader, describing the header of the EOF container
11
+ */
12
+ declare class EOFHeader {
13
+ typeSize: number;
14
+ codeSizes: number[];
15
+ containerSizes: number[];
16
+ dataSize: number;
17
+ dataSizePtr: number;
18
+ buffer: Uint8Array;
19
+ private codeStartPos;
20
+ /**
21
+ * Create an EOF header. Performs various validation checks inside the constructor
22
+ * @param input either a raw header or a complete container
23
+ */
24
+ constructor(input: Uint8Array);
25
+ sections(): (number | number[])[];
26
+ sectionSizes(): number[];
27
+ getCodePosition(section: number): number;
28
+ getSectionFromProgramCounter(programCounter: number): number;
29
+ }
30
+ export interface TypeSection {
31
+ inputs: number;
32
+ outputs: number;
33
+ maxStackHeight: number;
34
+ }
35
+ /**
36
+ * The EOF body holds the contents of the EOF container, such as the code sections (bytecode),
37
+ * the subcontainers (EOF containers to be deployed via EOFCREATE) and the data section
38
+ */
39
+ declare class EOFBody {
40
+ typeSections: TypeSection[];
41
+ codeSections: Uint8Array[];
42
+ containerSections: Uint8Array[];
43
+ entireCode: Uint8Array;
44
+ dataSection: Uint8Array;
45
+ buffer: Uint8Array;
46
+ txCallData?: Uint8Array;
47
+ constructor(buf: Uint8Array, // Buffer of the body. This should be the entire body. It is not valid to pass an entire EOF container in here
48
+ header: EOFHeader, // EOFHeader corresponding to this body
49
+ eofMode?: EOFContainerMode, // Container mode of EOF
50
+ dataSectionAllowedSmaller?: boolean);
51
+ sections(): (Uint8Array<ArrayBufferLike> | Uint8Array<ArrayBufferLike>[] | TypeSection[])[];
52
+ size(): {
53
+ typeSize: number;
54
+ codeSize: number;
55
+ dataSize: number;
56
+ };
57
+ sectionSizes(): (number | number[])[];
58
+ }
59
+ /**
60
+ * Main constructor for the EOFContainer
61
+ */
62
+ export declare class EOFContainer {
63
+ header: EOFHeader;
64
+ body: EOFBody;
65
+ buffer: Uint8Array;
66
+ eofMode: EOFContainerMode;
67
+ /**
68
+ *
69
+ * @param buf Entire container buffer
70
+ * @param eofMode Container mode to validate the container on
71
+ * @param dataSectionAllowedSmaller `true` if the data section is allowed to be smaller than the data section size in the header
72
+ */
73
+ constructor(buf: Uint8Array, eofMode?: EOFContainerMode, dataSectionAllowedSmaller?: boolean);
74
+ }
75
+ /**
76
+ * This method validates the EOF. It also performs deeper validation of the body, such as stack/opcode validation
77
+ * This is ONLY necessary when trying to deploy contracts from a transaction: these can submit containers which are invalid
78
+ * Since all deployed EOF containers are valid by definition, `validateEOF` does not need to be called each time an EOF contract is called
79
+ * @param input Full container buffer
80
+ * @param evm EVM, to read opcodes from
81
+ * @param containerMode Container mode to validate on
82
+ * @param eofMode EOF mode to run in
83
+ * @returns The decoded EOF container
84
+ */
85
+ export declare function validateEOF(input: Uint8Array, evm: EVM, containerMode?: ContainerSectionType, eofMode?: EOFContainerMode): EOFContainer;
86
+ export {};
87
+ //# sourceMappingURL=container.d.ts.map