@pasosdejesus/contract-test 0.1.8 → 0.2.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.
- package/dist/compile.d.ts +51 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +356 -0
- package/dist/compile.js.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/solc-parity.d.ts +52 -0
- package/dist/solc-parity.d.ts.map +1 -0
- package/dist/solc-parity.js +155 -0
- package/dist/solc-parity.js.map +1 -0
- package/package.json +18 -7
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type CompileSettings } from './solc-parity.js';
|
|
2
|
+
export interface ProjectCompileConfig extends CompileSettings {
|
|
3
|
+
version?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface CompilerChoice {
|
|
6
|
+
kind: 'native' | 'solc-js';
|
|
7
|
+
version: string;
|
|
8
|
+
label: string;
|
|
9
|
+
compile(input: string): string;
|
|
10
|
+
}
|
|
11
|
+
export interface CompileResult {
|
|
12
|
+
app: string;
|
|
13
|
+
compiler: string;
|
|
14
|
+
version: string;
|
|
15
|
+
contracts: number;
|
|
16
|
+
artifacts: string[];
|
|
17
|
+
warnings: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function findContractsApp(root: string): string | null;
|
|
20
|
+
/** Reads `contracts.config.json`, else the `solidity` block of `hardhat.config`. */
|
|
21
|
+
export declare function readProjectConfig(appDir: string): ProjectCompileConfig;
|
|
22
|
+
export declare function solcJsVersion(solc: {
|
|
23
|
+
version(): string;
|
|
24
|
+
}): string;
|
|
25
|
+
/**
|
|
26
|
+
* Chooses the compiler. The native binary and solc-js must match the pin
|
|
27
|
+
* exactly; when there is no pin the native compiler is preferred, then solc-js.
|
|
28
|
+
*/
|
|
29
|
+
export declare function selectCompiler(options: {
|
|
30
|
+
version?: string;
|
|
31
|
+
solc?: string;
|
|
32
|
+
solcJs?: string;
|
|
33
|
+
appDir?: string;
|
|
34
|
+
}): CompilerChoice;
|
|
35
|
+
/** Collects project sources plus every imported file (relative and node_modules). */
|
|
36
|
+
export declare function collectSources(appDir: string): {
|
|
37
|
+
sources: Record<string, string>;
|
|
38
|
+
order: string[];
|
|
39
|
+
};
|
|
40
|
+
export declare function compileProject(options: {
|
|
41
|
+
root?: string;
|
|
42
|
+
solc?: string;
|
|
43
|
+
solcJs?: string;
|
|
44
|
+
version?: string;
|
|
45
|
+
optimize?: boolean;
|
|
46
|
+
runs?: number;
|
|
47
|
+
evmVersion?: string;
|
|
48
|
+
viaIR?: boolean;
|
|
49
|
+
}): CompileResult;
|
|
50
|
+
export declare function runContractCompile(args?: string[]): void;
|
|
51
|
+
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGtE,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe5D;AAUD,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAkCtE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,OAAO,IAAI,MAAM,CAAA;CAAE,GAAG,MAAM,CAEjE;AAiBD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,cAAc,CAuEjB;AAuBD,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAmDnG;AAMD,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,GAAG,aAAa,CAiEhB;AAoBD,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,IAAI,CAiB/E"}
|
package/dist/compile.js
ADDED
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* contract:compile — compile a project's Solidity sources without Hardhat.
|
|
3
|
+
*
|
|
4
|
+
* Compiler selection follows the version **pin**, never the pragma:
|
|
5
|
+
* 1. native `solc` (adJ 7.9 ships 0.8.37) when its version matches the pin;
|
|
6
|
+
* 2. a local soljson build (`--solc-js <file>`) when its version matches;
|
|
7
|
+
* 3. the installed `solc` (solc-js) package when its version matches.
|
|
8
|
+
* Otherwise it stops with an explicit message instead of silently changing the
|
|
9
|
+
* compiler, because the bytecode (and the explorer verification) depends on it.
|
|
10
|
+
*
|
|
11
|
+
* Artifacts use Hardhat's format so `sync-abis.mjs`, typechain and
|
|
12
|
+
* `contract:test` keep consuming them.
|
|
13
|
+
*
|
|
14
|
+
* https://gitlab.com/pasosdeJesus/m/-/work_items/52
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from 'fs';
|
|
17
|
+
import * as path from 'path';
|
|
18
|
+
import { spawnSync } from 'child_process';
|
|
19
|
+
import { createRequire } from 'module';
|
|
20
|
+
const require = createRequire(import.meta.url);
|
|
21
|
+
import { globSync } from 'glob';
|
|
22
|
+
import { standardInput } from './solc-parity.js';
|
|
23
|
+
import { info, success, problem, warn } from '@pasosdejesus/m/dist/util/colors.js';
|
|
24
|
+
const CONTRACTS_APPS = ['apps/contracts', 'apps/hardhat', 'hardhat'];
|
|
25
|
+
export function findContractsApp(root) {
|
|
26
|
+
for (const rel of CONTRACTS_APPS) {
|
|
27
|
+
const dir = path.join(root, rel);
|
|
28
|
+
if (!fs.existsSync(dir))
|
|
29
|
+
continue;
|
|
30
|
+
if (fs.existsSync(path.join(dir, 'hardhat.config.ts')) ||
|
|
31
|
+
fs.existsSync(path.join(dir, 'hardhat.config.js')) ||
|
|
32
|
+
fs.existsSync(path.join(dir, 'contracts'))) {
|
|
33
|
+
return dir;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Solidity-only project: the sources live in <root>/contracts.
|
|
37
|
+
if (fs.existsSync(path.join(root, 'contracts')))
|
|
38
|
+
return root;
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
function readJson(file) {
|
|
42
|
+
try {
|
|
43
|
+
return JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** Reads `contracts.config.json`, else the `solidity` block of `hardhat.config`. */
|
|
50
|
+
export function readProjectConfig(appDir) {
|
|
51
|
+
const explicit = readJson(path.join(appDir, 'contracts.config.json'));
|
|
52
|
+
if (explicit && (typeof explicit.solc === 'string' || typeof explicit.version === 'string')) {
|
|
53
|
+
return {
|
|
54
|
+
version: typeof explicit.solc === 'string' ? explicit.solc : explicit.version,
|
|
55
|
+
optimizer: explicit.optimizer,
|
|
56
|
+
evmVersion: explicit.evmVersion,
|
|
57
|
+
viaIR: explicit.viaIR === true,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
for (const name of ['hardhat.config.ts', 'hardhat.config.js']) {
|
|
61
|
+
const file = path.join(appDir, name);
|
|
62
|
+
if (!fs.existsSync(file))
|
|
63
|
+
continue;
|
|
64
|
+
const text = fs.readFileSync(file, 'utf-8');
|
|
65
|
+
const at = text.search(/solidity\s*:/);
|
|
66
|
+
if (at < 0)
|
|
67
|
+
continue;
|
|
68
|
+
const slice = text.slice(at, at + 2000);
|
|
69
|
+
const stringForm = slice.match(/solidity\s*:\s*['"]([0-9]+\.[0-9]+\.[0-9]+)['"]/);
|
|
70
|
+
const version = slice.match(/version\s*:\s*['"]([0-9]+\.[0-9]+\.[0-9]+)['"]/)?.[1] ?? stringForm?.[1];
|
|
71
|
+
const enabled = slice.match(/optimizer\s*:\s*\{[^}]*enabled\s*:\s*(true|false)/)?.[1];
|
|
72
|
+
const runs = slice.match(/runs\s*:\s*(\d+)/)?.[1];
|
|
73
|
+
const evmVersion = slice.match(/evmVersion\s*:\s*['"]([\w-]+)['"]/)?.[1];
|
|
74
|
+
const viaIR = slice.match(/viaIR\s*:\s*(true|false)/)?.[1];
|
|
75
|
+
return {
|
|
76
|
+
version,
|
|
77
|
+
...(enabled ? { optimizer: { enabled: enabled === 'true', runs: runs ? Number(runs) : 200 } } : {}),
|
|
78
|
+
...(evmVersion ? { evmVersion } : {}),
|
|
79
|
+
...(viaIR === 'true' ? { viaIR: true } : {}),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return {};
|
|
83
|
+
}
|
|
84
|
+
export function solcJsVersion(solc) {
|
|
85
|
+
return solc.version().split('+')[0].split('.Emscripten')[0];
|
|
86
|
+
}
|
|
87
|
+
function nativeSolcVersion(binary) {
|
|
88
|
+
const run = spawnSync(binary, ['--version'], { encoding: 'utf-8' });
|
|
89
|
+
if (run.status !== 0 || !run.stdout)
|
|
90
|
+
return null;
|
|
91
|
+
const line = run.stdout.split('\n').find((entry) => entry.includes('Version:'));
|
|
92
|
+
return line ? line.replace(/.*Version:\s*/, '').split('+')[0].split('.Emscripten')[0].trim() : null;
|
|
93
|
+
}
|
|
94
|
+
function loadSolcJs(pathOrModule) {
|
|
95
|
+
if (pathOrModule.includes('/') || pathOrModule.endsWith('.js')) {
|
|
96
|
+
const wrapper = require('solc/wrapper');
|
|
97
|
+
return wrapper(fs.readFileSync(pathOrModule));
|
|
98
|
+
}
|
|
99
|
+
return require(pathOrModule);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Chooses the compiler. The native binary and solc-js must match the pin
|
|
103
|
+
* exactly; when there is no pin the native compiler is preferred, then solc-js.
|
|
104
|
+
*/
|
|
105
|
+
export function selectCompiler(options) {
|
|
106
|
+
const pin = options.version;
|
|
107
|
+
const candidates = [];
|
|
108
|
+
if (options.solc)
|
|
109
|
+
candidates.push(options.solc);
|
|
110
|
+
if (process.env.SOLC)
|
|
111
|
+
candidates.push(process.env.SOLC);
|
|
112
|
+
candidates.push('solc');
|
|
113
|
+
for (const binary of candidates) {
|
|
114
|
+
const version = nativeSolcVersion(binary);
|
|
115
|
+
if (!version)
|
|
116
|
+
continue;
|
|
117
|
+
if (pin && version !== pin)
|
|
118
|
+
continue;
|
|
119
|
+
return {
|
|
120
|
+
kind: 'native',
|
|
121
|
+
version,
|
|
122
|
+
label: `${binary} (native)`,
|
|
123
|
+
compile: (input) => {
|
|
124
|
+
const run = spawnSync(binary, ['--standard-json', '--base-path', options.appDir ?? process.cwd()], {
|
|
125
|
+
input,
|
|
126
|
+
encoding: 'utf-8',
|
|
127
|
+
maxBuffer: 200 * 1024 * 1024,
|
|
128
|
+
});
|
|
129
|
+
if (!run.stdout)
|
|
130
|
+
throw new Error(run.stderr || `solc exited with ${run.status}`);
|
|
131
|
+
return run.stdout;
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (options.solcJs) {
|
|
136
|
+
const module = loadSolcJs(options.solcJs);
|
|
137
|
+
const version = solcJsVersion(module);
|
|
138
|
+
if (pin && version !== pin) {
|
|
139
|
+
throw new Error(`solc-js at ${options.solcJs} is ${version}, but the project pins ${pin}`);
|
|
140
|
+
}
|
|
141
|
+
return { kind: 'solc-js', version, label: `${options.solcJs} (solc-js)`, compile: (input) => module.compile(input) };
|
|
142
|
+
}
|
|
143
|
+
// The project's own `solc` wins (it declares the pin); contract-test ships
|
|
144
|
+
// one too so the template compiles out of the box.
|
|
145
|
+
const modules = [];
|
|
146
|
+
if (options.appDir) {
|
|
147
|
+
try {
|
|
148
|
+
const projectRequire = createRequire(path.join(options.appDir, 'package.json'));
|
|
149
|
+
modules.push({ label: 'solc (proyecto)', module: projectRequire('solc') });
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// The project does not declare solc; fall through to the bundled one.
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
try {
|
|
156
|
+
modules.push({ label: 'solc-js', module: loadSolcJs('solc') });
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// Not installed (trimmed install); the error below explains what to do.
|
|
160
|
+
}
|
|
161
|
+
for (const { label, module } of modules) {
|
|
162
|
+
const version = solcJsVersion(module);
|
|
163
|
+
if (!pin || version === pin) {
|
|
164
|
+
return { kind: 'solc-js', version, label: `${label} ${version}`, compile: (input) => module.compile(input) };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (modules.length > 0) {
|
|
168
|
+
throw new Error(`the project pins solc ${pin} but the available solc-js are ` +
|
|
169
|
+
`${modules.map((entry) => solcJsVersion(entry.module)).join(', ')}; ` +
|
|
170
|
+
`install solc@${pin} or pass --solc-js <soljson file>`);
|
|
171
|
+
}
|
|
172
|
+
throw new Error(`no compiler for solc ${pin ?? '(unpinned)'}: install the native solc, ` +
|
|
173
|
+
'run `pnpm add -D solc@<version>`, or pass `--solc-js <soljson file>`');
|
|
174
|
+
}
|
|
175
|
+
function posix(value) {
|
|
176
|
+
return value.split(path.sep).join('/');
|
|
177
|
+
}
|
|
178
|
+
function readRemappings(appDir) {
|
|
179
|
+
for (const name of ['remappings.txt', 'remappings']) {
|
|
180
|
+
const file = path.join(appDir, name);
|
|
181
|
+
if (!fs.existsSync(file))
|
|
182
|
+
continue;
|
|
183
|
+
return fs
|
|
184
|
+
.readFileSync(file, 'utf-8')
|
|
185
|
+
.split('\n')
|
|
186
|
+
.map((line) => line.trim())
|
|
187
|
+
.filter((line) => line && !line.startsWith('#'))
|
|
188
|
+
.map((line) => {
|
|
189
|
+
const [from, to] = line.split('=');
|
|
190
|
+
return [from.trim(), (to ?? '').trim()];
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return [];
|
|
194
|
+
}
|
|
195
|
+
/** Collects project sources plus every imported file (relative and node_modules). */
|
|
196
|
+
export function collectSources(appDir) {
|
|
197
|
+
const sources = {};
|
|
198
|
+
const remappings = readRemappings(appDir);
|
|
199
|
+
const projectRequire = createRequire(path.join(appDir, 'package.json'));
|
|
200
|
+
const queue = [];
|
|
201
|
+
for (const file of globSync('contracts/**/*.sol', { cwd: appDir }).sort()) {
|
|
202
|
+
const key = posix(file);
|
|
203
|
+
queue.push({ key, abs: path.join(appDir, file) });
|
|
204
|
+
}
|
|
205
|
+
if (queue.length === 0)
|
|
206
|
+
throw new Error(`no contracts/**/*.sol under ${appDir}`);
|
|
207
|
+
while (queue.length > 0) {
|
|
208
|
+
const { key, abs } = queue.shift();
|
|
209
|
+
if (sources[key])
|
|
210
|
+
continue;
|
|
211
|
+
const content = fs.readFileSync(abs, 'utf-8');
|
|
212
|
+
sources[key] = content;
|
|
213
|
+
const importRe = /\bimport\s+(?:[^'";]*?\bfrom\s*)?["']([^"']+)["']/g;
|
|
214
|
+
let match;
|
|
215
|
+
while ((match = importRe.exec(content))) {
|
|
216
|
+
let specifier = match[1];
|
|
217
|
+
for (const [from, to] of remappings) {
|
|
218
|
+
if (specifier.startsWith(from)) {
|
|
219
|
+
specifier = to + specifier.slice(from.length);
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (sources[specifier])
|
|
224
|
+
continue;
|
|
225
|
+
if (specifier.startsWith('.')) {
|
|
226
|
+
const importedKey = posix(path.posix.normalize(path.posix.join(path.posix.dirname(key), specifier)));
|
|
227
|
+
if (!sources[importedKey]) {
|
|
228
|
+
queue.push({ key: importedKey, abs: path.resolve(path.dirname(abs), specifier) });
|
|
229
|
+
}
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
let importedAbs = null;
|
|
233
|
+
try {
|
|
234
|
+
importedAbs = projectRequire.resolve(specifier);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
const fallback = path.join(appDir, 'node_modules', specifier);
|
|
238
|
+
if (fs.existsSync(fallback))
|
|
239
|
+
importedAbs = fallback;
|
|
240
|
+
}
|
|
241
|
+
if (!importedAbs)
|
|
242
|
+
throw new Error(`${key}: cannot resolve import "${specifier}"`);
|
|
243
|
+
queue.push({ key: specifier, abs: importedAbs });
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return { sources, order: Object.keys(sources).sort() };
|
|
247
|
+
}
|
|
248
|
+
function artifactDir(appDir, sourceName) {
|
|
249
|
+
return path.join(appDir, 'artifacts', sourceName);
|
|
250
|
+
}
|
|
251
|
+
export function compileProject(options) {
|
|
252
|
+
const root = path.resolve(options.root ?? process.cwd());
|
|
253
|
+
const app = findContractsApp(root);
|
|
254
|
+
if (!app)
|
|
255
|
+
throw new Error('no contracts app found (apps/contracts, apps/hardhat or hardhat/)');
|
|
256
|
+
const config = readProjectConfig(app);
|
|
257
|
+
const version = options.version ?? config.version;
|
|
258
|
+
const settings = {
|
|
259
|
+
optimizer: {
|
|
260
|
+
enabled: options.optimize ?? config.optimizer?.enabled ?? false,
|
|
261
|
+
runs: options.runs ?? config.optimizer?.runs ?? 200,
|
|
262
|
+
},
|
|
263
|
+
...(options.evmVersion ?? config.evmVersion ? { evmVersion: options.evmVersion ?? config.evmVersion } : {}),
|
|
264
|
+
...(options.viaIR ?? config.viaIR ? { viaIR: options.viaIR ?? config.viaIR } : {}),
|
|
265
|
+
};
|
|
266
|
+
const compiler = selectCompiler({ version, solc: options.solc, solcJs: options.solcJs, appDir: app });
|
|
267
|
+
const { sources, order } = collectSources(app);
|
|
268
|
+
const input = standardInput(sources, settings);
|
|
269
|
+
const output = JSON.parse(compiler.compile(input));
|
|
270
|
+
const errors = (output.errors ?? [])
|
|
271
|
+
.filter((entry) => entry.severity === 'error')
|
|
272
|
+
.map((entry) => entry.formattedMessage);
|
|
273
|
+
if (errors.length > 0)
|
|
274
|
+
throw new Error(`solc errors:\n${errors.join('\n')}`);
|
|
275
|
+
const artifacts = [];
|
|
276
|
+
for (const [sourceName, names] of Object.entries((output.contracts ?? {}))) {
|
|
277
|
+
for (const [name, data] of Object.entries(names)) {
|
|
278
|
+
const dir = artifactDir(app, sourceName);
|
|
279
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
280
|
+
const file = path.join(dir, `${name}.json`);
|
|
281
|
+
fs.writeFileSync(file, JSON.stringify({
|
|
282
|
+
_format: 'hh-sol-artifact-1',
|
|
283
|
+
contractName: name,
|
|
284
|
+
sourceName,
|
|
285
|
+
abi: data.abi ?? [],
|
|
286
|
+
bytecode: `0x${data.evm?.bytecode?.object ?? ''}`,
|
|
287
|
+
deployedBytecode: `0x${data.evm?.deployedBytecode?.object ?? ''}`,
|
|
288
|
+
linkReferences: data.evm?.bytecode?.linkReferences ?? {},
|
|
289
|
+
deployedLinkReferences: data.evm?.deployedBytecode?.linkReferences ?? {},
|
|
290
|
+
}, null, 2));
|
|
291
|
+
artifacts.push(path.relative(root, file));
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
const warnings = (output.errors ?? [])
|
|
295
|
+
.filter((entry) => entry.severity === 'warning')
|
|
296
|
+
.map((entry) => entry.formattedMessage);
|
|
297
|
+
return {
|
|
298
|
+
app: app === root ? '.' : path.relative(root, app),
|
|
299
|
+
compiler: compiler.label,
|
|
300
|
+
version: compiler.version,
|
|
301
|
+
contracts: Object.values((output.contracts ?? {}))
|
|
302
|
+
.reduce((total, names) => total + Object.keys(names).length, 0),
|
|
303
|
+
artifacts,
|
|
304
|
+
warnings,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
function parseArgs(args) {
|
|
308
|
+
const options = {};
|
|
309
|
+
for (let index = 0; index < args.length; index++) {
|
|
310
|
+
const arg = args[index];
|
|
311
|
+
if (arg === '--root')
|
|
312
|
+
options.root = args[++index];
|
|
313
|
+
else if (arg === '--solc')
|
|
314
|
+
options.solc = args[++index];
|
|
315
|
+
else if (arg === '--solc-js')
|
|
316
|
+
options.solcJs = args[++index];
|
|
317
|
+
else if (arg === '--solc-version')
|
|
318
|
+
options.version = args[++index];
|
|
319
|
+
else if (arg === '--optimize')
|
|
320
|
+
options.optimize = true;
|
|
321
|
+
else if (arg === '--no-optimize')
|
|
322
|
+
options.optimize = false;
|
|
323
|
+
else if (arg === '--runs')
|
|
324
|
+
options.runs = Number(args[++index]);
|
|
325
|
+
else if (arg === '--evm-version')
|
|
326
|
+
options.evmVersion = args[++index];
|
|
327
|
+
else if (arg === '--via-ir')
|
|
328
|
+
options.viaIR = true;
|
|
329
|
+
else if (arg === '--json')
|
|
330
|
+
options.json = true;
|
|
331
|
+
}
|
|
332
|
+
return options;
|
|
333
|
+
}
|
|
334
|
+
export function runContractCompile(args = process.argv.slice(3)) {
|
|
335
|
+
const options = parseArgs(args);
|
|
336
|
+
try {
|
|
337
|
+
const result = compileProject(options);
|
|
338
|
+
if (options.json) {
|
|
339
|
+
console.log(JSON.stringify(result, null, 2));
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
info(`Compilador: ${result.compiler} (${result.version})`);
|
|
343
|
+
success(` [OK] ${result.contracts} contrato(s) en ${result.artifacts.length} artefacto(s)`);
|
|
344
|
+
for (const warning of result.warnings.slice(0, 5))
|
|
345
|
+
warn(` ${warning.split('\n')[0]}`);
|
|
346
|
+
if (result.warnings.length > 5)
|
|
347
|
+
warn(` … ${result.warnings.length - 5} aviso(s) más`);
|
|
348
|
+
}
|
|
349
|
+
process.exit(0);
|
|
350
|
+
}
|
|
351
|
+
catch (error) {
|
|
352
|
+
problem(error instanceof Error ? error.message : String(error));
|
|
353
|
+
process.exit(1);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -20,5 +20,12 @@ registerCommands({
|
|
|
20
20
|
},
|
|
21
21
|
description: 'Verify deployment addresses in deployments/ and that sources read them from there',
|
|
22
22
|
},
|
|
23
|
+
'contract:compile': {
|
|
24
|
+
handler: async () => {
|
|
25
|
+
const { runContractCompile } = await import('./compile.js');
|
|
26
|
+
runContractCompile();
|
|
27
|
+
},
|
|
28
|
+
description: 'Compile Solidity with native solc or solc-js (no Hardhat), writing Hardhat artifacts',
|
|
29
|
+
},
|
|
23
30
|
});
|
|
24
31
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,gBAAgB,CAAC;IACf,eAAe,EAAE;QACf,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;YACvD,MAAM,eAAe,EAAE,CAAA;QACzB,CAAC;QACD,WAAW,EAAE,8EAA8E;KAC5F;IACD,sBAAsB,EAAE;QACtB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAC5D,cAAc,EAAE,CAAA;QAClB,CAAC;QACD,WAAW,EAAE,mFAAmF;KACjG;CACF,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,gBAAgB,CAAC;IACf,eAAe,EAAE;QACf,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;YACvD,MAAM,eAAe,EAAE,CAAA;QACzB,CAAC;QACD,WAAW,EAAE,8EAA8E;KAC5F;IACD,sBAAsB,EAAE;QACtB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAC5D,cAAc,EAAE,CAAA;QAClB,CAAC;QACD,WAAW,EAAE,mFAAmF;KACjG;IACD,kBAAkB,EAAE;QAClB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;YAC3D,kBAAkB,EAAE,CAAA;QACtB,CAAC;QACD,WAAW,EAAE,sFAAsF;KACpG;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface CompileSettings {
|
|
2
|
+
optimizer?: {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
runs?: number;
|
|
5
|
+
};
|
|
6
|
+
evmVersion?: string;
|
|
7
|
+
viaIR?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ContractOutput {
|
|
10
|
+
abi: unknown[];
|
|
11
|
+
methodIdentifiers: Record<string, string>;
|
|
12
|
+
storageLayout?: unknown;
|
|
13
|
+
bytecode: string;
|
|
14
|
+
deployedBytecode: string;
|
|
15
|
+
}
|
|
16
|
+
export interface Compiled {
|
|
17
|
+
version: string;
|
|
18
|
+
contracts: Record<string, ContractOutput>;
|
|
19
|
+
errors: string[];
|
|
20
|
+
warnings: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface ContractParity {
|
|
23
|
+
contract: string;
|
|
24
|
+
abiEqual: boolean;
|
|
25
|
+
selectorsEqual: boolean;
|
|
26
|
+
storageEqual: boolean;
|
|
27
|
+
bytecodeEqual: boolean;
|
|
28
|
+
deployedEqual: boolean;
|
|
29
|
+
deployedDifferingBytes: number;
|
|
30
|
+
deployedTotalBytes: number;
|
|
31
|
+
missingInCandidate: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface ParityReport {
|
|
34
|
+
referenceVersion: string;
|
|
35
|
+
candidateVersion: string;
|
|
36
|
+
sameVersion: boolean;
|
|
37
|
+
contracts: ContractParity[];
|
|
38
|
+
ok: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface SolcJs {
|
|
41
|
+
compile(input: string): string;
|
|
42
|
+
version(): string;
|
|
43
|
+
}
|
|
44
|
+
/** Removes the CBOR metadata blob Solidity appends to bytecode. */
|
|
45
|
+
export declare function stripMetadata(hex: string): string;
|
|
46
|
+
export declare function standardInput(sources: Record<string, string>, settings?: CompileSettings): string;
|
|
47
|
+
export declare function parseOutput(output: string, version: string): Compiled;
|
|
48
|
+
export declare function compileWithSolcJs(solc: SolcJs, input: string): Compiled;
|
|
49
|
+
export declare function compileWithNative(solcPath: string, input: string, basePath: string): Compiled;
|
|
50
|
+
/** Compares ABI, selectors, storage layout and (metadata-stripped) bytecode. */
|
|
51
|
+
export declare function compareCompilers(reference: Compiled, candidate: Compiled): ParityReport;
|
|
52
|
+
//# sourceMappingURL=solc-parity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solc-parity.d.ts","sourceRoot":"","sources":["../src/solc-parity.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,OAAO,EAAE,CAAA;IACd,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACzC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,aAAa,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,OAAO,CAAA;IACtB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,kBAAkB,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,EAAE,cAAc,EAAE,CAAA;IAC3B,EAAE,EAAE,OAAO,CAAA;CACZ;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,OAAO,IAAI,MAAM,CAAA;CAClB;AAkBD,mEAAmE;AACnE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAE,eAAoB,GAAG,MAAM,CAwBrG;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAqBrE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAEvE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAgB7F;AAyCD,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,YAAY,CAavF"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compare two Solidity compilers (Hardhat's solc-js against the system `solc`
|
|
3
|
+
* of adJ) with the same sources and settings.
|
|
4
|
+
*
|
|
5
|
+
* The goal is to measure fidelity before dropping Hardhat: ABI, selectors and
|
|
6
|
+
* storage layout must match; bytecode must match after stripping the CBOR
|
|
7
|
+
* metadata when both compilers are the same version.
|
|
8
|
+
*
|
|
9
|
+
* https://gitlab.com/pasosdeJesus/m/-/work_items/58
|
|
10
|
+
*/
|
|
11
|
+
import { spawnSync } from 'child_process';
|
|
12
|
+
function normalizeHex(value) {
|
|
13
|
+
const raw = value.startsWith('0x') ? value.slice(2) : value;
|
|
14
|
+
return `0x${raw.toLowerCase()}`;
|
|
15
|
+
}
|
|
16
|
+
function stable(value) {
|
|
17
|
+
if (Array.isArray(value))
|
|
18
|
+
return `[${value.map(stable).join(',')}]`;
|
|
19
|
+
if (value && typeof value === 'object') {
|
|
20
|
+
const entries = Object.entries(value)
|
|
21
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
22
|
+
.map(([key, item]) => `${JSON.stringify(key)}:${stable(item)}`);
|
|
23
|
+
return `{${entries.join(',')}}`;
|
|
24
|
+
}
|
|
25
|
+
return JSON.stringify(value);
|
|
26
|
+
}
|
|
27
|
+
/** Removes the CBOR metadata blob Solidity appends to bytecode. */
|
|
28
|
+
export function stripMetadata(hex) {
|
|
29
|
+
const raw = hex.startsWith('0x') ? hex.slice(2) : hex;
|
|
30
|
+
if (raw.length < 4 || raw.length % 2 !== 0)
|
|
31
|
+
return raw;
|
|
32
|
+
const length = parseInt(raw.slice(-4), 16);
|
|
33
|
+
if (!Number.isFinite(length))
|
|
34
|
+
return raw;
|
|
35
|
+
const total = (length + 2) * 2;
|
|
36
|
+
if (total > raw.length)
|
|
37
|
+
return raw;
|
|
38
|
+
return raw.slice(0, raw.length - total);
|
|
39
|
+
}
|
|
40
|
+
export function standardInput(sources, settings = {}) {
|
|
41
|
+
return JSON.stringify({
|
|
42
|
+
language: 'Solidity',
|
|
43
|
+
sources: Object.fromEntries(Object.entries(sources).map(([name, content]) => [name, { content }])),
|
|
44
|
+
settings: {
|
|
45
|
+
optimizer: { enabled: settings.optimizer?.enabled ?? false, runs: settings.optimizer?.runs ?? 200 },
|
|
46
|
+
...(settings.evmVersion ? { evmVersion: settings.evmVersion } : {}),
|
|
47
|
+
...(settings.viaIR ? { viaIR: true } : {}),
|
|
48
|
+
outputSelection: {
|
|
49
|
+
'*': {
|
|
50
|
+
'*': [
|
|
51
|
+
'abi',
|
|
52
|
+
'evm.methodIdentifiers',
|
|
53
|
+
'evm.bytecode.object',
|
|
54
|
+
'evm.bytecode.linkReferences',
|
|
55
|
+
'evm.deployedBytecode.object',
|
|
56
|
+
'evm.deployedBytecode.linkReferences',
|
|
57
|
+
'storageLayout',
|
|
58
|
+
'metadata',
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
export function parseOutput(output, version) {
|
|
66
|
+
const parsed = JSON.parse(output);
|
|
67
|
+
const contracts = {};
|
|
68
|
+
for (const [source, names] of Object.entries((parsed.contracts ?? {}))) {
|
|
69
|
+
for (const [name, data] of Object.entries(names)) {
|
|
70
|
+
contracts[`${source}:${name}`] = {
|
|
71
|
+
abi: data.abi ?? [],
|
|
72
|
+
methodIdentifiers: data.evm?.methodIdentifiers ?? {},
|
|
73
|
+
storageLayout: data.storageLayout,
|
|
74
|
+
bytecode: normalizeHex(data.evm?.bytecode?.object ?? ''),
|
|
75
|
+
deployedBytecode: normalizeHex(data.evm?.deployedBytecode?.object ?? ''),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const diagnostics = (parsed.errors ?? []);
|
|
80
|
+
return {
|
|
81
|
+
version,
|
|
82
|
+
contracts,
|
|
83
|
+
errors: diagnostics.filter((entry) => entry.severity === 'error').map((entry) => entry.formattedMessage),
|
|
84
|
+
warnings: diagnostics.filter((entry) => entry.severity === 'warning').map((entry) => entry.formattedMessage),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function compileWithSolcJs(solc, input) {
|
|
88
|
+
return parseOutput(solc.compile(input), solc.version());
|
|
89
|
+
}
|
|
90
|
+
export function compileWithNative(solcPath, input, basePath) {
|
|
91
|
+
const versionRun = spawnSync(solcPath, ['--version'], { encoding: 'utf-8' });
|
|
92
|
+
const version = (versionRun.stdout ?? '')
|
|
93
|
+
.split('\n')
|
|
94
|
+
.find((line) => line.includes('Version:'))
|
|
95
|
+
?.replace(/.*Version:\s*/, '')
|
|
96
|
+
.split('.Emscripten')[0]
|
|
97
|
+
.trim() ?? 'unknown';
|
|
98
|
+
const run = spawnSync(solcPath, ['--standard-json', '--base-path', basePath, '--include-path', basePath], { input, encoding: 'utf-8', maxBuffer: 200 * 1024 * 1024 });
|
|
99
|
+
if (!run.stdout)
|
|
100
|
+
throw new Error(run.stderr || `solc exited with ${run.status}`);
|
|
101
|
+
return parseOutput(run.stdout, version);
|
|
102
|
+
}
|
|
103
|
+
function byteDifference(reference, candidate) {
|
|
104
|
+
const a = reference.startsWith('0x') ? reference.slice(2) : reference;
|
|
105
|
+
const b = candidate.startsWith('0x') ? candidate.slice(2) : candidate;
|
|
106
|
+
const total = Math.max(a.length, b.length) / 2;
|
|
107
|
+
let differing = Math.abs(a.length - b.length) / 2;
|
|
108
|
+
for (let index = 0; index < Math.min(a.length, b.length); index += 2) {
|
|
109
|
+
if (a.slice(index, index + 2) !== b.slice(index, index + 2))
|
|
110
|
+
differing++;
|
|
111
|
+
}
|
|
112
|
+
return { differing, total };
|
|
113
|
+
}
|
|
114
|
+
function compareContract(name, reference, candidate) {
|
|
115
|
+
if (!candidate) {
|
|
116
|
+
return {
|
|
117
|
+
contract: name,
|
|
118
|
+
abiEqual: false,
|
|
119
|
+
selectorsEqual: false,
|
|
120
|
+
storageEqual: false,
|
|
121
|
+
bytecodeEqual: false,
|
|
122
|
+
deployedEqual: false,
|
|
123
|
+
deployedDifferingBytes: 0,
|
|
124
|
+
deployedTotalBytes: 0,
|
|
125
|
+
missingInCandidate: true,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
const deployed = byteDifference(stripMetadata(reference.deployedBytecode), stripMetadata(candidate.deployedBytecode));
|
|
129
|
+
return {
|
|
130
|
+
contract: name,
|
|
131
|
+
abiEqual: stable(reference.abi) === stable(candidate.abi),
|
|
132
|
+
selectorsEqual: stable(reference.methodIdentifiers) === stable(candidate.methodIdentifiers),
|
|
133
|
+
storageEqual: stable(reference.storageLayout) === stable(candidate.storageLayout),
|
|
134
|
+
bytecodeEqual: stripMetadata(reference.bytecode) === stripMetadata(candidate.bytecode),
|
|
135
|
+
deployedEqual: deployed.differing === 0,
|
|
136
|
+
deployedDifferingBytes: deployed.differing,
|
|
137
|
+
deployedTotalBytes: deployed.total,
|
|
138
|
+
missingInCandidate: false,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/** Compares ABI, selectors, storage layout and (metadata-stripped) bytecode. */
|
|
142
|
+
export function compareCompilers(reference, candidate) {
|
|
143
|
+
const names = [...new Set([...Object.keys(reference.contracts), ...Object.keys(candidate.contracts)])].sort();
|
|
144
|
+
const contracts = names.map((name) => compareContract(name, reference.contracts[name], candidate.contracts[name]));
|
|
145
|
+
return {
|
|
146
|
+
referenceVersion: reference.version,
|
|
147
|
+
candidateVersion: candidate.version,
|
|
148
|
+
sameVersion: reference.version.split('+')[0] === candidate.version.split('+')[0],
|
|
149
|
+
contracts,
|
|
150
|
+
ok: reference.errors.length === 0 &&
|
|
151
|
+
candidate.errors.length === 0 &&
|
|
152
|
+
contracts.every((entry) => entry.abiEqual && entry.selectorsEqual && entry.storageEqual),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=solc-parity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solc-parity.js","sourceRoot":"","sources":["../src/solc-parity.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pasosdejesus/contract-test",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Hardhat test runner for OpenBSD — Mocha + @ethereumjs/vm EDR fallback",
|
|
5
5
|
"mEngine": true,
|
|
6
6
|
"author": "",
|
|
@@ -22,24 +22,35 @@
|
|
|
22
22
|
"m-engine.json"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@pasosdejesus/edr": "0.
|
|
25
|
+
"@pasosdejesus/edr": "0.2.0",
|
|
26
26
|
"glob": "^13.0.6",
|
|
27
|
-
"mocha": "^11.7.6"
|
|
27
|
+
"mocha": "^11.7.6",
|
|
28
|
+
"solc": "0.8.26"
|
|
28
29
|
},
|
|
29
30
|
"peerDependencies": {
|
|
30
|
-
"@pasosdejesus/m": "^0.
|
|
31
|
+
"@pasosdejesus/m": "^0.36.0",
|
|
31
32
|
"ethers": "^6",
|
|
32
33
|
"viem": "^2"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
|
-
"typescript": "^5.9.3",
|
|
36
|
-
"@types/node": "^20.19.41",
|
|
37
36
|
"@types/mocha": "^10.0.10",
|
|
37
|
+
"@types/node": "^20.19.41",
|
|
38
|
+
"solc037": "npm:solc@0.8.37",
|
|
39
|
+
"typescript": "^5.9.3",
|
|
38
40
|
"vitest": "^3.2.6"
|
|
39
41
|
},
|
|
42
|
+
"peerDependenciesMeta": {
|
|
43
|
+
"ethers": {
|
|
44
|
+
"optional": true
|
|
45
|
+
},
|
|
46
|
+
"viem": {
|
|
47
|
+
"optional": true
|
|
48
|
+
}
|
|
49
|
+
},
|
|
40
50
|
"scripts": {
|
|
41
51
|
"build": "test -f dist/index.js || rm -f tsconfig.tsbuildinfo; npx tsc -b",
|
|
42
52
|
"test": "npx vitest run",
|
|
43
|
-
"typecheck": "npx tsc -b --pretty false"
|
|
53
|
+
"typecheck": "npx tsc -b --pretty false",
|
|
54
|
+
"solc-parity": "node scripts/solc-parity.mjs"
|
|
44
55
|
}
|
|
45
56
|
}
|