@0xsequence/catapult 1.1.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 (393) hide show
  1. package/.eslintrc.json +29 -0
  2. package/.github/workflows/ci.yml +181 -0
  3. package/CONCEPT.md +24 -0
  4. package/README.md +772 -0
  5. package/contracts/checked-call.huff +65 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +16 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/common.d.ts +11 -0
  11. package/dist/commands/common.d.ts.map +1 -0
  12. package/dist/commands/common.js +73 -0
  13. package/dist/commands/common.js.map +1 -0
  14. package/dist/commands/dry.d.ts +3 -0
  15. package/dist/commands/dry.d.ts.map +1 -0
  16. package/dist/commands/dry.js +171 -0
  17. package/dist/commands/dry.js.map +1 -0
  18. package/dist/commands/etherscan.d.ts +3 -0
  19. package/dist/commands/etherscan.d.ts.map +1 -0
  20. package/dist/commands/etherscan.js +323 -0
  21. package/dist/commands/etherscan.js.map +1 -0
  22. package/dist/commands/index.d.ts +6 -0
  23. package/dist/commands/index.d.ts.map +1 -0
  24. package/dist/commands/index.js +22 -0
  25. package/dist/commands/index.js.map +1 -0
  26. package/dist/commands/list.d.ts +3 -0
  27. package/dist/commands/list.d.ts.map +1 -0
  28. package/dist/commands/list.js +259 -0
  29. package/dist/commands/list.js.map +1 -0
  30. package/dist/commands/run.d.ts +3 -0
  31. package/dist/commands/run.d.ts.map +1 -0
  32. package/dist/commands/run.js +96 -0
  33. package/dist/commands/run.js.map +1 -0
  34. package/dist/commands/utils.d.ts +3 -0
  35. package/dist/commands/utils.d.ts.map +1 -0
  36. package/dist/commands/utils.js +46 -0
  37. package/dist/commands/utils.js.map +1 -0
  38. package/dist/index.d.ts +4 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +58 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/lib/__tests__/deployer-events.spec.d.ts +2 -0
  43. package/dist/lib/__tests__/deployer-events.spec.d.ts.map +1 -0
  44. package/dist/lib/__tests__/deployer-events.spec.js +260 -0
  45. package/dist/lib/__tests__/deployer-events.spec.js.map +1 -0
  46. package/dist/lib/__tests__/deployer.spec.d.ts +2 -0
  47. package/dist/lib/__tests__/deployer.spec.d.ts.map +1 -0
  48. package/dist/lib/__tests__/deployer.spec.js +884 -0
  49. package/dist/lib/__tests__/deployer.spec.js.map +1 -0
  50. package/dist/lib/__tests__/network-utils.spec.d.ts +2 -0
  51. package/dist/lib/__tests__/network-utils.spec.d.ts.map +1 -0
  52. package/dist/lib/__tests__/network-utils.spec.js +140 -0
  53. package/dist/lib/__tests__/network-utils.spec.js.map +1 -0
  54. package/dist/lib/contracts/__tests__/repository.spec.d.ts +2 -0
  55. package/dist/lib/contracts/__tests__/repository.spec.d.ts.map +1 -0
  56. package/dist/lib/contracts/__tests__/repository.spec.js +321 -0
  57. package/dist/lib/contracts/__tests__/repository.spec.js.map +1 -0
  58. package/dist/lib/contracts/repository.d.ts +27 -0
  59. package/dist/lib/contracts/repository.d.ts.map +1 -0
  60. package/dist/lib/contracts/repository.js +241 -0
  61. package/dist/lib/contracts/repository.js.map +1 -0
  62. package/dist/lib/core/__tests__/engine.spec.d.ts +2 -0
  63. package/dist/lib/core/__tests__/engine.spec.d.ts.map +1 -0
  64. package/dist/lib/core/__tests__/engine.spec.js +1212 -0
  65. package/dist/lib/core/__tests__/engine.spec.js.map +1 -0
  66. package/dist/lib/core/__tests__/graph.spec.d.ts +2 -0
  67. package/dist/lib/core/__tests__/graph.spec.d.ts.map +1 -0
  68. package/dist/lib/core/__tests__/graph.spec.js +116 -0
  69. package/dist/lib/core/__tests__/graph.spec.js.map +1 -0
  70. package/dist/lib/core/__tests__/json-integration.spec.d.ts +2 -0
  71. package/dist/lib/core/__tests__/json-integration.spec.d.ts.map +1 -0
  72. package/dist/lib/core/__tests__/json-integration.spec.js +300 -0
  73. package/dist/lib/core/__tests__/json-integration.spec.js.map +1 -0
  74. package/dist/lib/core/__tests__/loader.spec.d.ts +2 -0
  75. package/dist/lib/core/__tests__/loader.spec.d.ts.map +1 -0
  76. package/dist/lib/core/__tests__/loader.spec.js +288 -0
  77. package/dist/lib/core/__tests__/loader.spec.js.map +1 -0
  78. package/dist/lib/core/__tests__/multi-platform-verification.spec.d.ts +2 -0
  79. package/dist/lib/core/__tests__/multi-platform-verification.spec.d.ts.map +1 -0
  80. package/dist/lib/core/__tests__/multi-platform-verification.spec.js +342 -0
  81. package/dist/lib/core/__tests__/multi-platform-verification.spec.js.map +1 -0
  82. package/dist/lib/core/__tests__/resolver.spec.d.ts +2 -0
  83. package/dist/lib/core/__tests__/resolver.spec.d.ts.map +1 -0
  84. package/dist/lib/core/__tests__/resolver.spec.js +1367 -0
  85. package/dist/lib/core/__tests__/resolver.spec.js.map +1 -0
  86. package/dist/lib/core/__tests__/static-action.spec.d.ts +2 -0
  87. package/dist/lib/core/__tests__/static-action.spec.d.ts.map +1 -0
  88. package/dist/lib/core/__tests__/static-action.spec.js +136 -0
  89. package/dist/lib/core/__tests__/static-action.spec.js.map +1 -0
  90. package/dist/lib/core/context.d.ts +29 -0
  91. package/dist/lib/core/context.d.ts.map +1 -0
  92. package/dist/lib/core/context.js +88 -0
  93. package/dist/lib/core/context.js.map +1 -0
  94. package/dist/lib/core/engine.d.ts +25 -0
  95. package/dist/lib/core/engine.d.ts.map +1 -0
  96. package/dist/lib/core/engine.js +1191 -0
  97. package/dist/lib/core/engine.js.map +1 -0
  98. package/dist/lib/core/graph.d.ts +18 -0
  99. package/dist/lib/core/graph.d.ts.map +1 -0
  100. package/dist/lib/core/graph.js +158 -0
  101. package/dist/lib/core/graph.js.map +1 -0
  102. package/dist/lib/core/loader.d.ts +25 -0
  103. package/dist/lib/core/loader.d.ts.map +1 -0
  104. package/dist/lib/core/loader.js +248 -0
  105. package/dist/lib/core/loader.js.map +1 -0
  106. package/dist/lib/core/resolver.d.ts +20 -0
  107. package/dist/lib/core/resolver.d.ts.map +1 -0
  108. package/dist/lib/core/resolver.js +307 -0
  109. package/dist/lib/core/resolver.js.map +1 -0
  110. package/dist/lib/deployer.d.ts +39 -0
  111. package/dist/lib/deployer.d.ts.map +1 -0
  112. package/dist/lib/deployer.js +533 -0
  113. package/dist/lib/deployer.js.map +1 -0
  114. package/dist/lib/events/__tests__/event-system.spec.d.ts +2 -0
  115. package/dist/lib/events/__tests__/event-system.spec.d.ts.map +1 -0
  116. package/dist/lib/events/__tests__/event-system.spec.js +256 -0
  117. package/dist/lib/events/__tests__/event-system.spec.js.map +1 -0
  118. package/dist/lib/events/cli-adapter.d.ts +13 -0
  119. package/dist/lib/events/cli-adapter.d.ts.map +1 -0
  120. package/dist/lib/events/cli-adapter.js +244 -0
  121. package/dist/lib/events/cli-adapter.js.map +1 -0
  122. package/dist/lib/events/emitter.d.ts +11 -0
  123. package/dist/lib/events/emitter.d.ts.map +1 -0
  124. package/dist/lib/events/emitter.js +29 -0
  125. package/dist/lib/events/emitter.js.map +1 -0
  126. package/dist/lib/events/index.d.ts +4 -0
  127. package/dist/lib/events/index.d.ts.map +1 -0
  128. package/dist/lib/events/index.js +20 -0
  129. package/dist/lib/events/index.js.map +1 -0
  130. package/dist/lib/events/types.d.ts +368 -0
  131. package/dist/lib/events/types.d.ts.map +1 -0
  132. package/dist/lib/events/types.js +3 -0
  133. package/dist/lib/events/types.js.map +1 -0
  134. package/dist/lib/index.d.ts +5 -0
  135. package/dist/lib/index.d.ts.map +1 -0
  136. package/dist/lib/index.js +44 -0
  137. package/dist/lib/index.js.map +1 -0
  138. package/dist/lib/network-loader.d.ts +3 -0
  139. package/dist/lib/network-loader.d.ts.map +1 -0
  140. package/dist/lib/network-loader.js +80 -0
  141. package/dist/lib/network-loader.js.map +1 -0
  142. package/dist/lib/network-match.d.ts +3 -0
  143. package/dist/lib/network-match.d.ts.map +1 -0
  144. package/dist/lib/network-match.js +62 -0
  145. package/dist/lib/network-match.js.map +1 -0
  146. package/dist/lib/network-utils.d.ts +4 -0
  147. package/dist/lib/network-utils.d.ts.map +1 -0
  148. package/dist/lib/network-utils.js +39 -0
  149. package/dist/lib/network-utils.js.map +1 -0
  150. package/dist/lib/parsers/__tests__/buildinfo.spec.d.ts +2 -0
  151. package/dist/lib/parsers/__tests__/buildinfo.spec.d.ts.map +1 -0
  152. package/dist/lib/parsers/__tests__/buildinfo.spec.js +132 -0
  153. package/dist/lib/parsers/__tests__/buildinfo.spec.js.map +1 -0
  154. package/dist/lib/parsers/__tests__/job.spec.d.ts +2 -0
  155. package/dist/lib/parsers/__tests__/job.spec.d.ts.map +1 -0
  156. package/dist/lib/parsers/__tests__/job.spec.js +318 -0
  157. package/dist/lib/parsers/__tests__/job.spec.js.map +1 -0
  158. package/dist/lib/parsers/__tests__/template.spec.d.ts +2 -0
  159. package/dist/lib/parsers/__tests__/template.spec.d.ts.map +1 -0
  160. package/dist/lib/parsers/__tests__/template.spec.js +126 -0
  161. package/dist/lib/parsers/__tests__/template.spec.js.map +1 -0
  162. package/dist/lib/parsers/artifact/__tests__/artifact.spec.d.ts +2 -0
  163. package/dist/lib/parsers/artifact/__tests__/artifact.spec.d.ts.map +1 -0
  164. package/dist/lib/parsers/artifact/__tests__/artifact.spec.js +128 -0
  165. package/dist/lib/parsers/artifact/__tests__/artifact.spec.js.map +1 -0
  166. package/dist/lib/parsers/artifact/foundry-1.2.d.ts +3 -0
  167. package/dist/lib/parsers/artifact/foundry-1.2.d.ts.map +1 -0
  168. package/dist/lib/parsers/artifact/foundry-1.2.js +82 -0
  169. package/dist/lib/parsers/artifact/foundry-1.2.js.map +1 -0
  170. package/dist/lib/parsers/artifact/index.d.ts +3 -0
  171. package/dist/lib/parsers/artifact/index.d.ts.map +1 -0
  172. package/dist/lib/parsers/artifact/index.js +17 -0
  173. package/dist/lib/parsers/artifact/index.js.map +1 -0
  174. package/dist/lib/parsers/artifact/types.d.ts +3 -0
  175. package/dist/lib/parsers/artifact/types.d.ts.map +1 -0
  176. package/dist/lib/parsers/artifact/types.js +3 -0
  177. package/dist/lib/parsers/artifact/types.js.map +1 -0
  178. package/dist/lib/parsers/buildinfo.d.ts +5 -0
  179. package/dist/lib/parsers/buildinfo.d.ts.map +1 -0
  180. package/dist/lib/parsers/buildinfo.js +85 -0
  181. package/dist/lib/parsers/buildinfo.js.map +1 -0
  182. package/dist/lib/parsers/constants.d.ts +4 -0
  183. package/dist/lib/parsers/constants.d.ts.map +1 -0
  184. package/dist/lib/parsers/constants.js +45 -0
  185. package/dist/lib/parsers/constants.js.map +1 -0
  186. package/dist/lib/parsers/index.d.ts +5 -0
  187. package/dist/lib/parsers/index.d.ts.map +1 -0
  188. package/dist/lib/parsers/index.js +21 -0
  189. package/dist/lib/parsers/index.js.map +1 -0
  190. package/dist/lib/parsers/job.d.ts +3 -0
  191. package/dist/lib/parsers/job.d.ts.map +1 -0
  192. package/dist/lib/parsers/job.js +74 -0
  193. package/dist/lib/parsers/job.js.map +1 -0
  194. package/dist/lib/parsers/template.d.ts +3 -0
  195. package/dist/lib/parsers/template.d.ts.map +1 -0
  196. package/dist/lib/parsers/template.js +91 -0
  197. package/dist/lib/parsers/template.js.map +1 -0
  198. package/dist/lib/std/templates/assured-deployment.yaml +45 -0
  199. package/dist/lib/std/templates/erc-2470.yaml +67 -0
  200. package/dist/lib/std/templates/min-balance.yaml +32 -0
  201. package/dist/lib/std/templates/nano-universal-deployer.yaml +59 -0
  202. package/dist/lib/std/templates/raw-erc-2470.yaml +59 -0
  203. package/dist/lib/std/templates/raw-nano-universal-deployer.yaml +51 -0
  204. package/dist/lib/std/templates/raw-sequence-universal-deployer-2.yaml +48 -0
  205. package/dist/lib/std/templates/sequence-universal-deployer-2.yaml +57 -0
  206. package/dist/lib/types/__tests__/json-request-action.spec.d.ts +2 -0
  207. package/dist/lib/types/__tests__/json-request-action.spec.d.ts.map +1 -0
  208. package/dist/lib/types/__tests__/json-request-action.spec.js +219 -0
  209. package/dist/lib/types/__tests__/json-request-action.spec.js.map +1 -0
  210. package/dist/lib/types/__tests__/read-json-value.spec.d.ts +2 -0
  211. package/dist/lib/types/__tests__/read-json-value.spec.d.ts.map +1 -0
  212. package/dist/lib/types/__tests__/read-json-value.spec.js +233 -0
  213. package/dist/lib/types/__tests__/read-json-value.spec.js.map +1 -0
  214. package/dist/lib/types/actions.d.ts +74 -0
  215. package/dist/lib/types/actions.d.ts.map +1 -0
  216. package/dist/lib/types/actions.js +18 -0
  217. package/dist/lib/types/actions.js.map +1 -0
  218. package/dist/lib/types/artifacts.d.ts +15 -0
  219. package/dist/lib/types/artifacts.d.ts.map +1 -0
  220. package/dist/lib/types/artifacts.js +3 -0
  221. package/dist/lib/types/artifacts.js.map +1 -0
  222. package/dist/lib/types/buildinfo.d.ts +112 -0
  223. package/dist/lib/types/buildinfo.d.ts.map +1 -0
  224. package/dist/lib/types/buildinfo.js +3 -0
  225. package/dist/lib/types/buildinfo.js.map +1 -0
  226. package/dist/lib/types/conditions.d.ts +17 -0
  227. package/dist/lib/types/conditions.d.ts.map +1 -0
  228. package/dist/lib/types/conditions.js +21 -0
  229. package/dist/lib/types/conditions.js.map +1 -0
  230. package/dist/lib/types/contracts.d.ts +14 -0
  231. package/dist/lib/types/contracts.d.ts.map +1 -0
  232. package/dist/lib/types/contracts.js +3 -0
  233. package/dist/lib/types/contracts.js.map +1 -0
  234. package/dist/lib/types/definitions.d.ts +51 -0
  235. package/dist/lib/types/definitions.d.ts.map +1 -0
  236. package/dist/lib/types/definitions.js +3 -0
  237. package/dist/lib/types/definitions.js.map +1 -0
  238. package/dist/lib/types/index.d.ts +9 -0
  239. package/dist/lib/types/index.d.ts.map +1 -0
  240. package/dist/lib/types/index.js +25 -0
  241. package/dist/lib/types/index.js.map +1 -0
  242. package/dist/lib/types/network.d.ts +9 -0
  243. package/dist/lib/types/network.d.ts.map +1 -0
  244. package/dist/lib/types/network.js +3 -0
  245. package/dist/lib/types/network.js.map +1 -0
  246. package/dist/lib/types/project.d.ts +5 -0
  247. package/dist/lib/types/project.d.ts.map +1 -0
  248. package/dist/lib/types/project.js +3 -0
  249. package/dist/lib/types/project.js.map +1 -0
  250. package/dist/lib/types/task.d.ts +9 -0
  251. package/dist/lib/types/task.d.ts.map +1 -0
  252. package/dist/lib/types/task.js +3 -0
  253. package/dist/lib/types/task.js.map +1 -0
  254. package/dist/lib/types/values.d.ts +78 -0
  255. package/dist/lib/types/values.d.ts.map +1 -0
  256. package/dist/lib/types/values.js +3 -0
  257. package/dist/lib/types/values.js.map +1 -0
  258. package/dist/lib/utils/validation.d.ts +5 -0
  259. package/dist/lib/utils/validation.d.ts.map +1 -0
  260. package/dist/lib/utils/validation.js +77 -0
  261. package/dist/lib/utils/validation.js.map +1 -0
  262. package/dist/lib/validation/contract-references.d.ts +12 -0
  263. package/dist/lib/validation/contract-references.d.ts.map +1 -0
  264. package/dist/lib/validation/contract-references.js +112 -0
  265. package/dist/lib/validation/contract-references.js.map +1 -0
  266. package/dist/lib/validation/index.d.ts +1 -0
  267. package/dist/lib/validation/index.d.ts.map +1 -0
  268. package/dist/lib/validation/index.js +2 -0
  269. package/dist/lib/validation/index.js.map +1 -0
  270. package/dist/lib/verification/__tests__/etherscan.spec.d.ts +2 -0
  271. package/dist/lib/verification/__tests__/etherscan.spec.d.ts.map +1 -0
  272. package/dist/lib/verification/__tests__/etherscan.spec.js +565 -0
  273. package/dist/lib/verification/__tests__/etherscan.spec.js.map +1 -0
  274. package/dist/lib/verification/__tests__/sourcify.spec.d.ts +2 -0
  275. package/dist/lib/verification/__tests__/sourcify.spec.d.ts.map +1 -0
  276. package/dist/lib/verification/__tests__/sourcify.spec.js +212 -0
  277. package/dist/lib/verification/__tests__/sourcify.spec.js.map +1 -0
  278. package/dist/lib/verification/etherscan.d.ts +56 -0
  279. package/dist/lib/verification/etherscan.d.ts.map +1 -0
  280. package/dist/lib/verification/etherscan.js +340 -0
  281. package/dist/lib/verification/etherscan.js.map +1 -0
  282. package/dist/lib/verification/sourcify.d.ts +12 -0
  283. package/dist/lib/verification/sourcify.d.ts.map +1 -0
  284. package/dist/lib/verification/sourcify.js +227 -0
  285. package/dist/lib/verification/sourcify.js.map +1 -0
  286. package/eslint.config.js +48 -0
  287. package/examples/jobs/guards-v1.yaml +17 -0
  288. package/examples/jobs/sequence-seq-0001-patch.yaml +59 -0
  289. package/examples/jobs/sequence-v1.yaml +59 -0
  290. package/examples/templates/sequence-factory-v1.yaml +56 -0
  291. package/jest.config.js +25 -0
  292. package/package.json +68 -0
  293. package/src/cli.ts +17 -0
  294. package/src/commands/common.ts +61 -0
  295. package/src/commands/dry.ts +208 -0
  296. package/src/commands/etherscan.ts +360 -0
  297. package/src/commands/index.ts +5 -0
  298. package/src/commands/list.ts +249 -0
  299. package/src/commands/run.ts +136 -0
  300. package/src/commands/utils.ts +52 -0
  301. package/src/index.ts +67 -0
  302. package/src/lib/__tests__/deployer-events.spec.ts +338 -0
  303. package/src/lib/__tests__/deployer.spec.ts +1204 -0
  304. package/src/lib/__tests__/network-utils.spec.ts +181 -0
  305. package/src/lib/artifacts/__tests__/fixtures/contract1.json +19 -0
  306. package/src/lib/artifacts/__tests__/fixtures/contract2.json +19 -0
  307. package/src/lib/artifacts/__tests__/fixtures/duplicate-name.json +19 -0
  308. package/src/lib/artifacts/__tests__/fixtures/nested/nested-contract.json +18 -0
  309. package/src/lib/artifacts/__tests__/fixtures/not-an-artifact.json +8 -0
  310. package/src/lib/artifacts/__tests__/fixtures/readme.txt +2 -0
  311. package/src/lib/contracts/__tests__/repository.spec.ts +344 -0
  312. package/src/lib/contracts/repository.ts +313 -0
  313. package/src/lib/core/__tests__/engine.spec.ts +1514 -0
  314. package/src/lib/core/__tests__/graph.spec.ts +125 -0
  315. package/src/lib/core/__tests__/json-integration.spec.ts +360 -0
  316. package/src/lib/core/__tests__/loader.spec.ts +334 -0
  317. package/src/lib/core/__tests__/multi-platform-verification.spec.ts +406 -0
  318. package/src/lib/core/__tests__/resolver.spec.ts +1693 -0
  319. package/src/lib/core/__tests__/static-action.spec.ts +172 -0
  320. package/src/lib/core/context.ts +127 -0
  321. package/src/lib/core/engine.ts +1531 -0
  322. package/src/lib/core/graph.ts +252 -0
  323. package/src/lib/core/loader.ts +263 -0
  324. package/src/lib/core/resolver.ts +498 -0
  325. package/src/lib/deployer.ts +768 -0
  326. package/src/lib/events/__tests__/event-system.spec.ts +343 -0
  327. package/src/lib/events/cli-adapter.ts +325 -0
  328. package/src/lib/events/emitter.ts +62 -0
  329. package/src/lib/events/index.ts +3 -0
  330. package/src/lib/events/types.ts +469 -0
  331. package/src/lib/index.ts +14 -0
  332. package/src/lib/network-loader.ts +59 -0
  333. package/src/lib/network-utils.ts +64 -0
  334. package/src/lib/parsers/__tests__/buildinfo.spec.ts +122 -0
  335. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-bytecode-buildinfo.json +62 -0
  336. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-json.txt +2 -0
  337. package/src/lib/parsers/__tests__/fixtures/buildinfo/multi-contract-buildinfo.json +89 -0
  338. package/src/lib/parsers/__tests__/fixtures/buildinfo/no-contracts-buildinfo.json +17 -0
  339. package/src/lib/parsers/__tests__/fixtures/buildinfo/simple-buildinfo.json +63 -0
  340. package/src/lib/parsers/__tests__/fixtures/buildinfo/wrong-format.json +4 -0
  341. package/src/lib/parsers/__tests__/job.spec.ts +335 -0
  342. package/src/lib/parsers/__tests__/template.spec.ts +111 -0
  343. package/src/lib/parsers/artifact/__tests__/artifact.spec.ts +117 -0
  344. package/src/lib/parsers/artifact/__tests__/fixtures/empty-bytecode.json +5 -0
  345. package/src/lib/parsers/artifact/__tests__/fixtures/hardhat-artifact.json +67 -0
  346. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-bytecode.json +5 -0
  347. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-json.txt +11 -0
  348. package/src/lib/parsers/artifact/__tests__/fixtures/minimal-artifact.json +5 -0
  349. package/src/lib/parsers/artifact/__tests__/fixtures/missing-abi.json +4 -0
  350. package/src/lib/parsers/artifact/__tests__/fixtures/missing-bytecode.json +11 -0
  351. package/src/lib/parsers/artifact/__tests__/fixtures/missing-contract-name.json +11 -0
  352. package/src/lib/parsers/artifact/__tests__/fixtures/simple-artifact.json +40 -0
  353. package/src/lib/parsers/artifact/__tests__/fixtures/wrong-types.json +7 -0
  354. package/src/lib/parsers/artifact/foundry-1.2.ts +72 -0
  355. package/src/lib/parsers/artifact/index.ts +27 -0
  356. package/src/lib/parsers/artifact/types.ts +9 -0
  357. package/src/lib/parsers/buildinfo.ts +127 -0
  358. package/src/lib/parsers/constants.ts +56 -0
  359. package/src/lib/parsers/index.ts +5 -0
  360. package/src/lib/parsers/job.ts +101 -0
  361. package/src/lib/parsers/template.ts +131 -0
  362. package/src/lib/std/templates/assured-deployment.yaml +45 -0
  363. package/src/lib/std/templates/erc-2470.yaml +67 -0
  364. package/src/lib/std/templates/min-balance.yaml +32 -0
  365. package/src/lib/std/templates/nano-universal-deployer.yaml +59 -0
  366. package/src/lib/std/templates/raw-erc-2470.yaml +59 -0
  367. package/src/lib/std/templates/raw-nano-universal-deployer.yaml +51 -0
  368. package/src/lib/std/templates/raw-sequence-universal-deployer-2.yaml +48 -0
  369. package/src/lib/std/templates/sequence-universal-deployer-2.yaml +57 -0
  370. package/src/lib/types/__tests__/json-request-action.spec.ts +243 -0
  371. package/src/lib/types/__tests__/read-json-value.spec.ts +264 -0
  372. package/src/lib/types/actions.ts +127 -0
  373. package/src/lib/types/artifacts.ts +21 -0
  374. package/src/lib/types/buildinfo.ts +116 -0
  375. package/src/lib/types/conditions.ts +50 -0
  376. package/src/lib/types/contracts.ts +23 -0
  377. package/src/lib/types/definitions.ts +68 -0
  378. package/src/lib/types/index.ts +8 -0
  379. package/src/lib/types/network.ts +22 -0
  380. package/src/lib/types/project.ts +9 -0
  381. package/src/lib/types/task.ts +9 -0
  382. package/src/lib/types/values.ts +116 -0
  383. package/src/lib/utils/validation.ts +116 -0
  384. package/src/lib/validation/contract-references.ts +210 -0
  385. package/src/lib/validation/index.ts +1 -0
  386. package/src/lib/verification/__tests__/etherscan.spec.ts +710 -0
  387. package/src/lib/verification/__tests__/sourcify.spec.ts +288 -0
  388. package/src/lib/verification/etherscan.ts +546 -0
  389. package/src/lib/verification/sourcify.ts +248 -0
  390. package/test_validation/artifacts/TestContract.json +9 -0
  391. package/test_validation/jobs/test-missing.yaml +16 -0
  392. package/test_validation/networks.yaml +3 -0
  393. package/tsconfig.json +36 -0
