@0xsequence/catapult 1.4.0 → 1.5.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 (163) hide show
  1. package/README.md +27 -0
  2. package/dist/lib/__tests__/network-loader.spec.js.map +1 -1
  3. package/dist/lib/core/__tests__/resolver.spec.js +22 -0
  4. package/dist/lib/core/__tests__/resolver.spec.js.map +1 -1
  5. package/dist/lib/core/__tests__/sign-actions.spec.d.ts +2 -0
  6. package/dist/lib/core/__tests__/sign-actions.spec.d.ts.map +1 -0
  7. package/dist/lib/core/__tests__/sign-actions.spec.js +128 -0
  8. package/dist/lib/core/__tests__/sign-actions.spec.js.map +1 -0
  9. package/dist/lib/core/__tests__/signer.spec.d.ts +2 -0
  10. package/dist/lib/core/__tests__/signer.spec.d.ts.map +1 -0
  11. package/dist/lib/core/__tests__/signer.spec.js +40 -0
  12. package/dist/lib/core/__tests__/signer.spec.js.map +1 -0
  13. package/dist/lib/core/context.d.ts +3 -2
  14. package/dist/lib/core/context.d.ts.map +1 -1
  15. package/dist/lib/core/context.js +3 -2
  16. package/dist/lib/core/context.js.map +1 -1
  17. package/dist/lib/core/engine.d.ts +4 -0
  18. package/dist/lib/core/engine.d.ts.map +1 -1
  19. package/dist/lib/core/engine.js +173 -0
  20. package/dist/lib/core/engine.js.map +1 -1
  21. package/dist/lib/core/signer.d.ts +7 -0
  22. package/dist/lib/core/signer.d.ts.map +1 -0
  23. package/dist/lib/core/signer.js +60 -0
  24. package/dist/lib/core/signer.js.map +1 -0
  25. package/dist/lib/parsers/__tests__/source.spec.js +37 -0
  26. package/dist/lib/parsers/__tests__/source.spec.js.map +1 -1
  27. package/dist/lib/parsers/source.js +1 -1
  28. package/dist/lib/parsers/source.js.map +1 -1
  29. package/dist/lib/provenance.js +51 -2
  30. package/dist/lib/provenance.js.map +1 -1
  31. package/dist/lib/types/actions.d.ts +26 -2
  32. package/dist/lib/types/actions.d.ts.map +1 -1
  33. package/dist/lib/types/actions.js +3 -0
  34. package/dist/lib/types/actions.js.map +1 -1
  35. package/dist/lib/types/source.d.ts +2 -0
  36. package/dist/lib/types/source.d.ts.map +1 -1
  37. package/package.json +4 -1
  38. package/.eslintrc.json +0 -29
  39. package/.github/workflows/ci.yml +0 -181
  40. package/CONCEPT.md +0 -24
  41. package/contracts/checked-call.huff +0 -65
  42. package/eslint.config.js +0 -48
  43. package/examples/jobs/guards-v1.yaml +0 -17
  44. package/examples/jobs/sequence-seq-0001-patch.yaml +0 -59
  45. package/examples/jobs/sequence-v1.yaml +0 -59
  46. package/examples/templates/sequence-factory-v1.yaml +0 -56
  47. package/jest.config.js +0 -25
  48. package/src/cli.ts +0 -18
  49. package/src/commands/common.ts +0 -61
  50. package/src/commands/dry.ts +0 -209
  51. package/src/commands/etherscan.ts +0 -360
  52. package/src/commands/index.ts +0 -6
  53. package/src/commands/list.ts +0 -262
  54. package/src/commands/provenance.ts +0 -120
  55. package/src/commands/run.ts +0 -146
  56. package/src/commands/utils.ts +0 -215
  57. package/src/index.ts +0 -67
  58. package/src/lib/__tests__/deployer-events.spec.ts +0 -338
  59. package/src/lib/__tests__/deployer.spec.ts +0 -2269
  60. package/src/lib/__tests__/network-loader.spec.ts +0 -150
  61. package/src/lib/__tests__/network-selection.spec.ts +0 -41
  62. package/src/lib/__tests__/network-utils.spec.ts +0 -230
  63. package/src/lib/__tests__/provenance.spec.ts +0 -208
  64. package/src/lib/artifacts/__tests__/fixtures/contract1.json +0 -19
  65. package/src/lib/artifacts/__tests__/fixtures/contract2.json +0 -19
  66. package/src/lib/artifacts/__tests__/fixtures/duplicate-name.json +0 -19
  67. package/src/lib/artifacts/__tests__/fixtures/nested/nested-contract.json +0 -18
  68. package/src/lib/artifacts/__tests__/fixtures/not-an-artifact.json +0 -8
  69. package/src/lib/artifacts/__tests__/fixtures/readme.txt +0 -2
  70. package/src/lib/contracts/__tests__/repository.spec.ts +0 -612
  71. package/src/lib/contracts/repository.ts +0 -411
  72. package/src/lib/core/__tests__/assert-action.spec.ts +0 -474
  73. package/src/lib/core/__tests__/context.spec.ts +0 -37
  74. package/src/lib/core/__tests__/engine.spec.ts +0 -2005
  75. package/src/lib/core/__tests__/graph.spec.ts +0 -125
  76. package/src/lib/core/__tests__/json-integration.spec.ts +0 -425
  77. package/src/lib/core/__tests__/loader.spec.ts +0 -367
  78. package/src/lib/core/__tests__/multi-platform-verification.spec.ts +0 -406
  79. package/src/lib/core/__tests__/resolver.spec.ts +0 -2496
  80. package/src/lib/core/__tests__/static-action.spec.ts +0 -172
  81. package/src/lib/core/context.ts +0 -127
  82. package/src/lib/core/engine.ts +0 -1834
  83. package/src/lib/core/graph.ts +0 -252
  84. package/src/lib/core/loader.ts +0 -253
  85. package/src/lib/core/resolver.ts +0 -873
  86. package/src/lib/deployer.ts +0 -1005
  87. package/src/lib/events/__tests__/event-system.spec.ts +0 -392
  88. package/src/lib/events/cli-adapter.ts +0 -369
  89. package/src/lib/events/emitter.ts +0 -62
  90. package/src/lib/events/index.ts +0 -3
  91. package/src/lib/events/types.ts +0 -520
  92. package/src/lib/index.ts +0 -17
  93. package/src/lib/network-loader.ts +0 -90
  94. package/src/lib/network-selection.ts +0 -73
  95. package/src/lib/network-utils.ts +0 -64
  96. package/src/lib/parsers/__tests__/buildinfo.spec.ts +0 -122
  97. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-bytecode-buildinfo.json +0 -62
  98. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-json.txt +0 -2
  99. package/src/lib/parsers/__tests__/fixtures/buildinfo/multi-contract-buildinfo.json +0 -89
  100. package/src/lib/parsers/__tests__/fixtures/buildinfo/no-contracts-buildinfo.json +0 -17
  101. package/src/lib/parsers/__tests__/fixtures/buildinfo/simple-buildinfo.json +0 -63
  102. package/src/lib/parsers/__tests__/fixtures/buildinfo/wrong-format.json +0 -4
  103. package/src/lib/parsers/__tests__/job.spec.ts +0 -439
  104. package/src/lib/parsers/__tests__/source.spec.ts +0 -134
  105. package/src/lib/parsers/__tests__/template.spec.ts +0 -111
  106. package/src/lib/parsers/artifact/__tests__/artifact.spec.ts +0 -117
  107. package/src/lib/parsers/artifact/__tests__/fixtures/empty-bytecode.json +0 -5
  108. package/src/lib/parsers/artifact/__tests__/fixtures/hardhat-artifact.json +0 -67
  109. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-bytecode.json +0 -5
  110. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-json.txt +0 -11
  111. package/src/lib/parsers/artifact/__tests__/fixtures/minimal-artifact.json +0 -5
  112. package/src/lib/parsers/artifact/__tests__/fixtures/missing-abi.json +0 -4
  113. package/src/lib/parsers/artifact/__tests__/fixtures/missing-bytecode.json +0 -11
  114. package/src/lib/parsers/artifact/__tests__/fixtures/missing-contract-name.json +0 -11
  115. package/src/lib/parsers/artifact/__tests__/fixtures/simple-artifact.json +0 -40
  116. package/src/lib/parsers/artifact/__tests__/fixtures/wrong-types.json +0 -7
  117. package/src/lib/parsers/artifact/foundry-1.2.ts +0 -72
  118. package/src/lib/parsers/artifact/index.ts +0 -27
  119. package/src/lib/parsers/artifact/types.ts +0 -9
  120. package/src/lib/parsers/buildinfo.ts +0 -127
  121. package/src/lib/parsers/constants.ts +0 -56
  122. package/src/lib/parsers/index.ts +0 -6
  123. package/src/lib/parsers/job.ts +0 -160
  124. package/src/lib/parsers/source.ts +0 -129
  125. package/src/lib/parsers/template.ts +0 -135
  126. package/src/lib/provenance.ts +0 -785
  127. package/src/lib/std/templates/arachnid-deterministic-deployment-proxy.yaml +0 -68
  128. package/src/lib/std/templates/assured-deployment.yaml +0 -46
  129. package/src/lib/std/templates/era-evm-predeploy.yaml +0 -35
  130. package/src/lib/std/templates/erc-2470.yaml +0 -70
  131. package/src/lib/std/templates/min-balance.yaml +0 -35
  132. package/src/lib/std/templates/nano-universal-deployer.yaml +0 -61
  133. package/src/lib/std/templates/raw-erc-2470.yaml +0 -62
  134. package/src/lib/std/templates/raw-nano-universal-deployer.yaml +0 -54
  135. package/src/lib/std/templates/raw-sequence-universal-deployer-2.yaml +0 -52
  136. package/src/lib/std/templates/sequence-universal-deployer-2.yaml +0 -61
  137. package/src/lib/types/__tests__/json-request-action.spec.ts +0 -243
  138. package/src/lib/types/__tests__/read-json-value.spec.ts +0 -278
  139. package/src/lib/types/__tests__/resolve-json-value.spec.ts +0 -769
  140. package/src/lib/types/actions.ts +0 -148
  141. package/src/lib/types/artifacts.ts +0 -21
  142. package/src/lib/types/buildinfo.ts +0 -116
  143. package/src/lib/types/conditions.ts +0 -50
  144. package/src/lib/types/contracts.ts +0 -26
  145. package/src/lib/types/definitions.ts +0 -77
  146. package/src/lib/types/index.ts +0 -9
  147. package/src/lib/types/network.ts +0 -33
  148. package/src/lib/types/project.ts +0 -9
  149. package/src/lib/types/source.ts +0 -26
  150. package/src/lib/types/task.ts +0 -9
  151. package/src/lib/types/values.ts +0 -221
  152. package/src/lib/utils/assertion.ts +0 -24
  153. package/src/lib/utils/validation.ts +0 -116
  154. package/src/lib/validation/contract-references.ts +0 -210
  155. package/src/lib/validation/index.ts +0 -1
  156. package/src/lib/verification/__tests__/etherscan.spec.ts +0 -710
  157. package/src/lib/verification/__tests__/sourcify.spec.ts +0 -288
  158. package/src/lib/verification/etherscan.ts +0 -547
  159. package/src/lib/verification/sourcify.ts +0 -248
  160. package/test_validation/artifacts/TestContract.json +0 -9
  161. package/test_validation/jobs/test-missing.yaml +0 -16
  162. package/test_validation/networks.yaml +0 -3
  163. package/tsconfig.json +0 -36
