gate-evm-tools 1.0.19 → 1.0.21
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/README.md +25 -0
- package/bin/cli.js +7 -3
- package/bin/manifest-bootstrap.js +88 -0
- package/dist/commands/check.js +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +1 -0
- package/dist/commands/sync.js.map +1 -1
- package/dist/core/{bytecodeChecker.d.ts → BytecodeChecker.d.ts} +1 -1
- package/dist/core/{bytecodeChecker.d.ts.map → BytecodeChecker.d.ts.map} +1 -1
- package/dist/core/{bytecodeChecker.js → BytecodeChecker.js} +1 -1
- package/dist/core/{bytecodeChecker.js.map → BytecodeChecker.js.map} +1 -1
- package/dist/core/syncUpgradeJson.d.ts +3 -0
- package/dist/core/syncUpgradeJson.d.ts.map +1 -1
- package/dist/core/syncUpgradeJson.js +201 -216
- package/dist/core/syncUpgradeJson.js.map +1 -1
- package/dist/core/validateAndGenerateCalldata.d.ts.map +1 -1
- package/dist/core/validateAndGenerateCalldata.js +153 -119
- package/dist/core/validateAndGenerateCalldata.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/manifestTransaction.d.ts +40 -0
- package/dist/utils/manifestTransaction.d.ts.map +1 -0
- package/dist/utils/manifestTransaction.js +291 -0
- package/dist/utils/manifestTransaction.js.map +1 -0
- package/dist/utils/openzeppelin.d.ts +11 -0
- package/dist/utils/openzeppelin.d.ts.map +1 -0
- package/dist/utils/openzeppelin.js +49 -0
- package/dist/utils/openzeppelin.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
const hashContents = (contents) => crypto
|
|
5
|
+
.createHash('sha256')
|
|
6
|
+
.update(contents ?? Buffer.from('<missing>'))
|
|
7
|
+
.digest('hex');
|
|
8
|
+
const SAFE_MANIFEST_DIRECTORY = /^\.openzeppelin(?:\.[a-z0-9][a-z0-9-]*)?$/;
|
|
9
|
+
const SAFE_MANIFEST_FILE = /^[a-z0-9][a-z0-9-]*\.json$/;
|
|
10
|
+
const errorCode = (error) => (error && typeof error === 'object' && 'code' in error
|
|
11
|
+
? String(error.code)
|
|
12
|
+
: undefined);
|
|
13
|
+
const confinedManifestFile = (root, requestedFile) => {
|
|
14
|
+
const projectRoot = path.resolve(root);
|
|
15
|
+
const absolute = path.isAbsolute(requestedFile)
|
|
16
|
+
? path.resolve(requestedFile)
|
|
17
|
+
: path.resolve(projectRoot, requestedFile);
|
|
18
|
+
const relative = path.relative(projectRoot, absolute);
|
|
19
|
+
if (!relative
|
|
20
|
+
|| relative === '..'
|
|
21
|
+
|| relative.startsWith(`..${path.sep}`)
|
|
22
|
+
|| path.isAbsolute(relative)) {
|
|
23
|
+
throw new Error(`Manifest file escapes the project root: ${requestedFile}`);
|
|
24
|
+
}
|
|
25
|
+
const segments = relative.split(path.sep);
|
|
26
|
+
if (segments.length !== 2
|
|
27
|
+
|| !SAFE_MANIFEST_DIRECTORY.test(segments[0])
|
|
28
|
+
|| !SAFE_MANIFEST_FILE.test(segments[1])) {
|
|
29
|
+
throw new Error(`Manifest file is not a confined OpenZeppelin JSON path: ${relative}`);
|
|
30
|
+
}
|
|
31
|
+
const directory = path.dirname(absolute);
|
|
32
|
+
if (fs.existsSync(directory)) {
|
|
33
|
+
const directoryStat = fs.lstatSync(directory);
|
|
34
|
+
if (directoryStat.isSymbolicLink()) {
|
|
35
|
+
throw new Error(`Manifest directory cannot be a symlink: ${segments[0]}`);
|
|
36
|
+
}
|
|
37
|
+
if (!directoryStat.isDirectory()) {
|
|
38
|
+
throw new Error(`Manifest directory is not a directory: ${segments[0]}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
fs.mkdirSync(directory, { recursive: true });
|
|
43
|
+
}
|
|
44
|
+
if (fs.existsSync(absolute)) {
|
|
45
|
+
const fileStat = fs.lstatSync(absolute);
|
|
46
|
+
if (fileStat.isSymbolicLink()) {
|
|
47
|
+
throw new Error(`Manifest file cannot be a symlink: ${relative}`);
|
|
48
|
+
}
|
|
49
|
+
if (!fileStat.isFile()) {
|
|
50
|
+
throw new Error(`Manifest path is not a regular file: ${relative}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { absolute, relative: segments.join('/') };
|
|
54
|
+
};
|
|
55
|
+
const confinedManifestPair = (options) => {
|
|
56
|
+
const root = path.resolve(options.root);
|
|
57
|
+
const manifest = confinedManifestFile(root, options.manifestFile);
|
|
58
|
+
const fallback = options.fallbackFile
|
|
59
|
+
? confinedManifestFile(root, options.fallbackFile)
|
|
60
|
+
: manifest;
|
|
61
|
+
if (path.dirname(manifest.absolute) !== path.dirname(fallback.absolute)) {
|
|
62
|
+
throw new Error('Canonical and fallback manifests must use the same confined directory');
|
|
63
|
+
}
|
|
64
|
+
return { root, manifest, fallback };
|
|
65
|
+
};
|
|
66
|
+
const readRegularFile = (file) => {
|
|
67
|
+
if (!fs.existsSync(file.absolute))
|
|
68
|
+
return undefined;
|
|
69
|
+
const stat = fs.lstatSync(file.absolute);
|
|
70
|
+
if (stat.isSymbolicLink() || !stat.isFile()) {
|
|
71
|
+
throw new Error(`Manifest path is not a regular file: ${file.relative}`);
|
|
72
|
+
}
|
|
73
|
+
return fs.readFileSync(file.absolute);
|
|
74
|
+
};
|
|
75
|
+
const snapshotManifestPair = (pair) => {
|
|
76
|
+
const manifest = readRegularFile(pair.manifest);
|
|
77
|
+
const distinctFallback = pair.fallback.absolute !== pair.manifest.absolute;
|
|
78
|
+
const fallback = distinctFallback ? readRegularFile(pair.fallback) : manifest;
|
|
79
|
+
if (distinctFallback && manifest !== undefined && fallback !== undefined) {
|
|
80
|
+
throw new Error(`Network manifest files with different names both exist: ${pair.manifest.relative} and ${pair.fallback.relative}`);
|
|
81
|
+
}
|
|
82
|
+
if (manifest !== undefined) {
|
|
83
|
+
return {
|
|
84
|
+
manifest,
|
|
85
|
+
fallback,
|
|
86
|
+
activeFile: pair.manifest,
|
|
87
|
+
activeContents: manifest,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (fallback !== undefined) {
|
|
91
|
+
return {
|
|
92
|
+
manifest,
|
|
93
|
+
fallback,
|
|
94
|
+
activeFile: pair.fallback,
|
|
95
|
+
activeContents: fallback,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return { manifest, fallback };
|
|
99
|
+
};
|
|
100
|
+
const acquireTransactionLock = (manifestFile) => {
|
|
101
|
+
const lockFile = `${manifestFile}.gate-tool.lock`;
|
|
102
|
+
const token = `${process.pid}-${Date.now()}-${crypto.randomBytes(8).toString('hex')}`;
|
|
103
|
+
let descriptor;
|
|
104
|
+
try {
|
|
105
|
+
descriptor = fs.openSync(lockFile, 'wx', 0o600);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
if (errorCode(error) === 'EEXIST') {
|
|
109
|
+
throw new Error(`Manifest is locked by another gate-tool transaction: ${manifestFile}`);
|
|
110
|
+
}
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
fs.writeFileSync(descriptor, `${token}\n`);
|
|
115
|
+
fs.fsyncSync(descriptor);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
fs.closeSync(descriptor);
|
|
119
|
+
if (fs.existsSync(lockFile))
|
|
120
|
+
fs.unlinkSync(lockFile);
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
return () => {
|
|
124
|
+
fs.closeSync(descriptor);
|
|
125
|
+
try {
|
|
126
|
+
if (fs.readFileSync(lockFile, 'utf8').trim() === token)
|
|
127
|
+
fs.unlinkSync(lockFile);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (errorCode(error) !== 'ENOENT')
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
export const writeFileAtomic = (filePath, contents) => {
|
|
136
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
137
|
+
const temporary = `${filePath}.${process.pid}.${Date.now()}.${crypto.randomBytes(6).toString('hex')}.tmp`;
|
|
138
|
+
let descriptor;
|
|
139
|
+
try {
|
|
140
|
+
descriptor = fs.openSync(temporary, 'wx', 0o600);
|
|
141
|
+
fs.writeFileSync(descriptor, contents);
|
|
142
|
+
fs.fsyncSync(descriptor);
|
|
143
|
+
fs.closeSync(descriptor);
|
|
144
|
+
descriptor = undefined;
|
|
145
|
+
fs.renameSync(temporary, filePath);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (descriptor !== undefined)
|
|
149
|
+
fs.closeSync(descriptor);
|
|
150
|
+
if (fs.existsSync(temporary))
|
|
151
|
+
fs.unlinkSync(temporary);
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
const restoreFile = (file, contents) => {
|
|
156
|
+
if (contents === undefined) {
|
|
157
|
+
if (fs.existsSync(file.absolute))
|
|
158
|
+
fs.unlinkSync(file.absolute);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
writeFileAtomic(file.absolute, contents);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
const restoreManifestPair = (pair, before) => {
|
|
165
|
+
restoreFile(pair.manifest, before.manifest);
|
|
166
|
+
if (pair.fallback.absolute !== pair.manifest.absolute) {
|
|
167
|
+
restoreFile(pair.fallback, before.fallback);
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
const contextFor = (pair) => ({
|
|
171
|
+
manifestFile: pair.manifest.absolute,
|
|
172
|
+
fallbackFile: pair.fallback.absolute,
|
|
173
|
+
writeManifestAtomic: (contents) => writeFileAtomic(pair.manifest.absolute, contents),
|
|
174
|
+
});
|
|
175
|
+
const withLockedManifestPair = async (options, operation) => {
|
|
176
|
+
const pair = confinedManifestPair(options);
|
|
177
|
+
const releaseLock = acquireTransactionLock(pair.manifest.absolute);
|
|
178
|
+
try {
|
|
179
|
+
return await operation(pair);
|
|
180
|
+
}
|
|
181
|
+
finally {
|
|
182
|
+
releaseLock();
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
export async function withManifestLock(options) {
|
|
186
|
+
return withLockedManifestPair(options, async (pair) => {
|
|
187
|
+
snapshotManifestPair(pair);
|
|
188
|
+
return options.operation(contextFor(pair));
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
export async function withTemporaryManifestTransaction(options) {
|
|
192
|
+
return withLockedManifestPair(options, async (pair) => {
|
|
193
|
+
const before = snapshotManifestPair(pair);
|
|
194
|
+
try {
|
|
195
|
+
return await options.operation(contextFor(pair));
|
|
196
|
+
}
|
|
197
|
+
finally {
|
|
198
|
+
restoreManifestPair(pair, before);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
export const defaultManifestReportFile = (root, manifestFile) => {
|
|
203
|
+
const confined = confinedManifestFile(root, manifestFile);
|
|
204
|
+
const [manifestDirectory, fileName] = confined.relative.split('/');
|
|
205
|
+
return path.join(path.resolve(root), `gate-tool-sync-report.${manifestDirectory.slice(1)}.${fileName}`);
|
|
206
|
+
};
|
|
207
|
+
const confinedReportFile = (root, requestedFile) => {
|
|
208
|
+
const projectRoot = path.resolve(root);
|
|
209
|
+
const reportFile = path.isAbsolute(requestedFile)
|
|
210
|
+
? path.resolve(requestedFile)
|
|
211
|
+
: path.resolve(projectRoot, requestedFile);
|
|
212
|
+
if (path.dirname(reportFile) !== projectRoot) {
|
|
213
|
+
throw new Error(`Manifest transaction report must stay in the project root: ${requestedFile}`);
|
|
214
|
+
}
|
|
215
|
+
if (fs.existsSync(reportFile)) {
|
|
216
|
+
const stat = fs.lstatSync(reportFile);
|
|
217
|
+
if (stat.isSymbolicLink() || !stat.isFile()) {
|
|
218
|
+
throw new Error(`Manifest transaction report must be a regular file: ${requestedFile}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return reportFile;
|
|
222
|
+
};
|
|
223
|
+
const writeReport = (filePath, report) => {
|
|
224
|
+
writeFileAtomic(filePath, Buffer.from(`${JSON.stringify(report, null, 2)}\n`));
|
|
225
|
+
};
|
|
226
|
+
export async function withManifestTransaction(options) {
|
|
227
|
+
const now = options.now ?? (() => new Date().toISOString());
|
|
228
|
+
const startedAt = now();
|
|
229
|
+
return withLockedManifestPair(options, async (pair) => {
|
|
230
|
+
const reportFile = confinedReportFile(pair.root, options.reportFile ?? defaultManifestReportFile(pair.root, pair.manifest.absolute));
|
|
231
|
+
const before = snapshotManifestPair(pair);
|
|
232
|
+
const beforeHash = hashContents(before.activeContents);
|
|
233
|
+
try {
|
|
234
|
+
const value = await options.operation(contextFor(pair));
|
|
235
|
+
const after = snapshotManifestPair(pair);
|
|
236
|
+
if (!after.activeFile
|
|
237
|
+
|| after.activeFile.absolute !== pair.manifest.absolute
|
|
238
|
+
|| after.activeContents === undefined) {
|
|
239
|
+
throw new Error(`Manifest transaction did not create ${pair.manifest.relative}`);
|
|
240
|
+
}
|
|
241
|
+
const report = {
|
|
242
|
+
version: 1,
|
|
243
|
+
status: 'committed',
|
|
244
|
+
manifestFile: pair.manifest.relative,
|
|
245
|
+
...(pair.fallback.absolute === pair.manifest.absolute
|
|
246
|
+
? {}
|
|
247
|
+
: { fallbackFile: pair.fallback.relative }),
|
|
248
|
+
...(before.activeFile ? { beforeFile: before.activeFile.relative } : {}),
|
|
249
|
+
afterFile: after.activeFile.relative,
|
|
250
|
+
beforeExisted: before.activeContents !== undefined,
|
|
251
|
+
beforeHash,
|
|
252
|
+
afterHash: hashContents(after.activeContents),
|
|
253
|
+
startedAt,
|
|
254
|
+
completedAt: now(),
|
|
255
|
+
};
|
|
256
|
+
writeReport(reportFile, report);
|
|
257
|
+
return { value, report, reportFile };
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
let attempted;
|
|
261
|
+
try {
|
|
262
|
+
attempted = snapshotManifestPair(pair);
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
attempted = undefined;
|
|
266
|
+
}
|
|
267
|
+
restoreManifestPair(pair, before);
|
|
268
|
+
const restored = snapshotManifestPair(pair);
|
|
269
|
+
const report = {
|
|
270
|
+
version: 1,
|
|
271
|
+
status: 'rolled_back',
|
|
272
|
+
manifestFile: pair.manifest.relative,
|
|
273
|
+
...(pair.fallback.absolute === pair.manifest.absolute
|
|
274
|
+
? {}
|
|
275
|
+
: { fallbackFile: pair.fallback.relative }),
|
|
276
|
+
...(before.activeFile ? { beforeFile: before.activeFile.relative } : {}),
|
|
277
|
+
...(restored.activeFile ? { afterFile: restored.activeFile.relative } : {}),
|
|
278
|
+
beforeExisted: before.activeContents !== undefined,
|
|
279
|
+
beforeHash,
|
|
280
|
+
afterHash: hashContents(restored.activeContents),
|
|
281
|
+
attemptedHash: hashContents(attempted?.activeContents),
|
|
282
|
+
startedAt,
|
|
283
|
+
completedAt: now(),
|
|
284
|
+
error: error instanceof Error ? error.message : String(error),
|
|
285
|
+
};
|
|
286
|
+
writeReport(reportFile, report);
|
|
287
|
+
throw error;
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=manifestTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifestTransaction.js","sourceRoot":"","sources":["../../src/utils/manifestTransaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function mergeUnsafeAllow(userUnsafeAllow?: string[], defaults?: readonly string[]): string[] | undefined;
|
|
2
|
+
export interface OpenZeppelinManifestPaths {
|
|
3
|
+
file: string;
|
|
4
|
+
fallbackFile: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function getOpenZeppelinManifestPaths(hre: any): Promise<OpenZeppelinManifestPaths>;
|
|
7
|
+
export declare function getOpenZeppelinManifestFile(hre: any): Promise<string>;
|
|
8
|
+
export declare function shouldRetryForceImport(error: any): boolean;
|
|
9
|
+
export declare function forceImportWithRetry(hre: any, address: string, contractFactory: any, options: any): Promise<any>;
|
|
10
|
+
export declare function getCodeStatus(hre: any, address: string): Promise<string>;
|
|
11
|
+
//# sourceMappingURL=openzeppelin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openzeppelin.d.ts","sourceRoot":"","sources":["../../src/utils/openzeppelin.ts"],"names":[],"mappings":"AAWA,wBAAgB,gBAAgB,CAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,QAAQ,GAAE,SAAS,MAAM,EAAsC,GAC9D,MAAM,EAAE,GAAG,SAAS,CAGtB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,yBAAyB,CAAC,CAMpC;AAED,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAG1D;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,GAAG,EACpB,OAAO,EAAE,GAAG,gBAcb;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO9E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Manifest } from '@openzeppelin/upgrades-core';
|
|
2
|
+
const DEFAULT_FORCE_IMPORT_UNSAFE_ALLOW = [
|
|
3
|
+
'constructor',
|
|
4
|
+
'delegatecall',
|
|
5
|
+
'missing-public-upgradeto',
|
|
6
|
+
'missing-initializer',
|
|
7
|
+
'state-variable-assignment',
|
|
8
|
+
'state-variable-immutable',
|
|
9
|
+
];
|
|
10
|
+
export function mergeUnsafeAllow(userUnsafeAllow, defaults = DEFAULT_FORCE_IMPORT_UNSAFE_ALLOW) {
|
|
11
|
+
const merged = Array.from(new Set([...(defaults ?? []), ...(userUnsafeAllow ?? [])]));
|
|
12
|
+
return merged.length > 0 ? merged : undefined;
|
|
13
|
+
}
|
|
14
|
+
export async function getOpenZeppelinManifestPaths(hre) {
|
|
15
|
+
const manifest = await Manifest.forNetwork(hre.network.provider);
|
|
16
|
+
return {
|
|
17
|
+
file: manifest.file,
|
|
18
|
+
fallbackFile: manifest.fallbackFile,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export async function getOpenZeppelinManifestFile(hre) {
|
|
22
|
+
return (await getOpenZeppelinManifestPaths(hre)).file;
|
|
23
|
+
}
|
|
24
|
+
export function shouldRetryForceImport(error) {
|
|
25
|
+
const message = String(error?.message ?? '');
|
|
26
|
+
return message.includes('Removed from manifest');
|
|
27
|
+
}
|
|
28
|
+
export async function forceImportWithRetry(hre, address, contractFactory, options) {
|
|
29
|
+
try {
|
|
30
|
+
return await hre.upgrades.forceImport(address, contractFactory, options);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (!shouldRetryForceImport(error)) {
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
console.log(' ⚠️ 检测到 manifest 中存在失效部署记录,OpenZeppelin 已移除该记录');
|
|
37
|
+
console.log(' 🔁 正在自动重试 forceImport...');
|
|
38
|
+
console.log('');
|
|
39
|
+
return await hre.upgrades.forceImport(address, contractFactory, options);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export async function getCodeStatus(hre, address) {
|
|
43
|
+
const code = await hre.ethers.provider.getCode(address);
|
|
44
|
+
if (code === '0x') {
|
|
45
|
+
return '链上未检测到代码';
|
|
46
|
+
}
|
|
47
|
+
return `链上代码长度: ${Math.max(0, (code.length - 2) / 2)} bytes`;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=openzeppelin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openzeppelin.js","sourceRoot":"","sources":["../../src/utils/openzeppelin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,MAAM,iCAAiC,GAAG;IACxC,aAAa;IACb,cAAc;IACd,0BAA0B;IAC1B,qBAAqB;IACrB,2BAA2B;IAC3B,0BAA0B;CAClB,CAAC;AAEX,MAAM,UAAU,gBAAgB,CAC9B,eAA0B,EAC1B,WAA8B,iCAAiC;IAE/D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,GAAQ;IAER,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjE,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,GAAQ;IACxD,OAAO,CAAC,MAAM,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAU;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAQ,EACR,OAAe,EACf,eAAoB,EACpB,OAAY;IAEZ,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAQ,EAAE,OAAe;IAC3D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC/D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gate-evm-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.21",
|
|
4
4
|
"description": "Gate 智能合约工具集 - 字节码检查、合约升级验证、合约状态同步",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"build": "tsc",
|
|
17
17
|
"dev": "tsc --watch",
|
|
18
18
|
"start": "node bin/cli.js",
|
|
19
|
-
"test": "node
|
|
19
|
+
"test": "node --test test/*.test.mjs"
|
|
20
20
|
},
|
|
21
21
|
"keywords": [
|
|
22
22
|
"bytecode",
|