@@ -0,0 +1,565 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const etherscan_1 = require("../etherscan");
4
+ global.fetch = jest.fn();
5
+ const mockedFetch = fetch;
6
+ describe('Etherscan Verification', () => {
7
+ const mockNetwork = {
8
+ name: 'Ethereum Mainnet',
9
+ chainId: 1,
10
+ rpcUrl: 'https://mainnet.infura.io/v3/test',
11
+ supports: ['etherscan_v2']
12
+ };
13
+ const mockBuildInfo = {
14
+ _format: 'hh-sol-build-info-1',
15
+ id: 'test-build-id',
16
+ solcVersion: 'v0.8.25+commit.b61c2a91',
17
+ solcLongVersion: '0.8.25+commit.b61c2a91.Linux.gcc',
18
+ input: {
19
+ language: 'Solidity',
20
+ sources: {
21
+ 'contracts/MyToken.sol': {
22
+ content: 'pragma solidity ^0.8.0; contract MyToken { }'
23
+ }
24
+ },
25
+ settings: {
26
+ optimizer: {
27
+ enabled: true,
28
+ runs: 200
29
+ },
30
+ outputSelection: {
31
+ '*': {
32
+ '*': ['abi', 'evm.bytecode', 'evm.deployedBytecode']
33
+ }
34
+ }
35
+ }
36
+ },
37
+ output: {
38
+ contracts: {
39
+ 'contracts/MyToken.sol': {
40
+ MyToken: {
41
+ abi: [],
42
+ evm: {
43
+ bytecode: { object: '0x608060405234801561001057600080fd5b50' },
44
+ deployedBytecode: { object: '0x6080604052348015600f57600080fd5b50' }
45
+ }
46
+ }
47
+ }
48
+ },
49
+ sources: {
50
+ 'contracts/MyToken.sol': { id: 0 }
51
+ }
52
+ }
53
+ };
54
+ const mockContract = {
55
+ contractName: 'MyToken',
56
+ sourceName: 'contracts/MyToken.sol',
57
+ abi: [],
58
+ creationCode: '0x608060405234801561001057600080fd5b50',
59
+ uniqueHash: 'test-hash',
60
+ _sources: new Set(['/test/path'])
61
+ };
62
+ const createMockResponse = (data, ok = true, status = 200) => ({
63
+ ok,
64
+ status,
65
+ statusText: ok ? 'OK' : 'Error',
66
+ json: jest.fn().mockResolvedValue(data)
67
+ });
68
+ beforeEach(() => {
69
+ jest.clearAllMocks();
70
+ });
71
+ describe('submitVerification', () => {
72
+ it('should submit verification successfully', async () => {
73
+ const mockResponseData = {
74
+ status: '1',
75
+ result: 'test-guid-123'
76
+ };
77
+ mockedFetch.mockResolvedValueOnce(createMockResponse(mockResponseData));
78
+ const result = await (0, etherscan_1.submitVerification)({
79
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
80
+ buildInfo: mockBuildInfo,
81
+ contract: mockContract,
82
+ network: mockNetwork
83
+ }, 'test-api-key');
84
+ expect(result.success).toBe(true);
85
+ expect(result.guid).toBe('test-guid-123');
86
+ expect(result.message).toBe('Verification submitted successfully');
87
+ expect(mockedFetch).toHaveBeenCalledWith('https://api.etherscan.io/v2/api?chainid=1', expect.objectContaining({
88
+ method: 'POST',
89
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
90
+ body: expect.any(String)
91
+ }));
92
+ });
93
+ it('should handle verification submission failure', async () => {
94
+ const mockResponseData = {
95
+ status: '0',
96
+ result: 'Invalid contract address'
97
+ };
98
+ mockedFetch.mockResolvedValueOnce(createMockResponse(mockResponseData));
99
+ const result = await (0, etherscan_1.submitVerification)({
100
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
101
+ buildInfo: mockBuildInfo,
102
+ contract: mockContract,
103
+ network: mockNetwork
104
+ }, 'test-api-key');
105
+ expect(result.success).toBe(false);
106
+ expect(result.message).toBe('Invalid contract address');
107
+ expect(result.guid).toBeUndefined();
108
+ });
109
+ it('should include constructor arguments when provided', async () => {
110
+ const mockResponseData = {
111
+ status: '1',
112
+ result: 'test-guid-456'
113
+ };
114
+ mockedFetch.mockResolvedValueOnce(createMockResponse(mockResponseData));
115
+ await (0, etherscan_1.submitVerification)({
116
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
117
+ buildInfo: mockBuildInfo,
118
+ contract: mockContract,
119
+ constructorArguments: '0x000000000000000000000000742d35cc6596c743b2c8d12cd84d5b8fba4f3c',
120
+ network: mockNetwork
121
+ }, 'test-api-key');
122
+ const fetchCall = mockedFetch.mock.calls[0];
123
+ const requestBody = fetchCall[1]?.body;
124
+ expect(requestBody).toContain('constructorArguements=000000000000000000000000742d35cc6596c743b2c8d12cd84d5b8fba4f3c');
125
+ });
126
+ it('should handle network request errors', async () => {
127
+ mockedFetch.mockRejectedValueOnce(new Error('Network error'));
128
+ const result = await (0, etherscan_1.submitVerification)({
129
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
130
+ buildInfo: mockBuildInfo,
131
+ contract: mockContract,
132
+ network: mockNetwork
133
+ }, 'test-api-key');
134
+ expect(result.success).toBe(false);
135
+ expect(result.message).toContain('API request failed: Network error');
136
+ });
137
+ it('should use correct API URL for different networks', async () => {
138
+ const sepoliaNetwork = {
139
+ name: 'Sepolia',
140
+ chainId: 11155111,
141
+ rpcUrl: 'https://sepolia.infura.io/v3/test'
142
+ };
143
+ const mockResponseData = {
144
+ status: '1',
145
+ result: 'test-guid-sepolia'
146
+ };
147
+ mockedFetch.mockResolvedValueOnce(createMockResponse(mockResponseData));
148
+ await (0, etherscan_1.submitVerification)({
149
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
150
+ buildInfo: mockBuildInfo,
151
+ contract: mockContract,
152
+ network: sepoliaNetwork
153
+ }, 'test-api-key');
154
+ expect(mockedFetch).toHaveBeenCalledWith('https://api.etherscan.io/v2/api?chainid=11155111', expect.any(Object));
155
+ });
156
+ it('should use v2 API format for any network', async () => {
157
+ const customNetwork = {
158
+ name: 'Custom Network',
159
+ chainId: 999999,
160
+ rpcUrl: 'https://custom.rpc'
161
+ };
162
+ const mockResponseData = {
163
+ status: '0',
164
+ result: 'Invalid chain ID'
165
+ };
166
+ mockedFetch.mockResolvedValueOnce(createMockResponse(mockResponseData));
167
+ const result = await (0, etherscan_1.submitVerification)({
168
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
169
+ buildInfo: mockBuildInfo,
170
+ contract: mockContract,
171
+ network: customNetwork
172
+ }, 'test-api-key');
173
+ expect(result.success).toBe(false);
174
+ expect(result.message).toBe('Invalid chain ID');
175
+ expect(mockedFetch).toHaveBeenCalledWith('https://api.etherscan.io/v2/api?chainid=999999', expect.any(Object));
176
+ });
177
+ it('should treat "Already Verified" as success', async () => {
178
+ const mockResponseData = {
179
+ status: '0',
180
+ result: 'Already Verified'
181
+ };
182
+ mockedFetch.mockResolvedValueOnce(createMockResponse(mockResponseData));
183
+ const result = await (0, etherscan_1.submitVerification)({
184
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
185
+ buildInfo: mockBuildInfo,
186
+ contract: mockContract,
187
+ network: mockNetwork
188
+ }, 'test-api-key');
189
+ expect(result.success).toBe(true);
190
+ expect(result.message).toBe('Contract is already verified');
191
+ expect(result.guid).toBeUndefined();
192
+ });
193
+ it('should treat "Contract source code already verified" as success', async () => {
194
+ const mockResponseData = {
195
+ status: '0',
196
+ result: 'Contract source code already verified'
197
+ };
198
+ mockedFetch.mockResolvedValueOnce(createMockResponse(mockResponseData));
199
+ const result = await (0, etherscan_1.submitVerification)({
200
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
201
+ buildInfo: mockBuildInfo,
202
+ contract: mockContract,
203
+ network: mockNetwork
204
+ }, 'test-api-key');
205
+ expect(result.success).toBe(true);
206
+ expect(result.message).toBe('Contract is already verified');
207
+ expect(result.guid).toBeUndefined();
208
+ });
209
+ describe('retry logic', () => {
210
+ beforeEach(() => {
211
+ jest.spyOn(console, 'log').mockImplementation(() => { });
212
+ jest.spyOn(global, 'setTimeout').mockImplementation((callback) => {
213
+ callback();
214
+ return {};
215
+ });
216
+ });
217
+ afterEach(() => {
218
+ jest.restoreAllMocks();
219
+ });
220
+ it('should retry for "unable to locate contractcode" error', async () => {
221
+ const contractNotFoundResponse = {
222
+ status: '0',
223
+ result: 'Unable to locate ContractCode at 0x123...'
224
+ };
225
+ const successResponse = {
226
+ status: '1',
227
+ result: 'test-guid-retry'
228
+ };
229
+ mockedFetch
230
+ .mockResolvedValueOnce(createMockResponse(contractNotFoundResponse))
231
+ .mockResolvedValueOnce(createMockResponse(successResponse));
232
+ const result = await (0, etherscan_1.submitVerification)({
233
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
234
+ buildInfo: mockBuildInfo,
235
+ contract: mockContract,
236
+ network: mockNetwork,
237
+ maxRetries: 3,
238
+ retryDelayMs: 100
239
+ }, 'test-api-key');
240
+ expect(result.success).toBe(true);
241
+ expect(result.guid).toBe('test-guid-retry');
242
+ expect(mockedFetch).toHaveBeenCalledTimes(2);
243
+ });
244
+ it('should retry for "contract source code not verified" error', async () => {
245
+ const contractNotFoundResponse = {
246
+ status: '0',
247
+ result: 'Contract source code not verified'
248
+ };
249
+ const successResponse = {
250
+ status: '1',
251
+ result: 'test-guid-retry-2'
252
+ };
253
+ mockedFetch
254
+ .mockResolvedValueOnce(createMockResponse(contractNotFoundResponse))
255
+ .mockResolvedValueOnce(createMockResponse(successResponse));
256
+ const result = await (0, etherscan_1.submitVerification)({
257
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
258
+ buildInfo: mockBuildInfo,
259
+ contract: mockContract,
260
+ network: mockNetwork,
261
+ maxRetries: 2
262
+ }, 'test-api-key');
263
+ expect(result.success).toBe(true);
264
+ expect(result.guid).toBe('test-guid-retry-2');
265
+ expect(mockedFetch).toHaveBeenCalledTimes(2);
266
+ });
267
+ it('should retry for "contract not found" error', async () => {
268
+ const contractNotFoundResponse = {
269
+ status: '0',
270
+ result: 'Contract not found'
271
+ };
272
+ const successResponse = {
273
+ status: '1',
274
+ result: 'test-guid-retry-3'
275
+ };
276
+ mockedFetch
277
+ .mockResolvedValueOnce(createMockResponse(contractNotFoundResponse))
278
+ .mockResolvedValueOnce(createMockResponse(successResponse));
279
+ const result = await (0, etherscan_1.submitVerification)({
280
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
281
+ buildInfo: mockBuildInfo,
282
+ contract: mockContract,
283
+ network: mockNetwork
284
+ }, 'test-api-key');
285
+ expect(result.success).toBe(true);
286
+ expect(result.guid).toBe('test-guid-retry-3');
287
+ expect(mockedFetch).toHaveBeenCalledTimes(2);
288
+ });
289
+ it('should not retry for non-contract-not-found errors', async () => {
290
+ const invalidResponse = {
291
+ status: '0',
292
+ result: 'Invalid API key'
293
+ };
294
+ mockedFetch.mockResolvedValueOnce(createMockResponse(invalidResponse));
295
+ const result = await (0, etherscan_1.submitVerification)({
296
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
297
+ buildInfo: mockBuildInfo,
298
+ contract: mockContract,
299
+ network: mockNetwork,
300
+ maxRetries: 3
301
+ }, 'test-api-key');
302
+ expect(result.success).toBe(false);
303
+ expect(result.message).toBe('Invalid API key');
304
+ expect(mockedFetch).toHaveBeenCalledTimes(1);
305
+ });
306
+ it('should exhaust all retries and return failure message', async () => {
307
+ const contractNotFoundResponse = {
308
+ status: '0',
309
+ result: 'Unable to locate ContractCode'
310
+ };
311
+ mockedFetch.mockResolvedValue(createMockResponse(contractNotFoundResponse));
312
+ const result = await (0, etherscan_1.submitVerification)({
313
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
314
+ buildInfo: mockBuildInfo,
315
+ contract: mockContract,
316
+ network: mockNetwork,
317
+ maxRetries: 2,
318
+ retryDelayMs: 10
319
+ }, 'test-api-key');
320
+ expect(result.success).toBe(false);
321
+ expect(result.message).toBe('Verification failed after 3 attempts. Last error: Unable to locate ContractCode');
322
+ expect(mockedFetch).toHaveBeenCalledTimes(3);
323
+ });
324
+ it('should use default retry settings when not specified', async () => {
325
+ const contractNotFoundResponse = {
326
+ status: '0',
327
+ result: 'Contract not found'
328
+ };
329
+ mockedFetch.mockResolvedValue(createMockResponse(contractNotFoundResponse));
330
+ const result = await (0, etherscan_1.submitVerification)({
331
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
332
+ buildInfo: mockBuildInfo,
333
+ contract: mockContract,
334
+ network: mockNetwork
335
+ }, 'test-api-key');
336
+ expect(result.success).toBe(false);
337
+ expect(result.message).toBe('Verification failed after 4 attempts. Last error: Contract not found');
338
+ expect(mockedFetch).toHaveBeenCalledTimes(4);
339
+ });
340
+ it('should retry for network errors with contract not found message', async () => {
341
+ const contractNotFoundError = new Error('Unable to locate ContractCode');
342
+ const successResponse = {
343
+ status: '1',
344
+ result: 'test-guid-network-retry'
345
+ };
346
+ mockedFetch
347
+ .mockRejectedValueOnce(contractNotFoundError)
348
+ .mockResolvedValueOnce(createMockResponse(successResponse));
349
+ const result = await (0, etherscan_1.submitVerification)({
350
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
351
+ buildInfo: mockBuildInfo,
352
+ contract: mockContract,
353
+ network: mockNetwork,
354
+ maxRetries: 2
355
+ }, 'test-api-key');
356
+ expect(result.success).toBe(true);
357
+ expect(result.guid).toBe('test-guid-network-retry');
358
+ expect(mockedFetch).toHaveBeenCalledTimes(2);
359
+ });
360
+ it('should not retry for network errors without contract not found message', async () => {
361
+ const networkError = new Error('Network timeout');
362
+ mockedFetch.mockRejectedValueOnce(networkError);
363
+ const result = await (0, etherscan_1.submitVerification)({
364
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
365
+ buildInfo: mockBuildInfo,
366
+ contract: mockContract,
367
+ network: mockNetwork,
368
+ maxRetries: 3
369
+ }, 'test-api-key');
370
+ expect(result.success).toBe(false);
371
+ expect(result.message).toBe('API request failed: Network timeout');
372
+ expect(mockedFetch).toHaveBeenCalledTimes(1);
373
+ });
374
+ it('should exhaust retries for network errors with contract not found message', async () => {
375
+ const contractNotFoundError = new Error('Contract source code not verified');
376
+ mockedFetch.mockRejectedValue(contractNotFoundError);
377
+ const result = await (0, etherscan_1.submitVerification)({
378
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
379
+ buildInfo: mockBuildInfo,
380
+ contract: mockContract,
381
+ network: mockNetwork,
382
+ maxRetries: 1,
383
+ retryDelayMs: 10
384
+ }, 'test-api-key');
385
+ expect(result.success).toBe(false);
386
+ expect(result.message).toBe('API request failed: Contract source code not verified');
387
+ expect(mockedFetch).toHaveBeenCalledTimes(2);
388
+ });
389
+ it('should handle case-insensitive error message matching', async () => {
390
+ const contractNotFoundResponse = {
391
+ status: '0',
392
+ result: 'UNABLE TO LOCATE CONTRACTCODE'
393
+ };
394
+ const successResponse = {
395
+ status: '1',
396
+ result: 'test-guid-case-insensitive'
397
+ };
398
+ mockedFetch
399
+ .mockResolvedValueOnce(createMockResponse(contractNotFoundResponse))
400
+ .mockResolvedValueOnce(createMockResponse(successResponse));
401
+ const result = await (0, etherscan_1.submitVerification)({
402
+ address: '0x742d35Cc6596C743B2c8d12Cd84d5B8FbA4F3C',
403
+ buildInfo: mockBuildInfo,
404
+ contract: mockContract,
405
+ network: mockNetwork,
406
+ maxRetries: 1
407
+ }, 'test-api-key');
408
+ expect(result.success).toBe(true);
409
+ expect(result.guid).toBe('test-guid-case-insensitive');
410
+ expect(mockedFetch).toHaveBeenCalledTimes(2);
411
+ });
412
+ });
413
+ });
414
+ describe('checkVerificationStatus', () => {
415
+ it('should return success status', async () => {
416
+ const mockResponseData = {
417
+ status: '1',
418
+ result: 'Pass - Verified'
419
+ };
420
+ mockedFetch.mockResolvedValueOnce(createMockResponse(mockResponseData));
421
+ const status = await (0, etherscan_1.checkVerificationStatus)('test-guid', 'test-api-key', mockNetwork);
422
+ expect(status.isComplete).toBe(true);
423
+ expect(status.isSuccess).toBe(true);
424
+ expect(status.message).toBe('Verification successful');
425
+ });
426
+ it('should return pending status', async () => {
427
+ const mockResponseData = {
428
+ status: '0',
429
+ result: 'Pending in queue'
430
+ };
431
+ mockedFetch.mockResolvedValueOnce(createMockResponse(mockResponseData));
432
+ const status = await (0, etherscan_1.checkVerificationStatus)('test-guid', 'test-api-key', mockNetwork);
433
+ expect(status.isComplete).toBe(false);
434
+ expect(status.isSuccess).toBe(false);
435
+ expect(status.message).toBe('Verification pending');
436
+ });
437
+ it('should return failure status', async () => {
438
+ const mockResponseData = {
439
+ status: '0',
440
+ result: 'Fail - Unable to verify'
441
+ };
442
+ mockedFetch.mockResolvedValueOnce(createMockResponse(mockResponseData));
443
+ const status = await (0, etherscan_1.checkVerificationStatus)('test-guid', 'test-api-key', mockNetwork);
444
+ expect(status.isComplete).toBe(true);
445
+ expect(status.isSuccess).toBe(false);
446
+ expect(status.message).toBe('Fail - Unable to verify');
447
+ });
448
+ it('should treat "Already Verified" as success in status check', async () => {
449
+ const mockResponseData = {
450
+ status: '0',
451
+ result: 'Already Verified'
452
+ };
453
+ mockedFetch.mockResolvedValueOnce(createMockResponse(mockResponseData));
454
+ const status = await (0, etherscan_1.checkVerificationStatus)('test-guid', 'test-api-key', mockNetwork);
455
+ expect(status.isComplete).toBe(true);
456
+ expect(status.isSuccess).toBe(true);
457
+ expect(status.message).toBe('Contract is already verified');
458
+ });
459
+ });
460
+ describe('waitForVerification', () => {
461
+ it('should return when verification completes successfully', async () => {
462
+ mockedFetch
463
+ .mockResolvedValueOnce(createMockResponse({
464
+ status: '0', result: 'Pending in queue'
465
+ }))
466
+ .mockResolvedValueOnce(createMockResponse({
467
+ status: '1', result: 'Pass - Verified'
468
+ }));
469
+ const status = await (0, etherscan_1.waitForVerification)('test-guid', 'test-api-key', mockNetwork, 10000);
470
+ expect(status.isComplete).toBe(true);
471
+ expect(status.isSuccess).toBe(true);
472
+ expect(mockedFetch).toHaveBeenCalledTimes(2);
473
+ });
474
+ it('should timeout after specified duration', async () => {
475
+ mockedFetch.mockResolvedValue(createMockResponse({
476
+ status: '0', result: 'Pending in queue'
477
+ }));
478
+ await expect((0, etherscan_1.waitForVerification)('test-guid', 'test-api-key', mockNetwork, 1000)).rejects.toThrow('Verification timed out after 1 seconds');
479
+ expect(mockedFetch).toHaveBeenCalledTimes(1);
480
+ });
481
+ });
482
+ describe('isContractAlreadyVerified', () => {
483
+ const testAddress = '0x1234567890123456789012345678901234567890';
484
+ const testApiKey = 'test-api-key';
485
+ beforeEach(() => {
486
+ mockedFetch.mockClear();
487
+ });
488
+ it('should return true when contract is verified', async () => {
489
+ mockedFetch.mockResolvedValueOnce(createMockResponse({
490
+ status: '1',
491
+ result: [{
492
+ SourceCode: 'pragma solidity ^0.8.0; contract MyToken { }'
493
+ }]
494
+ }));
495
+ const result = await (0, etherscan_1.isContractAlreadyVerified)(testAddress, testApiKey, mockNetwork);
496
+ expect(result).toBe(true);
497
+ expect(mockedFetch).toHaveBeenCalledWith(expect.stringContaining('chainid=1'), expect.objectContaining({
498
+ method: 'GET'
499
+ }));
500
+ });
501
+ it('should return false when contract is not verified (empty source code)', async () => {
502
+ mockedFetch.mockResolvedValueOnce(createMockResponse({
503
+ status: '1',
504
+ result: [{
505
+ SourceCode: ''
506
+ }]
507
+ }));
508
+ const result = await (0, etherscan_1.isContractAlreadyVerified)(testAddress, testApiKey, mockNetwork);
509
+ expect(result).toBe(false);
510
+ });
511
+ it('should return false when API returns status 0', async () => {
512
+ mockedFetch.mockResolvedValueOnce(createMockResponse({
513
+ status: '0',
514
+ result: 'Contract source code not verified'
515
+ }));
516
+ const result = await (0, etherscan_1.isContractAlreadyVerified)(testAddress, testApiKey, mockNetwork);
517
+ expect(result).toBe(false);
518
+ });
519
+ it('should return false when result array is empty', async () => {
520
+ mockedFetch.mockResolvedValueOnce(createMockResponse({
521
+ status: '1',
522
+ result: []
523
+ }));
524
+ const result = await (0, etherscan_1.isContractAlreadyVerified)(testAddress, testApiKey, mockNetwork);
525
+ expect(result).toBe(false);
526
+ });
527
+ it('should return false and log warning when API request fails', async () => {
528
+ const consoleSpy = jest.spyOn(console, 'warn').mockImplementation();
529
+ mockedFetch.mockRejectedValueOnce(new Error('Network error'));
530
+ const result = await (0, etherscan_1.isContractAlreadyVerified)(testAddress, testApiKey, mockNetwork);
531
+ expect(result).toBe(false);
532
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining(`Failed to check verification status for ${testAddress}`));
533
+ consoleSpy.mockRestore();
534
+ });
535
+ it('should return false when HTTP response is not ok', async () => {
536
+ const consoleSpy = jest.spyOn(console, 'warn').mockImplementation();
537
+ mockedFetch.mockResolvedValueOnce({
538
+ ok: false,
539
+ status: 500,
540
+ statusText: 'Internal Server Error'
541
+ });
542
+ const result = await (0, etherscan_1.isContractAlreadyVerified)(testAddress, testApiKey, mockNetwork);
543
+ expect(result).toBe(false);
544
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Failed to check verification status'));
545
+ consoleSpy.mockRestore();
546
+ });
547
+ it('should use correct chainId in API call for different networks', async () => {
548
+ const arbitrumNetwork = {
549
+ name: 'Arbitrum One',
550
+ chainId: 42161,
551
+ rpcUrl: 'https://arb1.arbitrum.io/rpc',
552
+ supports: ['etherscan_v2']
553
+ };
554
+ mockedFetch.mockResolvedValueOnce(createMockResponse({
555
+ status: '1',
556
+ result: [{
557
+ SourceCode: 'contract code'
558
+ }]
559
+ }));
560
+ await (0, etherscan_1.isContractAlreadyVerified)(testAddress, testApiKey, arbitrumNetwork);
561
+ expect(mockedFetch).toHaveBeenCalledWith(expect.stringContaining('chainid=42161'), expect.any(Object));
562
+ });
563
+ });
564
+ });
565
+ //# sourceMappingURL=etherscan.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"etherscan.spec.js","sourceRoot":"","sources":["../../../../src/lib/verification/__tests__/etherscan.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sourcify.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcify.spec.d.ts","sourceRoot":"","sources":["../../../../src/lib/verification/__tests__/sourcify.spec.ts"],"names":[],"mappings":""}