@@ -1,248 +0,0 @@
1
- import { Network } from '../types/network'
2
- import { VerificationPlatform, VerificationRequest, VerificationResult } from './etherscan'
3
-
4
- export class SourcifyVerificationPlatform implements VerificationPlatform {
5
- readonly name = 'sourcify'
6
-
7
- supportsNetwork(network: Network): boolean {
8
- // Only support networks that explicitly include this platform in their supports list
9
- return Array.isArray(network.supports) && network.supports.includes(this.name)
10
- }
11
-
12
- isConfigured(): boolean {
13
- // Sourcify requires no configuration
14
- return true
15
- }
16
-
17
- getConfigurationRequirements(): string {
18
- return 'Sourcify requires no configuration'
19
- }
20
-
21
- async isContractAlreadyVerified(address: string, network: Network): Promise<boolean> {
22
- try {
23
- const response = await fetch(
24
- `https://sourcify.dev/server/check-by-addresses?addresses=${address}&chainIds=${network.chainId}`,
25
- {
26
- method: 'GET',
27
- signal: AbortSignal.timeout(15000), // 15 second timeout
28
- }
29
- )
30
-
31
- if (!response.ok) {
32
- return false
33
- }
34
-
35
- const data = await response.json()
36
-
37
- // Check if the contract is verified (perfect or partial match)
38
- return Array.isArray(data) && data.some(item =>
39
- item.address?.toLowerCase() === address.toLowerCase() &&
40
- item.chainId === network.chainId.toString() &&
41
- (item.status === 'perfect' || item.status === 'partial')
42
- )
43
- } catch (error) {
44
- // If we can't determine the verification status, assume it's not verified
45
- console.warn(`Failed to check Sourcify verification status for ${address}: ${error instanceof Error ? error.message : String(error)}`)
46
- return false
47
- }
48
- }
49
-
50
- async verifyContract(request: VerificationRequest): Promise<VerificationResult> {
51
- const { contract, buildInfo, address, network } = request
52
-
53
- // First check if it's already verified
54
- const alreadyVerified = await this.isContractAlreadyVerified(address, network)
55
- if (alreadyVerified) {
56
- return {
57
- success: true,
58
- message: 'Contract was already verified on Sourcify (checked before attempting verification)',
59
- isAlreadyVerified: true
60
- }
61
- }
62
-
63
- try {
64
- // Extract metadata and source files
65
- const { metadata, sourceFiles } = await this.createVerificationData(contract, buildInfo)
66
-
67
- // Use web standard FormData instead of node form-data package
68
- const formData = new FormData()
69
-
70
- formData.append('address', address)
71
- formData.append('chain', network.chainId.toString())
72
-
73
- // Upload files individually to Sourcify
74
- // First add the metadata.json
75
- const metadataJson = JSON.stringify(metadata, null, 2)
76
- const metadataBlob = new Blob([metadataJson], { type: 'application/json' })
77
- formData.append('files', metadataBlob, 'metadata.json')
78
-
79
- // Add each source file individually
80
- for (const [sourcePath, sourceContent] of sourceFiles) {
81
- const sourceBlob = new Blob([sourceContent], { type: 'text/plain' })
82
- formData.append('files', sourceBlob, sourcePath)
83
- }
84
-
85
- const response = await fetch('https://sourcify.dev/server/verify', {
86
- method: 'POST',
87
- body: formData,
88
- signal: AbortSignal.timeout(60000), // 60 second timeout for verification
89
- })
90
-
91
- if (!response.ok) {
92
- let responseText = ''
93
- try {
94
- responseText = await response.text()
95
- } catch {
96
- // ignore
97
- }
98
-
99
- // Treat partial verification conflicts as a non-error notice
100
- if (response.status === 409) {
101
- const lower = `${response.statusText} ${responseText}`.toLowerCase()
102
- if (
103
- lower.includes('already partially verified') ||
104
- lower.includes('partial match') ||
105
- lower.includes('partial')
106
- ) {
107
- return {
108
- success: true,
109
- message: 'Contract already partially verified on Sourcify (no further action needed)',
110
- isAlreadyVerified: true
111
- }
112
- }
113
- }
114
-
115
- let errorDetails = `HTTP ${response.status}: ${response.statusText}`
116
- if (responseText) {
117
- errorDetails += ` - ${responseText}`
118
- }
119
- return {
120
- success: false,
121
- message: `Sourcify API request failed: ${errorDetails}`
122
- }
123
- }
124
-
125
- const result = await response.json() as any
126
-
127
- // Check for different response formats
128
- if (result.result && Array.isArray(result.result)) {
129
- // Array response format - check if any items have perfect/partial status
130
- const perfectMatch = result.result.find((item: any) => item.status === 'perfect')
131
- const partialMatch = result.result.find((item: any) => item.status === 'partial')
132
-
133
- if (perfectMatch || partialMatch) {
134
- const matchType = perfectMatch ? 'perfect' : 'partial'
135
- return {
136
- success: true,
137
- message: `Contract verified successfully on Sourcify (${matchType} match)`
138
- }
139
- }
140
-
141
- return {
142
- success: false,
143
- message: 'Sourcify verification failed - no perfect or partial match found'
144
- }
145
- } else if (result.status) {
146
- // Single object response format
147
- if (result.status === 'perfect' || result.status === 'partial') {
148
- return {
149
- success: true,
150
- message: `Contract verified successfully on Sourcify (status: ${result.status})`
151
- }
152
- } else if (result.status === 'error') {
153
- return {
154
- success: false,
155
- message: result.message || 'Sourcify verification failed with unknown error'
156
- }
157
- } else {
158
- return {
159
- success: false,
160
- message: `Sourcify verification failed with status: ${result.status}`
161
- }
162
- }
163
- } else {
164
- // Unknown response format
165
- return {
166
- success: false,
167
- message: `Sourcify verification failed - unexpected response format: ${JSON.stringify(result)}`
168
- }
169
- }
170
- } catch (error) {
171
- return {
172
- success: false,
173
- message: `Sourcify verification failed: ${error instanceof Error ? error.message : String(error)}`
174
- }
175
- }
176
- }
177
-
178
- private async createVerificationData(contract: any, buildInfo: any): Promise<{
179
- metadata: any,
180
- sourceFiles: Array<[string, string]>
181
- }> {
182
- // Extract source files from the build info
183
- const sourceFiles: Array<[string, string]> = []
184
- for (const [sourcePath, sourceInfo] of Object.entries(buildInfo.input.sources) as [string, any][]) {
185
- if (sourceInfo.content) {
186
- sourceFiles.push([sourcePath, sourceInfo.content])
187
- }
188
- }
189
-
190
- // Try to find metadata from the contract's artifact if available
191
- let metadata = null
192
-
193
- // First, try to get metadata from the contract's artifact file
194
- try {
195
- // Look for artifact file in contract sources (convert Set to Array)
196
- const sources = Array.from(contract._sources) as string[]
197
- const artifactPath = sources.find((source) =>
198
- source.includes('/artifacts/') && source.endsWith('.json') && !source.includes('/build-info/')
199
- )
200
-
201
- if (artifactPath) {
202
- const fs = await import('fs/promises')
203
- const artifactContent = await fs.readFile(artifactPath, 'utf-8')
204
- const artifact = JSON.parse(artifactContent)
205
-
206
- // Use rawMetadata if available (it's a JSON string)
207
- if (artifact.rawMetadata) {
208
- metadata = JSON.parse(artifact.rawMetadata)
209
- } else if (artifact.metadata) {
210
- metadata = artifact.metadata
211
- }
212
- }
213
- } catch (error) {
214
- console.warn(`Failed to load artifact metadata: ${error instanceof Error ? error.message : String(error)}`)
215
- }
216
-
217
- // Fallback: look for metadata in the build info output
218
- if (!metadata && buildInfo.output?.contracts?.[contract.sourceName]?.[contract.contractName]?.metadata) {
219
- const metadataField = buildInfo.output.contracts[contract.sourceName][contract.contractName].metadata
220
- metadata = typeof metadataField === 'string' ? JSON.parse(metadataField) : metadataField
221
- }
222
-
223
- // Last resort fallback: create basic metadata from the input
224
- if (!metadata) {
225
- metadata = {
226
- compiler: {
227
- version: buildInfo.solcLongVersion || buildInfo.solcVersion
228
- },
229
- language: buildInfo.input.language,
230
- output: {
231
- abi: buildInfo.output?.contracts?.[contract.sourceName]?.[contract.contractName]?.abi || [],
232
- devdoc: { kind: 'dev', methods: {}, version: 1 },
233
- userdoc: { kind: 'user', methods: {}, version: 1 }
234
- },
235
- settings: buildInfo.input.settings,
236
- sources: buildInfo.input.sources,
237
- version: 1
238
- }
239
- }
240
-
241
- // Validation: ensure metadata has compilation target
242
- if (!metadata?.settings?.compilationTarget) {
243
- console.warn('Warning: Metadata missing compilation target')
244
- }
245
-
246
- return { metadata, sourceFiles }
247
- }
248
- }
@@ -1,9 +0,0 @@
1
- {
2
- "abi": [],
3
- "bytecode": {
4
- "object": "0x608060405234801561001057600080fd5b50600160008190555050607c8061002760003960006000f3fe"
5
- },
6
- "deployedBytecode": {
7
- "object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b14610044575b36600b57005b600080fd5b61005c600480360381019061005791906100a1565b610062565b005b600080fd5b6000813590506100da81610099565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011f906101c4565b60405180910390fd5b5080910390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060405190508061014e82610131565b8091505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b82818337600083901b82529050565b600060208284031215610178576101776100c7565b5b60006101868482850161007c565b91505092915050565b7f537472696e67206d757374206265206e6f6e2d656d7074790000000000000000600082015250565b60006101c560198361021f565b91506101d08261018f565b6020820190509190565b60006020820190508181036000830152610203816101bf565b9050919050565b600082825260208201905092915050565b5050565b565b005b00fea264697066735822122013e4c7c9dd8f5cc6c8b78b5e5b5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e64736f6c634300081e0033"
8
- }
9
- }
@@ -1,16 +0,0 @@
1
- name: "test-missing"
2
- version: "1.0.0"
3
- description: "Test job that references a non-existent contract"
4
-
5
- actions:
6
- - name: "deploy-valid"
7
- template: "sequence-universal-deployer-2"
8
- arguments:
9
- creationCode: "{{Contract(TestContract).creationCode}}"
10
- salt: "0"
11
-
12
- - name: "deploy-missing"
13
- template: "sequence-universal-deployer-2"
14
- arguments:
15
- creationCode: "{{Contract(NonExistentContract).creationCode}}"
16
- salt: "0"
@@ -1,3 +0,0 @@
1
- - name: "Test Network"
2
- chainId: 1337
3
- rpcUrl: "http://localhost:8545"
package/tsconfig.json DELETED
@@ -1,36 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2020",
4
- "module": "commonjs",
5
- "lib": ["ES2020"],
6
- "outDir": "./dist",
7
- "rootDir": "./src",
8
- "strict": true,
9
- "esModuleInterop": true,
10
- "skipLibCheck": true,
11
- "forceConsistentCasingInFileNames": true,
12
- "declaration": true,
13
- "declarationMap": true,
14
- "sourceMap": true,
15
- "removeComments": true,
16
- "noImplicitAny": true,
17
- "strictNullChecks": true,
18
- "strictFunctionTypes": true,
19
- "noImplicitThis": true,
20
- "noImplicitReturns": true,
21
- "noFallthroughCasesInSwitch": true,
22
- "moduleResolution": "node",
23
- "allowSyntheticDefaultImports": true,
24
- "experimentalDecorators": true,
25
- "emitDecoratorMetadata": true,
26
- "resolveJsonModule": true
27
- },
28
- "include": [
29
- "src/**/*"
30
- ],
31
- "exclude": [
32
- "node_modules",
33
- "dist",
34
- "**/*.test.ts"
35
- ]
36
- }