From 5c5c90f931b1ece5cf273f15204f5d89cec3baba Mon Sep 17 00:00:00 2001 From: Eric Lau Date: Mon, 24 Jun 2024 17:08:44 -0400 Subject: [PATCH] Remove `defender.proposeUpgrade` and dependencies for Defender legacy (#1041) --- .../ROOT/pages/api-hardhat-upgrades.adoc | 49 --- packages/plugin-hardhat/CHANGELOG.md | 4 + packages/plugin-hardhat/package.json | 4 +- .../src/defender-v1/propose-upgrade.ts | 99 ------ .../plugin-hardhat/src/defender-v1/utils.ts | 24 -- .../src/defender-v1/verify-deployment.ts | 101 ------ packages/plugin-hardhat/src/index.ts | 40 +-- .../defender-v1/propose-upgrade-beacon.js | 91 ----- .../propose-upgrade-transparent.js | 81 ----- .../propose-upgrade-unsafeAllow.js | 59 ---- .../propose-upgrade-use-deployed.js | 68 ---- .../test/defender-v1/propose-upgrade-uups.js | 189 ----------- .../plugin-hardhat/test/defender-v1/utils.js | 44 --- .../test/defender-v1/verify-deployment.js | 105 ------ yarn.lock | 315 ++---------------- 15 files changed, 32 insertions(+), 1241 deletions(-) delete mode 100644 packages/plugin-hardhat/src/defender-v1/propose-upgrade.ts delete mode 100644 packages/plugin-hardhat/src/defender-v1/utils.ts delete mode 100644 packages/plugin-hardhat/src/defender-v1/verify-deployment.ts delete mode 100644 packages/plugin-hardhat/test/defender-v1/propose-upgrade-beacon.js delete mode 100644 packages/plugin-hardhat/test/defender-v1/propose-upgrade-transparent.js delete mode 100644 packages/plugin-hardhat/test/defender-v1/propose-upgrade-unsafeAllow.js delete mode 100644 packages/plugin-hardhat/test/defender-v1/propose-upgrade-use-deployed.js delete mode 100644 packages/plugin-hardhat/test/defender-v1/propose-upgrade-uups.js delete mode 100644 packages/plugin-hardhat/test/defender-v1/utils.js delete mode 100644 packages/plugin-hardhat/test/defender-v1/verify-deployment.js diff --git a/docs/modules/ROOT/pages/api-hardhat-upgrades.adoc b/docs/modules/ROOT/pages/api-hardhat-upgrades.adoc index 1b951d5cd..6f0c0a620 100644 --- a/docs/modules/ROOT/pages/api-hardhat-upgrades.adoc +++ b/docs/modules/ROOT/pages/api-hardhat-upgrades.adoc @@ -544,55 +544,6 @@ Similar to `prepareUpgrade`. This method validates and deploys the new implement * `@openzeppelin/hardhat-upgrades@2.2.0` -[[defender-propose-upgrade]] -== defender.proposeUpgrade - -[source,ts] ----- -async function proposeUpgrade( - proxyAddress: string, - ImplFactory: ContractFactory, - opts?: { - unsafeAllow?: ValidationError[], - unsafeAllowRenames?: boolean, - unsafeSkipStorageCheck?: boolean, - constructorArgs?: unknown[], - timeout?: number, - pollingInterval?: number, - redeployImplementation?: 'always' | 'never' | 'onchange', - kind?: 'uups' | 'transparent' | 'beacon', - title?: string, - description?: string, - multisig?: string, - proxyAdmin?: string, - }, -): Promise<{ - url: string, - txResponse?: ethers.providers.TransactionResponse, - }> ----- - -NOTE: This method requires configuring a Defender Team API Key. - -Proposes an upgrade using https://docs.openzeppelin.com/defender/admin[Defender Admin]. - -Similar to `prepareUpgrade`. This method validates and deploys the new implementation contract, but also creates an upgrade proposal in Defender Admin, for review and approval by the upgrade administrators. Supported for UUPS or Transparent proxies. Not currently supported for beacon proxies or beacons. For beacons, use `prepareUpgrade` along with a custom action in Defender Admin to upgrade the beacon to the deployed implementation. - -*Parameters:* - -* `proxyAddress` - the proxy address. -* `ImplFactory` - the new implementation contract. -* `opts` - an object with options: -** `title`: title of the upgrade proposal as seen in Defender Admin, defaults to `Upgrade to 0x12345678` (using the first 8 digits of the new implementation address) -** `description`: description of the upgrade proposal as seen in Defender Admin, defaults to the full implementation address. -** `multisig`: address of the multisignature wallet contract with the rights to execute the upgrade. This is autodetected in https://docs.openzeppelin.com/contracts/api/proxy#TransparentUpgradeableProxy[Transparent proxies], but required for https://docs.openzeppelin.com/contracts/api/proxy#UUPSUpgradeable[UUPS proxies] (read more https://docs.openzeppelin.com/contracts/api/proxy#transparent-vs-uups[here]). Both Gnosis Safe and Gnosis MultisigWallet multisigs are supported. -** `proxyAdmin`: address of the https://docs.openzeppelin.com/contracts/api/proxy#ProxyAdmin[`ProxyAdmin`] contract that manages the proxy, if exists. This is autodetected in https://docs.openzeppelin.com/contracts/api/proxy#TransparentUpgradeableProxy[Transparent proxies], but required for https://docs.openzeppelin.com/contracts/api/proxy#UUPSUpgradeable[UUPS proxies] (read more https://docs.openzeppelin.com/contracts/api/proxy#transparent-vs-uups[here]), though UUPS proxies typically do not require the usage of a ProxyAdmin. -** additional options as described in <>. - -*Returns:* - -* an object with the URL of the Defender proposal, and the ethers transaction response corresponding to the deployment of the new implementation contract. Note that if the new implementation contract was originally imported as a result of `forceImport`, the ethers transaction response will be undefined. - [[admin-change-proxy-admin]] == admin.changeProxyAdmin diff --git a/packages/plugin-hardhat/CHANGELOG.md b/packages/plugin-hardhat/CHANGELOG.md index 28ef20c17..700739064 100644 --- a/packages/plugin-hardhat/CHANGELOG.md +++ b/packages/plugin-hardhat/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 3.2.0 (2024-06-24) + +- **Breaking change**: Remove `defender.proposeUpgrade` from Defender legacy. Defender users should use `defender.proposeUpgradeWithApproval` instead. + ## 3.1.1 (2024-06-03) - Defender: Fix proxy deployments when using `constructorArgs` option, support arbitrary constructor arguments. ([#1029](https://github.com/OpenZeppelin/openzeppelin-upgrades/pull/1029)) diff --git a/packages/plugin-hardhat/package.json b/packages/plugin-hardhat/package.json index e0de42c84..7e2f21e4f 100644 --- a/packages/plugin-hardhat/package.json +++ b/packages/plugin-hardhat/package.json @@ -1,6 +1,6 @@ { "name": "@openzeppelin/hardhat-upgrades", - "version": "3.1.1", + "version": "3.2.0", "description": "", "repository": "https://github.com/OpenZeppelin/openzeppelin-upgrades/tree/master/packages/plugin-hardhat", "license": "MIT", @@ -35,8 +35,6 @@ "sinon": "^18.0.0" }, "dependencies": { - "@openzeppelin/defender-admin-client": "^1.52.0", - "@openzeppelin/defender-base-client": "^1.52.0", "@openzeppelin/defender-sdk-base-client": "^1.10.0", "@openzeppelin/defender-sdk-deploy-client": "^1.10.0", "@openzeppelin/defender-sdk-network-client": "^1.10.0", diff --git a/packages/plugin-hardhat/src/defender-v1/propose-upgrade.ts b/packages/plugin-hardhat/src/defender-v1/propose-upgrade.ts deleted file mode 100644 index 9d33ffa2c..000000000 --- a/packages/plugin-hardhat/src/defender-v1/propose-upgrade.ts +++ /dev/null @@ -1,99 +0,0 @@ -import '../type-extensions'; -import { - getImplementationAddress, - isBeaconProxy, - isTransparentOrUUPSProxy, - isTransparentProxy, -} from '@openzeppelin/upgrades-core'; -import { ProposalResponse, CreateProposalRequest } from '@openzeppelin/defender-admin-client'; -import { ContractFactory, getCreateAddress, ethers } from 'ethers'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { getAdminClient, getNetwork } from './utils'; -import type { VerificationResponse } from './verify-deployment'; -import { UpgradeOptions } from '../utils/options'; - -export interface ExtendedProposalResponse extends ProposalResponse { - txResponse?: ethers.TransactionResponse; - verificationResponse?: VerificationResponse; -} - -export type ProposeUpgradeFunction = ( - proxyAddress: string, - contractNameOrImplFactory: string | ContractFactory, - opts?: ProposalOptions, -) => Promise; - -export interface ProposalOptions extends UpgradeOptions { - title?: string; - description?: string; - proxyAdmin?: string; - multisig?: string; - multisigType?: CreateProposalRequest['viaType']; - bytecodeVerificationReferenceUrl?: string; -} - -export function makeProposeUpgrade(hre: HardhatRuntimeEnvironment): ProposeUpgradeFunction { - return async function proposeUpgrade(proxyAddress, contractNameOrImplFactory, opts = {}) { - const client = getAdminClient(hre); - const network = await getNetwork(hre); - - const { title, description, proxyAdmin, multisig, multisigType, ...moreOpts } = opts; - - if (await isBeaconProxy(hre.network.provider, proxyAddress)) { - throw new Error(`Beacon proxy is not currently supported with defender.proposeUpgrade()`); - } else if ( - !multisig && - (await isTransparentOrUUPSProxy(hre.network.provider, proxyAddress)) && - !(await isTransparentProxy(hre.network.provider, proxyAddress)) - ) { - throw new Error(`Multisig address is a required property for UUPS proxies`); - } else { - // try getting the implementation address so that it will give an error if it's not a transparent/uups proxy - await getImplementationAddress(hre.network.provider, proxyAddress); - } - - const implFactory = - typeof contractNameOrImplFactory === 'string' - ? await hre.ethers.getContractFactory(contractNameOrImplFactory) - : contractNameOrImplFactory; - const contractName = typeof contractNameOrImplFactory === 'string' ? contractNameOrImplFactory : undefined; - const contract = { address: proxyAddress, network, abi: implFactory.interface.formatJson() }; - - const prepareUpgradeResult = await hre.upgrades.prepareUpgrade(proxyAddress, implFactory, { - getTxResponse: true, - ...moreOpts, - }); - - let txResponse, newImplementation; - - if (typeof prepareUpgradeResult === 'string') { - newImplementation = prepareUpgradeResult; - } else { - txResponse = prepareUpgradeResult; - newImplementation = getCreateAddress(txResponse); - } - - const verificationResponse = - contractName && opts.bytecodeVerificationReferenceUrl - ? await hre.defender.verifyDeployment(newImplementation, contractName, opts.bytecodeVerificationReferenceUrl) - : undefined; - - const proposalResponse = await client.proposeUpgrade( - { - newImplementation, - title, - description, - proxyAdmin, - via: multisig, - viaType: multisigType, - }, - contract, - ); - - return { - ...proposalResponse, - txResponse, - verificationResponse, - }; - }; -} diff --git a/packages/plugin-hardhat/src/defender-v1/utils.ts b/packages/plugin-hardhat/src/defender-v1/utils.ts deleted file mode 100644 index c1c4a9f54..000000000 --- a/packages/plugin-hardhat/src/defender-v1/utils.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { AdminClient } from '@openzeppelin/defender-admin-client'; -import { fromChainId, Network } from '@openzeppelin/defender-base-client'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; - -export function getAdminClient(hre: HardhatRuntimeEnvironment): AdminClient { - const cfg = hre.config.defender; - if (!cfg || !cfg.apiKey || !cfg.apiSecret) { - const sampleConfig = JSON.stringify({ apiKey: 'YOUR_API_KEY', apiSecret: 'YOUR_API_SECRET' }, null, 2); - throw new Error( - `Missing Defender API key and secret in hardhat config. Add the following to your hardhat.config.js configuration:\ndefender: ${sampleConfig}\n`, - ); - } - return new AdminClient(cfg); -} - -export async function getNetwork(hre: HardhatRuntimeEnvironment): Promise { - const id = await hre.network.provider.send('eth_chainId', []); - const chainId = parseInt(id.replace(/^0x/, ''), 16); - const network = fromChainId(chainId); - if (network === undefined) { - throw new Error(`Network ${chainId} is not supported in Defender`); - } - return network; -} diff --git a/packages/plugin-hardhat/src/defender-v1/verify-deployment.ts b/packages/plugin-hardhat/src/defender-v1/verify-deployment.ts deleted file mode 100644 index e14ca0636..000000000 --- a/packages/plugin-hardhat/src/defender-v1/verify-deployment.ts +++ /dev/null @@ -1,101 +0,0 @@ -import '../type-extensions'; -import { AdminClient, VerificationRequest } from '@openzeppelin/defender-admin-client'; -import { Artifact, BuildInfo, CompilerOutputBytecode, HardhatRuntimeEnvironment } from 'hardhat/types'; -import { getAdminClient, getNetwork } from './utils'; -import { sha256FromString } from 'ethereumjs-util'; - -export type VerificationResponse = Awaited>; - -type ExtendedArtifact = Artifact & { immutableReferences: CompilerOutputBytecode['immutableReferences'] }; - -export type VerifyDeployFunction = ( - address: string, - contractName: string, - referenceUrl: string, -) => Promise; - -export type VerifyDeployWithUploadedArtifactFunction = ( - address: string, - contractName: string, - artifactUri: string, -) => Promise; - -export type GetVerifyDeployArtifactFunction = (contractName: string) => Promise; - -export type GetVerifyDeployBuildInfoFunction = (contractName: string) => Promise; - -export type GetBytecodeDigestFunction = (contractName: string) => Promise; - -export function makeVerifyDeploy(hre: HardhatRuntimeEnvironment): VerifyDeployFunction { - return async function verifyDeploy(address, contractName, referenceUri) { - const client = getAdminClient(hre); - const contractNetwork = await getNetwork(hre); - const artifact = await getExtendedArtifact(hre, contractName); - - const request: VerificationRequest = { - contractAddress: address, - contractName: artifact.contractName, - solidityFilePath: artifact.sourceName, - contractNetwork, - artifactPayload: JSON.stringify(artifact), - referenceUri, - }; - - return client.verifyDeployment(request); - }; -} - -export function makeVerifyDeployWithUploadedArtifact( - hre: HardhatRuntimeEnvironment, -): VerifyDeployWithUploadedArtifactFunction { - return async function verifyDeploy(address, contractName, artifactUri) { - const client = getAdminClient(hre); - const contractNetwork = await getNetwork(hre); - const artifact = await hre.artifacts.readArtifact(contractName); - - const request: VerificationRequest = { - contractAddress: address, - contractName: artifact.contractName, - solidityFilePath: artifact.sourceName, - artifactUri, - contractNetwork, - }; - - return client.verifyDeployment(request); - }; -} - -export function makeGetVerifyDeployArtifact(hre: HardhatRuntimeEnvironment): GetVerifyDeployArtifactFunction { - return async function getVerifyDeployArtifact(contractName: string): Promise { - return getExtendedArtifact(hre, contractName); - }; -} - -export function makeGetVerifyDeployBuildInfo(hre: HardhatRuntimeEnvironment): GetVerifyDeployBuildInfoFunction { - return async function getVerifyDeployBuildInfo(contractName: string): Promise { - const artifact = await hre.artifacts.readArtifact(contractName); - const fqn = `${artifact.sourceName}:${artifact.contractName}`; - const buildInfo = await hre.artifacts.getBuildInfo(fqn); - if (!buildInfo) { - throw new Error(`Build info for ${fqn} not found`); - } - return buildInfo; - }; -} - -export function makeGetBytecodeDigest(hre: HardhatRuntimeEnvironment) { - return async function getBytecodeDigest(contractName: string): Promise { - const artifact = await hre.artifacts.readArtifact(contractName); - const bytecode = artifact.deployedBytecode; - return sha256FromString(bytecode).toString('hex'); - }; -} - -async function getExtendedArtifact(hre: HardhatRuntimeEnvironment, contractName: string): Promise { - const artifact = await hre.artifacts.readArtifact(contractName); - const fqn = `${artifact.sourceName}:${artifact.contractName}`; - const buildInfo = await hre.artifacts.getBuildInfo(fqn); - const contractBuildInfo = buildInfo?.output.contracts[artifact.sourceName][artifact.contractName]; - const immutableReferences = contractBuildInfo?.evm.deployedBytecode.immutableReferences ?? {}; - return { ...artifact, immutableReferences }; -} diff --git a/packages/plugin-hardhat/src/index.ts b/packages/plugin-hardhat/src/index.ts index bdb056442..07ab0fc5c 100644 --- a/packages/plugin-hardhat/src/index.ts +++ b/packages/plugin-hardhat/src/index.ts @@ -24,14 +24,6 @@ import type { GetDeployApprovalProcessFunction, GetUpgradeApprovalProcessFunction, } from './defender/get-approval-process'; -import type { ProposeUpgradeFunction } from './defender-v1/propose-upgrade'; -import type { - VerifyDeployFunction, - VerifyDeployWithUploadedArtifactFunction, - GetVerifyDeployArtifactFunction, - GetVerifyDeployBuildInfoFunction, - GetBytecodeDigestFunction, -} from './defender-v1/verify-deployment'; export interface HardhatUpgrades { deployProxy: DeployFunction; @@ -59,16 +51,7 @@ export interface HardhatUpgrades { }; } -export interface DefenderV1HardhatUpgrades { - proposeUpgrade: ProposeUpgradeFunction; - verifyDeployment: VerifyDeployFunction; - verifyDeploymentWithUploadedArtifact: VerifyDeployWithUploadedArtifactFunction; - getDeploymentArtifact: GetVerifyDeployArtifactFunction; - getDeploymentBuildInfo: GetVerifyDeployBuildInfoFunction; - getBytecodeDigest: GetBytecodeDigestFunction; -} - -export interface DefenderHardhatUpgrades extends HardhatUpgrades, DefenderV1HardhatUpgrades { +export interface DefenderHardhatUpgrades extends HardhatUpgrades { deployContract: DeployContractFunction; proposeUpgradeWithApproval: ProposeUpgradeWithApprovalFunction; getDeployApprovalProcess: GetDeployApprovalProcessFunction; @@ -256,26 +239,6 @@ function makeUpgradesFunctions(hre: HardhatRuntimeEnvironment): HardhatUpgrades return makeFunctions(hre, false); } -function makeDefenderV1Functions(hre: HardhatRuntimeEnvironment): DefenderV1HardhatUpgrades { - const { - makeVerifyDeploy, - makeVerifyDeployWithUploadedArtifact, - makeGetVerifyDeployBuildInfo, - makeGetVerifyDeployArtifact, - makeGetBytecodeDigest, - } = require('./defender-v1/verify-deployment'); - const { makeProposeUpgrade } = require('./defender-v1/propose-upgrade'); - - return { - proposeUpgrade: makeProposeUpgrade(hre), - verifyDeployment: makeVerifyDeploy(hre), - verifyDeploymentWithUploadedArtifact: makeVerifyDeployWithUploadedArtifact(hre), - getDeploymentArtifact: makeGetVerifyDeployArtifact(hre), - getDeploymentBuildInfo: makeGetVerifyDeployBuildInfo(hre), - getBytecodeDigest: makeGetBytecodeDigest(hre), - }; -} - function makeDefenderFunctions(hre: HardhatRuntimeEnvironment): DefenderHardhatUpgrades { const { makeDeployContract } = require('./deploy-contract'); const { makeProposeUpgradeWithApproval } = require('./defender/propose-upgrade-with-approval'); @@ -285,7 +248,6 @@ function makeDefenderFunctions(hre: HardhatRuntimeEnvironment): DefenderHardhatU return { ...makeFunctions(hre, true), - ...makeDefenderV1Functions(hre), deployContract: makeDeployContract(hre, true), proposeUpgradeWithApproval: makeProposeUpgradeWithApproval(hre, true), getDeployApprovalProcess: makeGetDeployApprovalProcess(hre), diff --git a/packages/plugin-hardhat/test/defender-v1/propose-upgrade-beacon.js b/packages/plugin-hardhat/test/defender-v1/propose-upgrade-beacon.js deleted file mode 100644 index 2c7656a9b..000000000 --- a/packages/plugin-hardhat/test/defender-v1/propose-upgrade-beacon.js +++ /dev/null @@ -1,91 +0,0 @@ -const test = require('ava'); -const sinon = require('sinon'); -const proxyquire = require('proxyquire').noCallThru(); - -const hre = require('hardhat'); -const { ethers, upgrades } = hre; -const { AdminClient } = require('@openzeppelin/defender-admin-client'); - -const proposalUrl = 'https://example.com'; - -test.beforeEach(async t => { - t.context.fakeClient = sinon.createStubInstance(AdminClient); - t.context.fakeChainId = 'goerli'; - t.context.proposeUpgrade = proxyquire('../../dist/defender-v1/propose-upgrade', { - './utils': { - getNetwork: () => t.context.fakeChainId, - getAdminClient: () => t.context.fakeClient, - }, - }).makeProposeUpgrade(hre); - - t.context.Greeter = await ethers.getContractFactory('GreeterDefender'); - t.context.GreeterV2 = await ethers.getContractFactory('GreeterDefenderV2'); - t.context.greeterBeacon = await upgrades.deployBeacon(t.context.Greeter); - t.context.greeter = await upgrades.deployBeaconProxy(t.context.greeterBeacon, t.context.Greeter); -}); - -test.afterEach.always(() => { - sinon.restore(); -}); - -// TODO change the below tests when defender.proposeUpgrade() supports beacons and beacon proxies. - -test('block proposing an upgrade on beacon proxy', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const title = 'My upgrade'; - const description = 'My contract upgrade'; - const addr = await greeter.getAddress(); - await t.throwsAsync(() => proposeUpgrade(addr, GreeterV2, { title, description }), { - message: 'Beacon proxy is not currently supported with defender.proposeUpgrade()', - }); -}); - -test('block proposing an upgrade on beacon', async t => { - const { proposeUpgrade, fakeClient, greeterBeacon, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const title = 'My upgrade'; - const description = 'My contract upgrade'; - const addr = await greeterBeacon.getAddress(); - await t.throwsAsync(() => proposeUpgrade(addr, GreeterV2, { title, description }), { - message: /Contract at \S+ doesn't look like an ERC 1967 proxy with a logic contract address/, - }); -}); - -test('block proposing an upgrade on generic contract', async t => { - const { proposeUpgrade, fakeClient, Greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const genericContract = await Greeter.deploy(); - - const title = 'My upgrade'; - const description = 'My contract upgrade'; - const addr = await genericContract.getAddress(); - await t.throwsAsync(() => proposeUpgrade(addr, GreeterV2, { title, description }), { - message: /Contract at \S+ doesn't look like an ERC 1967 proxy with a logic contract address/, - }); -}); - -test('block proposing an upgrade reusing prepared implementation on beacon proxy', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - await upgrades.prepareUpgrade(await greeter.getAddress(), GreeterV2); - const addr = await greeter.getAddress(); - await t.throwsAsync(() => proposeUpgrade(addr, GreeterV2), { - message: 'Beacon proxy is not currently supported with defender.proposeUpgrade()', - }); -}); - -test('block proposing an upgrade reusing prepared implementation on beacon', async t => { - const { proposeUpgrade, fakeClient, greeterBeacon, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - await upgrades.prepareUpgrade(await greeterBeacon.getAddress(), GreeterV2); - const addr = await greeterBeacon.getAddress(); - await t.throwsAsync(() => proposeUpgrade(addr, GreeterV2), { - message: /Contract at \S+ doesn't look like an ERC 1967 proxy with a logic contract address/, - }); -}); diff --git a/packages/plugin-hardhat/test/defender-v1/propose-upgrade-transparent.js b/packages/plugin-hardhat/test/defender-v1/propose-upgrade-transparent.js deleted file mode 100644 index 9a5d31f01..000000000 --- a/packages/plugin-hardhat/test/defender-v1/propose-upgrade-transparent.js +++ /dev/null @@ -1,81 +0,0 @@ -const test = require('ava'); -const sinon = require('sinon'); -const proxyquire = require('proxyquire').noCallThru(); - -const hre = require('hardhat'); -const { ethers, upgrades } = hre; -const { AdminClient } = require('@openzeppelin/defender-admin-client'); - -const proposalUrl = 'https://example.com'; - -test.beforeEach(async t => { - t.context.fakeClient = sinon.createStubInstance(AdminClient); - t.context.fakeChainId = 'goerli'; - t.context.proposeUpgrade = proxyquire('../../dist/defender-v1/propose-upgrade', { - './utils': { - getNetwork: () => t.context.fakeChainId, - getAdminClient: () => t.context.fakeClient, - }, - }).makeProposeUpgrade(hre); - - t.context.Greeter = await ethers.getContractFactory('GreeterDefender'); - t.context.GreeterV2 = await ethers.getContractFactory('GreeterDefenderV2'); - t.context.greeter = await upgrades.deployProxy(t.context.Greeter, { kind: 'transparent' }); -}); - -test.afterEach.always(() => { - sinon.restore(); -}); - -test('proposes an upgrade', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const title = 'My upgrade'; - const description = 'My contract upgrade'; - const proposal = await proposeUpgrade(await greeter.getAddress(), GreeterV2, { title, description }); - - t.is(proposal.url, proposalUrl); - sinon.assert.calledWithExactly( - fakeClient.proposeUpgrade, - { - newImplementation: sinon.match(/^0x[A-Fa-f0-9]{40}$/), - title, - description, - proxyAdmin: undefined, - via: undefined, - viaType: undefined, - }, - { - address: await greeter.getAddress(), - network: 'goerli', - abi: GreeterV2.interface.formatJson(), - }, - ); -}); - -test('proposes an upgrade reusing prepared implementation', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const greeterV2Impl = await upgrades.prepareUpgrade(await greeter.getAddress(), GreeterV2); - const proposal = await proposeUpgrade(await greeter.getAddress(), GreeterV2); - - t.is(proposal.url, proposalUrl); - sinon.assert.calledWithExactly( - fakeClient.proposeUpgrade, - { - newImplementation: greeterV2Impl, - title: undefined, - description: undefined, - proxyAdmin: undefined, - via: undefined, - viaType: undefined, - }, - { - address: await greeter.getAddress(), - network: 'goerli', - abi: GreeterV2.interface.formatJson(), - }, - ); -}); diff --git a/packages/plugin-hardhat/test/defender-v1/propose-upgrade-unsafeAllow.js b/packages/plugin-hardhat/test/defender-v1/propose-upgrade-unsafeAllow.js deleted file mode 100644 index a4d4c961e..000000000 --- a/packages/plugin-hardhat/test/defender-v1/propose-upgrade-unsafeAllow.js +++ /dev/null @@ -1,59 +0,0 @@ -const test = require('ava'); -const sinon = require('sinon'); -const proxyquire = require('proxyquire').noCallThru(); - -const hre = require('hardhat'); -const { ethers, upgrades } = hre; -const { AdminClient } = require('@openzeppelin/defender-admin-client'); - -const proposalUrl = 'https://example.com'; - -test.beforeEach(async t => { - t.context.fakeClient = sinon.createStubInstance(AdminClient); - t.context.fakeChainId = 'goerli'; - t.context.proposeUpgrade = proxyquire('../../dist/defender-v1/propose-upgrade', { - './utils': { - getNetwork: () => t.context.fakeChainId, - getAdminClient: () => t.context.fakeClient, - }, - }).makeProposeUpgrade(hre); - - t.context.Greeter = await ethers.getContractFactory('GreeterDefender'); - t.context.GreeterV2 = await ethers.getContractFactory('GreeterDefenderV2Bad'); - t.context.greeter = await upgrades.deployProxy(t.context.Greeter, { kind: 'transparent' }); -}); - -test.afterEach.always(() => { - sinon.restore(); -}); - -test('proposes an upgrade', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const title = 'My upgrade'; - const description = 'My contract upgrade'; - const proposal = await proposeUpgrade(await greeter.getAddress(), GreeterV2, { - title, - description, - unsafeAllow: ['delegatecall'], - }); - - t.is(proposal.url, proposalUrl); - sinon.assert.calledWithExactly( - fakeClient.proposeUpgrade, - { - newImplementation: sinon.match(/^0x[A-Fa-f0-9]{40}$/), - title, - description, - proxyAdmin: undefined, - via: undefined, - viaType: undefined, - }, - { - address: await greeter.getAddress(), - network: 'goerli', - abi: GreeterV2.interface.formatJson(), - }, - ); -}); diff --git a/packages/plugin-hardhat/test/defender-v1/propose-upgrade-use-deployed.js b/packages/plugin-hardhat/test/defender-v1/propose-upgrade-use-deployed.js deleted file mode 100644 index dd5985599..000000000 --- a/packages/plugin-hardhat/test/defender-v1/propose-upgrade-use-deployed.js +++ /dev/null @@ -1,68 +0,0 @@ -const test = require('ava'); -const sinon = require('sinon'); -const proxyquire = require('proxyquire').noCallThru(); - -const hre = require('hardhat'); -const { ethers, upgrades } = hre; -const { AdminClient } = require('@openzeppelin/defender-admin-client'); - -const proposalUrl = 'https://example.com'; -const multisig = '0xc0889725c22e2e36c524F41AECfddF5650432464'; - -test.beforeEach(async t => { - t.context.fakeClient = sinon.createStubInstance(AdminClient); - t.context.fakeChainId = 'goerli'; - t.context.proposeUpgrade = proxyquire('../../dist/defender-v1/propose-upgrade', { - './utils': { - getNetwork: () => t.context.fakeChainId, - getAdminClient: () => t.context.fakeClient, - }, - }).makeProposeUpgrade(hre); - - t.context.Greeter = await ethers.getContractFactory('GreeterDefenderProxiable'); - t.context.GreeterV2 = await ethers.getContractFactory('GreeterDefenderV2Proxiable'); - t.context.greeter = await upgrades.deployProxy(t.context.Greeter, { kind: 'uups' }); -}); - -test.afterEach.always(() => { - sinon.restore(); -}); - -test('proposes an upgrade using deployed implementation - implementation not deployed', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const addr = await greeter.getAddress(); - await t.throwsAsync(() => proposeUpgrade(addr, GreeterV2, { multisig, useDeployedImplementation: true }), { - message: /(The implementation contract was not previously deployed.)/, - }); -}); - -test('proposes an upgrade using deployed implementation', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const greeterV2Impl = await upgrades.deployImplementation(GreeterV2); - const proposal = await proposeUpgrade(await greeter.getAddress(), GreeterV2, { - multisig, - useDeployedImplementation: true, - }); - - t.is(proposal.url, proposalUrl); - sinon.assert.calledWithExactly( - fakeClient.proposeUpgrade, - { - newImplementation: greeterV2Impl, - title: undefined, - description: undefined, - proxyAdmin: undefined, - via: multisig, - viaType: undefined, - }, - { - address: await greeter.getAddress(), - network: 'goerli', - abi: GreeterV2.interface.formatJson(), - }, - ); -}); diff --git a/packages/plugin-hardhat/test/defender-v1/propose-upgrade-uups.js b/packages/plugin-hardhat/test/defender-v1/propose-upgrade-uups.js deleted file mode 100644 index f9da9b43d..000000000 --- a/packages/plugin-hardhat/test/defender-v1/propose-upgrade-uups.js +++ /dev/null @@ -1,189 +0,0 @@ -const test = require('ava'); -const sinon = require('sinon'); -const proxyquire = require('proxyquire').noCallThru(); - -const hre = require('hardhat'); -const { ethers, upgrades } = hre; -const { AdminClient } = require('@openzeppelin/defender-admin-client'); - -const proposalUrl = 'https://example.com'; -const multisig = '0xc0889725c22e2e36c524F41AECfddF5650432464'; - -test.beforeEach(async t => { - t.context.fakeClient = sinon.createStubInstance(AdminClient); - t.context.fakeDefender = { verifyDeployment: sinon.stub() }; - t.context.fakeChainId = 'goerli'; - t.context.proposeUpgrade = proxyquire('../../dist/defender-v1/propose-upgrade', { - './utils': { - getNetwork: () => t.context.fakeChainId, - getAdminClient: () => t.context.fakeClient, - }, - }).makeProposeUpgrade({ - ...hre, - defender: t.context.fakeDefender, - }); - - t.context.Greeter = await ethers.getContractFactory('GreeterDefenderProxiable'); - t.context.GreeterV2 = await ethers.getContractFactory('GreeterDefenderV2Proxiable'); - t.context.greeter = await upgrades.deployProxy(t.context.Greeter, { kind: 'uups' }); -}); - -test.afterEach.always(() => { - sinon.restore(); -}); - -test('proposes an upgrade and get tx response', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const title = 'My upgrade'; - const description = 'My contract upgrade'; - const proposal = await proposeUpgrade(await greeter.getAddress(), GreeterV2, { title, description, multisig }); - - t.is(proposal.url, proposalUrl); - - t.not(proposal.txResponse.hash, undefined); - const txReceipt = await proposal.txResponse.wait(); - t.not(txReceipt.contractAddress, undefined); - - const proposal2 = await proposeUpgrade(await greeter.getAddress(), GreeterV2, { title, description, multisig }); - - // even though impl was already deployed in first proposal, it should still provide a tx response for the same tx hash - t.is(proposal2.txResponse.hash, proposal.txResponse.hash); - const txReceipt2 = await proposal.txResponse.wait(); - t.is(txReceipt2.contractAddress, txReceipt.contractAddress); -}); - -test('proposes an upgrade', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const title = 'My upgrade'; - const description = 'My contract upgrade'; - const proposal = await proposeUpgrade(await greeter.getAddress(), GreeterV2, { title, description, multisig }); - - t.is(proposal.url, proposalUrl); - sinon.assert.calledWithExactly( - fakeClient.proposeUpgrade, - { - newImplementation: sinon.match(/^0x[A-Fa-f0-9]{40}$/), - title, - description, - proxyAdmin: undefined, - via: multisig, - viaType: undefined, - }, - { - address: await greeter.getAddress(), - network: 'goerli', - abi: GreeterV2.interface.formatJson(), - }, - ); -}); - -test('proposes an upgrade and verifies bytecode', async t => { - const { proposeUpgrade, fakeClient, fakeDefender, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - fakeDefender.verifyDeployment.resolves({ match: 'EXACT' }); - - const title = 'My upgrade'; - const description = 'My contract upgrade'; - const proposal = await proposeUpgrade(await greeter.getAddress(), 'GreeterDefenderV2Proxiable', { - title, - description, - multisig, - bytecodeVerificationReferenceUrl: 'http://example.com', - }); - - t.is(proposal.url, proposalUrl); - t.is(proposal.verificationResponse.match, 'EXACT'); - - sinon.assert.calledWithExactly( - fakeClient.proposeUpgrade, - { - newImplementation: sinon.match(/^0x[A-Fa-f0-9]{40}$/), - title, - description, - proxyAdmin: undefined, - via: multisig, - viaType: undefined, - }, - { - address: await greeter.getAddress(), - network: 'goerli', - abi: GreeterV2.interface.formatJson(), - }, - ); - - sinon.assert.calledWithExactly( - fakeDefender.verifyDeployment, - sinon.match(/^0x[A-Fa-f0-9]{40}$/), - 'GreeterDefenderV2Proxiable', - 'http://example.com', - ); -}); - -test('proposes an upgrade with explicit multisig and proxy admin', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const title = 'My upgrade'; - const description = 'My contract upgrade'; - const proxyAdmin = '0x20cE6FeEf8862CbCe65fd1cafA59ac8bbC77e445'; - const multisigType = 'Gnosis Safe'; - const opts = { title, description, proxyAdmin, multisig, multisigType }; - const proposal = await proposeUpgrade(await greeter.getAddress(), GreeterV2, opts); - - t.is(proposal.url, proposalUrl); - sinon.assert.calledWithExactly( - fakeClient.proposeUpgrade, - { - newImplementation: sinon.match(/^0x[A-Fa-f0-9]{40}$/), - title, - description, - proxyAdmin, - via: multisig, - viaType: multisigType, - }, - { - address: await greeter.getAddress(), - network: 'goerli', - abi: GreeterV2.interface.formatJson(), - }, - ); -}); - -test('proposes an upgrade reusing prepared implementation', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - fakeClient.proposeUpgrade.resolves({ url: proposalUrl }); - - const greeterV2Impl = await upgrades.prepareUpgrade(await greeter.getAddress(), GreeterV2); - const proposal = await proposeUpgrade(await greeter.getAddress(), GreeterV2, { multisig }); - - t.is(proposal.url, proposalUrl); - sinon.assert.calledWithExactly( - fakeClient.proposeUpgrade, - { - newImplementation: greeterV2Impl, - title: undefined, - description: undefined, - proxyAdmin: undefined, - via: multisig, - viaType: undefined, - }, - { - address: await greeter.getAddress(), - network: 'goerli', - abi: GreeterV2.interface.formatJson(), - }, - ); -}); - -test('fails if multisig address is missing from UUPS proxy', async t => { - const { proposeUpgrade, fakeClient, greeter, GreeterV2 } = t.context; - sinon.assert.notCalled(fakeClient.proposeUpgrade); - const addr = await greeter.getAddress(); - await t.throwsAsync(() => proposeUpgrade(addr, GreeterV2), { - message: 'Multisig address is a required property for UUPS proxies', - }); -}); diff --git a/packages/plugin-hardhat/test/defender-v1/utils.js b/packages/plugin-hardhat/test/defender-v1/utils.js deleted file mode 100644 index e8e426ecc..000000000 --- a/packages/plugin-hardhat/test/defender-v1/utils.js +++ /dev/null @@ -1,44 +0,0 @@ -const test = require('ava'); -const sinon = require('sinon'); -const { getNetwork, getAdminClient } = require('../../dist/defender-v1/utils'); - -test.beforeEach(async t => { - t.context.fakeChainId = '0x05'; - t.context.fakeHre = { - config: { defender: { apiKey: 'API_KEY', apiSecret: 'API_SECRET' } }, - network: { provider: { send: async () => t.context.fakeChainId } }, - }; -}); - -test.afterEach.always(() => { - sinon.restore(); -}); - -test('returns defender network definition', async t => { - const network = await getNetwork(t.context.fakeHre); - t.is(network, 'goerli'); -}); - -test('fails if chain id is not accepted', async t => { - t.context.fakeChainId = '0x123456'; - await t.throwsAsync(() => getNetwork(t.context.fakeHre), { message: /Network \d+ is not supported/ }); -}); - -test('returns admin client', async t => { - const client = getAdminClient(t.context.fakeHre); - t.is(typeof client.createProposal, 'function'); -}); - -test('fails if defender config is missing', async t => { - delete t.context.fakeHre.config.defender; - t.throws(() => getAdminClient(t.context.fakeHre), { - message: /Missing Defender API key and secret in hardhat config/, - }); -}); - -test('fails if defender api key is missing in config', async t => { - delete t.context.fakeHre.config.defender.apiKey; - t.throws(() => getAdminClient(t.context.fakeHre), { - message: /Missing Defender API key and secret in hardhat config/, - }); -}); diff --git a/packages/plugin-hardhat/test/defender-v1/verify-deployment.js b/packages/plugin-hardhat/test/defender-v1/verify-deployment.js deleted file mode 100644 index 7c6ccd1c2..000000000 --- a/packages/plugin-hardhat/test/defender-v1/verify-deployment.js +++ /dev/null @@ -1,105 +0,0 @@ -const test = require('ava'); -const sinon = require('sinon'); -const proxyquire = require('proxyquire').noCallThru(); - -const hre = require('hardhat'); -const { AdminClient } = require('@openzeppelin/defender-admin-client'); - -const address = '0x0dB58eF1B0F7Bb3d70177bcBFd31BC557fbE8b2A'; -const artifactUri = 'http://example.com/artifact.json'; - -const greeterV3DeployedBytecode = - '6080604052348015600f57600080fd5b506004361060285760003560e01c806354fd4d5014602d575b600080fd5b60336049565b6040518082815260200191505060405180910390f35b60007f000000000000000000000000000000000000000000000000000000000000000090509056fea26469706673582212206bcdece12c04860191be19f65f1649a55f314b3fc50d9bf9e4c9a7f1c0e1378964736f6c63430007060033'; -const greeterV3Digest = '179512230d4f78cbedd46a3edaa0e3da449bd1963ce94a14739ab9856d44d5ba'; -const greeterV3ImmutableReferences = { 40: [{ length: 32, start: 77 }] }; - -test.beforeEach(async t => { - t.context.fakeClient = sinon.createStubInstance(AdminClient); - t.context.fakeChainId = 'goerli'; - - const verifyDeploymentModule = proxyquire('../../dist/defender-v1/verify-deployment', { - './utils': { - getNetwork: () => t.context.fakeChainId, - getAdminClient: () => t.context.fakeClient, - }, - }); - - t.context.verifyDeployment = verifyDeploymentModule.makeVerifyDeploy(hre); - t.context.verifyDeploymentWithUploadedArtifact = verifyDeploymentModule.makeVerifyDeployWithUploadedArtifact(hre); - t.context.getVerifyDeployArtifact = verifyDeploymentModule.makeGetVerifyDeployArtifact(hre); - t.context.getVerifyDeployBuildInfo = verifyDeploymentModule.makeGetVerifyDeployBuildInfo(hre); - t.context.getBytecodeDigest = verifyDeploymentModule.makeGetBytecodeDigest(hre); -}); - -test.afterEach.always(() => { - sinon.restore(); -}); - -test('verifies deployment uploading artifact', async t => { - const { verifyDeployment, fakeClient } = t.context; - const verificationResult = { matchType: 'EXACT' }; - fakeClient.verifyDeployment.resolves(verificationResult); - - const result = await verifyDeployment(address, 'GreeterDefenderV3', artifactUri); - - t.is(result.matchType, verificationResult.matchType); - sinon.assert.calledWithExactly(fakeClient.verifyDeployment, { - contractAddress: address, - contractName: 'GreeterDefenderV3', - solidityFilePath: 'contracts/GreeterDefender.sol', - referenceUri: artifactUri, - contractNetwork: t.context.fakeChainId, - artifactPayload: JSON.stringify({ - ...require('../../artifacts/contracts/GreeterDefender.sol/GreeterDefenderV3.json'), - immutableReferences: greeterV3ImmutableReferences, - }), - }); -}); - -test('verifies deploy with uploaded artifact', async t => { - const { verifyDeploymentWithUploadedArtifact, fakeClient } = t.context; - const verificationResult = { matchType: 'EXACT' }; - fakeClient.verifyDeployment.resolves(verificationResult); - - const result = await verifyDeploymentWithUploadedArtifact(address, 'GreeterDefenderV3', artifactUri); - - t.is(result.matchType, verificationResult.matchType); - sinon.assert.calledWithExactly(fakeClient.verifyDeployment, { - contractAddress: address, - contractName: 'GreeterDefenderV3', - solidityFilePath: 'contracts/GreeterDefender.sol', - artifactUri, - contractNetwork: t.context.fakeChainId, - }); -}); - -test('returns extended artifact for verification', async t => { - const { getVerifyDeployArtifact } = t.context; - const result = await getVerifyDeployArtifact('GreeterDefenderV3'); - - t.is( - result.bytecode, - '0x60a060405234801561001057600080fd5b5060405161010b38038061010b8339818101604052602081101561003357600080fd5b810190808051906020019092919050505080608081815250505060805160a761006460003980604d525060a76000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806354fd4d5014602d575b600080fd5b60336049565b6040518082815260200191505060405180910390f35b60007f000000000000000000000000000000000000000000000000000000000000000090509056fea26469706673582212206bcdece12c04860191be19f65f1649a55f314b3fc50d9bf9e4c9a7f1c0e1378964736f6c63430007060033', - ); - t.is(result.deployedBytecode, `0x${greeterV3DeployedBytecode}`); - - // See artifacts/build-info/BUILD.json.output.contracts.'contracts/GreeterDefender.sol'.GreeterDefenderV3.evm.deployedBytecode - t.deepEqual(result.immutableReferences, greeterV3ImmutableReferences); -}); - -test('returns build info for verification', async t => { - const { getVerifyDeployBuildInfo } = t.context; - const result = await getVerifyDeployBuildInfo('GreeterDefenderV3'); - - t.is( - result.output.contracts['contracts/GreeterDefender.sol']['GreeterDefenderV3'].evm.deployedBytecode.object, - greeterV3DeployedBytecode, - ); -}); - -test('returns bytecode digest', async t => { - const { getBytecodeDigest } = t.context; - const result = await getBytecodeDigest('GreeterDefenderV3'); - - t.is(result, greeterV3Digest); -}); diff --git a/yarn.lock b/yarn.lock index ed69ad1d2..f39a6a621 100644 --- a/yarn.lock +++ b/yarn.lock @@ -271,7 +271,7 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@^5.1.2": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -286,7 +286,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": +"@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== @@ -299,7 +299,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -310,7 +310,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": +"@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -321,22 +321,14 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": +"@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -345,37 +337,21 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": +"@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -390,44 +366,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -435,68 +374,26 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": +"@ethersproject/networks@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": +"@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -504,16 +401,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": +"@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== @@ -525,19 +413,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -546,7 +422,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -561,37 +437,7 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": +"@ethersproject/web@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -602,17 +448,6 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@fastify/busboy@^2.0.0": version "2.1.1" resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" @@ -939,28 +774,6 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.0.2.tgz#b1d03075e49290d06570b2fd42154d76c2a5d210" integrity sha512-ytPc6eLGcHHnapAZ9S+5qsdomhjo6QBHTDRRBFfTxXIpsicMhVPouPgmUPebZZZGX7vt9USA+Z+0M0dSVtSUEA== -"@openzeppelin/defender-admin-client@^1.52.0": - version "1.54.6" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-admin-client/-/defender-admin-client-1.54.6.tgz#935374ff54f087048c127e4852f8aefe5b2ac894" - integrity sha512-P4lxJDySrekWNuPa7FeyW/UmuxnuIXIAGYr5gZnmnMHRsYNaw+XfgkiCDfoGtjEyJbXYxXttYF6iAZhWQPdf1g== - dependencies: - "@openzeppelin/defender-base-client" "1.54.6" - axios "^1.4.0" - ethers "^5.7.2" - lodash "^4.17.19" - node-fetch "^2.6.0" - -"@openzeppelin/defender-base-client@1.54.6", "@openzeppelin/defender-base-client@^1.52.0": - version "1.54.6" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-base-client/-/defender-base-client-1.54.6.tgz#b65a90dba49375ac1439d638832382344067a0b9" - integrity sha512-PTef+rMxkM5VQ7sLwLKSjp2DBakYQd661ZJiSRywx+q/nIpm3B/HYGcz5wPZCA5O/QcEP6TatXXDoeMwimbcnw== - dependencies: - amazon-cognito-identity-js "^6.0.1" - async-retry "^1.3.3" - axios "^1.4.0" - lodash "^4.17.19" - node-fetch "^2.6.0" - "@openzeppelin/defender-sdk-base-client@^1.10.0", "@openzeppelin/defender-sdk-base-client@^1.13.4": version "1.13.4" resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.13.4.tgz#51b25d46bb766e7a107b9a87ca623fae3ad5a8c3" @@ -1440,11 +1253,6 @@ adm-zip@^0.4.16: resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - aes-js@4.0.0-beta.5: version "4.0.0-beta.5" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" @@ -1485,7 +1293,7 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.4.1" -amazon-cognito-identity-js@^6.0.1, amazon-cognito-identity-js@^6.3.6: +amazon-cognito-identity-js@^6.3.6: version "6.3.12" resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz#af73df033094ad4c679c19cf6122b90058021619" integrity sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg== @@ -1728,7 +1536,7 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axios@^1.4.0, axios@^1.6.8: +axios@^1.6.8: version "1.7.2" resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== @@ -1754,11 +1562,6 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" @@ -2841,42 +2644,6 @@ ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.5: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers@^5.7.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - ethers@^6.8.1: version "6.13.1" resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.1.tgz#2b9f9c7455cde9d38b30fe6589972eb083652961" @@ -4166,7 +3933,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: +lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4442,7 +4209,7 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: +node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -5140,7 +4907,7 @@ safe-regex-test@^1.0.3: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scrypt-js@3.0.1, scrypt-js@^3.0.0: +scrypt-js@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== @@ -5415,16 +5182,7 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -5495,7 +5253,7 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -5509,13 +5267,6 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -5983,7 +5734,7 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -6010,15 +5761,6 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -6051,11 +5793,6 @@ write-file-atomic@^5.0.1: imurmurhash "^0.1.4" signal-exit "^4.0.1" -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - ws@8.17.1: version "8.17.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"