@openzeppelin/hardhat-upgrades
Version:
[](https://docs.openzeppelin.com/upgrades-plugins/hardhat-upgrades) [](https://www.npmjs.org/package/@openzeppelin/h
48 lines • 2.53 kB
JavaScript
import { assertNotProxy, assertStorageUpgradeSafe, assertUpgradeSafe, getImplementationAddress, getImplementationAddressFromBeacon, getStorageLayoutForAddress, Manifest, processProxyKind, } from '@openzeppelin/upgrades-core';
/**
* Processes the proxy kind and returns the implementation address if proxyAddress is provided.
*/
async function processProxyImpl(deployData, proxyAddress, opts) {
await processProxyKind(deployData.provider, proxyAddress, opts, deployData.validations, deployData.version);
let currentImplAddress;
if (proxyAddress !== undefined) {
// upgrade scenario
currentImplAddress = await getImplementationAddress(deployData.provider, proxyAddress);
}
return currentImplAddress;
}
/**
* Asserts that the address is not a proxy and returns the beacon's implementation address.
*/
async function processBeaconImpl(deployData, beaconAddress) {
// upgrade scenario
await assertNotProxy(deployData.provider, beaconAddress);
return await getImplementationAddressFromBeacon(deployData.provider, beaconAddress);
}
export async function validateImpl(deployData, opts, currentImplAddress) {
assertUpgradeSafe(deployData.validations, deployData.version, deployData.fullOpts);
if (currentImplAddress !== undefined) {
const manifest = await Manifest.forNetwork(deployData.provider);
const currentLayout = await getStorageLayoutForAddress(manifest, deployData.validations, currentImplAddress);
if (opts.unsafeSkipStorageCheck !== true) {
assertStorageUpgradeSafe(currentLayout, deployData.layout, deployData.fullOpts);
}
}
}
/**
* Processes the proxy kind and validates that the implementation in deployData is upgrade safe
* (compared to the proxy's current implementation if proxyAddress is specified).
*/
export async function validateProxyImpl(deployData, opts, proxyAddress) {
const currentImplAddress = await processProxyImpl(deployData, proxyAddress, opts);
return validateImpl(deployData, opts, currentImplAddress);
}
/**
* Asserts that the address is not a proxy and validates that the implementation in deployData is upgrade safe
* compared to the beacon's current implementation.
*/
export async function validateBeaconImpl(deployData, opts, beaconAddress) {
const currentImplAddress = beaconAddress !== undefined ? await processBeaconImpl(deployData, beaconAddress) : undefined;
return validateImpl(deployData, opts, currentImplAddress);
}
//# sourceMappingURL=validate-impl.js.map