gate-evm-tools 1.0.20 → 1.0.22

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.
@@ -1,6 +1,7 @@
1
1
  import * as path from 'path';
2
2
  import * as fs from 'fs';
3
- import { forceImportWithRetry, getCodeStatus, getOpenZeppelinManifestFile, mergeUnsafeAllow, } from '../utils/openzeppelin.js';
3
+ import { forceImportWithRetry, getCodeStatus, getOpenZeppelinManifestPaths, mergeUnsafeAllow, } from '../utils/openzeppelin.js';
4
+ import { withManifestTransaction } from '../utils/manifestTransaction.js';
4
5
  /**
5
6
  * 同步链上合约状态到本地 .openzeppelin 网络文件
6
7
  *
@@ -103,158 +104,176 @@ export async function syncNetworkFile(options) {
103
104
  }
104
105
  }
105
106
  console.log('');
106
- // Step 4: 使用 OpenZeppelin 官方的 forceImport 方法同步状态
107
- console.log('📊 Step 4: 使用 forceImport 同步链上状态...');
108
- console.log(' 这会自动更新 .openzeppelin 文件,包括完整的存储布局和命名空间');
109
- console.log('');
110
- try {
111
- const ContractFactory = await hre.ethers.getContractFactory(CONTRACT_NAME);
112
- if (CONSTRUCTOR_ARGS.length > 0) {
113
- console.log(` 📝 使用构造函数参数:`, CONSTRUCTOR_ARGS);
107
+ const projectRoot = process.cwd();
108
+ const manifestPaths = await getOpenZeppelinManifestPaths(hre);
109
+ const networkFilePath = manifestPaths.file;
110
+ const transaction = await withManifestTransaction({
111
+ root: projectRoot,
112
+ manifestFile: networkFilePath,
113
+ fallbackFile: manifestPaths.fallbackFile,
114
+ operation: async ({ writeManifestAtomic }) => {
115
+ // Step 4: 使用 OpenZeppelin 官方的 forceImport 方法同步状态
116
+ console.log('📊 Step 4: 使用 forceImport 同步链上状态...');
117
+ console.log(' 这会自动更新 .openzeppelin 文件,包括完整的存储布局和命名空间');
114
118
  console.log('');
115
- }
116
- // forceImport: 强制导入已存在的代理,更新本地 .openzeppelin 文件
117
- // 这是 OpenZeppelin 官方推荐的同步方式
118
- const importOptions = {
119
- kind: 'uups',
120
- unsafeAllow: mergeUnsafeAllow()
121
- };
122
- // 如果有构造函数参数,添加到选项中
123
- if (CONSTRUCTOR_ARGS.length > 0) {
124
- importOptions.constructorArgs = CONSTRUCTOR_ARGS;
125
- }
126
- await forceImportWithRetry(hre, PROXY_ADDRESS, ContractFactory, importOptions);
127
- console.log('✅ forceImport 完成!');
128
- console.log('');
129
- }
130
- catch (error) {
131
- console.error('❌ forceImport 失败:', error.message);
132
- console.error(` 代理合约状态: ${await getCodeStatus(hre, PROXY_ADDRESS)}`);
133
- console.error(` 实现合约状态: ${await getCodeStatus(hre, currentImplementation)}`);
134
- console.error('');
135
- throw error;
136
- }
137
- // Step 5: 查找正确的网络文件并补充交易哈希
138
- console.log('📊 Step 5: 查找网络文件并补充交易哈希...');
139
- const networkFilePath = await getOpenZeppelinManifestFile(hre);
140
- const actualNetworkName = path.basename(networkFilePath, '.json');
141
- console.log(' ✅ OpenZeppelin manifest 文件:', path.basename(networkFilePath));
142
- if (!fs.existsSync(networkFilePath)) {
143
- const error = new Error('未找到 .openzeppelin 网络文件');
144
- console.error('❌ 错误: 未找到 .openzeppelin 网络文件');
145
- console.error(` OpenZeppelin 预期文件: ${networkFilePath}`);
146
- console.error(' 请确认 forceImport 已成功执行');
147
- throw error;
148
- }
149
- console.log(' 📄 使用网络文件:', actualNetworkName + '.json');
150
- console.log('');
151
- let networkFile = JSON.parse(fs.readFileSync(networkFilePath, 'utf8'));
152
- // 查找当前代理的实现信息
153
- const proxyInfo = networkFile.proxies?.find((p) => p.address.toLowerCase() === PROXY_ADDRESS.toLowerCase());
154
- if (!proxyInfo) {
155
- const error = new Error('代理信息未找到');
156
- console.error('❌ 错误: 代理信息未找到');
157
- throw error;
158
- }
159
- // 查找实现合约的布局信息
160
- let layoutInfo = null;
161
- let layoutHash = '';
162
- let needsSave = false;
163
- for (const [hash, impl] of Object.entries(networkFile.impls || {})) {
164
- const implData = impl;
165
- // 检查是否匹配:
166
- // 1. 直接匹配 address 字段
167
- // 2. 在 allAddresses 数组中查找(多次升级可能共享相同布局)
168
- const isMatch = implData.address.toLowerCase() === currentImplementation.toLowerCase() ||
169
- (implData.allAddresses && Array.isArray(implData.allAddresses) &&
170
- implData.allAddresses.some((addr) => addr.toLowerCase() === currentImplementation.toLowerCase()));
171
- if (isMatch) {
172
- layoutHash = hash;
173
- layoutInfo = implData.layout;
174
- console.log(' ✅ 找到实现合约的布局信息');
175
- if (implData.allAddresses && implData.allAddresses.length > 1) {
176
- console.log(` 📋 该布局被 ${implData.allAddresses.length} 个实现合约共享`);
177
- console.log(` 主地址: ${implData.address}`);
178
- console.log(` 所有地址: ${implData.allAddresses.join(', ')}`);
119
+ try {
120
+ const ContractFactory = await hre.ethers.getContractFactory(CONTRACT_NAME);
121
+ if (CONSTRUCTOR_ARGS.length > 0) {
122
+ console.log(` 📝 使用构造函数参数:`, CONSTRUCTOR_ARGS);
123
+ console.log('');
124
+ }
125
+ // forceImport: 强制导入已存在的代理,更新本地 .openzeppelin 文件
126
+ // 这是 OpenZeppelin 官方推荐的同步方式
127
+ const importOptions = {
128
+ kind: 'uups',
129
+ unsafeAllow: mergeUnsafeAllow()
130
+ };
131
+ // 如果有构造函数参数,添加到选项中
132
+ if (CONSTRUCTOR_ARGS.length > 0) {
133
+ importOptions.constructorArgs = CONSTRUCTOR_ARGS;
134
+ }
135
+ await forceImportWithRetry(hre, PROXY_ADDRESS, ContractFactory, importOptions);
136
+ console.log('✅ forceImport 完成!');
137
+ console.log('');
179
138
  }
139
+ catch (error) {
140
+ console.error('❌ forceImport 失败:', error.message);
141
+ console.error(` 代理合约状态: ${await getCodeStatus(hre, PROXY_ADDRESS)}`);
142
+ console.error(` 实现合约状态: ${await getCodeStatus(hre, currentImplementation)}`);
143
+ console.error('');
144
+ throw error;
145
+ }
146
+ // Step 5: 查找正确的网络文件并补充交易哈希
147
+ console.log('📊 Step 5: 查找网络文件并补充交易哈希...');
148
+ const actualNetworkName = path.basename(networkFilePath, '.json');
149
+ console.log(' ✅ OpenZeppelin manifest 文件:', path.basename(networkFilePath));
150
+ if (!fs.existsSync(networkFilePath)) {
151
+ const error = new Error('未找到 .openzeppelin 网络文件');
152
+ console.error('❌ 错误: 未找到 .openzeppelin 网络文件');
153
+ console.error(` OpenZeppelin 预期文件: ${networkFilePath}`);
154
+ console.error(' 请确认 forceImport 已成功执行');
155
+ throw error;
156
+ }
157
+ console.log(' 📄 使用网络文件:', actualNetworkName + '.json');
180
158
  console.log('');
181
- // 检查并补充交易哈希(只对主地址有效)
182
- if (implData.address.toLowerCase() === currentImplementation.toLowerCase()) {
183
- if (!implData.txHash && implTxHash && implTxHash !== '0x0') {
184
- console.log(' 💾 补充交易哈希到记录...');
185
- console.log(' 交易哈希:', implTxHash);
186
- // 重新构建对象,确保字段顺序
187
- const newImpl = {
188
- address: implData.address,
189
- txHash: implTxHash,
190
- layout: implData.layout
191
- };
192
- // 保留 allAddresses 字段(如果存在)
193
- if (implData.allAddresses) {
194
- newImpl.allAddresses = implData.allAddresses;
159
+ let networkFile = JSON.parse(fs.readFileSync(networkFilePath, 'utf8'));
160
+ // 查找当前代理的实现信息
161
+ const proxyInfo = networkFile.proxies?.find((p) => p.address.toLowerCase() === PROXY_ADDRESS.toLowerCase());
162
+ if (!proxyInfo) {
163
+ const error = new Error('代理信息未找到');
164
+ console.error('❌ 错误: 代理信息未找到');
165
+ throw error;
166
+ }
167
+ // 查找实现合约的布局信息
168
+ let layoutInfo = null;
169
+ let layoutHash = '';
170
+ let needsSave = false;
171
+ for (const [hash, impl] of Object.entries(networkFile.impls || {})) {
172
+ const implData = impl;
173
+ // 检查是否匹配:
174
+ // 1. 直接匹配 address 字段
175
+ // 2. 在 allAddresses 数组中查找(多次升级可能共享相同布局)
176
+ const isMatch = implData.address.toLowerCase() === currentImplementation.toLowerCase() ||
177
+ (implData.allAddresses && Array.isArray(implData.allAddresses) &&
178
+ implData.allAddresses.some((addr) => addr.toLowerCase() === currentImplementation.toLowerCase()));
179
+ if (isMatch) {
180
+ layoutHash = hash;
181
+ layoutInfo = implData.layout;
182
+ console.log(' ✅ 找到实现合约的布局信息');
183
+ if (implData.allAddresses && implData.allAddresses.length > 1) {
184
+ console.log(` 📋 该布局被 ${implData.allAddresses.length} 个实现合约共享`);
185
+ console.log(` 主地址: ${implData.address}`);
186
+ console.log(` 所有地址: ${implData.allAddresses.join(', ')}`);
195
187
  }
196
- // 替换原有的实现记录
197
- networkFile.impls[hash] = newImpl;
198
- needsSave = true;
188
+ console.log('');
189
+ // 检查并补充交易哈希(只对主地址有效)
190
+ if (implData.address.toLowerCase() === currentImplementation.toLowerCase()) {
191
+ if (!implData.txHash && implTxHash && implTxHash !== '0x0') {
192
+ console.log(' 💾 补充交易哈希到记录...');
193
+ console.log(' 交易哈希:', implTxHash);
194
+ // 重新构建对象,确保字段顺序
195
+ const newImpl = {
196
+ address: implData.address,
197
+ txHash: implTxHash,
198
+ layout: implData.layout
199
+ };
200
+ // 保留 allAddresses 字段(如果存在)
201
+ if (implData.allAddresses) {
202
+ newImpl.allAddresses = implData.allAddresses;
203
+ }
204
+ // 替换原有的实现记录
205
+ networkFile.impls[hash] = newImpl;
206
+ needsSave = true;
207
+ }
208
+ else if (implData.txHash) {
209
+ console.log(' ✅ 交易哈希已存在:', implData.txHash);
210
+ }
211
+ else {
212
+ console.log(' ⚠️ 未获取到交易哈希');
213
+ }
214
+ }
215
+ break;
216
+ }
217
+ }
218
+ // 保存更新后的文件
219
+ if (needsSave) {
220
+ try {
221
+ writeManifestAtomic(Buffer.from(`${JSON.stringify(networkFile, null, 2)}\n`));
222
+ console.log(' 💾 文件已保存');
199
223
  }
200
- else if (implData.txHash) {
201
- console.log(' ✅ 交易哈希已存在:', implData.txHash);
224
+ catch (error) {
225
+ console.error(' ❌ 保存文件失败:', error.message);
226
+ throw error;
202
227
  }
203
- else {
204
- console.log(' ⚠️ 未获取到交易哈希');
228
+ }
229
+ console.log('');
230
+ if (!layoutInfo) {
231
+ const error = new Error('未找到实现合约的布局信息');
232
+ console.error('❌ 错误: 未找到实现合约的布局信息');
233
+ throw error;
234
+ }
235
+ console.log('✅ 同步结果验证通过!');
236
+ console.log('');
237
+ // 总结
238
+ console.log('=====================================');
239
+ console.log('✅ 同步完成!');
240
+ console.log('=====================================');
241
+ console.log('');
242
+ console.log('📋 同步摘要:');
243
+ console.log('-------------------------------------');
244
+ console.log('代理合约:', PROXY_ADDRESS);
245
+ console.log('实现合约:', currentImplementation);
246
+ console.log('布局哈希:', layoutHash.substring(0, 16) + '...');
247
+ console.log('存储变量:', layoutInfo.storage?.length || 0, '个');
248
+ console.log('命名空间:', Object.keys(layoutInfo.namespaces || {}).length, '个');
249
+ console.log('类型定义:', Object.keys(layoutInfo.types || {}).length, '个');
250
+ console.log('网络文件:', networkFilePath);
251
+ console.log('-------------------------------------');
252
+ console.log('');
253
+ // 显示命名空间详情
254
+ if (layoutInfo.namespaces && Object.keys(layoutInfo.namespaces).length > 0) {
255
+ console.log('📦 命名空间详情:');
256
+ for (const [namespace, vars] of Object.entries(layoutInfo.namespaces)) {
257
+ console.log(` - ${namespace}: ${vars.length} 个变量`);
205
258
  }
259
+ console.log('');
206
260
  }
207
- break;
208
- }
209
- }
210
- // 保存更新后的文件
211
- if (needsSave) {
212
- try {
213
- fs.writeFileSync(networkFilePath, JSON.stringify(networkFile, null, 2));
214
- console.log(' 💾 文件已保存');
215
- }
216
- catch (error) {
217
- console.error(' ❌ 保存文件失败:', error.message);
218
- }
219
- }
220
- console.log('');
221
- if (!layoutInfo) {
222
- const error = new Error('未找到实现合约的布局信息');
223
- console.error('❌ 错误: 未找到实现合约的布局信息');
224
- throw error;
225
- }
226
- console.log('✅ 同步结果验证通过!');
227
- console.log('');
228
- // 总结
229
- console.log('=====================================');
230
- console.log('✅ 同步完成!');
231
- console.log('=====================================');
232
- console.log('');
233
- console.log('📋 同步摘要:');
234
- console.log('-------------------------------------');
235
- console.log('代理合约:', PROXY_ADDRESS);
236
- console.log('实现合约:', currentImplementation);
237
- console.log('布局哈希:', layoutHash.substring(0, 16) + '...');
238
- console.log('存储变量:', layoutInfo.storage?.length || 0, '个');
239
- console.log('命名空间:', Object.keys(layoutInfo.namespaces || {}).length, '个');
240
- console.log('类型定义:', Object.keys(layoutInfo.types || {}).length, '个');
241
- console.log('网络文件:', networkFilePath);
242
- console.log('-------------------------------------');
243
- console.log('');
244
- // 显示命名空间详情
245
- if (layoutInfo.namespaces && Object.keys(layoutInfo.namespaces).length > 0) {
246
- console.log('📦 命名空间详情:');
247
- for (const [namespace, vars] of Object.entries(layoutInfo.namespaces)) {
248
- console.log(` - ${namespace}: ${vars.length} 个变量`);
249
- }
250
- console.log('');
251
- }
261
+ return {
262
+ proxyAddress: PROXY_ADDRESS,
263
+ implementationAddress: currentImplementation,
264
+ layoutHash: layoutHash.substring(0, 16) + '...',
265
+ networkFile: networkFilePath,
266
+ success: true,
267
+ };
268
+ },
269
+ });
270
+ console.log('Manifest before hash:', transaction.report.beforeHash);
271
+ console.log('Manifest after hash:', transaction.report.afterHash);
272
+ console.log('Sync report:', transaction.reportFile);
252
273
  return {
253
- proxyAddress: PROXY_ADDRESS,
254
- implementationAddress: currentImplementation,
255
- layoutHash: layoutHash.substring(0, 16) + '...',
256
- networkFile: networkFilePath,
257
- success: true
274
+ ...transaction.value,
275
+ manifestTransaction: transaction.report,
276
+ syncReport: transaction.reportFile,
258
277
  };
259
278
  }
260
279
  //# sourceMappingURL=syncUpgradeJson.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"syncUpgradeJson.js","sourceRoot":"","sources":["../../src/core/syncUpgradeJson.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"syncUpgradeJson.js","sourceRoot":"","sources":["../../src/core/syncUpgradeJson.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateAndGenerateCalldata.d.ts","sourceRoot":"","sources":["../../src/core/validateAndGenerateCalldata.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,GAAG,CAAC;CACV;AAwED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,eAAe;;;;;;;;;;;;;;;GAgDzE"}
1
+ {"version":3,"file":"validateAndGenerateCalldata.d.ts","sourceRoot":"","sources":["../../src/core/validateAndGenerateCalldata.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,GAAG,CAAC;CACV;AA+ED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,eAAe;;;;;;;;;;;;;;;GAgDzE"}
@@ -1,7 +1,8 @@
1
1
  import { validateUpgradeSafety } from '@openzeppelin/upgrades-core';
2
2
  import * as path from 'path';
3
3
  import * as fs from 'fs';
4
- import { forceImportWithRetry, getCodeStatus, getOpenZeppelinManifestFile, mergeUnsafeAllow, } from '../utils/openzeppelin.js';
4
+ import { forceImportWithRetry, getCodeStatus, getOpenZeppelinManifestPaths, mergeUnsafeAllow, } from '../utils/openzeppelin.js';
5
+ import { withManifestLock, withTemporaryManifestTransaction, } from '../utils/manifestTransaction.js';
5
6
  /**
6
7
  * 检测地址是代理合约还是实现合约
7
8
  */
