gate-evm-tools 1.0.23 → 1.0.25

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 (123) hide show
  1. package/README.md +70 -11
  2. package/bin/manifest-bootstrap.js +109 -3
  3. package/dist/commands/check.d.ts.map +1 -1
  4. package/dist/commands/check.js +5 -2
  5. package/dist/commands/check.js.map +1 -1
  6. package/dist/commands/checkOptions.d.ts +6 -0
  7. package/dist/commands/checkOptions.d.ts.map +1 -0
  8. package/dist/commands/checkOptions.js +12 -0
  9. package/dist/commands/checkOptions.js.map +1 -0
  10. package/dist/commands/fix.js +2 -2
  11. package/dist/commands/fix.js.map +1 -1
  12. package/dist/commands/prepare.d.ts +8 -0
  13. package/dist/commands/prepare.d.ts.map +1 -0
  14. package/dist/commands/prepare.js +78 -0
  15. package/dist/commands/prepare.js.map +1 -0
  16. package/dist/commands/sync.d.ts.map +1 -1
  17. package/dist/commands/sync.js +11 -28
  18. package/dist/commands/sync.js.map +1 -1
  19. package/dist/core/BytecodeChecker.d.ts +3 -2
  20. package/dist/core/BytecodeChecker.d.ts.map +1 -1
  21. package/dist/core/BytecodeChecker.js +13 -1
  22. package/dist/core/BytecodeChecker.js.map +1 -1
  23. package/dist/core/preparation/artifacts.d.ts +21 -0
  24. package/dist/core/preparation/artifacts.d.ts.map +1 -0
  25. package/dist/core/preparation/artifacts.js +80 -0
  26. package/dist/core/preparation/artifacts.js.map +1 -0
  27. package/dist/core/preparation/evm.d.ts +39 -0
  28. package/dist/core/preparation/evm.d.ts.map +1 -0
  29. package/dist/core/preparation/evm.js +305 -0
  30. package/dist/core/preparation/evm.js.map +1 -0
  31. package/dist/core/preparation/index.d.ts +9 -0
  32. package/dist/core/preparation/index.d.ts.map +1 -0
  33. package/dist/core/preparation/index.js +15 -0
  34. package/dist/core/preparation/index.js.map +1 -0
  35. package/dist/core/preparation/manifest.d.ts +43 -0
  36. package/dist/core/preparation/manifest.d.ts.map +1 -0
  37. package/dist/core/preparation/manifest.js +169 -0
  38. package/dist/core/preparation/manifest.js.map +1 -0
  39. package/dist/core/preparation/normalize.d.ts +7 -0
  40. package/dist/core/preparation/normalize.d.ts.map +1 -0
  41. package/dist/core/preparation/normalize.js +496 -0
  42. package/dist/core/preparation/normalize.js.map +1 -0
  43. package/dist/core/preparation/types.d.ts +122 -0
  44. package/dist/core/preparation/types.d.ts.map +1 -0
  45. package/dist/core/preparation/types.js +2 -0
  46. package/dist/core/preparation/types.js.map +1 -0
  47. package/dist/core/preparation/zkManifestSync.d.ts +49 -0
  48. package/dist/core/preparation/zkManifestSync.d.ts.map +1 -0
  49. package/dist/core/preparation/zkManifestSync.js +159 -0
  50. package/dist/core/preparation/zkManifestSync.js.map +1 -0
  51. package/dist/core/preparation/zkUpgradeValidation.d.ts +37 -0
  52. package/dist/core/preparation/zkUpgradeValidation.d.ts.map +1 -0
  53. package/dist/core/preparation/zkUpgradeValidation.js +91 -0
  54. package/dist/core/preparation/zkUpgradeValidation.js.map +1 -0
  55. package/dist/core/preparation/zksync.d.ts +28 -0
  56. package/dist/core/preparation/zksync.d.ts.map +1 -0
  57. package/dist/core/preparation/zksync.js +259 -0
  58. package/dist/core/preparation/zksync.js.map +1 -0
  59. package/dist/custody/hardhat-runtime.d.ts.map +1 -1
  60. package/dist/custody/hardhat-runtime.js +2 -1
  61. package/dist/custody/hardhat-runtime.js.map +1 -1
  62. package/dist/custody/index.d.ts +1 -0
  63. package/dist/custody/index.d.ts.map +1 -1
  64. package/dist/custody/index.js +1 -0
  65. package/dist/custody/index.js.map +1 -1
  66. package/dist/custody/service.js +8 -1
  67. package/dist/custody/service.js.map +1 -1
  68. package/dist/custody/zksync-signer.d.ts +13 -0
  69. package/dist/custody/zksync-signer.d.ts.map +1 -0
  70. package/dist/custody/zksync-signer.js +91 -0
  71. package/dist/custody/zksync-signer.js.map +1 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +22 -1
  74. package/dist/index.js.map +1 -1
  75. package/dist/sync/index.d.ts +31 -0
  76. package/dist/sync/index.d.ts.map +1 -0
  77. package/dist/sync/index.js +57 -0
  78. package/dist/sync/index.js.map +1 -0
  79. package/dist/types.d.ts +13 -2
  80. package/dist/types.d.ts.map +1 -1
  81. package/dist/workflow/index.d.ts +5 -0
  82. package/dist/workflow/index.d.ts.map +1 -0
  83. package/dist/workflow/index.js +3 -0
  84. package/dist/workflow/index.js.map +1 -0
  85. package/dist-cjs/core/preparation/artifacts.js +89 -0
  86. package/dist-cjs/core/preparation/artifacts.js.map +1 -0
  87. package/dist-cjs/core/preparation/evm.js +312 -0
  88. package/dist-cjs/core/preparation/evm.js.map +1 -0
  89. package/dist-cjs/core/preparation/index.js +19 -0
  90. package/dist-cjs/core/preparation/index.js.map +1 -0
  91. package/dist-cjs/core/preparation/manifest.js +180 -0
  92. package/dist-cjs/core/preparation/manifest.js.map +1 -0
  93. package/dist-cjs/core/preparation/normalize.js +507 -0
  94. package/dist-cjs/core/preparation/normalize.js.map +1 -0
  95. package/dist-cjs/core/preparation/types.js +3 -0
  96. package/dist-cjs/core/preparation/types.js.map +1 -0
  97. package/dist-cjs/core/preparation/zkManifestSync.js +166 -0
  98. package/dist-cjs/core/preparation/zkManifestSync.js.map +1 -0
  99. package/dist-cjs/core/preparation/zkUpgradeValidation.js +101 -0
  100. package/dist-cjs/core/preparation/zkUpgradeValidation.js.map +1 -0
  101. package/dist-cjs/core/preparation/zksync.js +263 -0
  102. package/dist-cjs/core/preparation/zksync.js.map +1 -0
  103. package/dist-cjs/core/syncUpgradeJson.js +315 -0
  104. package/dist-cjs/core/syncUpgradeJson.js.map +1 -0
  105. package/dist-cjs/custody/hardhat-runtime.js +2 -1
  106. package/dist-cjs/custody/hardhat-runtime.js.map +1 -1
  107. package/dist-cjs/custody/index.js +4 -1
  108. package/dist-cjs/custody/index.js.map +1 -1
  109. package/dist-cjs/custody/service.js +8 -1
  110. package/dist-cjs/custody/service.js.map +1 -1
  111. package/dist-cjs/custody/zksync-signer.js +95 -0
  112. package/dist-cjs/custody/zksync-signer.js.map +1 -0
  113. package/dist-cjs/sync/index.js +60 -0
  114. package/dist-cjs/sync/index.js.map +1 -0
  115. package/dist-cjs/types.js +3 -0
  116. package/dist-cjs/types.js.map +1 -0
  117. package/dist-cjs/utils/manifestTransaction.js +302 -0
  118. package/dist-cjs/utils/manifestTransaction.js.map +1 -0
  119. package/dist-cjs/utils/openzeppelin.js +57 -0
  120. package/dist-cjs/utils/openzeppelin.js.map +1 -0
  121. package/dist-cjs/workflow/index.js +12 -0
  122. package/dist-cjs/workflow/index.js.map +1 -0
  123. package/package.json +42 -2
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.syncZkManifest = void 0;
7
+ const node_crypto_1 = __importDefault(require("node:crypto"));
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const ethers_1 = require("ethers");
11
+ const zksync_ethers_1 = require("zksync-ethers");
12
+ const artifacts_js_1 = require("./artifacts.js");
13
+ const manifest_js_1 = require("./manifest.js");
14
+ const zkUpgradeValidation_js_1 = require("./zkUpgradeValidation.js");
15
+ const manifestTransaction_js_1 = require("../../utils/manifestTransaction.js");
16
+ const bytecodeHash = (bytecode, label) => {
17
+ try {
18
+ return (0, ethers_1.hexlify)(zksync_ethers_1.utils.hashBytecode(bytecode)).toLowerCase();
19
+ }
20
+ catch (error) {
21
+ const message = error instanceof Error ? error.message : String(error);
22
+ throw new Error(`${label} is not valid EraVM bytecode: ${message}`);
23
+ }
24
+ };
25
+ const readManifestForSync = (manifestFile, fallbackFile) => {
26
+ const canonicalExists = node_fs_1.default.existsSync(manifestFile);
27
+ const fallbackExists = fallbackFile !== manifestFile && node_fs_1.default.existsSync(fallbackFile);
28
+ if (!canonicalExists && !fallbackExists) {
29
+ return { manifestVersion: '3.2', impls: {}, proxies: [] };
30
+ }
31
+ const selected = canonicalExists ? manifestFile : fallbackFile;
32
+ const stat = node_fs_1.default.lstatSync(selected);
33
+ if (stat.isSymbolicLink() || !stat.isFile()) {
34
+ throw new Error('OpenZeppelin manifest must be a regular file');
35
+ }
36
+ return (0, manifest_js_1.parseTargetManifest)(node_fs_1.default.readFileSync(selected));
37
+ };
38
+ const normalizeTransactionHash = (raw) => {
39
+ if (raw === undefined)
40
+ return undefined;
41
+ if (!/^0x[0-9a-fA-F]{64}$/.test(raw)) {
42
+ throw new Error('sync transactionHash must be 32-byte hex');
43
+ }
44
+ return raw.toLowerCase();
45
+ };
46
+ const candidateRequest = (options) => ({
47
+ version: 1,
48
+ kind: 'uups-upgrade',
49
+ scheme: 'zksync-eravm',
50
+ network: options.network,
51
+ target: options.target,
52
+ contract: options.contract,
53
+ constructorArgs: options.constructorArgs ?? [],
54
+ factory: '0x0000000000000000000000000000000000000001',
55
+ proxyKind: 'uups',
56
+ proxy: options.proxy,
57
+ implementationSalt: `0x${'00'.repeat(31)}01`,
58
+ ...(options.unsafeAllow ? { unsafeAllow: options.unsafeAllow } : {}),
59
+ });
60
+ const syncZkManifest = async (options, dependencies = {}) => {
61
+ if (options.scheme !== 'zksync-eravm')
62
+ throw new Error('zkSync sync requires zksync-eravm');
63
+ if (options.hre.network.config?.zksync !== true) {
64
+ throw new Error(`Hardhat network ${options.hre.network.name} is not configured for zkSync`);
65
+ }
66
+ if (options.network !== options.hre.network.name) {
67
+ throw new Error(`sync network ${options.network} does not match Hardhat network ${options.hre.network.name}`);
68
+ }
69
+ if (options.target !== options.network) {
70
+ throw new Error('zkSync sync requires target to equal the active network');
71
+ }
72
+ const root = node_path_1.default.resolve(options.root ?? options.hre.config.paths.root);
73
+ if (root !== node_path_1.default.resolve(options.hre.config.paths.root)) {
74
+ throw new Error('sync root does not match the Hardhat project root');
75
+ }
76
+ const proxy = (0, ethers_1.getAddress)(options.proxy).toLowerCase();
77
+ const txHash = normalizeTransactionHash(options.transactionHash);
78
+ await options.hre.run('compile', { quiet: true });
79
+ const artifact = await options.hre.artifacts.readArtifact(options.contract);
80
+ (0, artifacts_js_1.assertArtifactScheme)(artifact, 'zksync-eravm');
81
+ const network = await options.hre.ethers.provider.getNetwork();
82
+ const chainId = Number(network.chainId);
83
+ if (!Number.isSafeInteger(chainId) || chainId <= 0)
84
+ throw new Error('provider chainId is invalid');
85
+ const configuredChainId = options.hre.network.config?.chainId;
86
+ if (configuredChainId !== undefined && configuredChainId !== chainId) {
87
+ throw new Error(`provider chainId ${chainId} does not match configured chainId ${configuredChainId}`);
88
+ }
89
+ const request = candidateRequest(options);
90
+ const candidate = await (dependencies.loadCandidate ?? zkUpgradeValidation_js_1.loadZkValidationCandidate)(options.hre, request, artifact);
91
+ (dependencies.assertImplementationSafe ?? zkUpgradeValidation_js_1.assertZkImplementationSafe)(candidate);
92
+ if (!/^[0-9a-f]{64}$/.test(candidate.version.linkedWithoutMetadata)) {
93
+ throw new Error('zkSync implementation version key is invalid');
94
+ }
95
+ const implementation = (0, ethers_1.getAddress)(await (dependencies.getCurrentImplementation ?? zkUpgradeValidation_js_1.getZkCurrentImplementation)(options.hre, proxy)).toLowerCase();
96
+ const [proxyCode, implementationCode] = await Promise.all([
97
+ options.hre.ethers.provider.getCode(proxy),
98
+ options.hre.ethers.provider.getCode(implementation),
99
+ ]);
100
+ if (!proxyCode || proxyCode === '0x')
101
+ throw new Error(`proxy has no code at ${proxy}`);
102
+ if (!implementationCode || implementationCode === '0x') {
103
+ throw new Error(`implementation has no code at ${implementation}`);
104
+ }
105
+ const expectedHash = bytecodeHash(artifact.bytecode, 'artifact bytecode');
106
+ const actualHash = bytecodeHash(implementationCode, 'deployed implementation bytecode');
107
+ if (actualHash !== expectedHash) {
108
+ throw new Error(`implementation bytecode mismatch: actual=${actualHash} expected=${expectedHash}`);
109
+ }
110
+ const paths = (0, manifest_js_1.resolveTargetManifestPaths)(root, options.target, chainId);
111
+ const transaction = await (0, manifestTransaction_js_1.withManifestTransaction)({
112
+ root,
113
+ manifestFile: paths.file,
114
+ fallbackFile: paths.fallbackFile,
115
+ operation: async ({ manifestFile, fallbackFile, writeManifestAtomic }) => {
116
+ const manifest = readManifestForSync(manifestFile, fallbackFile);
117
+ const versionKey = candidate.version.linkedWithoutMetadata;
118
+ const existing = manifest.impls[versionKey];
119
+ if (existing && (0, manifest_js_1.hashStorageLayout)(existing.layout) !== (0, manifest_js_1.hashStorageLayout)(candidate.layout)) {
120
+ throw new Error('registered implementation layout conflicts with compiled artifact');
121
+ }
122
+ const priorAddresses = existing
123
+ ? [existing.address, ...(existing.allAddresses ?? [])]
124
+ : [];
125
+ const allAddresses = [...new Set([...priorAddresses, implementation].map((address) => (0, ethers_1.getAddress)(address).toLowerCase()))];
126
+ manifest.impls[versionKey] = {
127
+ address: implementation,
128
+ ...(txHash ? { txHash } : {}),
129
+ layout: candidate.layout,
130
+ ...(allAddresses.length > 1 ? { allAddresses } : {}),
131
+ };
132
+ manifest.proxies = manifest.proxies.filter((entry) => entry.address.toLowerCase() !== proxy);
133
+ manifest.proxies.push({ address: proxy, kind: 'uups' });
134
+ if (fallbackFile !== manifestFile && node_fs_1.default.existsSync(fallbackFile))
135
+ node_fs_1.default.unlinkSync(fallbackFile);
136
+ writeManifestAtomic(Buffer.from(`${JSON.stringify(manifest, null, 2)}\n`));
137
+ const verified = (0, manifest_js_1.parseTargetManifest)(node_fs_1.default.readFileSync(manifestFile));
138
+ if (verified.impls[versionKey]?.address.toLowerCase() !== implementation) {
139
+ throw new Error('implementation registration post-condition failed');
140
+ }
141
+ const registeredProxy = verified.proxies.find((entry) => entry.address.toLowerCase() === proxy);
142
+ if (registeredProxy?.kind !== 'uups') {
143
+ throw new Error('proxy registration post-condition failed');
144
+ }
145
+ return {
146
+ scheme: 'zksync-eravm',
147
+ network: options.network,
148
+ target: options.target,
149
+ chainId: chainId.toString(10),
150
+ proxy,
151
+ implementation,
152
+ artifact: (0, artifacts_js_1.artifactIdentity)(artifact, 'zksync-eravm'),
153
+ layoutHash: (0, manifest_js_1.hashStorageLayout)(candidate.layout),
154
+ manifestDigest: node_crypto_1.default.createHash('sha256').update(node_fs_1.default.readFileSync(manifestFile)).digest('hex'),
155
+ manifestFile,
156
+ };
157
+ },
158
+ });
159
+ return {
160
+ ...transaction.value,
161
+ manifestTransaction: transaction.report,
162
+ syncReport: transaction.reportFile,
163
+ };
164
+ };
165
+ exports.syncZkManifest = syncZkManifest;
166
+ //# sourceMappingURL=zkManifestSync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zkManifestSync.js","sourceRoot":"","sources":["../../../src/core/preparation/zkManifestSync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validateZkImplementation = exports.getZkCurrentImplementation = exports.assertZkImplementationSafe = exports.loadZkValidationCandidate = void 0;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const ethers_1 = require("ethers");
10
+ const upgrades_core_1 = require("@openzeppelin/upgrades-core");
11
+ const artifacts_js_1 = require("./artifacts.js");
12
+ const manifest_js_1 = require("./manifest.js");
13
+ const confinedValidationFile = (hre) => {
14
+ const root = node_path_1.default.resolve(hre.config.paths.root);
15
+ const cache = node_path_1.default.resolve(hre.config.paths.cache);
16
+ const relative = node_path_1.default.relative(root, cache);
17
+ if (relative === '..' || relative.startsWith(`..${node_path_1.default.sep}`) || node_path_1.default.isAbsolute(relative)) {
18
+ throw new Error('Hardhat validation cache must stay inside the project root');
19
+ }
20
+ const file = node_path_1.default.join(cache, 'validations.json');
21
+ if (!node_fs_1.default.existsSync(file)) {
22
+ throw new Error('zkSync validations cache is missing; compile with the pinned Matter Labs plugin');
23
+ }
24
+ const stat = node_fs_1.default.lstatSync(file);
25
+ if (stat.isSymbolicLink() || !stat.isFile()) {
26
+ throw new Error('zkSync validations cache must be a regular file');
27
+ }
28
+ return file;
29
+ };
30
+ const loadZkValidationCandidate = async (hre, request, artifact) => {
31
+ const file = confinedValidationFile(hre);
32
+ const rawValidations = JSON.parse(node_fs_1.default.readFileSync(file, 'utf8'));
33
+ if (!(0, upgrades_core_1.isCurrentValidationData)(rawValidations)) {
34
+ throw new Error('zkSync validations cache is missing or outdated');
35
+ }
36
+ const validations = rawValidations;
37
+ const factory = new ethers_1.ContractFactory(artifact.abi, artifact.bytecode);
38
+ const constructorInput = factory.interface.encodeDeploy(request.constructorArgs);
39
+ const version = (0, upgrades_core_1.getVersion)(artifact.bytecode, artifact.bytecode, constructorInput);
40
+ const validationOptions = (0, upgrades_core_1.withValidationDefaults)({
41
+ kind: 'uups',
42
+ ...(request.unsafeAllow ? { unsafeAllow: request.unsafeAllow } : {}),
43
+ });
44
+ return {
45
+ validations,
46
+ version,
47
+ layout: (0, upgrades_core_1.getStorageLayout)(validations, version),
48
+ validationOptions,
49
+ };
50
+ };
51
+ exports.loadZkValidationCandidate = loadZkValidationCandidate;
52
+ const assertZkImplementationSafe = (candidate) => {
53
+ (0, upgrades_core_1.assertUpgradeSafe)(candidate.validations, candidate.version, candidate.validationOptions);
54
+ };
55
+ exports.assertZkImplementationSafe = assertZkImplementationSafe;
56
+ const getZkCurrentImplementation = async (hre, proxy) => (0, upgrades_core_1.getImplementationAddress)(hre.network.provider, proxy);
57
+ exports.getZkCurrentImplementation = getZkCurrentImplementation;
58
+ const selectedChainId = async (hre) => {
59
+ const configured = hre.network.config?.chainId;
60
+ if (configured !== undefined)
61
+ return configured;
62
+ return (0, upgrades_core_1.getChainId)(hre.network.provider);
63
+ };
64
+ const validateZkImplementation = async (hre, request, artifact, dependencies = {}) => {
65
+ (0, artifacts_js_1.assertArtifactScheme)(artifact, 'zksync-eravm');
66
+ if (hre.network.config?.zksync !== true) {
67
+ throw new Error(`Hardhat network ${hre.network.name} is not configured for zkSync`);
68
+ }
69
+ const candidate = await (dependencies.loadCandidate ?? exports.loadZkValidationCandidate)(hre, request, artifact);
70
+ (dependencies.assertImplementationSafe ?? exports.assertZkImplementationSafe)(candidate);
71
+ if (request.kind === 'uups-placeholder-deploy') {
72
+ return {
73
+ kind: 'uups-initial',
74
+ engine: 'matterlabs-openzeppelin',
75
+ artifactFormat: 'hh-zksolc-artifact-1',
76
+ implementationSafe: true,
77
+ };
78
+ }
79
+ const implementation = (0, ethers_1.getAddress)(await (dependencies.getCurrentImplementation ?? exports.getZkCurrentImplementation)(hre, request.proxy)).toLowerCase();
80
+ const state = (0, manifest_js_1.readRegisteredZkUpgradeState)({
81
+ root: hre.config.paths.root,
82
+ target: request.target,
83
+ chainId: await selectedChainId(hre),
84
+ proxy: request.proxy,
85
+ currentImplementation: implementation,
86
+ });
87
+ (0, upgrades_core_1.assertStorageUpgradeSafe)(state.oldLayout, candidate.layout, candidate.validationOptions);
88
+ return {
89
+ kind: 'uups-upgrade',
90
+ engine: 'matterlabs-openzeppelin',
91
+ artifactFormat: 'hh-zksolc-artifact-1',
92
+ implementationSafe: true,
93
+ storageLayoutCompatible: true,
94
+ currentImplementation: implementation,
95
+ oldLayoutHash: (0, manifest_js_1.hashStorageLayout)(state.oldLayout),
96
+ newLayoutHash: (0, manifest_js_1.hashStorageLayout)(candidate.layout),
97
+ manifestDigest: state.digest,
98
+ };
99
+ };
100
+ exports.validateZkImplementation = validateZkImplementation;
101
+ //# sourceMappingURL=zkUpgradeValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zkUpgradeValidation.js","sourceRoot":"","sources":["../../../src/core/preparation/zkUpgradeValidation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prepareZkSync = void 0;
4
+ const ethers_1 = require("ethers");
5
+ const zksync_ethers_1 = require("zksync-ethers");
6
+ const artifacts_js_1 = require("./artifacts.js");
7
+ const normalize_js_1 = require("./normalize.js");
8
+ const zkUpgradeValidation_js_1 = require("./zkUpgradeValidation.js");
9
+ const ERC1967_PROXY_ARTIFACT = '@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol:ERC1967Proxy';
10
+ const CONTRACT_DEPLOYER_INTERFACE = new ethers_1.Interface([
11
+ 'function create2(bytes32 salt, bytes32 bytecodeHash, bytes input) returns (address)',
12
+ ]);
13
+ const FACTORY_INTERFACE = new ethers_1.Interface([
14
+ 'function deploy(bytes32 salt, bytes initCode, bytes data, uint256 create2ForwardValue, uint256 callForwardValue) payable returns (address)',
15
+ ]);
16
+ const UPGRADE_INTERFACE = new ethers_1.Interface([
17
+ 'function upgradeToAndCall(address newImplementation, bytes data) payable',
18
+ ]);
19
+ const assertAddressPolicy = (predictedAddress, policy, label) => {
20
+ if (!policy)
21
+ return;
22
+ const normalized = (0, ethers_1.getAddress)(predictedAddress);
23
+ if (policy.expectedAddress && normalized !== (0, ethers_1.getAddress)(policy.expectedAddress)) {
24
+ throw new Error(`${label} predicted ${normalized} but expected ${policy.expectedAddress}`);
25
+ }
26
+ if (policy.leadingZeroBytes !== undefined
27
+ && !normalized.slice(2).toLowerCase().startsWith('00'.repeat(policy.leadingZeroBytes))) {
28
+ throw new Error(`${label} does not satisfy leadingZeroBytes=${policy.leadingZeroBytes}`);
29
+ }
30
+ };
31
+ const bytecodeHash = (bytecode, label) => {
32
+ try {
33
+ return (0, ethers_1.hexlify)(zksync_ethers_1.utils.hashBytecode(bytecode)).toLowerCase();
34
+ }
35
+ catch (error) {
36
+ const message = error instanceof Error ? error.message : String(error);
37
+ throw new Error(`${label} is not valid EraVM bytecode: ${message}`);
38
+ }
39
+ };
40
+ const assertZeroForwarding = (request) => {
41
+ if (BigInt(request.create2ForwardValue ?? '0') !== 0n
42
+ || BigInt(request.callForwardValue ?? '0') !== 0n) {
43
+ throw new Error('zkSync V1 requires zero factory and call forwarding values');
44
+ }
45
+ };
46
+ const buildDeployment = async (input) => {
47
+ (0, artifacts_js_1.assertArtifactScheme)(input.artifact, 'zksync-eravm');
48
+ const contractFactory = new ethers_1.ContractFactory(input.artifact.abi, input.artifact.bytecode);
49
+ const constructorInput = contractFactory.interface.encodeDeploy(input.constructorArgs);
50
+ const selectedBytecodeHash = bytecodeHash(input.artifact.bytecode, `${input.role} bytecode`);
51
+ const predictedAddress = zksync_ethers_1.utils.create2Address(input.factory, selectedBytecodeHash, input.salt, constructorInput);
52
+ assertAddressPolicy(predictedAddress, input.policy, input.role);
53
+ const existingCode = await input.hre.ethers.provider.getCode(predictedAddress);
54
+ const status = existingCode && existingCode !== '0x' ? 'reused' : 'required';
55
+ if (status === 'reused') {
56
+ const existingHash = bytecodeHash(existingCode, `${input.role} deployed bytecode`);
57
+ if (existingHash !== selectedBytecodeHash) {
58
+ throw new Error(`${input.role} bytecode mismatch at ${predictedAddress}: `
59
+ + `actual=${existingHash} expected=${selectedBytecodeHash}`);
60
+ }
61
+ }
62
+ const deployment = {
63
+ role: input.role,
64
+ address: predictedAddress,
65
+ salt: input.salt,
66
+ status,
67
+ constructorInput,
68
+ bytecodeHash: selectedBytecodeHash,
69
+ constructorInputHash: (0, ethers_1.keccak256)(constructorInput),
70
+ };
71
+ if (status === 'reused')
72
+ return { deployment, contractFactory };
73
+ const deployerInput = CONTRACT_DEPLOYER_INTERFACE.encodeFunctionData('create2', [
74
+ input.salt,
75
+ selectedBytecodeHash,
76
+ constructorInput,
77
+ ]);
78
+ const purpose = input.role === 'contract'
79
+ ? 'deploy-contract'
80
+ : input.role === 'implementation'
81
+ ? 'deploy-implementation'
82
+ : 'deploy-proxy';
83
+ const factoryDeps = await (0, artifacts_js_1.collectZkFactoryDeps)(input.hre.artifacts, input.artifact);
84
+ return {
85
+ deployment,
86
+ contractFactory,
87
+ transaction: {
88
+ id: purpose,
89
+ purpose,
90
+ to: input.factory,
91
+ value: '0',
92
+ data: FACTORY_INTERFACE.encodeFunctionData('deploy', [
93
+ input.salt,
94
+ deployerInput,
95
+ '0x',
96
+ 0n,
97
+ 0n,
98
+ ]),
99
+ operation: 0,
100
+ factoryDeps,
101
+ },
102
+ };
103
+ };
104
+ const preparePlain = async (hre, request, artifact) => {
105
+ assertZeroForwarding(request);
106
+ const prepared = await buildDeployment({
107
+ hre,
108
+ role: 'contract',
109
+ artifact,
110
+ constructorArgs: request.constructorArgs,
111
+ factory: request.factory,
112
+ salt: request.salt,
113
+ policy: request.addressPolicy,
114
+ });
115
+ const network = await hre.ethers.provider.getNetwork();
116
+ return (0, normalize_js_1.normalizePreparationPlan)({
117
+ version: 1,
118
+ requestHash: (0, normalize_js_1.hashPreparationRequest)(request),
119
+ kind: request.kind,
120
+ scheme: request.scheme,
121
+ network: request.network,
122
+ target: request.target,
123
+ chainId: network.chainId.toString(),
124
+ contract: request.contract,
125
+ artifact: (0, artifacts_js_1.artifactIdentity)(artifact, 'zksync-eravm'),
126
+ validation: {
127
+ kind: 'artifact',
128
+ engine: 'hardhat-artifact',
129
+ artifactFormat: 'hh-zksolc-artifact-1',
130
+ },
131
+ deployments: [prepared.deployment],
132
+ transactions: prepared.transaction ? [prepared.transaction] : [],
133
+ });
134
+ };
135
+ const initializerData = (factory, call) => (call ? factory.interface.encodeFunctionData(call.method, call.args) : '0x');
136
+ const prepareUupsInitial = async (hre, request, artifact, dependencies) => {
137
+ const validation = await (0, zkUpgradeValidation_js_1.validateZkImplementation)(hre, request, artifact, dependencies.validation);
138
+ if (validation.kind !== 'uups-initial') {
139
+ throw new Error('zkSync initial UUPS validation returned an invalid result');
140
+ }
141
+ const implementation = await buildDeployment({
142
+ hre,
143
+ role: 'implementation',
144
+ artifact,
145
+ constructorArgs: request.constructorArgs,
146
+ factory: request.factory,
147
+ salt: request.implementationSalt,
148
+ });
149
+ const proxyArtifact = await hre.artifacts.readArtifact(ERC1967_PROXY_ARTIFACT);
150
+ (0, artifacts_js_1.assertArtifactScheme)(proxyArtifact, 'zksync-eravm');
151
+ const proxy = await buildDeployment({
152
+ hre,
153
+ role: 'proxy',
154
+ artifact: proxyArtifact,
155
+ constructorArgs: [request.placeholderImplementation, '0x'],
156
+ factory: request.factory,
157
+ salt: request.proxySalt,
158
+ policy: request.proxyAddressPolicy,
159
+ });
160
+ if (proxy.deployment.status === 'reused') {
161
+ if (implementation.deployment.status !== 'reused') {
162
+ throw new Error('UUPS proxy is already deployed but the predicted implementation is not deployed');
163
+ }
164
+ const currentImplementation = (0, ethers_1.getAddress)(await (dependencies.validation?.getCurrentImplementation ?? zkUpgradeValidation_js_1.getZkCurrentImplementation)(hre, proxy.deployment.address)).toLowerCase();
165
+ if (currentImplementation !== implementation.deployment.address.toLowerCase()) {
166
+ throw new Error(`UUPS proxy current implementation ${currentImplementation} does not match predicted implementation ${implementation.deployment.address}`);
167
+ }
168
+ }
169
+ const transactions = [implementation.transaction, proxy.transaction]
170
+ .filter((transaction) => transaction !== undefined);
171
+ if (proxy.deployment.status !== 'reused') {
172
+ transactions.push({
173
+ id: 'upgrade-proxy',
174
+ purpose: 'upgrade-proxy',
175
+ to: proxy.deployment.address,
176
+ value: '0',
177
+ data: UPGRADE_INTERFACE.encodeFunctionData('upgradeToAndCall', [
178
+ implementation.deployment.address,
179
+ initializerData(implementation.contractFactory, request.call),
180
+ ]),
181
+ operation: 0,
182
+ factoryDeps: [],
183
+ });
184
+ }
185
+ const network = await hre.ethers.provider.getNetwork();
186
+ return (0, normalize_js_1.normalizePreparationPlan)({
187
+ version: 1,
188
+ requestHash: (0, normalize_js_1.hashPreparationRequest)(request),
189
+ kind: request.kind,
190
+ scheme: request.scheme,
191
+ network: request.network,
192
+ target: request.target,
193
+ chainId: network.chainId.toString(),
194
+ contract: request.contract,
195
+ proxyKind: 'uups',
196
+ artifact: (0, artifacts_js_1.artifactIdentity)(artifact, 'zksync-eravm'),
197
+ validation,
198
+ deployments: [implementation.deployment, proxy.deployment],
199
+ transactions,
200
+ });
201
+ };
202
+ const prepareUupsUpgrade = async (hre, request, artifact, dependencies) => {
203
+ const validation = await (0, zkUpgradeValidation_js_1.validateZkImplementation)(hre, request, artifact, dependencies.validation);
204
+ if (validation.kind !== 'uups-upgrade') {
205
+ throw new Error('zkSync UUPS upgrade validation returned an invalid result');
206
+ }
207
+ const implementation = await buildDeployment({
208
+ hre,
209
+ role: 'implementation',
210
+ artifact,
211
+ constructorArgs: request.constructorArgs,
212
+ factory: request.factory,
213
+ salt: request.implementationSalt,
214
+ policy: request.implementationAddressPolicy,
215
+ });
216
+ const transactions = implementation.transaction ? [implementation.transaction] : [];
217
+ transactions.push({
218
+ id: 'upgrade-proxy',
219
+ purpose: 'upgrade-proxy',
220
+ to: request.proxy,
221
+ value: '0',
222
+ data: UPGRADE_INTERFACE.encodeFunctionData('upgradeToAndCall', [
223
+ implementation.deployment.address,
224
+ initializerData(implementation.contractFactory, request.call),
225
+ ]),
226
+ operation: 0,
227
+ factoryDeps: [],
228
+ });
229
+ const network = await hre.ethers.provider.getNetwork();
230
+ return (0, normalize_js_1.normalizePreparationPlan)({
231
+ version: 1,
232
+ requestHash: (0, normalize_js_1.hashPreparationRequest)(request),
233
+ kind: request.kind,
234
+ scheme: request.scheme,
235
+ network: request.network,
236
+ target: request.target,
237
+ chainId: network.chainId.toString(),
238
+ contract: request.contract,
239
+ proxyKind: 'uups',
240
+ artifact: (0, artifacts_js_1.artifactIdentity)(artifact, 'zksync-eravm'),
241
+ validation,
242
+ deployments: [implementation.deployment],
243
+ transactions,
244
+ });
245
+ };
246
+ const prepareZkSync = async (hre, request, dependencies = {}) => {
247
+ if (request.scheme !== 'zksync-eravm') {
248
+ throw new Error('zkSync adapter received a non-zkSync request');
249
+ }
250
+ if (hre.network.config?.zksync !== true) {
251
+ throw new Error(`Hardhat network ${hre.network.name} is not configured for zkSync`);
252
+ }
253
+ const artifact = await hre.artifacts.readArtifact(request.contract);
254
+ (0, artifacts_js_1.assertArtifactScheme)(artifact, 'zksync-eravm');
255
+ if (request.kind === 'create2-deploy')
256
+ return preparePlain(hre, request, artifact);
257
+ if (request.kind === 'uups-placeholder-deploy') {
258
+ return prepareUupsInitial(hre, request, artifact, dependencies);
259
+ }
260
+ return prepareUupsUpgrade(hre, request, artifact, dependencies);
261
+ };
262
+ exports.prepareZkSync = prepareZkSync;
263
+ //# sourceMappingURL=zksync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zksync.js","sourceRoot":"","sources":["../../../src/core/preparation/zksync.ts"],"names":[],"mappings":"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"}