diff --git a/packages/safe-core-sdk/package.json b/packages/safe-core-sdk/package.json index 9bdf04a66..50e595cdc 100644 --- a/packages/safe-core-sdk/package.json +++ b/packages/safe-core-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@gnosis.pm/safe-core-sdk", - "version": "1.1.1", + "version": "1.3.0", "description": "Safe Core SDK", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -43,40 +43,41 @@ "devDependencies": { "@gnosis.pm/safe-contracts-v1.2.0": "npm:@gnosis.pm/safe-contracts@1.2.0", "@gnosis.pm/safe-contracts-v1.3.0": "npm:@gnosis.pm/safe-contracts@1.3.0", - "@nomiclabs/hardhat-ethers": "^2.0.2", + "@nomiclabs/hardhat-ethers": "^2.0.3", "@nomiclabs/hardhat-waffle": "^2.0.1", "@nomiclabs/hardhat-web3": "^2.0.0", - "@typechain/ethers-v5": "^8.0.4", + "@typechain/ethers-v5": "^8.0.5", "@typechain/web3-v1": "^3.0.0", - "@types/chai": "^4.2.22", + "@types/chai": "^4.3.0", "@types/chai-as-promised": "^7.1.4", "@types/mocha": "^9.0.0", - "@types/node": "^16.11.9", + "@types/node": "^17.0.8", + "@types/semver": "^7.3.9", "@types/yargs": "^16.0.1", - "@typescript-eslint/eslint-plugin": "^5.4.0", - "@typescript-eslint/parser": "^5.4.0", + "@typescript-eslint/eslint-plugin": "^5.9.0", + "@typescript-eslint/parser": "^5.9.0", "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "coveralls": "^3.1.1", "dotenv": "^10.0.0", - "eslint": "^8.3.0", + "eslint": "^8.6.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", "ethereum-waffle": "^3.4.0", - "ethers": "^5.5.1", - "hardhat": "^2.3.3", - "hardhat-deploy": "^0.8.6", + "ethers": "^5.5.2", + "hardhat": "^2.8.0", + "hardhat-deploy": "^0.9.24", "husky": "^7.0.4", - "lint-staged": "^12.1.2", + "lint-staged": "^12.1.5", "mocha": "^9.1.3", "nyc": "^15.1.0", - "prettier": "^2.4.1", + "prettier": "^2.5.1", "ts-generator": "^0.1.1", "ts-node": "^10.4.0", - "typechain": "^6.0.4", - "typescript": "^4.5.2", + "typechain": "^6.0.5", + "typescript": "^4.5.4", "web3": "^1.6.1", - "yargs": "^17.0.1" + "yargs": "^17.3.0" }, "lint-staged": { "src/**/!(*test).ts": [ @@ -91,7 +92,8 @@ }, "dependencies": { "@gnosis.pm/safe-core-sdk-types": "^0.1.1", - "@gnosis.pm/safe-deployments": "^1.4.0", - "ethereumjs-util": "^7.1.3" + "@gnosis.pm/safe-deployments": "^1.7.0", + "ethereumjs-util": "^7.1.3", + "semver": "^7.3.5" } } diff --git a/packages/safe-core-sdk/src/Safe.ts b/packages/safe-core-sdk/src/Safe.ts index 633fcb6d6..9c85fac26 100644 --- a/packages/safe-core-sdk/src/Safe.ts +++ b/packages/safe-core-sdk/src/Safe.ts @@ -146,6 +146,15 @@ class Safe { return this.#contractManager.safeContract.getAddress() } + /** + * Returns the ContractManager + * + * @returns The current ContractManager + * */ + getContractManager(): ContractManager { + return this.#contractManager + } + /** * Returns the current EthAdapter. * diff --git a/packages/safe-core-sdk/src/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Ethers.ts b/packages/safe-core-sdk/src/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Ethers.ts index 213cf18f4..0e4ab3cc1 100644 --- a/packages/safe-core-sdk/src/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Ethers.ts +++ b/packages/safe-core-sdk/src/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Ethers.ts @@ -8,7 +8,7 @@ class GnosisSafeContract_V1_1_1_Ethers extends GnosisSafeContractEthers { } async getModules(): Promise { - return (super.contract as GnosisSafe).getModules() + return this.contract.getModules() } async isModuleEnabled(moduleAddress: string): Promise { diff --git a/packages/safe-core-sdk/src/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Web3.ts b/packages/safe-core-sdk/src/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Web3.ts index 34191adaf..9625c87ae 100644 --- a/packages/safe-core-sdk/src/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Web3.ts +++ b/packages/safe-core-sdk/src/contracts/GnosisSafe/v1.1.1/GnosisSafeContract_V1_1_1_Web3.ts @@ -8,7 +8,7 @@ class GnosisSafeContract_V1_1_1_Web3 extends GnosisSafeContractWeb3 { } async getModules(): Promise { - return (super.contract as GnosisSafe).methods.getModules().call() + return this.contract.methods.getModules().call() } async isModuleEnabled(moduleAddress: string): Promise { diff --git a/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryContract.ts b/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryContract.ts index b6c5c94af..bd86a179c 100644 --- a/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryContract.ts +++ b/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryContract.ts @@ -3,7 +3,7 @@ import { TransactionOptions } from '../../utils/transactions/types' export interface CreateProxyProps { safeMasterCopyAddress: string initializer: string - saltNonce?: number + saltNonce: number options?: TransactionOptions } diff --git a/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryEthersContract.ts b/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryEthersContract.ts index 0f14e16ed..1339f941b 100644 --- a/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryEthersContract.ts +++ b/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryEthersContract.ts @@ -16,17 +16,12 @@ class GnosisSafeProxyFactoryEthersContract implements GnosisSafeProxyFactoryCont saltNonce, options }: CreateProxyProps): Promise { - let txResponse: ContractTransaction - if (saltNonce) { - txResponse = await this.contract.createProxyWithNonce( - safeMasterCopyAddress, - initializer, - saltNonce, - options - ) - } else { - txResponse = await this.contract.createProxy(safeMasterCopyAddress, initializer, options) - } + const txResponse = await this.contract.createProxyWithNonce( + safeMasterCopyAddress, + initializer, + saltNonce, + options + ) const txReceipt = await txResponse.wait() const proxyCreationEvent = txReceipt.events?.find( ({ event }: Event) => event === 'ProxyCreation' diff --git a/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryWeb3Contract.ts b/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryWeb3Contract.ts index 2de5b629e..ab89649ec 100644 --- a/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryWeb3Contract.ts +++ b/packages/safe-core-sdk/src/contracts/GnosisSafeProxyFactory/GnosisSafeProxyFactoryWeb3Contract.ts @@ -16,16 +16,10 @@ class GnosisSafeProxyFactoryWeb3Contract implements GnosisSafeProxyFactoryContra saltNonce, options }: CreateProxyProps): Promise { - let txResponse: PromiEvent - if (saltNonce) { - txResponse = this.contract.methods - .createProxyWithNonce(safeMasterCopyAddress, initializer, saltNonce) - .send(options) - } else { - txResponse = this.contract.methods - .createProxy(safeMasterCopyAddress, initializer) - .send(options) - } + const txResponse = this.contract.methods + .createProxyWithNonce(safeMasterCopyAddress, initializer, saltNonce) + .send(options) + const txResult: TransactionReceipt = await new Promise((resolve, reject) => txResponse.once('receipt', (receipt: TransactionReceipt) => resolve(receipt)).catch(reject) ) diff --git a/packages/safe-core-sdk/src/index.ts b/packages/safe-core-sdk/src/index.ts index ad1aad542..e56bc1095 100644 --- a/packages/safe-core-sdk/src/index.ts +++ b/packages/safe-core-sdk/src/index.ts @@ -2,6 +2,7 @@ import { SafeVersion } from './contracts/config' import EthAdapter, { EthAdapterTransaction } from './ethereumLibs/EthAdapter' import EthersAdapter, { EthersAdapterConfig } from './ethereumLibs/EthersAdapter' import Web3Adapter, { Web3AdapterConfig } from './ethereumLibs/Web3Adapter' +import ContractManager from './managers/contractManager' import Safe, { AddOwnerTxParams, ConnectSafeConfig, @@ -21,9 +22,11 @@ import { TransactionOptions, TransactionResult } from './utils/transactions/types' +import { standardizeSafeTransactionData } from './utils/transactions/utils' export default Safe export { + ContractManager, SafeVersion, SafeFactory, SafeFactoryConfig, @@ -44,5 +47,6 @@ export { AddOwnerTxParams, RemoveOwnerTxParams, SwapOwnerTxParams, - EthSignSignature + EthSignSignature, + standardizeSafeTransactionData } diff --git a/packages/safe-core-sdk/src/safeFactory/index.ts b/packages/safe-core-sdk/src/safeFactory/index.ts index 390420e59..d6dfb815b 100644 --- a/packages/safe-core-sdk/src/safeFactory/index.ts +++ b/packages/safe-core-sdk/src/safeFactory/index.ts @@ -143,10 +143,12 @@ class SafeFactory { const chainId = await this.#ethAdapter.getChainId() const signerAddress = await this.#ethAdapter.getSignerAddress() const initializer = await this.encodeSetupCallData(safeAccountConfig) + const saltNonce = + safeDeploymentConfig?.saltNonce ?? Date.now() * 1000 + Math.floor(Math.random() * 1000) const safeAddress = await this.#safeProxyFactoryContract.createProxy({ safeMasterCopyAddress: this.#gnosisSafeContract.getAddress(), initializer, - saltNonce: safeDeploymentConfig?.saltNonce, + saltNonce, options: { from: signerAddress } }) const safeContract = await this.#ethAdapter.getSafeContract({ diff --git a/packages/safe-core-sdk/src/utils/safeVersions.ts b/packages/safe-core-sdk/src/utils/safeVersions.ts new file mode 100644 index 000000000..6a9548260 --- /dev/null +++ b/packages/safe-core-sdk/src/utils/safeVersions.ts @@ -0,0 +1,25 @@ +import semverSatisfies from 'semver/functions/satisfies' + +export enum FEATURES { + SAFE_TX_GAS_OPTIONAL +} + +const FEATURES_BY_VERSION: Record = { + [FEATURES.SAFE_TX_GAS_OPTIONAL]: '>=1.3.0' +} + +const isEnabledByVersion = (feature: FEATURES, version: string): boolean => { + if (!(feature in FEATURES_BY_VERSION)) { + return true + } + return semverSatisfies(version, FEATURES_BY_VERSION[feature]) +} + +export const enabledFeatures = (version: string): FEATURES[] => { + const features = Object.values(FEATURES) as FEATURES[] + return features.filter((feature) => isEnabledByVersion(feature, version)) +} + +export const hasFeature = (name: FEATURES, version: string): boolean => { + return enabledFeatures(version).includes(name) +} diff --git a/packages/safe-core-sdk/src/utils/transactions/utils.ts b/packages/safe-core-sdk/src/utils/transactions/utils.ts index 055a9359d..e602c0919 100644 --- a/packages/safe-core-sdk/src/utils/transactions/utils.ts +++ b/packages/safe-core-sdk/src/utils/transactions/utils.ts @@ -9,6 +9,7 @@ import { import GnosisSafeContract from '../../contracts/GnosisSafe/GnosisSafeContract' import EthAdapter from '../../ethereumLibs/EthAdapter' import { ZERO_ADDRESS } from '../constants' +import { FEATURES, hasFeature } from '../safeVersions' import { estimateTxGas } from './gas' export function standardizeMetaTransactionData( @@ -37,16 +38,22 @@ export async function standardizeSafeTransactionData( refundReceiver: tx.refundReceiver || ZERO_ADDRESS, nonce: tx.nonce ?? (await safeContract.getNonce()) } - const safeTxGas = - tx.safeTxGas ?? - (await estimateTxGas( - safeContract, - ethAdapter, - standardizedTxs.to, - standardizedTxs.value, - standardizedTxs.data, - standardizedTxs.operation - )) + let safeTxGas: number + const safeVersion = await safeContract.getVersion() + if (hasFeature(FEATURES.SAFE_TX_GAS_OPTIONAL, safeVersion)) { + safeTxGas = 0 + } else { + safeTxGas = + tx.safeTxGas ?? + (await estimateTxGas( + safeContract, + ethAdapter, + standardizedTxs.to, + standardizedTxs.value, + standardizedTxs.data, + standardizedTxs.operation + )) + } return { ...standardizedTxs, safeTxGas diff --git a/packages/safe-core-sdk/tests/createTransaction.test.ts b/packages/safe-core-sdk/tests/createTransaction.test.ts index aa5e10dea..0763adb0c 100644 --- a/packages/safe-core-sdk/tests/createTransaction.test.ts +++ b/packages/safe-core-sdk/tests/createTransaction.test.ts @@ -2,7 +2,13 @@ import { MetaTransactionData, SafeTransactionDataPartial } from '@gnosis.pm/safe import chai from 'chai' import chaiAsPromised from 'chai-as-promised' import { deployments, waffle } from 'hardhat' -import Safe, { ContractNetworksConfig, SafeTransactionOptionalProps } from '../src' +import { safeVersionDeployed } from '../hardhat/deploy/deploy-contracts' +import Safe, { + ContractNetworksConfig, + SafeTransactionOptionalProps, + standardizeSafeTransactionData +} from '../src' +import { itif } from './utils/helpers' import { getERC20Mintable, getFactory, @@ -36,6 +42,88 @@ describe('Transactions creation', () => { } }) + describe('standardizeSafeTransactionData', async () => { + itif(safeVersionDeployed >= '1.3.0')( + 'should return a transaction with safeTxGas=0 if safeVersion>=1.3.0', + async () => { + const { accounts, contractNetworks } = await setupTests() + const [account1, account2] = accounts + const safe = await getSafeWithOwners([account1.address]) + const ethAdapter = await getEthAdapter(account1.signer) + const safeSdk = await Safe.create({ + ethAdapter, + safeAddress: safe.address, + contractNetworks + }) + const txDataPartial: SafeTransactionDataPartial = { + to: account2.address, + value: '0', + data: '0x' + } + const safeTxData = await standardizeSafeTransactionData( + safeSdk.getContractManager().safeContract, + ethAdapter, + txDataPartial + ) + chai.expect(safeTxData.safeTxGas).to.be.eq(0) + } + ) + + itif(safeVersionDeployed < '1.3.0')( + 'should return a transaction with estimated safeTxGas if safeVersion<1.3.0', + async () => { + const { accounts, contractNetworks } = await setupTests() + const [account1, account2] = accounts + const safe = await getSafeWithOwners([account1.address]) + const ethAdapter = await getEthAdapter(account1.signer) + const safeSdk = await Safe.create({ + ethAdapter, + safeAddress: safe.address, + contractNetworks + }) + const txDataPartial: SafeTransactionDataPartial = { + to: account2.address, + value: '0', + data: '0x' + } + const safeTxData = await standardizeSafeTransactionData( + safeSdk.getContractManager().safeContract, + ethAdapter, + txDataPartial + ) + chai.expect(safeTxData.safeTxGas).to.be.gt(0) + } + ) + + itif(safeVersionDeployed < '1.3.0')( + 'should return a transaction with defined safeTxGas if safeVersion<1.3.0', + async () => { + const { accounts, contractNetworks } = await setupTests() + const [account1, account2] = accounts + const safe = await getSafeWithOwners([account1.address]) + const ethAdapter = await getEthAdapter(account1.signer) + const safeSdk = await Safe.create({ + ethAdapter, + safeAddress: safe.address, + contractNetworks + }) + const safeTxGas = 111 + const txDataPartial: SafeTransactionDataPartial = { + to: account2.address, + value: '0', + data: '0x', + safeTxGas + } + const safeTxData = await standardizeSafeTransactionData( + safeSdk.getContractManager().safeContract, + ethAdapter, + txDataPartial + ) + chai.expect(safeTxData.safeTxGas).to.be.eq(safeTxGas) + } + ) + }) + describe('createTransaction', async () => { it('should create a single transaction', async () => { const { accounts, contractNetworks } = await setupTests() @@ -67,7 +155,7 @@ describe('Transactions creation', () => { chai.expect(tx.data.gasToken).to.be.eq('0x333') chai.expect(tx.data.refundReceiver).to.be.eq('0x444') chai.expect(tx.data.nonce).to.be.eq(555) - chai.expect(tx.data.safeTxGas).to.be.eq(666) + chai.expect(tx.data.safeTxGas).to.be.eq(safeVersionDeployed >= '1.3.0' ? 0 : 666) }) it('should create a single transaction when passing a transaction array with length=1', async () => { @@ -127,7 +215,7 @@ describe('Transactions creation', () => { chai.expect(tx.data.gasToken).to.be.eq('0x333') chai.expect(tx.data.refundReceiver).to.be.eq('0x444') chai.expect(tx.data.nonce).to.be.eq(555) - chai.expect(tx.data.safeTxGas).to.be.eq(666) + chai.expect(tx.data.safeTxGas).to.be.eq(safeVersionDeployed >= '1.3.0' ? 0 : 666) }) it('should fail when creating a MultiSend transaction passing a transaction array with length=0', async () => { @@ -221,7 +309,7 @@ describe('Transactions creation', () => { chai.expect(multiSendTx.data.gasToken).to.be.eq('0x333') chai.expect(multiSendTx.data.refundReceiver).to.be.eq('0x444') chai.expect(multiSendTx.data.nonce).to.be.eq(555) - chai.expect(multiSendTx.data.safeTxGas).to.be.eq(666) + chai.expect(multiSendTx.data.safeTxGas).to.be.eq(safeVersionDeployed >= '1.3.0' ? 0 : 666) }) }) }) diff --git a/packages/safe-core-sdk/tests/moduleManager.test.ts b/packages/safe-core-sdk/tests/moduleManager.test.ts index 092c0ff1f..b2f68900d 100644 --- a/packages/safe-core-sdk/tests/moduleManager.test.ts +++ b/packages/safe-core-sdk/tests/moduleManager.test.ts @@ -1,6 +1,7 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' import { deployments, waffle } from 'hardhat' +import { safeVersionDeployed } from '../hardhat/deploy/deploy-contracts' import Safe, { ContractNetworksConfig, SafeTransactionOptionalProps } from '../src' import { SENTINEL_ADDRESS, ZERO_ADDRESS } from '../src/utils/constants' import { @@ -153,7 +154,7 @@ describe('Safe modules manager', () => { chai.expect(tx.data.gasToken).to.be.eq('0x333') chai.expect(tx.data.refundReceiver).to.be.eq('0x444') chai.expect(tx.data.nonce).to.be.eq(555) - chai.expect(tx.data.safeTxGas).to.be.eq(666) + chai.expect(tx.data.safeTxGas).to.be.eq(safeVersionDeployed >= '1.3.0' ? 0 : 666) }) it('should enable a Safe module', async () => { @@ -259,7 +260,7 @@ describe('Safe modules manager', () => { chai.expect(tx2.data.gasToken).to.be.eq('0x333') chai.expect(tx2.data.refundReceiver).to.be.eq('0x444') chai.expect(tx2.data.nonce).to.be.eq(555) - chai.expect(tx2.data.safeTxGas).to.be.eq(666) + chai.expect(tx2.data.safeTxGas).to.be.eq(safeVersionDeployed >= '1.3.0' ? 0 : 666) }) it('should disable Safe modules', async () => { diff --git a/packages/safe-core-sdk/tests/ownerManager.test.ts b/packages/safe-core-sdk/tests/ownerManager.test.ts index 04bdb8c76..3ca134d7e 100644 --- a/packages/safe-core-sdk/tests/ownerManager.test.ts +++ b/packages/safe-core-sdk/tests/ownerManager.test.ts @@ -1,6 +1,7 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' import { deployments, waffle } from 'hardhat' +import { safeVersionDeployed } from '../hardhat/deploy/deploy-contracts' import Safe, { ContractNetworksConfig, SafeTransactionOptionalProps } from '../src' import { SENTINEL_ADDRESS, ZERO_ADDRESS } from '../src/utils/constants' import { @@ -198,7 +199,7 @@ describe('Safe owners manager', () => { chai.expect(tx.data.gasToken).to.be.eq('0x333') chai.expect(tx.data.refundReceiver).to.be.eq('0x444') chai.expect(tx.data.nonce).to.be.eq(555) - chai.expect(tx.data.safeTxGas).to.be.eq(666) + chai.expect(tx.data.safeTxGas).to.be.eq(safeVersionDeployed >= '1.3.0' ? 0 : 666) }) it('should add an owner and keep the same threshold', async () => { @@ -362,7 +363,7 @@ describe('Safe owners manager', () => { chai.expect(tx.data.gasToken).to.be.eq('0x333') chai.expect(tx.data.refundReceiver).to.be.eq('0x444') chai.expect(tx.data.nonce).to.be.eq(555) - chai.expect(tx.data.safeTxGas).to.be.eq(666) + chai.expect(tx.data.safeTxGas).to.be.eq(safeVersionDeployed >= '1.3.0' ? 0 : 666) }) it('should remove the first owner of a Safe and decrease the threshold', async () => { @@ -631,7 +632,7 @@ describe('Safe owners manager', () => { chai.expect(tx.data.gasToken).to.be.eq('0x333') chai.expect(tx.data.refundReceiver).to.be.eq('0x444') chai.expect(tx.data.nonce).to.be.eq(555) - chai.expect(tx.data.safeTxGas).to.be.eq(666) + chai.expect(tx.data.safeTxGas).to.be.eq(safeVersionDeployed >= '1.3.0' ? 0 : 666) }) it('should replace the first owner of a Safe', async () => { diff --git a/packages/safe-core-sdk/tests/threshold.test.ts b/packages/safe-core-sdk/tests/threshold.test.ts index 2f5f89749..7d72bf351 100644 --- a/packages/safe-core-sdk/tests/threshold.test.ts +++ b/packages/safe-core-sdk/tests/threshold.test.ts @@ -1,6 +1,7 @@ import chai from 'chai' import chaiAsPromised from 'chai-as-promised' import { deployments, waffle } from 'hardhat' +import { safeVersionDeployed } from '../hardhat/deploy/deploy-contracts' import Safe, { ContractNetworksConfig, SafeTransactionOptionalProps } from '../src' import { getFactory, @@ -106,7 +107,7 @@ describe('Safe Threshold', () => { chai.expect(tx.data.gasToken).to.be.eq('0x333') chai.expect(tx.data.refundReceiver).to.be.eq('0x444') chai.expect(tx.data.nonce).to.be.eq(555) - chai.expect(tx.data.safeTxGas).to.be.eq(666) + chai.expect(tx.data.safeTxGas).to.be.eq(safeVersionDeployed >= '1.3.0' ? 0 : 666) }) it('should change the threshold', async () => { diff --git a/packages/safe-service-client/README.md b/packages/safe-service-client/README.md index ce65a2f62..65632c4c4 100644 --- a/packages/safe-service-client/README.md +++ b/packages/safe-service-client/README.md @@ -213,6 +213,26 @@ const pendingTxs: SafeMultisigTransactionListResponse = await safeService.getPen ) ``` +### getAllTransactions + +Returns a list of transactions for a Safe. The list has different structures depending on the transaction type. + +```js +const allTxs: SafeMultisigTransactionListResponse = await safeService.getAllTransactions(safeAddress) +``` + +```js +const allTxsOptions: AllTransactionsOptions = { + executed, + queued, + trusted +} +const allTxs: SafeMultisigTransactionListResponse = await safeService.getAllTransactions( + safeAddress, + allTxsOptions +) +``` + ### getNextNonce Returns the right nonce to propose a new transaction right after the last pending transaction. diff --git a/packages/safe-service-client/e2e/config.ts b/packages/safe-service-client/e2e/config.ts index bb3b8fe3a..2124513cd 100644 --- a/packages/safe-service-client/e2e/config.ts +++ b/packages/safe-service-client/e2e/config.ts @@ -1,5 +1,5 @@ const config = { - BASE_URL: 'https://safe-transaction.staging.gnosisdev.com', + BASE_URL: 'https://safe-transaction.rinkeby.gnosis.io', JSON_RPC: `https://rinkeby.infura.io/v3/${process.env.INFURA_KEY}` } diff --git a/packages/safe-service-client/e2e/getNextNonce.test.ts b/packages/safe-service-client/e2e/getNextNonce.test.ts index 8f2b3ee36..86bd1dd73 100644 --- a/packages/safe-service-client/e2e/getNextNonce.test.ts +++ b/packages/safe-service-client/e2e/getNextNonce.test.ts @@ -25,4 +25,4 @@ describe('getNextNonce', () => { const nextNonce = await serviceSdk.getNextNonce(safeAddress) chai.expect(nextNonce).to.be.equal(0) }) -}) +}) diff --git a/packages/safe-service-client/e2e/getTransactionConfirmations.test.ts b/packages/safe-service-client/e2e/getTransactionConfirmations.test.ts index 773ffaf1b..65b20dbe6 100644 --- a/packages/safe-service-client/e2e/getTransactionConfirmations.test.ts +++ b/packages/safe-service-client/e2e/getTransactionConfirmations.test.ts @@ -15,7 +15,7 @@ describe('getTransactionConfirmations', () => { .to.be.rejectedWith('Invalid safeTxHash') }) - it('should return an empty array if the safeTxHash is not found', async () => { + it.skip('should return an empty array if the safeTxHash is not found', async () => { const safeTxHash = '0x' const transactionConfirmations = await serviceSdk.getTransactionConfirmations(safeTxHash) chai.expect(transactionConfirmations.count).to.be.equal(0) diff --git a/packages/safe-service-client/package.json b/packages/safe-service-client/package.json index 7e5dbb483..fdde24a70 100644 --- a/packages/safe-service-client/package.json +++ b/packages/safe-service-client/package.json @@ -33,28 +33,28 @@ ], "homepage": "https://github.com/gnosis/safe-core-sdk#readme", "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.2", + "@nomiclabs/hardhat-ethers": "^2.0.3", "@nomiclabs/hardhat-waffle": "^2.0.1", - "@types/chai": "^4.2.22", + "@types/chai": "^4.3.0", "@types/chai-as-promised": "^7.1.4", "@types/mocha": "^9.0.0", - "@types/node": "^16.9.6", - "@typescript-eslint/eslint-plugin": "^4.31.2", - "@typescript-eslint/parser": "^4.31.2", + "@types/node": "^17.0.8", + "@typescript-eslint/eslint-plugin": "^5.9.0", + "@typescript-eslint/parser": "^5.9.0", "chai": "^4.3.4", "chai-as-promised": "^7.1.1", - "eslint": "^7.32.0", + "eslint": "^8.6.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", - "hardhat": "^2.3.3", - "husky": "^7.0.2", - "lint-staged": "^11.1.2", - "mocha": "^9.1.1", - "prettier": "^2.4.1", + "hardhat": "^2.8.0", + "husky": "^7.0.4", + "lint-staged": "^12.1.5", + "mocha": "^9.1.3", + "prettier": "^2.5.1", "rimraf": "^3.0.2", "ts-generator": "^0.1.1", - "ts-node": "^10.2.1", - "typescript": "^4.4.3" + "ts-node": "^10.4.0", + "typescript": "^4.5.4" }, "lint-staged": { "src/**/!(*test).ts": [ diff --git a/packages/safe-service-client/src/SafeServiceClient.ts b/packages/safe-service-client/src/SafeServiceClient.ts index 26867bdc9..f200f58fe 100644 --- a/packages/safe-service-client/src/SafeServiceClient.ts +++ b/packages/safe-service-client/src/SafeServiceClient.ts @@ -1,6 +1,8 @@ import { Signer } from '@ethersproject/abstract-signer' import SafeTransactionService from './SafeTransactionService' import { + AllTransactionsListResponse, + AllTransactionsOptions, MasterCopyResponse, OwnerResponse, ProposeTransactionProps, @@ -212,7 +214,12 @@ class SafeServiceClient implements SafeTransactionService { * @throws "Safe= does not exist or it's still not indexed" * @throws "Signing owner is not an owner of the Safe" */ - async addSafeDelegate({ safe, delegate, label, signer }: SafeDelegateConfig): Promise { + async addSafeDelegate({ + safe, + delegate, + label, + signer + }: SafeDelegateConfig): Promise { if (safe === '') { throw new Error('Invalid Safe address') } @@ -452,6 +459,38 @@ class SafeServiceClient implements SafeTransactionService { }) } + /** + * Returns a list of transactions for a Safe. The list has different structures depending on the transaction type + * + * @param safeAddress - The Safe address + * @returns The list of transactions waiting for the confirmation of the Safe owners + * @throws "Invalid Safe address" + * @throws "Checksum address validation failed" + */ + async getAllTransactions( + safeAddress: string, + options?: AllTransactionsOptions + ): Promise { + if (safeAddress === '') { + throw new Error('Invalid Safe address') + } + const url = new URL(`${this.#txServiceBaseUrl}/safes/${safeAddress}/all-transactions/`) + + const trusted = options?.trusted?.toString() || 'true' + url.searchParams.set('trusted', trusted) + + const queued = options?.queued?.toString() || 'true' + url.searchParams.set('queued', queued) + + const executed = options?.executed?.toString() || 'false' + url.searchParams.set('executed', executed) + + return sendRequest({ + url: url.toString(), + method: HttpMethod.Get + }) + } + /** * Returns the right nonce to propose a new transaction after the last pending transaction. * diff --git a/packages/safe-service-client/src/types/safeTransactionServiceTypes.ts b/packages/safe-service-client/src/types/safeTransactionServiceTypes.ts index 3a5f7ff24..c7f7b110c 100644 --- a/packages/safe-service-client/src/types/safeTransactionServiceTypes.ts +++ b/packages/safe-service-client/src/types/safeTransactionServiceTypes.ts @@ -263,3 +263,48 @@ export type TokenInfoListResponse = { readonly previous?: string readonly results: TokenInfoListResponse[] } + +export type TransferWithTokenInfoResponse = TransferResponse & { + readonly tokenInfo: TokenInfoResponse +} + +export type SafeModuleTransactionWithTransfersResponse = SafeModuleTransaction & { + readonly txType?: 'MODULE_TRANSACTION' + readonly transfers: TransferWithTokenInfoResponse[] +} + +export type SafeMultisigTransactionWithTransfersResponse = SafeMultisigTransactionResponse & { + readonly txType?: 'MULTISIG_TRANSACTION' + readonly transfers: TransferWithTokenInfoResponse[] +} + +export type EthereumTxResponse = { + readonly executionDate: string + readonly to: string + readonly data: string + readonly txHash: string + readonly blockNumber?: number + readonly from: string +} + +export type EthereumTxWithTransfersResponse = EthereumTxResponse & { + readonly txType?: 'ETHEREUM_TRANSACTION' + readonly transfers: TransferWithTokenInfoResponse[] +} + +export type AllTransactionsOptions = { + executed?: boolean + queued?: boolean + trusted?: boolean +} + +export type AllTransactionsListResponse = { + readonly count: number + readonly next?: string + readonly previous?: string + readonly results: Array< + | SafeModuleTransactionWithTransfersResponse + | SafeMultisigTransactionWithTransfersResponse + | EthereumTxWithTransfersResponse + > +} diff --git a/packages/safe-service-client/tests/endpoint.test.ts b/packages/safe-service-client/tests/endpoint.test.ts index bf6757981..b7ab8d4df 100644 --- a/packages/safe-service-client/tests/endpoint.test.ts +++ b/packages/safe-service-client/tests/endpoint.test.ts @@ -236,7 +236,7 @@ describe('Endpoint tests', () => { data: '0x', value: '123456789', operation: 1, - safeTxGas: 123, + safeTxGas: 0, baseGas: 0, gasPrice: 0, gasToken: '0x0000000000000000000000000000000000000000', @@ -318,6 +318,18 @@ describe('Endpoint tests', () => { }) }) + it('getAllTransactions', async () => { + await chai + .expect(serviceSdk.getAllTransactions(safeAddress)) + .to.be.eventually.deep.equals({ data: { success: true } }) + chai.expect(fetchData).to.have.been.calledWith({ + url: `${getTxServiceBaseUrl( + txServiceBaseUrl + )}/safes/${safeAddress}/all-transactions/?trusted=true&queued=true&executed=false`, + method: 'get' + }) + }) + it('getBalances', async () => { await chai .expect(serviceSdk.getBalances(safeAddress)) diff --git a/yarn.lock b/yarn.lock index 238068ae8..a044cb432 100644 --- a/yarn.lock +++ b/yarn.lock @@ -674,14 +674,14 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@eslint/eslintrc@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.4.tgz#dfe0ff7ba270848d10c5add0715e04964c034b31" - integrity sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q== +"@eslint/eslintrc@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" + integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.0.0" + espree "^9.2.0" globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" @@ -742,7 +742,7 @@ patch-package "^6.2.2" postinstall-postinstall "^2.1.0" -"@ethereumjs/block@^3.4.0", "@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0": +"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0": version "3.6.0" resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.0.tgz#5cf89ea748607597a3f8b038abc986e4ac0b05db" integrity sha512-dqLo1LtsLG+Oelu5S5tWUDG0pah3QUwV5TJZy2cm19BXDr4ka/S9XBSgao0i09gTcuPlovlHgcs6d7EZ37urjQ== @@ -752,7 +752,7 @@ ethereumjs-util "^7.1.3" merkle-patricia-tree "^4.2.2" -"@ethereumjs/blockchain@^5.4.0", "@ethereumjs/blockchain@^5.5.0": +"@ethereumjs/blockchain@^5.5.0": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.1.tgz#60f1f50592c06cc47e1704800b88b7d32f609742" integrity sha512-JS2jeKxl3tlaa5oXrZ8mGoVBCz6YqsGG350XVNtHAtNZXKk7pU3rH4xzF2ru42fksMMqzFLzKh9l4EQzmNWDqA== @@ -793,7 +793,7 @@ "@ethereumjs/common" "^2.6.0" ethereumjs-util "^7.1.3" -"@ethereumjs/vm@^5.5.2": +"@ethereumjs/vm@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.6.0.tgz#e0ca62af07de820143674c30b776b86c1983a464" integrity sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ== @@ -841,7 +841,7 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/abi@5.5.0", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.3.1", "@ethersproject/abi@^5.5.0": +"@ethersproject/abi@5.5.0", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.5.0.tgz#fb52820e22e50b854ff15ce1647cc508d6660613" integrity sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w== @@ -869,7 +869,7 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/web" "^5.5.0" -"@ethersproject/abstract-signer@5.5.0", "@ethersproject/abstract-signer@^5.3.0", "@ethersproject/abstract-signer@^5.5.0": +"@ethersproject/abstract-signer@5.5.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA== @@ -880,7 +880,7 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/properties" "^5.5.0" -"@ethersproject/address@5.5.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.3.0", "@ethersproject/address@^5.5.0": +"@ethersproject/address@5.5.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== @@ -906,7 +906,7 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/properties" "^5.5.0" -"@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.3.0", "@ethersproject/bignumber@^5.5.0": +"@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== @@ -915,21 +915,21 @@ "@ethersproject/logger" "^5.5.0" bn.js "^4.11.9" -"@ethersproject/bytes@5.5.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.3.0", "@ethersproject/bytes@^5.5.0": +"@ethersproject/bytes@5.5.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/constants@5.5.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.5.0": +"@ethersproject/constants@5.5.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ== dependencies: "@ethersproject/bignumber" "^5.5.0" -"@ethersproject/contracts@5.5.0", "@ethersproject/contracts@^5.3.0": +"@ethersproject/contracts@5.5.0", "@ethersproject/contracts@^5.4.1": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197" integrity sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg== @@ -1016,6 +1016,13 @@ dependencies: "@ethersproject/logger" "^5.5.0" +"@ethersproject/networks@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.1.tgz#b7f7b9fb88dec1ea48f739b7fb9621311aa8ce6c" + integrity sha512-tYRDM4zZtSUcKnD4UMuAlj7SeXH/k5WC4SP2u1Pn57++JdXHkRu2zwNkgNogZoxHzhm9Q6qqurDBVptHOsW49Q== + dependencies: + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2@5.5.0", "@ethersproject/pbkdf2@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" @@ -1031,7 +1038,7 @@ dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/providers@5.5.0", "@ethersproject/providers@^5.3.1": +"@ethersproject/providers@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.0.tgz#bc2876a8fe5e0053ed9828b1f3767ae46e43758b" integrity sha512-xqMbDnS/FPy+J/9mBLKddzyLLAQFjrVff5g00efqxPzcAwXiR+SiCGVy6eJ5iAIirBOATjx7QLhDNPGV+AEQsw== @@ -1056,6 +1063,31 @@ bech32 "1.1.4" ws "7.4.6" +"@ethersproject/providers@5.5.1", "@ethersproject/providers@^5.4.4": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.1.tgz#ba87e3c93219bbd2e2edf8b369873aee774abf04" + integrity sha512-2zdD5sltACDWhjUE12Kucg2PcgM6V2q9JMyVvObtVGnzJu+QSmibbP+BHQyLWZUBfLApx2942+7DC5D+n4wBQQ== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" + bech32 "1.1.4" + ws "7.4.6" + "@ethersproject/random@5.5.0", "@ethersproject/random@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.0.tgz#305ed9e033ca537735365ac12eed88580b0f81f9" @@ -1093,7 +1125,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.5.0", "@ethersproject/solidity@^5.3.0": +"@ethersproject/solidity@5.5.0", "@ethersproject/solidity@^5.4.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f" integrity sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw== @@ -1114,7 +1146,7 @@ "@ethersproject/constants" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.3.0", "@ethersproject/transactions@^5.5.0": +"@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA== @@ -1138,7 +1170,7 @@ "@ethersproject/constants" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/wallet@5.5.0", "@ethersproject/wallet@^5.3.0": +"@ethersproject/wallet@5.5.0", "@ethersproject/wallet@^5.4.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75" integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q== @@ -1170,6 +1202,17 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" +"@ethersproject/web@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.1.tgz#cfcc4a074a6936c657878ac58917a61341681316" + integrity sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg== + dependencies: + "@ethersproject/base64" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/wordlists@5.5.0", "@ethersproject/wordlists@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f" @@ -1203,11 +1246,16 @@ resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-contracts/-/safe-contracts-1.3.0.tgz#316741a7690d8751a1f701538cfc9ec80866eedc" integrity sha512-1p+1HwGvxGUVzVkFjNzglwHrLNA67U/axP0Ct85FzzH8yhGJb4t9jDjPYocVMzLorDoWAfKicGy1akPY9jXRVw== -"@gnosis.pm/safe-deployments@^1.0.0", "@gnosis.pm/safe-deployments@^1.4.0": +"@gnosis.pm/safe-deployments@^1.0.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-deployments/-/safe-deployments-1.4.0.tgz#d49d3d36cc014ef62306d09c0f4761895a17d7a6" integrity sha512-q4salJNQ/Gx0DnZJytAFO/U4OwGI6xTGtTJSOZK+C9Fh2NW8sep+YfSunHQvCLcu4b7WgWEBhxnCV6rpyveLHg== +"@gnosis.pm/safe-deployments@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-deployments/-/safe-deployments-1.7.0.tgz#dd5fde901595545131d447888e327cc72e41d370" + integrity sha512-OWc73XDBOJzoDk7GAQsasOxHnXKdJdOb28Jkv+JNie2LlRwZe1SMCu0iTozhwpLFp4BC+iDtuVWN7EVpe142ag== + "@graphql-tools/batch-delegate@^6.2.4", "@graphql-tools/batch-delegate@^6.2.6": version "6.2.6" resolved "https://registry.yarnpkg.com/@graphql-tools/batch-delegate/-/batch-delegate-6.2.6.tgz#fbea98dc825f87ef29ea5f3f371912c2a2aa2f2c" @@ -1549,16 +1597,16 @@ debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/config-array@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.6.0.tgz#b5621fdb3b32309d2d16575456cbc277fa8f021a" - integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A== +"@humanwhocodes/config-array@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" + integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": +"@humanwhocodes/object-schema@^1.2.0", "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== @@ -2361,10 +2409,10 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomiclabs/hardhat-ethers@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" - integrity sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg== +"@nomiclabs/hardhat-ethers@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.3.tgz#06e20a57274f6ce3148132910e723948a711edf1" + integrity sha512-IJ0gBotVtO7YyLZyHNgbxzskUtFok+JkRlKPo8YELqj1ms9XL6Qm3vsfsGdZr22wnJeVEF5TQPotKuwQk21Dag== "@nomiclabs/hardhat-waffle@^2.0.1": version "2.0.1" @@ -3493,10 +3541,10 @@ dependencies: ethers "^5.0.2" -"@typechain/ethers-v5@^8.0.4": - version "8.0.4" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-8.0.4.tgz#b5492554e5d907b5632d74a150eec1d07eb72388" - integrity sha512-778WF5PUsnftVjFp16TMMDgii2if8+WNx+BeVZffPtKhk8Qxg2GD1+5RulR2c7XxxmqWM6H/cla+1oA8qQdjBw== +"@typechain/ethers-v5@^8.0.5": + version "8.0.5" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-8.0.5.tgz#d469420e9a73deb7fa076cde9edb45d713dd1b8c" + integrity sha512-ntpj4cS3v4WlDu+hSKSyj9A3o1tKtWC30RX1gobeYymZColeJiUemC1Kgfa0MWGmInm5CKxoHVhEvYVgPOZn1A== dependencies: lodash "^4.17.15" ts-essentials "^7.0.1" @@ -3565,11 +3613,16 @@ dependencies: "@types/chai" "*" -"@types/chai@*", "@types/chai@^4.2.18", "@types/chai@^4.2.22": +"@types/chai@*", "@types/chai@^4.2.18": version "4.2.22" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.22.tgz#47020d7e4cf19194d43b5202f35f75bd2ad35ce7" integrity sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ== +"@types/chai@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.0.tgz#23509ebc1fa32f1b4d50d6a66c4032d5b8eaabdc" + integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== + "@types/connect@*": version "3.4.35" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" @@ -3740,7 +3793,7 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@>=13.7.0", "@types/node@^16.11.9", "@types/node@^16.9.6": +"@types/node@*", "@types/node@>=13.7.0": version "16.11.9" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.9.tgz#879be3ad7af29f4c1a5c433421bf99fab7047185" integrity sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A== @@ -3770,6 +3823,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== +"@types/node@^17.0.8": + version "17.0.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b" + integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg== + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" @@ -3792,7 +3850,7 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281" integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA== -"@types/qs@*", "@types/qs@^6.9.4": +"@types/qs@*", "@types/qs@^6.9.7": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== @@ -3816,6 +3874,11 @@ dependencies: "@types/node" "*" +"@types/semver@^7.3.9": + version "7.3.9" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" + integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== + "@types/serve-static@*": version "1.13.10" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" @@ -3890,7 +3953,7 @@ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== -"@typescript-eslint/eslint-plugin@^4.23.0", "@typescript-eslint/eslint-plugin@^4.31.2": +"@typescript-eslint/eslint-plugin@^4.23.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== @@ -3904,13 +3967,14 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/eslint-plugin@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.4.0.tgz#05e711a2e7b68342661fde61bccbd1531c19521a" - integrity sha512-9/yPSBlwzsetCsGEn9j24D8vGQgJkOTr4oMLas/w886ZtzKIs1iyoqFrwsX2fqYEeUwsdBpC21gcjRGo57u0eg== +"@typescript-eslint/eslint-plugin@^5.9.0": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz#382182d5cb062f52aac54434cfc47c28898c8006" + integrity sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ== dependencies: - "@typescript-eslint/experimental-utils" "5.4.0" - "@typescript-eslint/scope-manager" "5.4.0" + "@typescript-eslint/experimental-utils" "5.9.0" + "@typescript-eslint/scope-manager" "5.9.0" + "@typescript-eslint/type-utils" "5.9.0" debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" @@ -3930,19 +3994,19 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/experimental-utils@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.4.0.tgz#238a7418d2da3b24874ba35385eb21cc61d2a65e" - integrity sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg== +"@typescript-eslint/experimental-utils@5.9.0": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz#652762d37d6565ef07af285021b8347b6c79a827" + integrity sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.4.0" - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/typescript-estree" "5.4.0" + "@typescript-eslint/scope-manager" "5.9.0" + "@typescript-eslint/types" "5.9.0" + "@typescript-eslint/typescript-estree" "5.9.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@^4.23.0", "@typescript-eslint/parser@^4.31.2": +"@typescript-eslint/parser@^4.23.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== @@ -3952,14 +4016,14 @@ "@typescript-eslint/typescript-estree" "4.33.0" debug "^4.3.1" -"@typescript-eslint/parser@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.4.0.tgz#3aa83ce349d66e39b84151f6d5464928044ca9e3" - integrity sha512-JoB41EmxiYpaEsRwpZEYAJ9XQURPFer8hpkIW9GiaspVLX8oqbqNM8P4EP8HOZg96yaALiLEVWllA2E8vwsIKw== +"@typescript-eslint/parser@^5.9.0": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.9.0.tgz#fdbb08767a4caa6ca6ccfed5f9ffe9387f0c7d97" + integrity sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ== dependencies: - "@typescript-eslint/scope-manager" "5.4.0" - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/typescript-estree" "5.4.0" + "@typescript-eslint/scope-manager" "5.9.0" + "@typescript-eslint/types" "5.9.0" + "@typescript-eslint/typescript-estree" "5.9.0" debug "^4.3.2" "@typescript-eslint/scope-manager@4.33.0": @@ -3970,23 +4034,32 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/scope-manager@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.4.0.tgz#aaab08415f4a9cf32b870c7750ae8ba4607126a1" - integrity sha512-pRxFjYwoi8R+n+sibjgF9iUiAELU9ihPBtHzocyW8v8D8G8KeQvXTsW7+CBYIyTYsmhtNk50QPGLE3vrvhM5KA== +"@typescript-eslint/scope-manager@5.9.0": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz#02dfef920290c1dcd7b1999455a3eaae7a1a3117" + integrity sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg== dependencies: - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/visitor-keys" "5.4.0" + "@typescript-eslint/types" "5.9.0" + "@typescript-eslint/visitor-keys" "5.9.0" + +"@typescript-eslint/type-utils@5.9.0": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz#fd5963ead04bc9b7af9c3a8e534d8d39f1ce5f93" + integrity sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ== + dependencies: + "@typescript-eslint/experimental-utils" "5.9.0" + debug "^4.3.2" + tsutils "^3.21.0" "@typescript-eslint/types@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/types@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.4.0.tgz#b1c130f4b381b77bec19696c6e3366f9781ce8f2" - integrity sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA== +"@typescript-eslint/types@5.9.0": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.9.0.tgz#e5619803e39d24a03b3369506df196355736e1a3" + integrity sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg== "@typescript-eslint/typescript-estree@4.33.0": version "4.33.0" @@ -4001,13 +4074,13 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.4.0.tgz#fe524fb308973c68ebeb7428f3b64499a6ba5fc0" - integrity sha512-nhlNoBdhKuwiLMx6GrybPT3SFILm5Gij2YBdPEPFlYNFAXUJWX6QRgvi/lwVoadaQEFsizohs6aFRMqsXI2ewA== +"@typescript-eslint/typescript-estree@5.9.0": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz#0e5c6f03f982931abbfbc3c1b9df5fbf92a3490f" + integrity sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw== dependencies: - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/visitor-keys" "5.4.0" + "@typescript-eslint/types" "5.9.0" + "@typescript-eslint/visitor-keys" "5.9.0" debug "^4.3.2" globby "^11.0.4" is-glob "^4.0.3" @@ -4022,12 +4095,12 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.4.0.tgz#09bc28efd3621f292fe88c86eef3bf4893364c8c" - integrity sha512-PVbax7MeE7tdLfW5SA0fs8NGVVr+buMPrcj+CWYWPXsZCH8qZ1THufDzbXm1xrZ2b2PA1iENJ0sRq5fuUtvsJg== +"@typescript-eslint/visitor-keys@5.9.0": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz#7585677732365e9d27f1878150fab3922784a1a6" + integrity sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw== dependencies: - "@typescript-eslint/types" "5.4.0" + "@typescript-eslint/types" "5.9.0" eslint-visitor-keys "^3.0.0" "@ungap/promise-all-settled@1.1.2": @@ -4243,6 +4316,11 @@ acorn@^8.4.1, acorn@^8.6.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== +acorn@^8.7.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" @@ -4698,6 +4776,16 @@ array-back@^2.0.0: dependencies: typical "^2.6.1" +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" @@ -6274,7 +6362,7 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -6417,7 +6505,7 @@ chokidar@3.5.1: optionalDependencies: fsevents "~2.3.1" -chokidar@3.5.2, chokidar@^3.4.0, chokidar@^3.4.1: +chokidar@3.5.2, chokidar@^3.4.0, chokidar@^3.4.1, chokidar@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== @@ -6539,7 +6627,7 @@ cli-spinners@^2.0.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== -cli-truncate@2.1.0, cli-truncate@^2.1.0: +cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== @@ -6705,11 +6793,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== - colorette@^2.0.16: version "2.0.16" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" @@ -6749,6 +6832,26 @@ command-line-args@^4.0.7: find-replace "^1.0.3" typical "^2.6.1" +command-line-args@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.0.tgz#087b02748272169741f1fd7c785b295df079b9be" + integrity sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.1.tgz#c908e28686108917758a49f45efb4f02f76bc03f" + integrity sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA== + dependencies: + array-back "^4.0.1" + chalk "^2.4.2" + table-layout "^1.0.1" + typical "^5.2.0" + commander@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" @@ -6764,7 +6867,7 @@ commander@^6.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -commander@^8.2.0, commander@^8.3.0: +commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== @@ -7054,7 +7157,7 @@ cors@^2.8.1, cors@^2.8.5: object-assign "^4" vary "^1" -cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: +cosmiconfig@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== @@ -7354,6 +7457,13 @@ debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.1" +debug@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -7420,7 +7530,7 @@ deep-equal@~1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: +deep-extend@^0.6.0, deep-extend@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== @@ -8264,7 +8374,7 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== -eslint@^7.26.0, eslint@^7.32.0: +eslint@^7.26.0: version "7.32.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== @@ -8310,13 +8420,13 @@ eslint@^7.26.0, eslint@^7.32.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -eslint@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.3.0.tgz#a3c2409507403c1c7f6c42926111d6cbefbc3e85" - integrity sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww== +eslint@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.6.0.tgz#4318c6a31c5584838c1a2e940c478190f58d558e" + integrity sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw== dependencies: - "@eslint/eslintrc" "^1.0.4" - "@humanwhocodes/config-array" "^0.6.0" + "@eslint/eslintrc" "^1.0.5" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -8327,7 +8437,7 @@ eslint@^8.3.0: eslint-scope "^7.1.0" eslint-utils "^3.0.0" eslint-visitor-keys "^3.1.0" - espree "^9.1.0" + espree "^9.3.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -8363,15 +8473,24 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -espree@^9.0.0, espree@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.1.0.tgz#ba9d3c9b34eeae205724124e31de4543d59fbf74" - integrity sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ== +espree@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.2.0.tgz#c50814e01611c2d0f8bd4daa83c369eabba80dbc" + integrity sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg== dependencies: acorn "^8.6.0" acorn-jsx "^5.3.1" eslint-visitor-keys "^3.1.0" +espree@^9.3.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8" + integrity sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ== + dependencies: + acorn "^8.7.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^3.1.0" + esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -8894,7 +9013,7 @@ ethers@^4.0.32: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.1, ethers@^5.0.13, ethers@^5.0.2, ethers@^5.1.4, ethers@^5.4.7, ethers@^5.5.1: +ethers@^5.0.1, ethers@^5.0.13, ethers@^5.0.2, ethers@^5.1.4, ethers@^5.4.7: version "5.5.1" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.1.tgz#d3259a95a42557844aa543906c537106c0406fbf" integrity sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw== @@ -8930,6 +9049,42 @@ ethers@^5.0.1, ethers@^5.0.13, ethers@^5.0.2, ethers@^5.1.4, ethers@^5.4.7, ethe "@ethersproject/web" "5.5.0" "@ethersproject/wordlists" "5.5.0" +ethers@^5.5.2: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.2.tgz#cd2e508c7342c44fa70392f722e8de8f2416489f" + integrity sha512-EF5W+6Wwcu6BqVwpgmyR5U2+L4c1FQzlM/02dkZOugN3KF0cG9bzHZP+TDJglmPm2/IzCEJDT7KBxzayk7SAHw== + dependencies: + "@ethersproject/abi" "5.5.0" + "@ethersproject/abstract-provider" "5.5.1" + "@ethersproject/abstract-signer" "5.5.0" + "@ethersproject/address" "5.5.0" + "@ethersproject/base64" "5.5.0" + "@ethersproject/basex" "5.5.0" + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/constants" "5.5.0" + "@ethersproject/contracts" "5.5.0" + "@ethersproject/hash" "5.5.0" + "@ethersproject/hdnode" "5.5.0" + "@ethersproject/json-wallets" "5.5.0" + "@ethersproject/keccak256" "5.5.0" + "@ethersproject/logger" "5.5.0" + "@ethersproject/networks" "5.5.1" + "@ethersproject/pbkdf2" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/providers" "5.5.1" + "@ethersproject/random" "5.5.0" + "@ethersproject/rlp" "5.5.0" + "@ethersproject/sha2" "5.5.0" + "@ethersproject/signing-key" "5.5.0" + "@ethersproject/solidity" "5.5.0" + "@ethersproject/strings" "5.5.0" + "@ethersproject/transactions" "5.5.0" + "@ethersproject/units" "5.5.0" + "@ethersproject/wallet" "5.5.0" + "@ethersproject/web" "5.5.1" + "@ethersproject/wordlists" "5.5.0" + ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -9439,6 +9594,13 @@ find-replace@^1.0.3: array-back "^1.0.4" test-value "^2.1.0" +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + find-up@3.0.0, find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -10352,26 +10514,27 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -hardhat-deploy@^0.8.6: - version "0.8.11" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.8.11.tgz#faa20def76f031101db81c5b71d7388e0475b794" - integrity sha512-PJIYckR9lYvGMHxaIb8esvZw9k+gW2xPCUYf4XJTQ3f1fLTXhA86AOhPQsfyBr+MY11/D+UUerIP88tl+PW2+g== - dependencies: - "@ethersproject/abi" "^5.3.1" - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/contracts" "^5.3.0" - "@ethersproject/providers" "^5.3.1" - "@ethersproject/solidity" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/wallet" "^5.3.0" - "@types/qs" "^6.9.4" +hardhat-deploy@^0.9.24: + version "0.9.24" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.9.24.tgz#0e0ca589dbeb9682c5b43e935246390cc5d6fb14" + integrity sha512-fIIg6Wt7lV8h+6c6dFnINUKcJ/5Wfe5GYDaDsGGPqaK2b71DaeFHjsWRL+2ozaHkMZjdyYBOweY09wRu/KM1Qw== + dependencies: + "@ethersproject/abi" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.1" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.1" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/contracts" "^5.4.1" + "@ethersproject/providers" "^5.4.4" + "@ethersproject/solidity" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wallet" "^5.4.0" + "@types/qs" "^6.9.7" axios "^0.21.1" - chalk "^4.1.1" - chokidar "^3.4.0" - debug "^4.1.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" enquirer "^2.3.6" form-data "^4.0.0" fs-extra "^10.0.0" @@ -10379,16 +10542,16 @@ hardhat-deploy@^0.8.6: murmur-128 "^0.2.1" qs "^6.9.4" -hardhat@^2.3.3: - version "2.6.8" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.6.8.tgz#9ef6f8c16f9044acb95609d15a760b89177b8181" - integrity sha512-iRVd5DgcIVV3rNXMlogOfwlXAhHp7Wy/OjjFiUhTey8Unvo6oq5+Is5ANiKVN+Iw07Pcb/HpkGt7jCB6a4ITgg== +hardhat@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.8.0.tgz#4701fafe2de4fe88bed328561e554df85455385b" + integrity sha512-A2L5F+B7HgdvfcuEWBXyokzP3biSlu4UeIvNR/lgSC0Og/2kbP9cjMMkIH42V1W8nQEZk70VuryhVKX2uHwSYw== dependencies: - "@ethereumjs/block" "^3.4.0" - "@ethereumjs/blockchain" "^5.4.0" - "@ethereumjs/common" "^2.4.0" - "@ethereumjs/tx" "^3.3.0" - "@ethereumjs/vm" "^5.5.2" + "@ethereumjs/block" "^3.6.0" + "@ethereumjs/blockchain" "^5.5.0" + "@ethereumjs/common" "^2.6.0" + "@ethereumjs/tx" "^3.4.0" + "@ethereumjs/vm" "^5.6.0" "@ethersproject/abi" "^5.1.2" "@sentry/node" "^5.18.1" "@solidity-parser/parser" "^0.14.0" @@ -10406,7 +10569,7 @@ hardhat@^2.3.3: eth-sig-util "^2.5.2" ethereum-cryptography "^0.1.2" ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.1.0" + ethereumjs-util "^7.1.3" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" @@ -10429,7 +10592,7 @@ hardhat@^2.3.3: stacktrace-parser "^0.1.10" "true-case-path" "^2.2.1" tsort "0.0.1" - uuid "^3.3.2" + uuid "^8.3.2" ws "^7.4.6" has-ansi@^2.0.0: @@ -10764,7 +10927,7 @@ husky@^6.0.0: resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e" integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== -husky@^7.0.2, husky@^7.0.4: +husky@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== @@ -12649,47 +12812,40 @@ lint-staged@^10.5.4: string-argv "0.3.1" stringify-object "^3.3.0" -lint-staged@^11.1.2: - version "11.2.6" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.2.6.tgz#f477b1af0294db054e5937f171679df63baa4c43" - integrity sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg== - dependencies: - cli-truncate "2.1.0" - colorette "^1.4.0" - commander "^8.2.0" - cosmiconfig "^7.0.1" - debug "^4.3.2" - enquirer "^2.3.6" - execa "^5.1.1" - listr2 "^3.12.2" - micromatch "^4.0.4" - normalize-path "^3.0.0" - please-upgrade-node "^3.2.0" - string-argv "0.3.1" - stringify-object "3.3.0" - supports-color "8.1.1" - -lint-staged@^12.1.2: - version "12.1.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.1.2.tgz#90c571927e1371fc133e720671dd7989eab53f74" - integrity sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A== +lint-staged@^12.1.5: + version "12.1.5" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.1.5.tgz#e05582fc39aed5cb13b9dd1dfb8330407246d809" + integrity sha512-WyKb+0sNKDTd1LwwAfTBPp0XmdaKkAOEbg4oHE4Kq2+oQVchg/VAcjVQtSqZih1izNsTURjc2EkhG/syRQUXdA== dependencies: cli-truncate "^3.1.0" colorette "^2.0.16" commander "^8.3.0" - debug "^4.3.2" - enquirer "^2.3.6" + debug "^4.3.3" execa "^5.1.1" lilconfig "2.0.4" - listr2 "^3.13.3" + listr2 "^3.13.5" micromatch "^4.0.4" normalize-path "^3.0.0" - object-inspect "^1.11.0" + object-inspect "^1.11.1" string-argv "^0.3.1" - supports-color "^9.0.2" + supports-color "^9.2.1" yaml "^1.10.2" -listr2@^3.12.2, listr2@^3.13.3, listr2@^3.2.2: +listr2@^3.13.5: + version "3.14.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" + +listr2@^3.2.2: version "3.13.4" resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.4.tgz#34101fc0184545597e00d1e7915ccfbfb17332e6" integrity sha512-lZ1Rut1DSIRwbxQbI8qaUBfOWJ1jEYRgltIM97j6kKOCI2pHVWMyxZvkU/JKmRBWcIYgDS2PK+yDgVqm7u3crw== @@ -12813,6 +12969,11 @@ lodash.assigninwith@^4.0.0: resolved "https://registry.yarnpkg.com/lodash.assigninwith/-/lodash.assigninwith-4.2.0.tgz#af02c98432ac86d93da695b4be801401971736af" integrity sha1-rwLJhDKshtk9ppW0voAUAZcXNq8= +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -13764,7 +13925,7 @@ mocha@^8.4.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -mocha@^9.1.1, mocha@^9.1.3: +mocha@^9.1.3: version "9.1.3" resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.1.3.tgz#8a623be6b323810493d8c8f6f7667440fa469fdb" integrity sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw== @@ -14599,6 +14760,11 @@ object-inspect@^1.11.0, object-inspect@^1.9.0, object-inspect@~1.11.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== +object-inspect@^1.11.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== + object-is@^1.0.1: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" @@ -15776,11 +15942,16 @@ prettier-plugin-solidity@^1.0.0-alpha.59: solidity-comments-extractor "^0.0.7" string-width "^4.2.3" -prettier@^2.1.2, prettier@^2.3.0, prettier@^2.4.1: +prettier@^2.1.2, prettier@^2.3.0: version "2.4.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== +prettier@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== + printj@~1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" @@ -16440,6 +16611,11 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + redux-devtools-core@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/redux-devtools-core/-/redux-devtools-core-0.2.1.tgz#4e43cbe590a1f18c13ee165d2d42e0bc77a164d8" @@ -16813,6 +16989,11 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" @@ -16910,6 +17091,13 @@ rxjs@^7.4.0: dependencies: tslib "~2.1.0" +rxjs@^7.5.1: + version "7.5.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157" + integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ== + dependencies: + tslib "^2.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -17734,6 +17922,11 @@ string-argv@0.3.1, string-argv@^0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -17822,7 +18015,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@3.3.0, stringify-object@^3.3.0: +stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== @@ -18017,10 +18210,10 @@ supports-color@^7.1.0, supports-color@^7.2.0: dependencies: has-flag "^4.0.0" -supports-color@^9.0.2: - version "9.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.1.0.tgz#558963681dafeff41ed68220488cbf438d29f351" - integrity sha512-lOCGOTmBSN54zKAoPWhHkjoqVQ0MqgzPE5iirtoSixhr0ZieR/6l7WZ32V53cvy9+1qghFnIk7k52p991lKd6g== +supports-color@^9.2.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.1.tgz#599dc9d45acf74c6176e0d880bab1d7d718fe891" + integrity sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ== swap-case@^1.1.0: version "1.1.2" @@ -18075,6 +18268,16 @@ sync-fetch@0.3.0: buffer "^5.7.0" node-fetch "^2.6.1" +table-layout@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + table@^6.0.9: version "6.7.3" resolved "https://registry.yarnpkg.com/table/-/table-6.7.3.tgz#255388439715a738391bd2ee4cbca89a4d05a9b7" @@ -18461,6 +18664,16 @@ truffle@^5.1.21: "@truffle/preserve-to-filecoin" "^0.2.4" "@truffle/preserve-to-ipfs" "^0.2.4" +ts-command-line-args@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.2.0.tgz#655e10451b06c86d318e9467546da4d19b773a55" + integrity sha512-RedEejZyhiEAOgBkIVxB4QC/SRYtl98D7b7epWB9e6E+TmK8KstXBu3WdnhGbMHicLkHoG7sCAmu+F+ASzLFHA== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + ts-essentials@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-1.0.4.tgz#ce3b5dade5f5d97cf69889c11bf7d2da8555b15a" @@ -18505,7 +18718,7 @@ ts-invariant@^0.9.0: dependencies: tslib "^2.1.0" -ts-node@^10.2.1, ts-node@^10.4.0: +ts-node@^10.4.0: version "10.4.0" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" integrity sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A== @@ -18689,13 +18902,12 @@ typechain@^3.0.0: ts-essentials "^6.0.3" ts-generator "^0.1.1" -typechain@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-6.0.4.tgz#deee38a4813e3f86a8f46daeb1d3d2caa9c4e3e1" - integrity sha512-EnFqSLBIggmCzIL7OF3ogRCgRRf/TRE2HmG4WGmRpP0x+kqiLYW9nOQKjo2Hm3caS4/Ktr5R0FUiNGwSWtfBGg== +typechain@^6.0.5: + version "6.1.0" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-6.1.0.tgz#462a35f555accf870689d1ba5698749108d0ce81" + integrity sha512-GGfkK0p3fUgz8kYxjSS4nKcWXE0Lo+teHTetghousIK5njbNoYNDlwn91QIyD181L3fVqlTvBE0a/q3AZmjNfw== dependencies: "@types/prettier" "^2.1.1" - command-line-args "^4.0.7" debug "^4.1.1" fs-extra "^7.0.0" glob "^7.1.6" @@ -18703,6 +18915,7 @@ typechain@^6.0.4: lodash "^4.17.15" mkdirp "^1.0.4" prettier "^2.1.2" + ts-command-line-args "^2.2.0" ts-essentials "^7.0.1" typedarray-to-buffer@^3.1.5, typedarray-to-buffer@~3.1.5: @@ -18741,11 +18954,16 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" -typescript@^4.2.4, typescript@^4.4.3, typescript@^4.5.2: +typescript@^4.2.4: version "4.5.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.2.tgz#8ac1fba9f52256fdb06fb89e4122fa6a346c2998" integrity sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw== +typescript@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" + integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== + typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" @@ -18768,6 +18986,16 @@ typical@^2.6.0, typical@^2.6.1: resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + ua-parser-js@^0.7.30: version "0.7.31" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" @@ -20185,6 +20413,14 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + workerpool@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.0.tgz#85aad67fa1a2c8ef9386a1b43539900f61d03d58" @@ -20479,6 +20715,11 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.0.0: + version "21.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55" + integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA== + yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" @@ -20614,18 +20855,18 @@ yargs@^15.0.2, yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^17.0.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" - integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q== +yargs@^17.3.0: + version "17.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" + integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== dependencies: cliui "^7.0.2" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.0.0" yargs@^4.7.1: version "4.8.1"