@@ -41,8 +42,7 @@ function createForceImportOptions(constructorArgs, unsafeAllow) {
41
42
  return importOptions;
42
43
  }
43
44
  async function registerProxyForValidation(options) {
44
- const { proxyAddress, contractName, constructorArgs, unsafeAllow, hre } = options;
45
- const manifestFile = await getOpenZeppelinManifestFile(hre);
45
+ const { proxyAddress, contractName, constructorArgs, unsafeAllow, manifestFile, hre, } = options;
46
46
  const ContractFactory = await hre.ethers.getContractFactory(contractName);
47
47
  console.log('🗂️ Step 2.5: 同步当前代理到 OpenZeppelin manifest...');
48
48
  console.log(' Manifest 文件:', path.basename(manifestFile));
@@ -203,78 +203,59 @@ async function validateImplementationContract(options) {
203
203
  // Step 2: 导入链上实现合约信息(临时)
204
204
  console.log('🔐 Step 2: 导入链上实现合约信息...');
205
205
  console.log('');
206
- let forceImportSuccess = false;
207
- const openzeppelinFile = await getOpenZeppelinManifestFile(hre);
208
- // 备份现有的 .openzeppelin 文件(如果存在)
209
- let backupData = null;
210
- if (fs.existsSync(openzeppelinFile)) {
211
- console.log('📋 检测到已存在的 .openzeppelin 文件,将备份...');
212
- backupData = JSON.parse(fs.readFileSync(openzeppelinFile, 'utf8'));
213
- }
214
- try {
215
- // 尝试 forceImport 链上的实现合约
216
- console.log(`📥 导入实现合约: ${implementationAddress}`);
217
- // 获取链上实现合约的工厂(猜测合约名,或使用通用方法)
218
- const OldContractFactory = await hre.ethers.getContractFactory(contractName);
219
- await forceImportWithRetry(hre, implementationAddress, OldContractFactory, createForceImportOptions(constructorArgs, unsafeAllow));
220
- console.log('✅ 实现合约信息导入成功');
221
- console.log('');
222
- forceImportSuccess = true;
223
- }
224
- catch (importError) {
225
- console.log('⚠️ 导入失败,尝试继续验证...');
226
- console.log(` 错误: ${importError.message}`);
227
- console.log(` 实现合约状态: ${await getCodeStatus(hre, implementationAddress)}`);
228
- console.log('');
229
- }
230
- // Step 3: 验证存储布局兼容性
231
- console.log('🔐 Step 3: 验证存储布局兼容性...');
206
+ const manifestPaths = await getOpenZeppelinManifestPaths(hre);
207
+ await withTemporaryManifestTransaction({
208
+ root: process.cwd(),
209
+ manifestFile: manifestPaths.file,
210
+ fallbackFile: manifestPaths.fallbackFile,
211
+ operation: async () => {
212
+ try {
213
+ // 尝试 forceImport 链上的实现合约
214
+ console.log(`📥 导入实现合约: ${implementationAddress}`);
215
+ // 获取链上实现合约的工厂(猜测合约名,或使用通用方法)
216
+ const OldContractFactory = await hre.ethers.getContractFactory(contractName);
217
+ await forceImportWithRetry(hre, implementationAddress, OldContractFactory, createForceImportOptions(constructorArgs, unsafeAllow));
218
+ console.log('✅ 实现合约信息导入成功');
219
+ console.log('');
220
+ }
221
+ catch (importError) {
222
+ console.log('⚠️ 导入失败,尝试继续验证...');
223
+ console.log(` 错误: ${importError.message}`);
224
+ console.log(` 实现合约状态: ${await getCodeStatus(hre, implementationAddress)}`);
225
+ console.log('');
226
+ }
227
+ // Step 3: 验证存储布局兼容性
228
+ console.log('🔐 Step 3: 验证存储布局兼容性...');
229
+ console.log('');
230
+ try {
231
+ const NewContractFactory = await hre.ethers.getContractFactory(contractName);
232
+ const validateOptions = {
233
+ kind: 'uups',
234
+ unsafeSkipStorageCheck: false,
235
+ };
236
+ if (unsafeAllow) {
237
+ validateOptions.unsafeAllow = unsafeAllow;
238
+ }
239
+ if (constructorArgs.length > 0) {
240
+ validateOptions.constructorArgs = constructorArgs;
241
+ }
242
+ // 使用实现合约地址作为"代理"地址进行验证
243
+ // Hardhat Upgrades 会读取该地址的合约并与新合约比较存储布局
244
+ await hre.upgrades.validateUpgrade(implementationAddress, NewContractFactory, validateOptions);
245
+ console.log('✅ 存储布局兼容性验证通过!');
246
+ console.log(' ℹ️ 已验证:存储布局兼容、可以安全升级');
247
+ console.log('');
248
+ }
249
+ catch (error) {
250
+ console.error('❌ 存储布局验证失败:', error.message);
251
+ console.error('');
252
+ console.error('⚠️ 存储布局不兼容,不能升级!');
253
+ throw error;
254
+ }
255
+ },
256
+ });
257
+ console.log('🔄 已按原始文件名和字节恢复 OpenZeppelin manifest');
232
258
  console.log('');
233
- try {
234
- const NewContractFactory = await hre.ethers.getContractFactory(contractName);
235
- const validateOptions = {
236
- kind: 'uups',
237
- unsafeSkipStorageCheck: false,
238
- };
239
- if (unsafeAllow) {
240
- validateOptions.unsafeAllow = unsafeAllow;
241
- }
242
- if (constructorArgs.length > 0) {
243
- validateOptions.constructorArgs = constructorArgs;
244
- }
245
- // 使用实现合约地址作为"代理"地址进行验证
246
- // Hardhat Upgrades 会读取该地址的合约并与新合约比较存储布局
247
- await hre.upgrades.validateUpgrade(implementationAddress, NewContractFactory, validateOptions);
248
- console.log('✅ 存储布局兼容性验证通过!');
249
- console.log(' ℹ️ 已验证:存储布局兼容、可以安全升级');
250
- console.log('');
251
- }
252
- catch (error) {
253
- console.error('❌ 存储布局验证失败:', error.message);
254
- console.error('');
255
- console.error('⚠️ 存储布局不兼容,不能升级!');
256
- // 恢复备份
257
- if (backupData) {
258
- console.log('🔄 恢复 .openzeppelin 文件备份...');
259
- fs.writeFileSync(openzeppelinFile, JSON.stringify(backupData, null, 2));
260
- }
261
- else if (forceImportSuccess && fs.existsSync(openzeppelinFile)) {
262
- console.log('🧹 清理临时导入的 .openzeppelin 文件...');
263
- fs.unlinkSync(openzeppelinFile);
264
- }
265
- throw error;
266
- }
267
- // 清理:恢复原始的 .openzeppelin 文件
268
- if (backupData) {
269
- console.log('🔄 恢复 .openzeppelin 文件到原始状态...');
270
- fs.writeFileSync(openzeppelinFile, JSON.stringify(backupData, null, 2));
271
- console.log('');
272
- }
273
- else if (forceImportSuccess && fs.existsSync(openzeppelinFile)) {
274
- console.log('🧹 清理临时导入的 .openzeppelin 文件...');
275
- fs.unlinkSync(openzeppelinFile);
276
- console.log('');
277
- }
278
259
  // Step 4: 部署新的实现合约
279
260
  console.log('📦 Step 4: 部署新的实现合约...');
280
261
  try {
@@ -505,46 +486,55 @@ async function validateProxyUpgrade(options) {
505
486
  throw error;
506
487
  }
507
488
  }
508
- await registerProxyForValidation({
509
- proxyAddress: PROXY_ADDRESS,
510
- contractName: OLD_CONTRACT_NAME,
511
- constructorArgs: CONSTRUCTOR_ARGS,
512
- unsafeAllow,
513
- hre
489
+ const manifestPaths = await getOpenZeppelinManifestPaths(hre);
490
+ await withManifestLock({
491
+ root: process.cwd(),
492
+ manifestFile: manifestPaths.file,
493
+ fallbackFile: manifestPaths.fallbackFile,
494
+ operation: async ({ manifestFile }) => {
495
+ await registerProxyForValidation({
496
+ proxyAddress: PROXY_ADDRESS,
497
+ contractName: OLD_CONTRACT_NAME,
498
+ constructorArgs: CONSTRUCTOR_ARGS,
499
+ unsafeAllow,
500
+ manifestFile,
501
+ hre,
502
+ });
503
+ // Step 3: 使用 Hardhat Upgrades 插件进行验证
504
+ if (isSameContract) {
505
+ console.log('🔐 Step 3: 使用 Hardhat Upgrades 插件进行链上验证(主要验证)...');
506
+ }
507
+ else {
508
+ console.log('🔐 Step 3: 使用 Hardhat Upgrades 插件进行额外验证...');
509
+ }
510
+ try {
511
+ // 验证新实现合约是否可以安全升级
512
+ // 这会从链上读取当前实现合约并与新合约进行比较
513
+ const validateOptions = {
514
+ kind: 'uups',
515
+ };
516
+ if (unsafeAllow) {
517
+ validateOptions.unsafeAllow = unsafeAllow;
518
+ }
519
+ // 如果有构造函数参数,添加到验证选项中
520
+ if (CONSTRUCTOR_ARGS.length > 0) {
521
+ validateOptions.constructorArgs = CONSTRUCTOR_ARGS;
522
+ }
523
+ await hre.upgrades.validateUpgrade(PROXY_ADDRESS, NewContractFactory, validateOptions);
524
+ console.log('✅ Hardhat Upgrades 插件验证通过!');
525
+ if (isSameContract) {
526
+ console.log(' ℹ️ 已验证:存储布局兼容、无危险操作、升级安全');
527
+ }
528
+ console.log('');
529
+ }
530
+ catch (error) {
531
+ console.error('❌ Hardhat Upgrades 验证失败:', error.message);
532
+ console.error('');
533
+ console.error('⚠️ 升级存在风险,不建议继续!');
534
+ throw error;
535
+ }
536
+ },
514
537
  });
515
- // Step 3: 使用 Hardhat Upgrades 插件进行验证
516
- if (isSameContract) {
517
- console.log('🔐 Step 3: 使用 Hardhat Upgrades 插件进行链上验证(主要验证)...');
518
- }
519
- else {
520
- console.log('🔐 Step 3: 使用 Hardhat Upgrades 插件进行额外验证...');
521
- }
522
- try {
523
- // 验证新实现合约是否可以安全升级
524
- // 这会从链上读取当前实现合约并与新合约进行比较
525
- const validateOptions = {
526
- kind: 'uups',
527
- };
528
- if (unsafeAllow) {
529
- validateOptions.unsafeAllow = unsafeAllow;
530
- }
531
- // 如果有构造函数参数,添加到验证选项中
532
- if (CONSTRUCTOR_ARGS.length > 0) {
533
- validateOptions.constructorArgs = CONSTRUCTOR_ARGS;
534
- }
535
- await hre.upgrades.validateUpgrade(PROXY_ADDRESS, NewContractFactory, validateOptions);
536
- console.log('✅ Hardhat Upgrades 插件验证通过!');
537
- if (isSameContract) {
538
- console.log(' ℹ️ 已验证:存储布局兼容、无危险操作、升级安全');
539
- }
540
- console.log('');
541
- }
542
- catch (error) {
543
- console.error('❌ Hardhat Upgrades 验证失败:', error.message);
544
- console.error('');
545
- console.error('⚠️ 升级存在风险,不建议继续!');
546
- throw error;
547
- }
548
538
  // Step 4: 生成 upgradeToAndCall 的 calldata
549
539
  console.log('📝 Step 4: 生成 upgradeToAndCall calldata...');
550
540
  // 准备初始化数据(如果升级后需要调用某个函数)