diff --git a/package.json b/package.json index cddce5ac48..7626038a24 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,6 @@ "nyc": "15.1.0", "prettier": "2.2.1", "remap-istanbul": "0.13.0", - "typescript": "4.1.3" + "typescript": "4.4.4" } } diff --git a/packages/advanced-logic/package.json b/packages/advanced-logic/package.json index 38f2500ba7..6880c5e424 100644 --- a/packages/advanced-logic/package.json +++ b/packages/advanced-logic/package.json @@ -53,7 +53,7 @@ "shx": "0.3.2", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" }, "gitHead": "6155223cfce769e48ccae480c510b35b4f54b4d0" } diff --git a/packages/advanced-logic/src/extensions/payment-network/declarative.ts b/packages/advanced-logic/src/extensions/payment-network/declarative.ts index 96ce2a2132..5c51b9c181 100644 --- a/packages/advanced-logic/src/extensions/payment-network/declarative.ts +++ b/packages/advanced-logic/src/extensions/payment-network/declarative.ts @@ -45,10 +45,11 @@ export default class DeclarativePaymentNetwork< ): ExtensionTypes.IAction { return { action: ExtensionTypes.PnAnyDeclarative.ACTION.DECLARE_SENT_PAYMENT, - id: ExtensionTypes.ID.PAYMENT_NETWORK_ANY_DECLARATIVE, + id: this.extensionId, parameters: { amount: parameters.amount.toString(), note: parameters.note, + txHash: parameters.txHash, }, }; } @@ -65,10 +66,11 @@ export default class DeclarativePaymentNetwork< ): ExtensionTypes.IAction { return { action: ExtensionTypes.PnAnyDeclarative.ACTION.DECLARE_SENT_REFUND, - id: ExtensionTypes.ID.PAYMENT_NETWORK_ANY_DECLARATIVE, + id: this.extensionId, parameters: { amount: parameters.amount.toString(), note: parameters.note, + txHash: parameters.txHash, }, }; } @@ -85,10 +87,11 @@ export default class DeclarativePaymentNetwork< ): ExtensionTypes.IAction { return { action: ExtensionTypes.PnAnyDeclarative.ACTION.DECLARE_RECEIVED_PAYMENT, - id: ExtensionTypes.ID.PAYMENT_NETWORK_ANY_DECLARATIVE, + id: this.extensionId, parameters: { amount: parameters.amount.toString(), note: parameters.note, + txHash: parameters.txHash, }, }; } @@ -105,10 +108,11 @@ export default class DeclarativePaymentNetwork< ): ExtensionTypes.IAction { return { action: ExtensionTypes.PnAnyDeclarative.ACTION.DECLARE_RECEIVED_REFUND, - id: ExtensionTypes.ID.PAYMENT_NETWORK_ANY_DECLARATIVE, + id: this.extensionId, parameters: { amount: parameters.amount.toString(), note: parameters.note, + txHash: parameters.txHash, }, }; } @@ -125,7 +129,7 @@ export default class DeclarativePaymentNetwork< ): ExtensionTypes.IAction { return { action: ExtensionTypes.PnAnyDeclarative.ACTION.ADD_PAYMENT_INSTRUCTION, - id: ExtensionTypes.ID.PAYMENT_NETWORK_ANY_DECLARATIVE, + id: this.extensionId, parameters: { paymentInfo: parameters.paymentInfo, }, @@ -144,7 +148,7 @@ export default class DeclarativePaymentNetwork< ): ExtensionTypes.IAction { return { action: ExtensionTypes.PnAnyDeclarative.ACTION.ADD_REFUND_INSTRUCTION, - id: ExtensionTypes.ID.PAYMENT_NETWORK_ANY_DECLARATIVE, + id: this.extensionId, parameters: { refundInfo: parameters.refundInfo, }, @@ -163,7 +167,7 @@ export default class DeclarativePaymentNetwork< ): ExtensionTypes.IAction { return { action: ExtensionTypes.PnAnyDeclarative.ACTION.ADD_DELEGATE, - id: ExtensionTypes.ID.PAYMENT_NETWORK_ANY_DECLARATIVE, + id: this.extensionId, parameters: { delegate: parameters.delegate, }, diff --git a/packages/currency/package.json b/packages/currency/package.json index db17ae0da9..6bc252a910 100644 --- a/packages/currency/package.json +++ b/packages/currency/package.json @@ -51,13 +51,13 @@ "@types/jest": "26.0.13", "@types/multicoin-address-validator": "0.5.0", "@types/node-dijkstra": "2.5.1", - "ethers": "5.2.0", + "ethers": "5.5.1", "jest": "26.4.2", "prettier": "2.1.1", "shx": "0.3.2", "source-map-support": "0.5.19", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" } } diff --git a/packages/data-access/package.json b/packages/data-access/package.json index 6a58200a05..c5fff76a7f 100644 --- a/packages/data-access/package.json +++ b/packages/data-access/package.json @@ -56,7 +56,7 @@ "source-map-support": "0.5.19", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" }, "gitHead": "6155223cfce769e48ccae480c510b35b4f54b4d0" } diff --git a/packages/data-format/package.json b/packages/data-format/package.json index 5792c08d13..70743e37fb 100644 --- a/packages/data-format/package.json +++ b/packages/data-format/package.json @@ -40,7 +40,7 @@ }, "dependencies": { "ajv": "6.12.4", - "ethers": "5.2.0" + "ethers": "5.5.1" }, "devDependencies": { "@types/node": "14.14.16", @@ -49,7 +49,7 @@ "rimraf": "3.0.2", "shx": "0.3.2", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" }, "gitHead": "6155223cfce769e48ccae480c510b35b4f54b4d0" } diff --git a/packages/docs/docs/guides/6-hosting-a-node/2-code.md b/packages/docs/docs/guides/6-hosting-a-node/2-code.md index f23fadb17b..e3d1af8abb 100644 --- a/packages/docs/docs/guides/6-hosting-a-node/2-code.md +++ b/packages/docs/docs/guides/6-hosting-a-node/2-code.md @@ -30,17 +30,17 @@ You are ready to run the local test Node. You will need three different consoles First, make sure you [installed IPFS](https://docs.ipfs.io/guides/guides/install/) locally. -Now you need to configure your IPFS to connect to our [dedicated network](../7-protocol/6-request-ipfs-network.md). We have a script to make it easy for you: +Run IPFS with: ```bash -cd packages/request-node -yarn init-ipfs +ipfs daemon ``` -Now you can run IPFS with: +Now you need to configure your IPFS to connect to our [dedicated network](../7-protocol/6-request-ipfs-network.md). We have a script to make it easy for you: ```bash -ipfs daemon +cd packages/request-node +yarn init-ipfs ``` ## Running an Ethereum node diff --git a/packages/docs/package.json b/packages/docs/package.json index 9a691cb976..cbaaeab61d 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -44,7 +44,7 @@ "bn.js": "5.1.3", "classnames": "2.2.6", "core-js": "3.6.5", - "ethers": "5.2.0", + "ethers": "5.5.1", "mobx": "5.15.6", "react": "16.13.1", "react-dom": "16.13.1", diff --git a/packages/epk-decryption/package.json b/packages/epk-decryption/package.json index adb3dd4a6c..e3fb53c463 100644 --- a/packages/epk-decryption/package.json +++ b/packages/epk-decryption/package.json @@ -58,7 +58,7 @@ "terser-webpack-plugin": "4.2.3", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3", + "typescript": "4.4.4", "webpack": "4.44.2", "webpack-bundle-analyzer": "4.2.0", "webpack-cli": "3.3.12" diff --git a/packages/epk-signature/package.json b/packages/epk-signature/package.json index 1358ebd6b2..45c81a8a3a 100644 --- a/packages/epk-signature/package.json +++ b/packages/epk-signature/package.json @@ -57,7 +57,7 @@ "terser-webpack-plugin": "4.2.3", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3", + "typescript": "4.4.4", "webpack": "4.44.2", "webpack-bundle-analyzer": "4.2.0", "webpack-cli": "3.3.12" diff --git a/packages/ethereum-storage/package.json b/packages/ethereum-storage/package.json index c4fb74dbe5..56d423c3f5 100644 --- a/packages/ethereum-storage/package.json +++ b/packages/ethereum-storage/package.json @@ -43,7 +43,7 @@ "@requestnetwork/types": "0.35.0", "@requestnetwork/utils": "0.35.0", "bluebird": "3.7.2", - "ethers": "5.2.0", + "ethers": "5.5.1", "form-data": "3.0.0", "ipfs-unixfs": "2.0.3", "keyv": "4.0.3", @@ -70,7 +70,7 @@ "source-map-support": "0.5.19", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3", + "typescript": "4.4.4", "web3-providers-http": "1.3.6" }, "gitHead": "6155223cfce769e48ccae480c510b35b4f54b4d0" diff --git a/packages/integration-test/package.json b/packages/integration-test/package.json index 392ceefae3..7867c82aee 100644 --- a/packages/integration-test/package.json +++ b/packages/integration-test/package.json @@ -55,13 +55,13 @@ "@truffle/hdwallet-provider": "1.2.3", "@types/jest": "26.0.13", "@types/node": "14.14.16", - "ethers": "5.2.0", + "ethers": "5.5.1", "jest": "26.4.2", "npm-run-all": "4.1.5", "prettier": "2.2.1", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3", + "typescript": "4.4.4", "web3-eth": "1.3.6" } } diff --git a/packages/integration-test/test/node-client.test.ts b/packages/integration-test/test/node-client.test.ts index c3a85a8a81..2678fcb2bc 100644 --- a/packages/integration-test/test/node-client.test.ts +++ b/packages/integration-test/test/node-client.test.ts @@ -1,8 +1,7 @@ import { EthereumPrivateKeyDecryptionProvider } from '@requestnetwork/epk-decryption'; -import { EthereumPrivateKeySignatureProvider } from '@requestnetwork/epk-signature'; import MultiFormat from '@requestnetwork/multi-format'; import { Request, RequestNetwork, Types } from '@requestnetwork/request-client.js'; -import { ClientTypes, IdentityTypes, PaymentTypes, RequestLogicTypes } from '@requestnetwork/types'; +import { IdentityTypes, PaymentTypes, RequestLogicTypes } from '@requestnetwork/types'; import Utils from '@requestnetwork/utils'; import { payRequest, @@ -11,6 +10,14 @@ import { import { CurrencyManager } from '@requestnetwork/currency'; import { Wallet, providers, BigNumber } from 'ethers'; +import { + erc20requestCreationHash, + httpConfig, + payeeIdentity, + payerIdentity, + requestNetwork, + signatureProvider, +} from './scheduled/fixtures'; const mnemonic = 'candy maple cake sugar pudding cream honey rich smooth crumble sweet treat'; const provider = new providers.JsonRpcProvider('http://localhost:8545'); @@ -19,15 +26,6 @@ const wallet = Wallet.fromMnemonic(mnemonic).connect(provider); // eslint-disable-next-line no-magic-numbers jest.setTimeout(10000); -const payeeIdentity: IdentityTypes.IIdentity = { - type: IdentityTypes.TYPE.ETHEREUM_ADDRESS, - value: '0x627306090abab3a6e1400e9345bc60c78a8bef57', -}; -const payerIdentity: IdentityTypes.IIdentity = { - type: IdentityTypes.TYPE.ETHEREUM_ADDRESS, - value: '0xf17f52151ebef6c7334fad080c5704d77216b732', -}; - const requestCreationHashBTC: Types.IRequestInfo = { currency: 'BTC', expectedAmount: '1000', @@ -68,24 +66,8 @@ const wrongDecryptionProvider = new EthereumPrivateKeyDecryptionProvider({ method: Types.Encryption.METHOD.ECIES, }); -const httpConfig: Partial = { - getConfirmationDeferDelay: 1000, - getConfirmationRetryDelay: 500, -}; - -const signatureProvider = new EthereumPrivateKeySignatureProvider({ - method: Types.Signature.METHOD.ECDSA, - privateKey: '0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3', -}); -signatureProvider.addSignatureParameters({ - method: Types.Signature.METHOD.ECDSA, - privateKey: '0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f', -}); - describe('Request client using a request node', () => { it('can create a request, change the amount and get data', async () => { - const requestNetwork = new RequestNetwork({ httpConfig, signatureProvider }); - // Create a request const request = await requestNetwork.createRequest({ requestInfo: requestCreationHashBTC, @@ -120,8 +102,6 @@ describe('Request client using a request node', () => { }); it('can create a request with declarative payment network and content data', async () => { - const requestNetwork = new RequestNetwork({ httpConfig, signatureProvider }); - const paymentNetwork: PaymentTypes.IPaymentNetworkCreateParameters = { id: PaymentTypes.PAYMENT_NETWORK_ID.DECLARATIVE, parameters: { @@ -184,8 +164,6 @@ describe('Request client using a request node', () => { }); it('can create requests and get them fromIdentity and with time boundaries', async () => { - const requestNetwork = new RequestNetwork({ httpConfig, signatureProvider }); - // create request 1 const requestCreationHash1: Types.IRequestInfo = { currency: 'BTC', @@ -261,8 +239,6 @@ describe('Request client using a request node', () => { }); it('can create requests and get them fromIdentity with smart contract identity', async () => { - const requestNetwork = new RequestNetwork({ httpConfig, signatureProvider }); - const payerSmartContract = { network: 'private', type: IdentityTypes.TYPE.ETHEREUM_SMART_CONTRACT, @@ -525,22 +501,7 @@ describe('ERC20 localhost request creation and detection test', () => { }, }; - const contractAddress = '0x9FBDa871d559710256a2502A2517b794B482Db40'; - - const erc20requestCreationHash: Types.IRequestInfo = { - currency: { - network: 'private', - type: Types.RequestLogic.CURRENCY.ERC20, - value: contractAddress, - }, - expectedAmount: '10', - payee: payeeIdentity, - payer: payerIdentity, - }; - it('can create an ERC20 request on localhost and detect the payment using address based detection', async () => { - const requestNetwork = new RequestNetwork({ httpConfig, signatureProvider }); - // Create a request const request = await requestNetwork.createRequest({ paymentNetwork, diff --git a/packages/integration-test/test/scheduled/erc20-fee-proxy.test.ts b/packages/integration-test/test/scheduled/erc20-fee-proxy.test.ts index 0819d01fdd..92fdc7e557 100644 --- a/packages/integration-test/test/scheduled/erc20-fee-proxy.test.ts +++ b/packages/integration-test/test/scheduled/erc20-fee-proxy.test.ts @@ -3,6 +3,15 @@ import { ExtensionTypes, IdentityTypes, RequestLogicTypes } from '@requestnetwor import { CurrencyManager } from '@requestnetwork/currency'; import { mockAdvancedLogic } from './mocks'; +import { Types, Utils } from '@requestnetwork/request-client.js'; +import { + erc20requestCreationHash, + localErc20PaymentNetworkParams, + payeeIdentity, + payerIdentity, + privateErc20Address, + requestNetwork, +} from './fixtures'; const createMockRequest = ({ network, @@ -103,4 +112,60 @@ describe('ERC20 Fee Proxy detection test-suite', () => { expect(balance.events[0].amount).toBe('1000000000000000000'); expect(balance.events[0].timestamp).toBe(1621953168); }, 15000); + + it('can getBalance for a payment declared by the payee', async () => { + // Create a request + const request = await requestNetwork.createRequest({ + paymentNetwork: localErc20PaymentNetworkParams, + requestInfo: erc20requestCreationHash, + signer: payeeIdentity, + }); + + // The payee declares the payment + let requestData = await request.declareReceivedPayment('1', 'OK', payeeIdentity, '0x1234'); + const declarationTimestamp = Utils.getCurrentTimestampInSecond(); + requestData = await new Promise((resolve): any => requestData.on('confirmed', resolve)); + + const balance = await erc20AddressedBased.getBalance({ + ...requestData, + currency: { + network: 'private', + type: RequestLogicTypes.CURRENCY.ERC20, + value: privateErc20Address, + }, + }); + + expect(balance.balance).toBe('1'); + expect(balance.events).toHaveLength(1); + expect(balance.events[0].name).toBe('payment'); + expect(balance.events[0].amount).toBe('1'); + expect(Math.abs(declarationTimestamp - (balance.events[0].timestamp ?? 0))).toBeLessThan(5); + }); + + it('getBalance = 0 if the payer declared the payment', async () => { + // Create a request + const request = await requestNetwork.createRequest({ + paymentNetwork: localErc20PaymentNetworkParams, + requestInfo: erc20requestCreationHash, + signer: payeeIdentity, + }); + + // The payer declares a payment + let requestData: Types.IRequestDataWithEvents = await request.declareSentPayment( + '1', + 'OK', + payerIdentity, + ); + requestData = await new Promise((resolve): any => requestData.on('confirmed', resolve)); + const balance = await erc20AddressedBased.getBalance({ + ...requestData, + currency: { + network: 'private', + type: RequestLogicTypes.CURRENCY.ERC20, + value: privateErc20Address, + }, + }); + expect(balance.balance).toBe('0'); + expect(balance.events).toHaveLength(0); + }); }); diff --git a/packages/integration-test/test/scheduled/erc20-proxy.test.ts b/packages/integration-test/test/scheduled/erc20-proxy.test.ts new file mode 100644 index 0000000000..1c35f7c22b --- /dev/null +++ b/packages/integration-test/test/scheduled/erc20-proxy.test.ts @@ -0,0 +1,79 @@ +import { Erc20PaymentNetwork } from '@requestnetwork/payment-detection'; +import { PaymentTypes, RequestLogicTypes } from '@requestnetwork/types'; + +import { mockAdvancedLogic } from './mocks'; +import { Types, Utils } from '@requestnetwork/request-client.js'; +import { + erc20requestCreationHash, + localErc20PaymentNetworkParams, + payeeIdentity, + payerIdentity, + privateErc20Address, + requestNetwork, +} from './fixtures'; + +const erc20ProxyAddressedBased = new Erc20PaymentNetwork.ProxyContract({ + advancedLogic: mockAdvancedLogic, +}); + +describe('ERC20 Proxy detection test-suite', () => { + it('can getBalance for a payment declared by the payee', async () => { + const request = await requestNetwork.createRequest({ + paymentNetwork: { + ...localErc20PaymentNetworkParams, + id: PaymentTypes.PAYMENT_NETWORK_ID.ERC20_PROXY_CONTRACT, + }, + requestInfo: erc20requestCreationHash, + signer: payeeIdentity, + }); + + let requestData = await request.declareReceivedPayment('1', 'OK', payeeIdentity); + const declarationTimestamp = Utils.getCurrentTimestampInSecond(); + requestData = await new Promise((resolve): unknown => requestData.on('confirmed', resolve)); + + const balance = await erc20ProxyAddressedBased.getBalance({ + ...requestData, + currency: { + network: 'private', + type: RequestLogicTypes.CURRENCY.ERC20, + value: privateErc20Address, + }, + }); + + expect(balance.balance).toBe('1'); + expect(balance.events).toHaveLength(1); + expect(balance.events[0].name).toBe('payment'); + expect(balance.events[0].amount).toBe('1'); + expect(Math.abs(declarationTimestamp - (balance.events[0].timestamp ?? 0))).toBeLessThan(5); + }); + + it('getBalance = 0 if the payer declared the payment', async () => { + // Create a request + const request = await requestNetwork.createRequest({ + paymentNetwork: { + ...localErc20PaymentNetworkParams, + id: PaymentTypes.PAYMENT_NETWORK_ID.ERC20_PROXY_CONTRACT, + }, + requestInfo: erc20requestCreationHash, + signer: payeeIdentity, + }); + + // The payer declares a payment + let requestData: Types.IRequestDataWithEvents = await request.declareSentPayment( + '1', + 'OK', + payerIdentity, + ); + requestData = await new Promise((resolve): unknown => requestData.on('confirmed', resolve)); + const balance = await erc20ProxyAddressedBased.getBalance({ + ...requestData, + currency: { + network: 'private', + type: RequestLogicTypes.CURRENCY.ERC20, + value: privateErc20Address, + }, + }); + expect(balance.balance).toBe('0'); + expect(balance.events).toHaveLength(0); + }); +}) diff --git a/packages/integration-test/test/scheduled/eth-input-data.test.ts b/packages/integration-test/test/scheduled/eth-input-data.test.ts new file mode 100644 index 0000000000..4b560a0a17 --- /dev/null +++ b/packages/integration-test/test/scheduled/eth-input-data.test.ts @@ -0,0 +1,73 @@ +import { EthPaymentNetwork } from '@requestnetwork/payment-detection'; +import { RequestLogicTypes } from '@requestnetwork/types'; + +import { mockAdvancedLogic } from './mocks'; +import { Types, Utils } from '@requestnetwork/request-client.js'; +import { + ethInputDataCreationHash, + localEthInputDataPaymentNetworkParams, + payeeIdentity, + payerIdentity, + privateErc20Address, + requestNetwork, +} from './fixtures'; + +const ethInputContract = new EthPaymentNetwork({ + advancedLogic: mockAdvancedLogic, +}); + +describe('ETH Fee proxy detection test-suite', () => { + it('can getBalance for a payment declared by the payee', async () => { + const request = await requestNetwork.createRequest({ + paymentNetwork: localEthInputDataPaymentNetworkParams, + requestInfo: ethInputDataCreationHash, + signer: payeeIdentity, + }); + + let requestData = await request.declareReceivedPayment('50000000000000000', 'OK', payeeIdentity); + const declarationTimestamp = Utils.getCurrentTimestampInSecond(); + requestData = await new Promise((resolve): unknown => requestData.on('confirmed', resolve)); + + const balance = await ethInputContract.getBalance({ + ...requestData, + currency: { + network: 'private', + type: RequestLogicTypes.CURRENCY.ETH, + value: privateErc20Address, + }, + }); + + expect(balance.balance).toBe('50000000000000000'); + expect(balance.events).toHaveLength(1); + expect(balance.events[0].name).toBe('payment'); + expect(balance.events[0].amount).toBe('1'); + expect(Math.abs(declarationTimestamp - (balance.events[0].timestamp ?? 0))).toBeLessThan(5); + }); + + it('getBalance = 0 if the payer declared the payment', async () => { + // Create a request + const request = await requestNetwork.createRequest({ + paymentNetwork: localEthInputDataPaymentNetworkParams, + requestInfo: ethInputDataCreationHash, + signer: payeeIdentity, + }); + + // The payer declares a payment + let requestData: Types.IRequestDataWithEvents = await request.declareSentPayment( + '50000000000000000', + 'OK', + payerIdentity, + ); + requestData = await new Promise((resolve): unknown => requestData.on('confirmed', resolve)); + const balance = await ethInputContract.getBalance({ + ...requestData, + currency: { + network: 'private', + type: RequestLogicTypes.CURRENCY.ETH, + value: privateErc20Address, + }, + }); + expect(balance.balance).toBe('0'); + expect(balance.events).toHaveLength(0); + }); +}); diff --git a/packages/integration-test/test/scheduled/fixtures.ts b/packages/integration-test/test/scheduled/fixtures.ts new file mode 100644 index 0000000000..613ab70916 --- /dev/null +++ b/packages/integration-test/test/scheduled/fixtures.ts @@ -0,0 +1,67 @@ +import { IdentityTypes, PaymentTypes } from '@requestnetwork/types'; +import { RequestNetwork, Types } from '@requestnetwork/request-client.js'; +import { EthereumPrivateKeySignatureProvider } from '@requestnetwork/epk-signature'; + +export const httpConfig = { + getConfirmationDeferDelay: 1000, + getConfirmationRetryDelay: 500, +}; +export const signatureProvider = new EthereumPrivateKeySignatureProvider({ + method: Types.Signature.METHOD.ECDSA, + privateKey: '0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3', +}); +signatureProvider.addSignatureParameters({ + method: Types.Signature.METHOD.ECDSA, + privateKey: '0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f', +}); + +export const privateErc20Address = '0x9FBDa871d559710256a2502A2517b794B482Db40'; +export const DAITokenAddress = '0x6B175474E89094C44Da98b954EedeAC495271d0F'; +export const FAUAddress = '0xFab46E002BbF0b4509813474841E0716E6730136'; + +export const requestNetwork = new RequestNetwork({ httpConfig, signatureProvider }); + +export const payeeIdentity: IdentityTypes.IIdentity = { + type: IdentityTypes.TYPE.ETHEREUM_ADDRESS, + value: '0x627306090abab3a6e1400e9345bc60c78a8bef57', +}; +export const payerIdentity: IdentityTypes.IIdentity = { + type: IdentityTypes.TYPE.ETHEREUM_ADDRESS, + value: '0xf17f52151ebef6c7334fad080c5704d77216b732', +}; + +export const erc20requestCreationHash: Types.IRequestInfo = { + currency: { + network: 'private', + type: Types.RequestLogic.CURRENCY.ERC20, + value: privateErc20Address, + }, + expectedAmount: '10', + payee: payeeIdentity, + payer: payerIdentity, +}; + +export const ethInputDataCreationHash: Types.IRequestInfo = { + currency: { + network: 'private', + type: Types.RequestLogic.CURRENCY.ETH, + value: privateErc20Address, // TODO: Change to ETH address + }, + expectedAmount: '100000000000000000', + payee: payeeIdentity, + payer: payerIdentity, +} + +export const localErc20PaymentNetworkParams: PaymentTypes.IPaymentNetworkCreateParameters = { + id: PaymentTypes.PAYMENT_NETWORK_ID.ERC20_FEE_PROXY_CONTRACT, + parameters: { + paymentAddress: '0xf17f52151EbEF6C7334FAD080c5704D77216b732', + }, +}; + +export const localEthInputDataPaymentNetworkParams: PaymentTypes.IPaymentNetworkCreateParameters = { + id: PaymentTypes.PAYMENT_NETWORK_ID.ETH_INPUT_DATA, + parameters: { + paymentAddress: '0xf17f52151EbEF6C7334FAD080c5704D77216b732', + } +} diff --git a/packages/multi-format/package.json b/packages/multi-format/package.json index 18cc48370d..1400da7c41 100644 --- a/packages/multi-format/package.json +++ b/packages/multi-format/package.json @@ -50,6 +50,6 @@ "source-map-support": "0.5.19", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" } } diff --git a/packages/payment-detection/package.json b/packages/payment-detection/package.json index 5a3a47f812..764d66f234 100644 --- a/packages/payment-detection/package.json +++ b/packages/payment-detection/package.json @@ -46,7 +46,7 @@ "@requestnetwork/utils": "0.35.0", "autobahn": "20.9.2", "axios": "0.21.1", - "ethers": "5.2.0", + "ethers": "5.5.1", "graphql": "15.5.1", "graphql-request": "3.4.0", "graphql-tag": "2.12.4", @@ -69,7 +69,7 @@ "source-map-support": "0.5.19", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" }, "resolutions": { "**/autobahn/ws": "<8" diff --git a/packages/payment-detection/src/any/any-to-erc20-proxy-contract.ts b/packages/payment-detection/src/any/any-to-erc20-proxy-contract.ts index c67c38da79..949d875517 100644 --- a/packages/payment-detection/src/any/any-to-erc20-proxy-contract.ts +++ b/packages/payment-detection/src/any/any-to-erc20-proxy-contract.ts @@ -39,8 +39,8 @@ export default class PaymentNetworkAnyToERC20 extends PaymentNetworkERC20FeeProx advancedLogic, currencyManager, }); - this._paymentNetworkId = ExtensionTypes.ID.PAYMENT_NETWORK_ANY_TO_ERC20_PROXY; - this._extension = advancedLogic.extensions.anyToErc20Proxy; + this._extensionTypeId = ExtensionTypes.ID.PAYMENT_NETWORK_ANY_TO_ERC20_PROXY; + this.extension = advancedLogic.extensions.anyToErc20Proxy; } /** @@ -57,7 +57,7 @@ export default class PaymentNetworkAnyToERC20 extends PaymentNetworkERC20FeeProx const salt = paymentNetworkCreationParameters.salt || (await Utils.crypto.generate8randomBytes()); - return this._extension.createCreationAction({ + return this.extension.createCreationAction({ feeAddress: paymentNetworkCreationParameters.feeAddress, feeAmount: paymentNetworkCreationParameters.feeAmount, paymentAddress: paymentNetworkCreationParameters.paymentAddress, diff --git a/packages/payment-detection/src/declarative.ts b/packages/payment-detection/src/declarative.ts index 788fcbde18..74111c467f 100644 --- a/packages/payment-detection/src/declarative.ts +++ b/packages/payment-detection/src/declarative.ts @@ -12,12 +12,14 @@ import { BigNumber } from 'ethers'; * @class PaymentNetworkDeclarative */ export default class PaymentNetworkDeclarative< - ExtensionType extends ExtensionTypes.PnAnyDeclarative.IAnyDeclarative = ExtensionTypes.PnAnyDeclarative.IAnyDeclarative + TExtension extends ExtensionTypes.PnAnyDeclarative.IAnyDeclarative = ExtensionTypes.PnAnyDeclarative.IAnyDeclarative > implements PaymentTypes.IPaymentNetwork { - protected extension: ExtensionType; + protected extension: TExtension; + protected _paymentNetworkId: PaymentTypes.PAYMENT_NETWORK_ID; public constructor({ advancedLogic }: { advancedLogic: AdvancedLogicTypes.IAdvancedLogic }) { this.extension = advancedLogic.extensions.declarative; + this._paymentNetworkId = PaymentTypes.PAYMENT_NETWORK_ID.DECLARATIVE; } /** @@ -159,7 +161,7 @@ export default class PaymentNetworkDeclarative< // For each extension data related to the declarative payment network, // we check if the data is a declared received payment or refund and we modify the balance // Received payment increase the balance and received refund decrease the balance - request.extensions[PaymentTypes.PAYMENT_NETWORK_ID.DECLARATIVE].events.forEach((data) => { + (request.extensions[this._paymentNetworkId].events ?? []).forEach((data) => { const parameters = data.parameters; if (data.name === ExtensionTypes.PnAnyDeclarative.ACTION.DECLARE_RECEIVED_PAYMENT) { // Declared received payments from payee is added to the balance diff --git a/packages/payment-detection/src/erc20/fee-proxy-contract.ts b/packages/payment-detection/src/erc20/fee-proxy-contract.ts index d958343bf2..46d354422e 100644 --- a/packages/payment-detection/src/erc20/fee-proxy-contract.ts +++ b/packages/payment-detection/src/erc20/fee-proxy-contract.ts @@ -41,10 +41,9 @@ export type DeploymentInformationGetter = ( export default class PaymentNetworkERC20FeeProxyContract< ExtensionType extends ExtensionTypes.PnFeeReferenceBased.IFeeReferenceBased = ExtensionTypes.PnFeeReferenceBased.IFeeReferenceBased > - extends DeclarativePaymentNetwork + extends DeclarativePaymentNetwork implements PaymentTypes.IPaymentNetwork { - protected _paymentNetworkId: ExtensionTypes.ID; - protected _extension: ExtensionType; + protected _extensionTypeId: ExtensionTypes.ID; protected _currencyManager: ICurrencyManager; /** @@ -58,8 +57,9 @@ export default class PaymentNetworkERC20FeeProxyContract< currencyManager: ICurrencyManager; }) { super({ advancedLogic }); - this._paymentNetworkId = ExtensionTypes.ID.PAYMENT_NETWORK_ERC20_FEE_PROXY_CONTRACT; - this._extension = advancedLogic.extensions.feeProxyContractErc20; + this._extensionTypeId = ExtensionTypes.ID.PAYMENT_NETWORK_ERC20_FEE_PROXY_CONTRACT; + this.extension = advancedLogic.extensions.feeProxyContractErc20; + this._paymentNetworkId = PaymentTypes.PAYMENT_NETWORK_ID.ERC20_FEE_PROXY_CONTRACT; this._currencyManager = currencyManager; } @@ -77,7 +77,7 @@ export default class PaymentNetworkERC20FeeProxyContract< const salt = paymentNetworkCreationParameters.salt || (await Utils.crypto.generate8randomBytes()); - return this._extension.createCreationAction({ + return this.extension.createCreationAction({ feeAddress: paymentNetworkCreationParameters.feeAddress, feeAmount: paymentNetworkCreationParameters.feeAmount, paymentAddress: paymentNetworkCreationParameters.paymentAddress, @@ -95,7 +95,7 @@ export default class PaymentNetworkERC20FeeProxyContract< public createExtensionsDataForAddPaymentAddress( parameters: ExtensionTypes.PnFeeReferenceBased.IAddPaymentAddressParameters, ): ExtensionTypes.IAction { - return this._extension.createAddPaymentAddressAction({ + return this.extension.createAddPaymentAddressAction({ paymentAddress: parameters.paymentAddress, }); } @@ -109,7 +109,7 @@ export default class PaymentNetworkERC20FeeProxyContract< public createExtensionsDataForAddRefundAddress( parameters: ExtensionTypes.PnFeeReferenceBased.IAddRefundAddressParameters, ): ExtensionTypes.IAction { - return this._extension.createAddRefundAddressAction({ + return this.extension.createAddRefundAddressAction({ refundAddress: parameters.refundAddress, }); } @@ -123,7 +123,7 @@ export default class PaymentNetworkERC20FeeProxyContract< public createExtensionsDataForAddFeeInformation( parameters: ExtensionTypes.PnFeeReferenceBased.IAddFeeParameters, ): ExtensionTypes.IAction { - return this._extension.createAddFeeAction({ + return this.extension.createAddFeeAction({ feeAddress: parameters.feeAddress, feeAmount: parameters.feeAmount, }); @@ -138,11 +138,11 @@ export default class PaymentNetworkERC20FeeProxyContract< public async getBalance( request: RequestLogicTypes.IRequest, ): Promise { - const paymentNetwork = request.extensions[this._paymentNetworkId]; + const paymentNetwork = request.extensions[this._extensionTypeId]; if (!paymentNetwork) { return getBalanceErrorObject( - `The request does not have the extension : ${this._paymentNetworkId}`, + `The request does not have the extension : ${this._extensionTypeId}`, PaymentTypes.BALANCE_ERROR_CODE.WRONG_EXTENSION, ); } @@ -248,6 +248,7 @@ export default class PaymentNetworkERC20FeeProxyContract< `Network not supported for this payment network: ${request.currency.network}`, ); } + const declaredEvents = (await super.getBalance(request)).events; const paymentReference = PaymentReferenceCalculator.calculate( request.requestId, @@ -273,7 +274,7 @@ export default class PaymentNetworkERC20FeeProxyContract< eventName, network, ); - const events = await infoRetriever.getTransferEvents(); + const events = [...declaredEvents, ...(await infoRetriever.getTransferEvents())]; const balance = events .reduce((acc, event) => acc.add(BigNumber.from(event.amount)), BigNumber.from(0)) @@ -333,7 +334,7 @@ export default class PaymentNetworkERC20FeeProxyContract< * Get the detected payment network ID */ get paymentNetworkId(): ExtensionTypes.ID { - return this._paymentNetworkId; + return this._extensionTypeId; } protected async getCurrency( diff --git a/packages/payment-detection/src/erc20/proxy-contract.ts b/packages/payment-detection/src/erc20/proxy-contract.ts index 7ba139a03f..30575f5c0a 100644 --- a/packages/payment-detection/src/erc20/proxy-contract.ts +++ b/packages/payment-detection/src/erc20/proxy-contract.ts @@ -26,15 +26,18 @@ class VersionNotSupported extends Error {} export default class PaymentNetworkERC20ProxyContract< ExtensionType extends ExtensionTypes.PnReferenceBased.IReferenceBased = ExtensionTypes.PnReferenceBased.IReferenceBased > - extends DeclarativePaymentNetwork + extends DeclarativePaymentNetwork implements PaymentTypes.IPaymentNetwork { - protected _extension: ExtensionType; + protected _extensionTypeId: ExtensionTypes.ID; + /** * @param extension The advanced logic payment network extensions */ public constructor({ advancedLogic }: { advancedLogic: AdvancedLogicTypes.IAdvancedLogic }) { super({ advancedLogic }); - this._extension = advancedLogic.extensions.proxyContractErc20; + this._extensionTypeId = ExtensionTypes.ID.PAYMENT_NETWORK_ERC20_PROXY_CONTRACT; + this.extension = advancedLogic.extensions.proxyContractErc20; + this._paymentNetworkId = PaymentTypes.PAYMENT_NETWORK_ID.ERC20_PROXY_CONTRACT; } /** @@ -51,7 +54,7 @@ export default class PaymentNetworkERC20ProxyContract< const salt = paymentNetworkCreationParameters.salt || (await Utils.crypto.generate8randomBytes()); - return this._extension.createCreationAction({ + return this.extension.createCreationAction({ paymentAddress: paymentNetworkCreationParameters.paymentAddress, refundAddress: paymentNetworkCreationParameters.refundAddress, salt, @@ -67,7 +70,7 @@ export default class PaymentNetworkERC20ProxyContract< public createExtensionsDataForAddPaymentAddress( parameters: ExtensionTypes.PnReferenceBased.IAddPaymentAddressParameters, ): ExtensionTypes.IAction { - return this._extension.createAddPaymentAddressAction({ + return this.extension.createAddPaymentAddressAction({ paymentAddress: parameters.paymentAddress, }); } @@ -81,7 +84,7 @@ export default class PaymentNetworkERC20ProxyContract< public createExtensionsDataForAddRefundAddress( parameters: ExtensionTypes.PnReferenceBased.IAddRefundAddressParameters, ): ExtensionTypes.IAction { - return this._extension.createAddRefundAddressAction({ + return this.extension.createAddRefundAddressAction({ refundAddress: parameters.refundAddress, }); } @@ -222,7 +225,9 @@ export default class PaymentNetworkERC20ProxyContract< eventName, network, ); - const events = await infoRetriever.getTransferEvents(); + + const declaredEvents = (await super.getBalance(request)).events; + const events = [...declaredEvents, ...(await infoRetriever.getTransferEvents())]; const balance = events .reduce((acc, event) => acc.add(BigNumber.from(event.amount)), BigNumber.from(0)) diff --git a/packages/payment-detection/src/fee-reference-based-detector.ts b/packages/payment-detection/src/fee-reference-based-detector.ts index 72fd8976d4..7e2486a3d7 100644 --- a/packages/payment-detection/src/fee-reference-based-detector.ts +++ b/packages/payment-detection/src/fee-reference-based-detector.ts @@ -18,7 +18,6 @@ export default abstract class FeeReferenceBasedDetector< * @param extension The advanced logic payment network extension, reference based * @param extensionType Example : ExtensionTypes.ID.PAYMENT_NETWORK_ETH_INPUT_DATA */ - protected _extension: ExtensionType; public constructor( protected advancedLogic: AdvancedLogicTypes.IAdvancedLogic, @@ -26,7 +25,6 @@ export default abstract class FeeReferenceBasedDetector< protected extensionType: ExtensionTypes.ID, ) { super(advancedLogic, extension, extensionType); - this._extension = extension; } /** @@ -43,7 +41,7 @@ export default abstract class FeeReferenceBasedDetector< paymentNetworkCreationParameters.salt = paymentNetworkCreationParameters.salt || (await Utils.crypto.generate8randomBytes()); - return this._extension.createCreationAction({ + return this.extension.createCreationAction({ feeAddress: paymentNetworkCreationParameters.feeAddress, feeAmount: paymentNetworkCreationParameters.feeAmount, paymentAddress: paymentNetworkCreationParameters.paymentAddress, @@ -61,7 +59,7 @@ export default abstract class FeeReferenceBasedDetector< public createExtensionsDataForAddFeeInformation( parameters: ExtensionTypes.PnFeeReferenceBased.IAddFeeParameters, ): ExtensionTypes.IAction { - return this._extension.createAddFeeAction({ + return this.extension.createAddFeeAction({ feeAddress: parameters.feeAddress, feeAmount: parameters.feeAmount, }); diff --git a/packages/payment-detection/src/reference-based-detector.ts b/packages/payment-detection/src/reference-based-detector.ts index 278e349b16..b2719f744c 100644 --- a/packages/payment-detection/src/reference-based-detector.ts +++ b/packages/payment-detection/src/reference-based-detector.ts @@ -3,6 +3,7 @@ import { ExtensionTypes, PaymentTypes, RequestLogicTypes, + TypesUtils, } from '@requestnetwork/types'; import Utils from '@requestnetwork/utils'; import getBalanceErrorObject from './balance-error'; @@ -10,6 +11,7 @@ import PaymentReferenceCalculator from './payment-reference-calculator'; import { BigNumber } from 'ethers'; import DeclarativePaymentNetwork from './declarative'; +import { IDeclarativePaymentEventParameters } from 'types/src/payment-types'; /** * Abstract class to extend to get the payment balance of reference based requests @@ -19,21 +21,25 @@ export default abstract class ReferenceBasedDetector< ExtensionType extends ExtensionTypes.PnReferenceBased.IReferenceBased = ExtensionTypes.PnReferenceBased.IReferenceBased > extends DeclarativePaymentNetwork - implements PaymentTypes.IPaymentNetwork { + implements + PaymentTypes.IPaymentNetwork { /** * @param extension The advanced logic payment network extension, reference based * @param extensionType Example : ExtensionTypes.ID.PAYMENT_NETWORK_ETH_INPUT_DATA */ - protected _extension: ExtensionType; - public constructor( protected advancedLogic: AdvancedLogicTypes.IAdvancedLogic, - extension: ExtensionType, + protected extension: ExtensionType, protected extensionType: ExtensionTypes.ID, ) { super({ advancedLogic }); - this._extension = extension; + if (!TypesUtils.isPaymentNetworkId(extensionType)) { + throw new Error( + `Cannot detect payment for extension type '${extensionType}', it is not a payment network ID.`, + ); + } + this._paymentNetworkId = extensionType; } /** @@ -50,7 +56,7 @@ export default abstract class ReferenceBasedDetector< paymentNetworkCreationParameters.salt = paymentNetworkCreationParameters.salt || (await Utils.crypto.generate8randomBytes()); - return this._extension.createCreationAction({ + return this.extension.createCreationAction({ paymentAddress: paymentNetworkCreationParameters.paymentAddress, refundAddress: paymentNetworkCreationParameters.refundAddress, ...paymentNetworkCreationParameters, @@ -66,7 +72,7 @@ export default abstract class ReferenceBasedDetector< public createExtensionsDataForAddPaymentAddress( parameters: ExtensionTypes.PnReferenceBased.IAddPaymentAddressParameters, ): ExtensionTypes.IAction { - return this._extension.createAddPaymentAddressAction({ + return this.extension.createAddPaymentAddressAction({ paymentAddress: parameters.paymentAddress, }); } @@ -80,7 +86,7 @@ export default abstract class ReferenceBasedDetector< public createExtensionsDataForAddRefundAddress( parameters: ExtensionTypes.PnReferenceBased.IAddRefundAddressParameters, ): ExtensionTypes.IAction { - return this._extension.createAddRefundAddressAction({ + return this.extension.createAddRefundAddressAction({ refundAddress: parameters.refundAddress, }); } @@ -93,11 +99,13 @@ export default abstract class ReferenceBasedDetector< */ public async getBalance( request: RequestLogicTypes.IRequest, - ): Promise> { + ): Promise< + PaymentTypes.IBalanceWithEvents + > { const paymentNetwork = request.extensions[this.extensionType]; const paymentChain = this.getPaymentChain(request.currency, paymentNetwork); - const supportedNetworks = this._extension.supportedNetworks; + const supportedNetworks = this.extension.supportedNetworks; if (!supportedNetworks.includes(paymentChain)) { return getBalanceErrorObject( `Payment network ${paymentChain} not supported by ${ @@ -130,17 +138,23 @@ export default abstract class ReferenceBasedDetector< paymentNetwork, ); - const balance: string = BigNumber.from(payments.balance || 0) - .sub(BigNumber.from(refunds.balance || 0)) + const declaredBalance = await super.getBalance(request); + + const balance: string = BigNumber.from(declaredBalance.balance) + .add(payments.balance || 0) + .sub(refunds.balance || 0) .toString(); - const events: PaymentTypes.IPaymentNetworkEvent[] = [ - ...payments.events, - ...refunds.events, - ].sort( + const events: PaymentTypes.IPaymentNetworkEvent< + TPaymentEventParameters | IDeclarativePaymentEventParameters + >[] = [...declaredBalance.events, ...payments.events, ...refunds.events].sort( ( - a: PaymentTypes.IPaymentNetworkEvent, - b: PaymentTypes.IPaymentNetworkEvent, + a: PaymentTypes.IPaymentNetworkEvent< + TPaymentEventParameters | IDeclarativePaymentEventParameters + >, + b: PaymentTypes.IPaymentNetworkEvent< + TPaymentEventParameters | IDeclarativePaymentEventParameters + >, ) => (a.timestamp || 0) - (b.timestamp || 0), ); @@ -153,6 +167,7 @@ export default abstract class ReferenceBasedDetector< } } + // FIXME: should return declarative events and balance protected async extractBalanceAndEvents( paymentAddress: string | undefined, eventName: PaymentTypes.EVENTS_NAMES, @@ -187,6 +202,7 @@ export default abstract class ReferenceBasedDetector< * @param paymentNetworkVersion the version of the payment network * @returns The balance */ + // FIXME: should return declarative events and balance protected async extractBalanceAndEventsFromPaymentRef( address: string, eventName: PaymentTypes.EVENTS_NAMES, @@ -227,6 +243,7 @@ export default abstract class ReferenceBasedDetector< * @param paymentNetwork the payment network * @returns The balance */ + // FIXME: should return declarative events protected abstract extractEvents( address: string, eventName: PaymentTypes.EVENTS_NAMES, diff --git a/packages/payment-detection/src/thegraph/index.ts b/packages/payment-detection/src/thegraph/index.ts index 2dab778eb3..ece2090505 100644 --- a/packages/payment-detection/src/thegraph/index.ts +++ b/packages/payment-detection/src/thegraph/index.ts @@ -10,17 +10,23 @@ const BASE_URL = `https://api.thegraph.com`; * A GraphQL client to query Request's subgraph. */ export type TheGraphClient = ReturnType; -export const getTheGraphClient = (network: string, baseUrl = BASE_URL): TheGraphClient => { - if (network === 'private') { - baseUrl = 'http://localhost:8000'; - } +export type TheGraphClientOptions = { + baseUrl?: string; + timeout?: number; +}; + +export const getTheGraphClient = ( + network: string, + options?: TheGraphClientOptions, +): TheGraphClient => { + const baseUrl = options?.baseUrl || network === 'private' ? 'http://localhost:8000' : BASE_URL; // Note: it is also possible to use the IPFS hash of the subgraph // eg. /subgraphs/id/QmcCaSkefrmhe4xQj6Y6BBbHiFkbrn6UGDEBUWER7nt399 // which is a better security but would require an update of the // library each time the subgraph is updated, which isn't ideal // for early testing. const url = `${baseUrl}/subgraphs/name/requestnetwork/request-payments-${network}`; - return getSdk(new GraphQLClient(url, {})); + return getSdk(new GraphQLClient(url, options)); }; // Note: temporary until TheGraph has been thoroughly tested diff --git a/packages/payment-detection/test/any/any-to-erc20-proxy-contract.test.ts b/packages/payment-detection/test/any/any-to-erc20-proxy-contract.test.ts index 1446811c15..f137a51598 100644 --- a/packages/payment-detection/test/any/any-to-erc20-proxy-contract.test.ts +++ b/packages/payment-detection/test/any/any-to-erc20-proxy-contract.test.ts @@ -13,33 +13,27 @@ import AnyToErc20Proxy from '../../src/any/any-to-erc20-proxy-contract'; let anyToErc20Proxy: AnyToErc20Proxy; const currencyManager = CurrencyManager.getDefault(); +const createAddPaymentAddressAction = jest.fn(); +const createAddRefundAddressAction = jest.fn(); +const createCreationAction = jest.fn(); +const createAddFeeAction = jest.fn(); +const createAddPaymentInstructionAction = jest.fn(); +const createAddRefundInstructionAction = jest.fn(); + const mockAdvancedLogic: AdvancedLogicTypes.IAdvancedLogic = { applyActionToExtensions(): any { return; }, extensions: { anyToErc20Proxy: { - createAddPaymentAddressAction(): any { - return; - }, - createAddRefundAddressAction(): any { - return; - }, - createCreationAction(): any { - return; - }, - createAddFeeAction(): any { - return; - }, + createAddPaymentAddressAction, + createAddRefundAddressAction, + createCreationAction, + createAddFeeAction, + // inherited from declarative + createAddPaymentInstructionAction, + createAddRefundInstructionAction, }, - declarative: { - createAddPaymentInstructionAction(): any { - return; - }, - createAddRefundInstructionAction(): any { - return; - }, - } }, }; @@ -49,9 +43,11 @@ describe('api/any/conversion-fee-proxy-contract', () => { anyToErc20Proxy = new AnyToErc20Proxy({ advancedLogic: mockAdvancedLogic, currencyManager }); }); - it('can createExtensionsDataForCreation', async () => { - const spy = jest.spyOn(mockAdvancedLogic.extensions.anyToErc20Proxy, 'createCreationAction'); + afterEach(() => { + jest.clearAllMocks(); + }); + it('can createExtensionsDataForCreation', async () => { await anyToErc20Proxy.createExtensionsDataForCreation({ paymentAddress: 'ethereum address', salt: 'ea3bc7caf64110ca', @@ -60,7 +56,7 @@ describe('api/any/conversion-fee-proxy-contract', () => { maxRateTimespan: 1000, }); - expect(spy).toHaveBeenCalledWith({ + expect(createCreationAction).toHaveBeenCalledWith({ feeAddress: undefined, feeAmount: undefined, paymentAddress: 'ethereum address', @@ -73,8 +69,6 @@ describe('api/any/conversion-fee-proxy-contract', () => { }); it('can createExtensionsDataForCreation with fee amount and address', async () => { - const spy = jest.spyOn(mockAdvancedLogic.extensions.anyToErc20Proxy, 'createCreationAction'); - await anyToErc20Proxy.createExtensionsDataForCreation({ feeAddress: 'fee address', feeAmount: '2000', @@ -84,7 +78,7 @@ describe('api/any/conversion-fee-proxy-contract', () => { network: 'rinkeby', }); - expect(spy).toHaveBeenCalledWith({ + expect(createCreationAction).toHaveBeenCalledWith({ feeAddress: 'fee address', feeAmount: '2000', paymentAddress: 'ethereum address', @@ -96,85 +90,61 @@ describe('api/any/conversion-fee-proxy-contract', () => { }); it('can createExtensionsDataForCreation without salt', async () => { - const spy = jest.spyOn(mockAdvancedLogic.extensions.anyToErc20Proxy, 'createCreationAction'); - await anyToErc20Proxy.createExtensionsDataForCreation({ paymentAddress: 'ethereum address', }); // Can't check parameters since salt is generated in createExtensionsDataForCreation - expect(spy).toHaveBeenCalled(); + expect(createCreationAction).toHaveBeenCalled(); }); it('can createExtensionsDataForAddPaymentAddress', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.anyToErc20Proxy, - 'createAddPaymentAddressAction', - ); - anyToErc20Proxy.createExtensionsDataForAddPaymentAddress({ paymentAddress: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddPaymentAddressAction).toHaveBeenCalledWith({ paymentAddress: 'ethereum address', }); }); it('can createExtensionsDataForAddPaymentInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.declarative, - 'createAddPaymentInstructionAction', - ); - anyToErc20Proxy.createExtensionsDataForAddPaymentInformation({ paymentInfo: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddPaymentInstructionAction).toHaveBeenCalledWith({ paymentInfo: 'ethereum address', }); }); it('can createExtensionsDataForAddRefundAddress', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.anyToErc20Proxy, - 'createAddRefundAddressAction', - ); - anyToErc20Proxy.createExtensionsDataForAddRefundAddress({ refundAddress: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddRefundAddressAction).toHaveBeenCalledWith({ refundAddress: 'ethereum address', }); }); it('can createExtensionsDataForAddRefundInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.declarative, - 'createAddRefundInstructionAction', - ); - anyToErc20Proxy.createExtensionsDataForAddRefundInformation({ refundInfo: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddRefundInstructionAction).toHaveBeenCalledWith({ refundInfo: 'ethereum address', }); }); it('can createExtensionsDataForAddFeeInformation', async () => { - const spy = jest.spyOn(mockAdvancedLogic.extensions.anyToErc20Proxy, 'createAddFeeAction'); - anyToErc20Proxy.createExtensionsDataForAddFeeInformation({ feeAddress: 'ethereum address', feeAmount: '2000', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddFeeAction).toHaveBeenCalledWith({ feeAddress: 'ethereum address', feeAmount: '2000', }); diff --git a/packages/payment-detection/test/erc20/fee-proxy-contract.test.ts b/packages/payment-detection/test/erc20/fee-proxy-contract.test.ts index 117d82061a..786c66cdf7 100644 --- a/packages/payment-detection/test/erc20/fee-proxy-contract.test.ts +++ b/packages/payment-detection/test/erc20/fee-proxy-contract.test.ts @@ -10,33 +10,27 @@ import ERC20FeeProxyContract from '../../src/erc20/fee-proxy-contract'; let erc20FeeProxyContract: ERC20FeeProxyContract; +const createAddPaymentAddressAction = jest.fn(); +const createAddRefundAddressAction = jest.fn(); +const createCreationAction = jest.fn(); +const createAddFeeAction = jest.fn(); +const createAddPaymentInstructionAction = jest.fn(); +const createAddRefundInstructionAction = jest.fn(); + const mockAdvancedLogic: AdvancedLogicTypes.IAdvancedLogic = { applyActionToExtensions(): any { return; }, extensions: { feeProxyContractErc20: { - createAddPaymentAddressAction(): any { - return; - }, - createAddRefundAddressAction(): any { - return; - }, - createCreationAction(): any { - return; - }, - createAddFeeAction(): any { - return; - }, + createAddPaymentAddressAction, + createAddRefundAddressAction, + createCreationAction, + createAddFeeAction, + // inherited from declarative + createAddPaymentInstructionAction, + createAddRefundInstructionAction, }, - declarative: { - createAddPaymentInstructionAction(): any { - return; - }, - createAddRefundInstructionAction(): any { - return; - }, - } }, }; @@ -51,18 +45,17 @@ describe('api/erc20/fee-proxy-contract', () => { }); }); - it('can createExtensionsDataForCreation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractErc20, - 'createCreationAction', - ); + afterEach(() => { + jest.clearAllMocks(); + }); + it('can createExtensionsDataForCreation', async () => { await erc20FeeProxyContract.createExtensionsDataForCreation({ paymentAddress: 'ethereum address', salt: 'ea3bc7caf64110ca', }); - expect(spy).toHaveBeenCalledWith({ + expect(createCreationAction).toHaveBeenCalledWith({ feeAddress: undefined, feeAmount: undefined, paymentAddress: 'ethereum address', @@ -72,11 +65,6 @@ describe('api/erc20/fee-proxy-contract', () => { }); it('can createExtensionsDataForCreation with fee amount and address', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractErc20, - 'createCreationAction', - ); - await erc20FeeProxyContract.createExtensionsDataForCreation({ feeAddress: 'fee address', feeAmount: '2000', @@ -84,7 +72,7 @@ describe('api/erc20/fee-proxy-contract', () => { salt: 'ea3bc7caf64110ca', }); - expect(spy).toHaveBeenCalledWith({ + expect(createCreationAction).toHaveBeenCalledWith({ feeAddress: 'fee address', feeAmount: '2000', paymentAddress: 'ethereum address', @@ -94,91 +82,61 @@ describe('api/erc20/fee-proxy-contract', () => { }); it('can createExtensionsDataForCreation without salt', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractErc20, - 'createCreationAction', - ); - await erc20FeeProxyContract.createExtensionsDataForCreation({ paymentAddress: 'ethereum address', }); // Can't check parameters since salt is generated in createExtensionsDataForCreation - expect(spy).toHaveBeenCalled(); + expect(createCreationAction).toHaveBeenCalled(); }); it('can createExtensionsDataForAddPaymentInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.declarative, - 'createAddPaymentInstructionAction', - ); - erc20FeeProxyContract.createExtensionsDataForAddPaymentInformation({ paymentInfo: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddPaymentInstructionAction).toHaveBeenCalledWith({ paymentInfo: 'ethereum address', }); }); it('can createExtensionsDataForAddPaymentAddress', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractErc20, - 'createAddPaymentAddressAction', - ); - erc20FeeProxyContract.createExtensionsDataForAddPaymentAddress({ paymentAddress: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddPaymentAddressAction).toHaveBeenCalledWith({ paymentAddress: 'ethereum address', }); }); it('can createExtensionsDataForAddRefundAddress', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractErc20, - 'createAddRefundAddressAction', - ); - erc20FeeProxyContract.createExtensionsDataForAddRefundAddress({ refundAddress: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddRefundAddressAction).toHaveBeenCalledWith({ refundAddress: 'ethereum address', }); }); it('can createExtensionsDataForAddRefundInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.declarative, - 'createAddRefundInstructionAction', - ); - erc20FeeProxyContract.createExtensionsDataForAddRefundInformation({ refundInfo: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddRefundInstructionAction).toHaveBeenCalledWith({ refundInfo: 'ethereum address', }); }); it('can createExtensionsDataForAddFeeInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractErc20, - 'createAddFeeAction', - ); - erc20FeeProxyContract.createExtensionsDataForAddFeeInformation({ feeAddress: 'ethereum address', feeAmount: '2000', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddFeeAction).toHaveBeenCalledWith({ feeAddress: 'ethereum address', feeAmount: '2000', }); diff --git a/packages/payment-detection/test/erc20/proxy-contract.test.ts b/packages/payment-detection/test/erc20/proxy-contract.test.ts index 6f50a2073f..26ac9ca9e0 100644 --- a/packages/payment-detection/test/erc20/proxy-contract.test.ts +++ b/packages/payment-detection/test/erc20/proxy-contract.test.ts @@ -8,30 +8,25 @@ import ERC20ProxyContract from '../../src/erc20/proxy-contract'; let erc20ProxyContract: ERC20ProxyContract; +const createAddPaymentAddressAction = jest.fn(); +const createAddRefundAddressAction = jest.fn(); +const createCreationAction = jest.fn(); +const createAddPaymentInstructionAction = jest.fn(); +const createAddRefundInstructionAction = jest.fn(); + const mockAdvancedLogic: AdvancedLogicTypes.IAdvancedLogic = { applyActionToExtensions(): any { return; }, extensions: { proxyContractErc20: { - createAddPaymentAddressAction(): any { - return; - }, - createAddRefundAddressAction(): any { - return; - }, - createCreationAction(): any { - return; - }, + createAddPaymentAddressAction, + createAddRefundAddressAction, + createCreationAction, + // inheritance from declarative + createAddPaymentInstructionAction, + createAddRefundInstructionAction, }, - declarative: { - createAddPaymentInstructionAction(): any { - return; - }, - createAddRefundInstructionAction(): any { - return; - } - } }, }; @@ -42,14 +37,12 @@ describe('api/erc20/proxy-contract', () => { }); it('can createExtensionsDataForCreation', async () => { - const spy = jest.spyOn(mockAdvancedLogic.extensions.proxyContractErc20, 'createCreationAction'); - await erc20ProxyContract.createExtensionsDataForCreation({ paymentAddress: 'ethereum address', salt: 'ea3bc7caf64110ca', }); - expect(spy).toHaveBeenCalledWith({ + expect(createCreationAction).toHaveBeenCalledWith({ paymentAddress: 'ethereum address', refundAddress: undefined, salt: 'ea3bc7caf64110ca', @@ -57,72 +50,50 @@ describe('api/erc20/proxy-contract', () => { }); it('can createExtensionsDataForCreation without salt', async () => { - const spy = jest.spyOn(mockAdvancedLogic.extensions.proxyContractErc20, 'createCreationAction'); - await erc20ProxyContract.createExtensionsDataForCreation({ paymentAddress: 'ethereum address', }); // Can't check parameters since salt is generated in createExtensionsDataForCreation - expect(spy).toHaveBeenCalled(); + expect(createCreationAction).toHaveBeenCalled(); }); it('can createExtensionsDataForAddPaymentAddress', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.proxyContractErc20, - 'createAddPaymentAddressAction', - ); - erc20ProxyContract.createExtensionsDataForAddPaymentAddress({ paymentAddress: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddPaymentAddressAction).toHaveBeenCalledWith({ paymentAddress: 'ethereum address', }); }); it('can createExtensionsDataForAddPaymentInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.declarative, - 'createAddPaymentInstructionAction', - ); - erc20ProxyContract.createExtensionsDataForAddPaymentInformation({ paymentInfo: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddPaymentInstructionAction).toHaveBeenCalledWith({ paymentInfo: 'ethereum address', }); }); it('can createExtensionsDataForAddRefundAddress', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.proxyContractErc20, - 'createAddRefundAddressAction', - ); - erc20ProxyContract.createExtensionsDataForAddRefundAddress({ refundAddress: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddRefundAddressAction).toHaveBeenCalledWith({ refundAddress: 'ethereum address', }); }); it('can createExtensionsDataForAddRefundInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.declarative, - 'createAddRefundInstructionAction', - ); - erc20ProxyContract.createExtensionsDataForAddRefundInformation({ refundInfo: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddRefundInstructionAction).toHaveBeenCalledWith({ refundInfo: 'ethereum address', }); }); diff --git a/packages/payment-detection/test/eth/fee-proxy-detector.test.ts b/packages/payment-detection/test/eth/fee-proxy-detector.test.ts index 0b0da4e8b0..5ad5610e77 100644 --- a/packages/payment-detection/test/eth/fee-proxy-detector.test.ts +++ b/packages/payment-detection/test/eth/fee-proxy-detector.test.ts @@ -1,40 +1,30 @@ -import { - AdvancedLogicTypes, - PaymentTypes, - RequestLogicTypes, -} from '@requestnetwork/types'; +import { AdvancedLogicTypes, PaymentTypes, RequestLogicTypes } from '@requestnetwork/types'; import ETHFeeProxyDetector from '../../src/eth/fee-proxy-detector'; let ethFeeProxyDetector: ETHFeeProxyDetector; +const createAddPaymentAddressAction = jest.fn(); +const createAddRefundAddressAction = jest.fn(); +const createCreationAction = jest.fn(); +const createAddFeeAction = jest.fn(); +const createAddPaymentInstructionAction = jest.fn(); +const createAddRefundInstructionAction = jest.fn(); + const mockAdvancedLogic: AdvancedLogicTypes.IAdvancedLogic = { applyActionToExtensions(): any { return; }, extensions: { feeProxyContractEth: { - createAddPaymentAddressAction(): any { - return; - }, - createAddRefundAddressAction(): any { - return; - }, - createCreationAction(): any { - return; - }, - createAddFeeAction(): any { - return; - }, - supportedNetworks: ['private'] + createAddPaymentAddressAction, + createAddRefundAddressAction, + createCreationAction, + createAddFeeAction, + supportedNetworks: ['private'], + // inherited from declarative + createAddPaymentInstructionAction, + createAddRefundInstructionAction, }, - declarative: { - createAddPaymentInstructionAction(): any { - return; - }, - createAddRefundInstructionAction(): any { - return; - }, - } }, }; @@ -47,17 +37,12 @@ describe('api/eth/fee-proxy-contract', () => { }); it('can createExtensionsDataForCreation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractEth, - 'createCreationAction', - ); - await ethFeeProxyDetector.createExtensionsDataForCreation({ paymentAddress: 'ethereum address', salt: 'ea3bc7caf64110ca', }); - expect(spy).toHaveBeenCalledWith({ + expect(createCreationAction).toHaveBeenCalledWith({ feeAddress: undefined, feeAmount: undefined, paymentAddress: 'ethereum address', @@ -67,11 +52,6 @@ describe('api/eth/fee-proxy-contract', () => { }); it('can createExtensionsDataForCreation with fee amount and address', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractEth, - 'createCreationAction', - ); - await ethFeeProxyDetector.createExtensionsDataForCreation({ feeAddress: 'fee address', feeAmount: '2000', @@ -79,7 +59,7 @@ describe('api/eth/fee-proxy-contract', () => { salt: 'ea3bc7caf64110ca', }); - expect(spy).toHaveBeenCalledWith({ + expect(createCreationAction).toHaveBeenCalledWith({ feeAddress: 'fee address', feeAmount: '2000', paymentAddress: 'ethereum address', @@ -89,92 +69,62 @@ describe('api/eth/fee-proxy-contract', () => { }); it('can createExtensionsDataForCreation without salt', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractEth, - 'createCreationAction', - ); - await ethFeeProxyDetector.createExtensionsDataForCreation({ paymentAddress: 'ethereum address', salt: 'ea3bc7caf64110ca', }); // Can't check parameters since salt is generated in createExtensionsDataForCreation - expect(spy).toHaveBeenCalled(); + expect(createCreationAction).toHaveBeenCalled(); }); it('can createExtensionsDataForAddPaymentAddress', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractEth, - 'createAddPaymentAddressAction', - ); - ethFeeProxyDetector.createExtensionsDataForAddPaymentAddress({ paymentAddress: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddPaymentAddressAction).toHaveBeenCalledWith({ paymentAddress: 'ethereum address', }); }); it('can createExtensionsDataForAddRefundAddress', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractEth, - 'createAddRefundAddressAction', - ); - ethFeeProxyDetector.createExtensionsDataForAddRefundAddress({ refundAddress: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddRefundAddressAction).toHaveBeenCalledWith({ refundAddress: 'ethereum address', }); }); it('can createExtensionsDataForAddPaymentInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.declarative, - 'createAddPaymentInstructionAction', - ); - ethFeeProxyDetector.createExtensionsDataForAddPaymentInformation({ paymentInfo: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddPaymentInstructionAction).toHaveBeenCalledWith({ paymentInfo: 'ethereum address', }); }); it('can createExtensionsDataForAddRefundInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.declarative, - 'createAddRefundInstructionAction', - ); - ethFeeProxyDetector.createExtensionsDataForAddRefundInformation({ refundInfo: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddRefundInstructionAction).toHaveBeenCalledWith({ refundInfo: 'ethereum address', }); }); it('can createExtensionsDataForAddFeeInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.feeProxyContractEth, - 'createAddFeeAction', - ); - ethFeeProxyDetector.createExtensionsDataForAddFeeInformation({ feeAddress: 'ethereum address', feeAmount: '2000', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddFeeAction).toHaveBeenCalledWith({ feeAddress: 'ethereum address', feeAmount: '2000', }); @@ -182,7 +132,10 @@ describe('api/eth/fee-proxy-contract', () => { it('should not throw when getBalance fail', async () => { expect( - await ethFeeProxyDetector.getBalance({ currency: {network: 'private'}, extensions: {} } as RequestLogicTypes.IRequest), + await ethFeeProxyDetector.getBalance({ + currency: { network: 'private' }, + extensions: {}, + } as RequestLogicTypes.IRequest), ).toEqual({ balance: null, error: { diff --git a/packages/payment-detection/test/eth/input-data.test.ts b/packages/payment-detection/test/eth/input-data.test.ts index 8b240c0e17..d1bd4d3432 100644 --- a/packages/payment-detection/test/eth/input-data.test.ts +++ b/packages/payment-detection/test/eth/input-data.test.ts @@ -8,31 +8,26 @@ import EthInputData from '../../src/eth/input-data'; let ethInputData: EthInputData; +const createAddPaymentAddressAction = jest.fn(); +const createAddRefundAddressAction = jest.fn(); +const createCreationAction = jest.fn(); +const createAddPaymentInstructionAction = jest.fn(); +const createAddRefundInstructionAction = jest.fn(); + const mockAdvancedLogic: AdvancedLogicTypes.IAdvancedLogic = { applyActionToExtensions(): any { return; }, extensions: { ethereumInputData: { - createAddPaymentAddressAction(): any { - return; - }, - createAddRefundAddressAction(): any { - return; - }, - createCreationAction(): any { - return; - }, + createAddPaymentAddressAction, + createAddRefundAddressAction, + createCreationAction, supportedNetworks: ['mainnet'], + // inherited from declarative + createAddPaymentInstructionAction, + createAddRefundInstructionAction, }, - declarative: { - createAddPaymentInstructionAction(): any { - return; - }, - createAddRefundInstructionAction(): any { - return; - }, - } }, }; @@ -44,72 +39,50 @@ describe('api/eth/input-data', () => { }); it('can createExtensionsDataForCreation', async () => { - const spy = jest.spyOn(mockAdvancedLogic.extensions.ethereumInputData, 'createCreationAction'); - await ethInputData.createExtensionsDataForCreation({ paymentAddress: 'ethereum address', salt: 'ea3bc7caf64110ca', }); - expect(spy).toHaveBeenCalledTimes(1); + expect(createCreationAction).toHaveBeenCalledTimes(1); }); it('can createExtensionsDataForAddPaymentAddress', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.ethereumInputData, - 'createAddPaymentAddressAction', - ); - ethInputData.createExtensionsDataForAddPaymentAddress({ paymentAddress: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddPaymentAddressAction).toHaveBeenCalledWith({ paymentAddress: 'ethereum address', }); }); it('can createExtensionsDataForAddRefundAddress', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.ethereumInputData, - 'createAddRefundAddressAction', - ); - ethInputData.createExtensionsDataForAddRefundAddress({ refundAddress: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddRefundAddressAction).toHaveBeenCalledWith({ refundAddress: 'ethereum address', }); }); it('can createExtensionsDataForAddPaymentInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.declarative, - 'createAddPaymentInstructionAction', - ); - ethInputData.createExtensionsDataForAddPaymentInformation({ paymentInfo: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddPaymentInstructionAction).toHaveBeenCalledWith({ paymentInfo: 'ethereum address', }); }); it('can createExtensionsDataForAddRefundInformation', async () => { - const spy = jest.spyOn( - mockAdvancedLogic.extensions.declarative, - 'createAddRefundInstructionAction', - ); - ethInputData.createExtensionsDataForAddRefundInformation({ refundInfo: 'ethereum address', }); - expect(spy).toHaveBeenCalledWith({ + expect(createAddRefundInstructionAction).toHaveBeenCalledWith({ refundInfo: 'ethereum address', }); }); @@ -182,9 +155,7 @@ describe('api/eth/input-data', () => { version: '0.2', }; - expect( - await ethInputData.getBalance(mockRequest as RequestLogicTypes.IRequest), - ).toMatchObject({ + expect(await ethInputData.getBalance(mockRequest as RequestLogicTypes.IRequest)).toMatchObject({ balance: null, error: { code: PaymentTypes.BALANCE_ERROR_CODE.NETWORK_NOT_SUPPORTED, diff --git a/packages/payment-processor/package.json b/packages/payment-processor/package.json index d916eddf43..0e6f826337 100644 --- a/packages/payment-processor/package.json +++ b/packages/payment-processor/package.json @@ -43,7 +43,7 @@ "@requestnetwork/smart-contracts": "0.28.0", "@requestnetwork/types": "0.35.0", "@requestnetwork/utils": "0.35.0", - "ethers": "5.2.0", + "ethers": "5.5.1", "near-api-js": "0.42.0" }, "devDependencies": { @@ -54,6 +54,6 @@ "shx": "0.3.2", "source-map-support": "0.5.19", "ts-jest": "26.3.0", - "typescript": "4.1.3" + "typescript": "4.4.4" } } diff --git a/packages/prototype-estimator/package.json b/packages/prototype-estimator/package.json index 0740d26aba..48db3b2c49 100644 --- a/packages/prototype-estimator/package.json +++ b/packages/prototype-estimator/package.json @@ -45,6 +45,6 @@ "@types/node": "14.14.16", "prettier": "2.2.1", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" } } diff --git a/packages/request-client.js/package.json b/packages/request-client.js/package.json index c0cd41a87d..9b5be4955d 100644 --- a/packages/request-client.js/package.json +++ b/packages/request-client.js/package.json @@ -55,7 +55,7 @@ "@requestnetwork/types": "0.35.0", "@requestnetwork/utils": "0.35.0", "axios": "0.21.1", - "ethers": "5.2.0" + "ethers": "5.5.1" }, "devDependencies": { "@compodoc/compodoc": "1.1.11", @@ -74,7 +74,7 @@ "terser-webpack-plugin": "4.2.3", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3", + "typescript": "4.4.4", "webpack": "4.44.2", "webpack-bundle-analyzer": "4.2.0", "webpack-cli": "3.3.12" diff --git a/packages/request-client.js/src/http-data-access.ts b/packages/request-client.js/src/http-data-access.ts index 18568850da..30bf9f1105 100644 --- a/packages/request-client.js/src/http-data-access.ts +++ b/packages/request-client.js/src/http-data-access.ts @@ -99,8 +99,8 @@ export default class HttpDataAccess implements DataAccessTypes.IDataAccess { ); // Try to get the confirmation - setTimeout(async () => { - try { + new Promise((r) => setTimeout(r, this.httpConfig.getConfirmationDeferDelay)) + .then(async () => { const confirmedData = await this.fetchAndRetry( '/getConfirmedTransaction', { @@ -113,16 +113,16 @@ export default class HttpDataAccess implements DataAccessTypes.IDataAccess { ); // when found, emit the event 'confirmed' result.emit('confirmed', confirmedData); - } catch (e) { + }) + .catch((e) => { + let error: Error = e; if (e.response.status === 404) { - throw new Error( + error = new Error( `Transaction confirmation not receive after ${this.httpConfig.getConfirmationMaxRetry} retries`, ); - } else { - throw new Error(e.message); } - } - }, this.httpConfig.getConfirmationDeferDelay); + result.emit('error', error); + }); return result; } diff --git a/packages/request-client.js/test/http-data-access.test.ts b/packages/request-client.js/test/http-data-access.test.ts new file mode 100644 index 0000000000..b76c8ea416 --- /dev/null +++ b/packages/request-client.js/test/http-data-access.test.ts @@ -0,0 +1,37 @@ +import HttpDataAccess from '../src/http-data-access'; +import AxiosMockAdapter from 'axios-mock-adapter'; +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; + +let mockAxios: MockAdapter; + +beforeAll(() => { + mockAxios = new AxiosMockAdapter(axios); + mockAxios.onPost('/persistTransaction').reply(200, { result: {} }); + mockAxios.onGet('/getConfirmedTransaction').reply(200, { result: {} }); +}); + +afterAll(() => { + mockAxios.restore(); + jest.restoreAllMocks(); +}); + +describe('HttpDataAccess', () => { + describe('persistTransaction()', () => { + it('should emmit error', (done) => { + mockAxios.onGet('/getConfirmedTransaction').reply(404, { result: {} }); + const httpDataAccess = new HttpDataAccess({ + httpConfig: { + getConfirmationDeferDelay: 0, + getConfirmationMaxRetry: 0, + }, + }); + void httpDataAccess.persistTransaction({}, '', []).then((returnPersistTransaction) => { + returnPersistTransaction.on('error', (e) => { + expect(e.message).toBe('Transaction confirmation not receive after 0 retries'); + done(); + }); + }); + }); + }); +}); diff --git a/packages/request-logic/package.json b/packages/request-logic/package.json index 7e8d07a36b..dffb724f01 100644 --- a/packages/request-logic/package.json +++ b/packages/request-logic/package.json @@ -55,7 +55,7 @@ "source-map-support": "0.5.19", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" }, "gitHead": "6155223cfce769e48ccae480c510b35b4f54b4d0" } diff --git a/packages/request-node/package.json b/packages/request-node/package.json index 9a0d83c251..1dfcf85fcc 100644 --- a/packages/request-node/package.json +++ b/packages/request-node/package.json @@ -72,7 +72,7 @@ "ts-jest": "26.3.0", "ts-node": "9.0.0", "ts-node-dev": "1.0.0-pre.62", - "typescript": "4.1.3" + "typescript": "4.4.4" }, "gitHead": "6155223cfce769e48ccae480c510b35b4f54b4d0" } diff --git a/packages/smart-contracts/package.json b/packages/smart-contracts/package.json index 874557bb47..97a513562c 100644 --- a/packages/smart-contracts/package.json +++ b/packages/smart-contracts/package.json @@ -63,7 +63,7 @@ "chai": "4.3.4", "dotenv": "10.0.0", "ethereum-waffle": "3.4.0", - "ethers": "5.2.0", + "ethers": "5.5.1", "ganache-cli": "6.12.0", "hardhat": "2.4.1", "shx": "0.3.2", diff --git a/packages/toolbox/package.json b/packages/toolbox/package.json index ae62eada5a..26a468cca0 100644 --- a/packages/toolbox/package.json +++ b/packages/toolbox/package.json @@ -46,7 +46,7 @@ "@requestnetwork/smart-contracts": "0.28.0", "@requestnetwork/types": "0.35.0", "axios": "0.21.1", - "ethers": "5.2.0", + "ethers": "5.5.1", "yargs": "16.2.0" }, "devDependencies": { @@ -56,6 +56,6 @@ "prettier": "2.2.1", "shx": "0.3.2", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" } } diff --git a/packages/transaction-manager/package.json b/packages/transaction-manager/package.json index 1ec8883020..c83b89c633 100644 --- a/packages/transaction-manager/package.json +++ b/packages/transaction-manager/package.json @@ -51,7 +51,7 @@ "source-map-support": "0.5.19", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" }, "gitHead": "6155223cfce769e48ccae480c510b35b4f54b4d0" } diff --git a/packages/types/package.json b/packages/types/package.json index 9e4fbbcb4a..ab7950c417 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -37,14 +37,14 @@ "prepare": "yarn run build" }, "dependencies": { - "ethers": "5.2.0", + "ethers": "5.5.1", "events": "3.2.0" }, "devDependencies": { "@types/events": "3.0.0", "shx": "0.3.2", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" }, "gitHead": "6155223cfce769e48ccae480c510b35b4f54b4d0" } diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 33bd93a24e..eeb0627617 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -13,6 +13,7 @@ import * as SignatureProviderTypes from './signature-provider-types'; import * as SignatureTypes from './signature-types'; import * as StorageTypes from './storage-types'; import * as TransactionTypes from './transaction-types'; +import * as TypesUtils from './utils'; export { AdvancedLogicTypes, @@ -30,4 +31,5 @@ export { SignatureTypes, StorageTypes, TransactionTypes, + TypesUtils, }; diff --git a/packages/types/src/utils.ts b/packages/types/src/utils.ts new file mode 100644 index 0000000000..745e645396 --- /dev/null +++ b/packages/types/src/utils.ts @@ -0,0 +1,15 @@ +import { PaymentTypes } from '.'; + +/** + * Types a value like ExtensionType into a paymentNetworkID enum element if possible + * @param value Example: ExtensionTypes.ID.PAYMENT_NETWORK_ERC20_PROXY_CONTRACT + */ +export function isPaymentNetworkId(value: any): value is PaymentTypes.PAYMENT_NETWORK_ID { + for (const pn in PaymentTypes.PAYMENT_NETWORK_ID) { + if (PaymentTypes.PAYMENT_NETWORK_ID[pn] === value) { + return true; + } + } + + return false; +} diff --git a/packages/usage-examples/package.json b/packages/usage-examples/package.json index d4b0787c60..484d333942 100644 --- a/packages/usage-examples/package.json +++ b/packages/usage-examples/package.json @@ -37,11 +37,11 @@ "@requestnetwork/transaction-manager": "0.26.9", "@requestnetwork/types": "0.35.0", "@requestnetwork/utils": "0.35.0", - "ethers": "5.2.0" + "ethers": "5.5.1" }, "devDependencies": { "prettier": "2.2.1", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" } } diff --git a/packages/utils/package.json b/packages/utils/package.json index 27498a1222..d4109cf6d0 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -41,7 +41,7 @@ "dependencies": { "@requestnetwork/types": "0.35.0", "eccrypto": "1.1.6", - "ethers": "5.2.0", + "ethers": "5.5.1", "secp256k1": "4.0.2" }, "devDependencies": { @@ -53,7 +53,7 @@ "source-map-support": "0.5.19", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3" + "typescript": "4.4.4" }, "gitHead": "6155223cfce769e48ccae480c510b35b4f54b4d0" } diff --git a/packages/web3-signature/package.json b/packages/web3-signature/package.json index f6106f8567..4e1227a28c 100644 --- a/packages/web3-signature/package.json +++ b/packages/web3-signature/package.json @@ -42,7 +42,7 @@ "dependencies": { "@requestnetwork/types": "0.35.0", "@requestnetwork/utils": "0.35.0", - "ethers": "5.2.0" + "ethers": "5.5.1" }, "devDependencies": { "@types/jest": "26.0.13", @@ -58,7 +58,7 @@ "terser-webpack-plugin": "4.2.3", "ts-jest": "26.3.0", "ts-node": "9.0.0", - "typescript": "4.1.3", + "typescript": "4.4.4", "webpack": "4.44.2", "webpack-bundle-analyzer": "4.2.0", "webpack-cli": "3.3.12" diff --git a/tsconfig.json b/tsconfig.json index c31ad43314..5a6323ca67 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,6 +13,7 @@ "noUnusedParameters": true, "moduleResolution": "node", "resolveJsonModule": true, + "useUnknownInCatchVariables": false, "lib": ["es2018"] } } diff --git a/yarn.lock b/yarn.lock index 48899c02ed..a427f92222 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2268,21 +2268,6 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/abi@5.2.0", "@ethersproject/abi@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.2.0.tgz#e2ca0b7f7e3b83e4d427ed8b38fdc1c48e2bb00f" - integrity sha512-24ExfHa0VbIOUHbB36b6lCVmWkaIVmrd9/m8MICtmSsRKzlugWqUD0B8g0zrRylXNxAOc3V6T4xKJ8jEDSvp3w== - dependencies: - "@ethersproject/address" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/hash" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - "@ethersproject/abi@5.4.0", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.0.2", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.0.tgz#a6d63bdb3672f738398846d4279fa6b6c9818242" @@ -2298,20 +2283,22 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/abstract-provider@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.2.0.tgz#b5c24b162f119b5d241738ded9555186013aa77d" - integrity sha512-Xi7Pt+CulRijc/vskBGIaYMEhafKjoNx8y4RNj/dnSpXHXScOJUSTtypqGBUngZddRbcwZGbHwEr6DZoKZwIZA== - dependencies: - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/networks" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" - "@ethersproject/web" "^5.2.0" - -"@ethersproject/abstract-provider@5.4.0", "@ethersproject/abstract-provider@^5.2.0", "@ethersproject/abstract-provider@^5.4.0": +"@ethersproject/abi@5.5.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== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/abstract-provider@5.4.0", "@ethersproject/abstract-provider@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.0.tgz#415331031b0f678388971e1987305244edc04e1d" integrity sha512-vPBR7HKUBY0lpdllIn7tLIzNN7DrVnhCLKSzY0l8WAwxz686m/aL7ASDzrVxV93GJtIub6N2t4dfZ29CkPOxgA== @@ -2324,16 +2311,18 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/web" "^5.4.0" -"@ethersproject/abstract-signer@5.2.0", "@ethersproject/abstract-signer@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.2.0.tgz#8e291fb6558b4190fb3e2fe440a9ffd092a2f459" - integrity sha512-JTXzLUrtoxpOEq1ecH86U7tstkEa9POKAGbGBb+gicbjGgzYYkLR4/LD83SX2/JNWvtYyY8t5errt5ehiy1gxQ== +"@ethersproject/abstract-provider@5.5.1", "@ethersproject/abstract-provider@^5.5.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" + integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg== dependencies: - "@ethersproject/abstract-provider" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" "@ethersproject/abstract-signer@5.4.0", "@ethersproject/abstract-signer@^5.4.0": version "5.4.0" @@ -2346,18 +2335,18 @@ "@ethersproject/logger" "^5.4.0" "@ethersproject/properties" "^5.4.0" -"@ethersproject/address@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.2.0.tgz#afcfa92db84582f54a60a9da361cea4aae450a69" - integrity sha512-2YfZlalWefOEfnr/CdqKRrgMgbKidYc+zG4/ilxSdcryZSux3eBU5/5btAT/hSiaHipUjd8UrWK8esCBHU6QNQ== +"@ethersproject/abstract-signer@5.5.0", "@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== dependencies: - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/rlp" "^5.2.0" + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" -"@ethersproject/address@5.4.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.2.0", "@ethersproject/address@^5.4.0": +"@ethersproject/address@5.4.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== @@ -2368,6 +2357,17 @@ "@ethersproject/logger" "^5.4.0" "@ethersproject/rlp" "^5.4.0" +"@ethersproject/address@5.5.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== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/address@^5.0.9": version "5.0.11" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.11.tgz#12022e8c590c33939beb5ab18b401ecf585eac59" @@ -2379,29 +2379,21 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/rlp" "^5.0.7" -"@ethersproject/base64@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.2.0.tgz#e01066d25e5b4e8a051545163bee5def47bd9534" - integrity sha512-D9wOvRE90QBI+yFsKMv0hnANiMzf40Xicq9JZbV9XYzh7srImmwmMcReU2wHjOs9FtEgSJo51Tt+sI1dKPYKDg== - dependencies: - "@ethersproject/bytes" "^5.2.0" - -"@ethersproject/base64@5.4.0", "@ethersproject/base64@^5.2.0", "@ethersproject/base64@^5.4.0": +"@ethersproject/base64@5.4.0", "@ethersproject/base64@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== dependencies: "@ethersproject/bytes" "^5.4.0" -"@ethersproject/basex@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.2.0.tgz#f921039e3bdfdab8c5a7ba8b21e81c83fc1ab98b" - integrity sha512-Oo7oX7BmaHLY/8ZsOLI5W0mrSwPBb1iboosN17jfK/4vGAtKjAInDai9I72CzN4NRJaMN5FkFLoPYywGqgGHlg== +"@ethersproject/base64@5.5.0", "@ethersproject/base64@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" + integrity sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/properties" "^5.2.0" + "@ethersproject/bytes" "^5.5.0" -"@ethersproject/basex@5.4.0", "@ethersproject/basex@^5.2.0", "@ethersproject/basex@^5.4.0": +"@ethersproject/basex@5.4.0", "@ethersproject/basex@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.4.0.tgz#0a2da0f4e76c504a94f2b21d3161ed9438c7f8a6" integrity sha512-J07+QCVJ7np2bcpxydFVf/CuYo9mZ7T73Pe7KQY4c1lRlrixMeblauMxHXD0MPwFmUHZIILDNViVkykFBZylbg== @@ -2409,16 +2401,15 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/properties" "^5.4.0" -"@ethersproject/bignumber@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.2.0.tgz#03f91ea740c5adb6f8c6a2e91bb4ee5ffaff5503" - integrity sha512-+MNQTxwV7GEiA4NH/i51UqQ+lY36O0rxPdV+0qzjFSySiyBlJpLk6aaa4UTvKmYWlI7YKZm6vuyCENeYn7qAOw== +"@ethersproject/basex@5.5.0", "@ethersproject/basex@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3" + integrity sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - bn.js "^4.4.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/properties" "^5.5.0" -"@ethersproject/bignumber@5.4.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.2.0", "@ethersproject/bignumber@^5.4.0": +"@ethersproject/bignumber@5.4.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.0.tgz#be8dea298c0ec71208ee60f0b245be0761217ad9" integrity sha512-OXUu9f9hO3vGRIPxU40cignXZVaYyfx6j9NNMjebKdnaCL3anCLSSy8/b8d03vY6dh7duCC0kW72GEC4tZer2w== @@ -2427,6 +2418,15 @@ "@ethersproject/logger" "^5.4.0" bn.js "^4.11.9" +"@ethersproject/bignumber@5.5.0", "@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== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + bn.js "^4.11.9" + "@ethersproject/bignumber@^5.0.13": version "5.0.15" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.15.tgz#b089b3f1e0381338d764ac1c10512f0c93b184ed" @@ -2436,20 +2436,20 @@ "@ethersproject/logger" "^5.0.8" bn.js "^4.4.0" -"@ethersproject/bytes@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.2.0.tgz#327917d5a1600f92fd2a9da4052fa6d974583132" - integrity sha512-O1CRpvJDnRTB47vvW8vyqojUZxVookb4LJv/s06TotriU3Xje5WFvlvXJu1yTchtxTz9BbvJw0lFXKpyO6Dn7w== - dependencies: - "@ethersproject/logger" "^5.2.0" - -"@ethersproject/bytes@5.4.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.2.0", "@ethersproject/bytes@^5.4.0": +"@ethersproject/bytes@5.4.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== dependencies: "@ethersproject/logger" "^5.4.0" +"@ethersproject/bytes@5.5.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/bytes@^5.0.9": version "5.0.11" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.11.tgz#21118e75b1d00db068984c15530e316021101276" @@ -2457,20 +2457,20 @@ dependencies: "@ethersproject/logger" "^5.0.8" -"@ethersproject/constants@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.2.0.tgz#ccea78ce325f78abfe7358397c03eec570518d92" - integrity sha512-p+34YG0KbHS20NGdE+Ic0M6egzd7cDvcfoO9RpaAgyAYm3V5gJVqL7UynS87yCt6O6Nlx6wRFboPiM5ctAr+jA== - dependencies: - "@ethersproject/bignumber" "^5.2.0" - -"@ethersproject/constants@5.4.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.2.0", "@ethersproject/constants@^5.4.0": +"@ethersproject/constants@5.4.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== dependencies: "@ethersproject/bignumber" "^5.4.0" +"@ethersproject/constants@5.5.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/constants@^5.0.8": version "5.0.10" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.10.tgz#eb0c604fbc44c53ba9641eed31a1d0c9e1ebcadc" @@ -2478,22 +2478,6 @@ dependencies: "@ethersproject/bignumber" "^5.0.13" -"@ethersproject/contracts@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.2.0.tgz#f54e12ec4a323f2bf93c338034839cc6dfc1e347" - integrity sha512-/2fg5tWPG6Z4pciEWpwGji3ggGA5j0ChVNF7NTmkOhvFrrJuWnRpzbvYA00nz8tBDNCOV3cwub5zfWRpgwYEJQ== - dependencies: - "@ethersproject/abi" "^5.2.0" - "@ethersproject/abstract-provider" "^5.2.0" - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/address" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" - "@ethersproject/contracts@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.0.tgz#e05fe6bd33acc98741e27d553889ec5920078abb" @@ -2510,21 +2494,23 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/transactions" "^5.4.0" -"@ethersproject/hash@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.2.0.tgz#2d21901eafc5bdb738b4ad96bee364d371ec724b" - integrity sha512-wEGry2HFFSssFiNEkFWMzj1vpdFv4rQlkBp41UfL6J58zKGNycoAWimokITDMk8p7548MKr27h48QfERnNKkRw== - dependencies: - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/address" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - -"@ethersproject/hash@5.4.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.2.0", "@ethersproject/hash@^5.4.0": +"@ethersproject/contracts@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197" + integrity sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg== + dependencies: + "@ethersproject/abi" "^5.5.0" + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + +"@ethersproject/hash@5.4.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== @@ -2538,25 +2524,21 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/hdnode@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.2.0.tgz#efea9b2f713e55aa5ba23cc62b4aac6d08dcfa53" - integrity sha512-ffq2JrW5AftCmfWZ8DxpdWdw/x06Yn+e9wrWHLpj8If1+w87W4LbTMRUaUmO1DUSN8H8g/6kMUKCTJPVuxsuOw== - dependencies: - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/basex" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/pbkdf2" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/sha2" "^5.2.0" - "@ethersproject/signing-key" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" - "@ethersproject/wordlists" "^5.2.0" - -"@ethersproject/hdnode@5.4.0", "@ethersproject/hdnode@^5.2.0", "@ethersproject/hdnode@^5.4.0": +"@ethersproject/hash@5.5.0", "@ethersproject/hash@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" + integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/hdnode@5.4.0", "@ethersproject/hdnode@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.4.0.tgz#4bc9999b9a12eb5ce80c5faa83114a57e4107cac" integrity sha512-pKxdS0KAaeVGfZPp1KOiDLB0jba11tG6OP1u11QnYfb7pXn6IZx0xceqWRr6ygke8+Kw74IpOoSi7/DwANhy8Q== @@ -2574,26 +2556,25 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/wordlists" "^5.4.0" -"@ethersproject/json-wallets@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.2.0.tgz#d41c7c39e4d236b586e26e2145b09ac49dc56608" - integrity sha512-iWxSm9XiugEtaehYD6w1ImmXeatjcGcrQvffZVJHH1UqV4FckDzrOYnZBRHPQRYlnhNVrGTld1+S0Cu4MB8gdw== - dependencies: - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/address" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/hdnode" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/pbkdf2" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/random" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/json-wallets@5.4.0", "@ethersproject/json-wallets@^5.2.0", "@ethersproject/json-wallets@^5.4.0": +"@ethersproject/hdnode@5.5.0", "@ethersproject/hdnode@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6" + integrity sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + +"@ethersproject/json-wallets@5.4.0", "@ethersproject/json-wallets@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.4.0.tgz#2583341cfe313fc9856642e8ace3080154145e95" integrity sha512-igWcu3fx4aiczrzEHwG1xJZo9l1cFfQOWzTqwRw/xcvxTk58q4f9M7cjh51EKphMHvrJtcezJ1gf1q1AUOfEQQ== @@ -2612,15 +2593,26 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.2.0.tgz#15257862807c23f24a3209d1016d322dca85a464" - integrity sha512-LqyxTwVANga5Y3L1yo184czW6b3PibabN8xyE/eOulQLLfXNrHHhwrOTpOhoVRWCICVCD/5SjQfwqTrczjS7jQ== - dependencies: - "@ethersproject/bytes" "^5.2.0" - js-sha3 "0.5.7" +"@ethersproject/json-wallets@5.5.0", "@ethersproject/json-wallets@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325" + integrity sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + aes-js "3.0.0" + scrypt-js "3.0.1" -"@ethersproject/keccak256@5.4.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.2.0", "@ethersproject/keccak256@^5.4.0": +"@ethersproject/keccak256@5.4.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== @@ -2628,6 +2620,14 @@ "@ethersproject/bytes" "^5.4.0" js-sha3 "0.5.7" +"@ethersproject/keccak256@5.5.0", "@ethersproject/keccak256@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" + integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + js-sha3 "0.8.0" + "@ethersproject/keccak256@^5.0.7": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.9.tgz#ca0d86e4af56c13b1ef25e533bde3e96d28f647d" @@ -2636,28 +2636,21 @@ "@ethersproject/bytes" "^5.0.9" js-sha3 "0.5.7" -"@ethersproject/logger@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.2.0.tgz#accf5348251f78b6c8891af67f42490a4ea4e5ae" - integrity sha512-dPZ6/E3YiArgG8dI/spGkaRDry7YZpCntf4gm/c6SI8Mbqiihd7q3nuLN5VvDap/0K3xm3RE1AIUOcUwwh2ezQ== - -"@ethersproject/logger@5.4.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.2.0", "@ethersproject/logger@^5.4.0": +"@ethersproject/logger@5.4.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ== +"@ethersproject/logger@5.5.0", "@ethersproject/logger@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" + integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== + "@ethersproject/logger@^5.0.8": version "5.0.10" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.10.tgz#fd884688b3143253e0356ef92d5f22d109d2e026" integrity sha512-0y2T2NqykDrbPM3Zw9RSbPkDOxwChAL8detXaom76CfYoGxsOnRP/zTX8OUAV+x9LdwzgbWvWmeXrc0M7SuDZw== -"@ethersproject/networks@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.2.0.tgz#66c23c6ac477dd703645b2c971ac842d8b8aa524" - integrity sha512-q+htMgq7wQoEnjlkdHM6t1sktKxNbEB/F6DQBPNwru7KpQ1R0n0UTIXJB8Rb7lSnvjqcAQ40X3iVqm94NJfYDw== - dependencies: - "@ethersproject/logger" "^5.2.0" - "@ethersproject/networks@5.4.1": version "5.4.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.1.tgz#2ce83b8e42aa85216e5d277a7952d97b6ce8d852" @@ -2665,22 +2658,21 @@ dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/networks@^5.2.0", "@ethersproject/networks@^5.4.0": +"@ethersproject/networks@5.5.0", "@ethersproject/networks@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.0.tgz#babec47cab892c51f8dd652ce7f2e3e14283981a" + integrity sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/networks@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.0.tgz#71eecd3ef3755118b42c1a5d2a44a7e07202e10a" integrity sha512-5fywtKRDcnaVeA5SjxXH3DOQqe/IbeD/plwydi94SdPps1fbDUrnO6SzDExaruBZXxpxJcO9upG9UComsei4bg== dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/pbkdf2@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.2.0.tgz#8166a7a7238a5fd1d9bb6eb2000fea0f19fdde06" - integrity sha512-qKOoO6yir/qnAgg6OP3U4gRuZ6jl9P7xwggRu/spVfnuaR+wa490AatWLqB1WOXKf6JFjm5yOaT/T5fCICQVdQ== - dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/sha2" "^5.2.0" - -"@ethersproject/pbkdf2@5.4.0", "@ethersproject/pbkdf2@^5.2.0", "@ethersproject/pbkdf2@^5.4.0": +"@ethersproject/pbkdf2@5.4.0", "@ethersproject/pbkdf2@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.4.0.tgz#ed88782a67fda1594c22d60d0ca911a9d669641c" integrity sha512-x94aIv6tiA04g6BnazZSLoRXqyusawRyZWlUhKip2jvoLpzJuLb//KtMM6PEovE47pMbW+Qe1uw+68ameJjB7g== @@ -2688,20 +2680,28 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/sha2" "^5.4.0" -"@ethersproject/properties@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.2.0.tgz#8fadf367f7ac7357019d0224aa579b234c545ac1" - integrity sha512-oNFkzcoGwXXV+/Yp/MLcDLrL/2i360XIy2YN9yRZJPnIbLwjroFNLiRzLs6PyPw1D09Xs8OcPR1/nHv6xDKE2A== +"@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" + integrity sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg== dependencies: - "@ethersproject/logger" "^5.2.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" -"@ethersproject/properties@5.4.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.2.0", "@ethersproject/properties@^5.4.0": +"@ethersproject/properties@5.4.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7" integrity sha512-7jczalGVRAJ+XSRvNA6D5sAwT4gavLq3OXPuV/74o3Rd2wuzSL035IMpIMgei4CYyBdialJMrTqkOnzccLHn4A== dependencies: "@ethersproject/logger" "^5.4.0" +"@ethersproject/properties@5.5.0", "@ethersproject/properties@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" + integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== + dependencies: + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties@^5.0.7": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.9.tgz#d7aae634680760136ea522e25c3ef043ec15b5c2" @@ -2709,31 +2709,6 @@ dependencies: "@ethersproject/logger" "^5.0.8" -"@ethersproject/providers@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.2.0.tgz#b2f3e3b2ca4567c8372543ceb6f3c6e3a2370783" - integrity sha512-Yf/ZUqCrVr+jR0SHA9GuNZs4R1xnV9Ibnh1TlOa0ZzI6o+Qf8bEyE550k9bYI4zk2f9x9baX2RRs6BJY7Jz/WA== - dependencies: - "@ethersproject/abstract-provider" "^5.2.0" - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/address" "^5.2.0" - "@ethersproject/basex" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/hash" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/networks" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/random" "^5.2.0" - "@ethersproject/rlp" "^5.2.0" - "@ethersproject/sha2" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" - "@ethersproject/web" "^5.2.0" - bech32 "1.1.4" - ws "7.2.3" - "@ethersproject/providers@5.4.1": version "5.4.1" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.1.tgz#654267b563b833046b9c9647647cfc8267cb93b4" @@ -2759,15 +2734,32 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.2.0.tgz#1d7e19f17d88eda56228a263063826829e49eebe" - integrity sha512-7Nd3qjivBGlDCGDuGYjPi8CXdtVhRZ7NeyBXoJgtnJBwn1S01ahrbMeOUVmRVWrFM0YiSEPEGo7i4xEu2gRPcg== - dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" +"@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== + 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.4.0", "@ethersproject/random@^5.2.0", "@ethersproject/random@^5.4.0": +"@ethersproject/random@5.4.0", "@ethersproject/random@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.4.0.tgz#9cdde60e160d024be39cc16f8de3b9ce39191e16" integrity sha512-pnpWNQlf0VAZDEOVp1rsYQosmv2o0ITS/PecNw+mS2/btF8eYdspkN0vIXrCMtkX09EAh9bdk8GoXmFXM1eAKw== @@ -2775,15 +2767,15 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/logger" "^5.4.0" -"@ethersproject/rlp@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.2.0.tgz#bbf605183818a9d96bdc40323d734c79e26cfaca" - integrity sha512-RqGsELtPWxcFhOOhSr0lQ2hBNT9tBE08WK0tb6VQbCk97EpqkbgP8yXED9PZlWMiRGchJTw6S+ExzK62XMX/fw== +"@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" + integrity sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" -"@ethersproject/rlp@5.4.0", "@ethersproject/rlp@^5.2.0", "@ethersproject/rlp@^5.4.0": +"@ethersproject/rlp@5.4.0", "@ethersproject/rlp@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== @@ -2791,6 +2783,14 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/logger" "^5.4.0" +"@ethersproject/rlp@5.5.0", "@ethersproject/rlp@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" + integrity sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/rlp@^5.0.7": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.9.tgz#da205bf8a34d3c3409eb73ddd237130a4b376aff" @@ -2799,16 +2799,7 @@ "@ethersproject/bytes" "^5.0.9" "@ethersproject/logger" "^5.0.8" -"@ethersproject/sha2@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.2.0.tgz#ae18fa6c09c6d99fa2b564dac7276bcd513c1579" - integrity sha512-Wqqptfn0PRO2mvmpktPW1HOLrrCyGtxhVQxO1ZyePoGrcEOurhICOlIvkTogoX4Q928D3Z9XtSSCUbdOJUF2kg== - dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - hash.js "1.1.3" - -"@ethersproject/sha2@5.4.0", "@ethersproject/sha2@^5.2.0", "@ethersproject/sha2@^5.4.0": +"@ethersproject/sha2@5.4.0", "@ethersproject/sha2@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.4.0.tgz#c9a8db1037014cbc4e9482bd662f86c090440371" integrity sha512-siheo36r1WD7Cy+bDdE1BJ8y0bDtqXCOxRMzPa4bV1TGt/eTUUt03BHoJNB6reWJD8A30E/pdJ8WFkq+/uz4Gg== @@ -2817,18 +2808,16 @@ "@ethersproject/logger" "^5.4.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.2.0.tgz#e8eb10d3c0f4a575479db8d70c62aaf93cd384d1" - integrity sha512-9A+dVSkrVAPuhJnWqLWV/NkKi/KB4iagTKEuojfuApUfeIHEhpwQ0Jx3cBimk7qWISSSKdgiAmIqpvVtZ5FEkg== +"@ethersproject/sha2@5.5.0", "@ethersproject/sha2@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" + integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - bn.js "^4.4.0" - elliptic "6.5.4" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + hash.js "1.1.7" -"@ethersproject/signing-key@5.4.0", "@ethersproject/signing-key@^5.2.0", "@ethersproject/signing-key@^5.4.0": +"@ethersproject/signing-key@5.4.0", "@ethersproject/signing-key@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== @@ -2840,6 +2829,18 @@ elliptic "6.5.4" hash.js "1.1.7" +"@ethersproject/signing-key@5.5.0", "@ethersproject/signing-key@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" + integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/signing-key@^5.0.8": version "5.0.11" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.11.tgz#19fc5c4597e18ad0a5efc6417ba5b74069fdd2af" @@ -2850,17 +2851,6 @@ "@ethersproject/properties" "^5.0.7" elliptic "6.5.4" -"@ethersproject/solidity@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.2.0.tgz#ac902d8f8b11bf58fd37ccf77392178cbbd0b08f" - integrity sha512-EEFlNyEnONW3CWF8UGWPcqxJUHiaIoofO7itGwO/2gvGpnwlL+WUV+GmQoHNxmn+QJeOHspnZuh6NOVrJL6H1g== - dependencies: - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/sha2" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - "@ethersproject/solidity@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec" @@ -2872,16 +2862,19 @@ "@ethersproject/sha2" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/strings@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.2.0.tgz#e93d989859587191c3f64bda124d9dedbc3f5a97" - integrity sha512-RmjX800wRYKgrzo2ZCSlA8OCQYyq4+M46VgjSVDVyYkLZctBXC3epqlppDA24R7eo856KNbXqezZsMnHT+sSuA== +"@ethersproject/solidity@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f" + integrity sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/logger" "^5.2.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" -"@ethersproject/strings@5.4.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.2.0", "@ethersproject/strings@^5.4.0": +"@ethersproject/strings@5.4.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== @@ -2890,22 +2883,16 @@ "@ethersproject/constants" "^5.4.0" "@ethersproject/logger" "^5.4.0" -"@ethersproject/transactions@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.2.0.tgz#052e2ef8f8adf7037ebe4cc47aad2a61950e6491" - integrity sha512-QrGbhGYsouNNclUp3tWMbckMsuXJTOsA56kT3BuRrLlXJcUH7myIihajXdSfKcyJsvHJPrGZP+U3TKh+sLzZtg== - dependencies: - "@ethersproject/address" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/rlp" "^5.2.0" - "@ethersproject/signing-key" "^5.2.0" - -"@ethersproject/transactions@5.4.0", "@ethersproject/transactions@^5.2.0", "@ethersproject/transactions@^5.4.0": +"@ethersproject/strings@5.5.0", "@ethersproject/strings@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" + integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/transactions@5.4.0", "@ethersproject/transactions@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== @@ -2920,6 +2907,21 @@ "@ethersproject/rlp" "^5.4.0" "@ethersproject/signing-key" "^5.4.0" +"@ethersproject/transactions@5.5.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== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/transactions@^5.0.0-beta.135": version "5.0.11" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.11.tgz#b31df5292f47937136a45885d6ee6112477c13df" @@ -2935,15 +2937,6 @@ "@ethersproject/rlp" "^5.0.7" "@ethersproject/signing-key" "^5.0.8" -"@ethersproject/units@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.2.0.tgz#08643e5d4583ecc1a32b103c1157f7ae80803392" - integrity sha512-yrwlyomXcBBHp5oSrLxlLkyHN7dVu3PO7hMbQXc00h388zU4TF3o/PAIUhh+x695wgJ19Fa8YgUWCab3a1RDwA== - dependencies: - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/units@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.4.0.tgz#d57477a4498b14b88b10396062c8cbbaf20c79fe" @@ -2953,26 +2946,14 @@ "@ethersproject/constants" "^5.4.0" "@ethersproject/logger" "^5.4.0" -"@ethersproject/wallet@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.2.0.tgz#b5a8406676067e34f633536a4cb53c2ff98c0b5c" - integrity sha512-uPdjZwUmAJLo1+ybR/G/rL9pv/NEcCqOsjn6RJFvG7RmwP2kS1v5C+F+ysgx2W/PxBIVT+2IEsfXLbBz8s/6Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.2.0" - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/address" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/hash" "^5.2.0" - "@ethersproject/hdnode" "^5.2.0" - "@ethersproject/json-wallets" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/random" "^5.2.0" - "@ethersproject/signing-key" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" - "@ethersproject/wordlists" "^5.2.0" +"@ethersproject/units@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.5.0.tgz#104d02db5b5dc42cc672cc4587bafb87a95ee45e" + integrity sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" "@ethersproject/wallet@5.4.0": version "5.4.0" @@ -2995,18 +2976,28 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/wordlists" "^5.4.0" -"@ethersproject/web@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.2.0.tgz#47d8e152e7fcc07ba0aff4f99fde268fde79dd7a" - integrity sha512-mYb9qxGlOBFR2pR6t1CZczuqqX6r8RQGn7MtwrBciMex3cvA/qs+wbmcDgl+/OZY0Pco/ih6WHQRnVi+4sBeCQ== - dependencies: - "@ethersproject/base64" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - -"@ethersproject/web@5.4.0", "@ethersproject/web@^5.2.0", "@ethersproject/web@^5.4.0": +"@ethersproject/wallet@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75" + integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^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/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + +"@ethersproject/web@5.4.0", "@ethersproject/web@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== @@ -3017,18 +3008,18 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/wordlists@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.2.0.tgz#afcce0229e9ef64af1bf8a1e96571fa441e9f444" - integrity sha512-/7TG5r/Zm8Wd9WhoqQ4QnntgMkIfIZ8QVrpU81muiChLD26XLOgmyiqKPL7K058uYt7UZ0wzbXjxyCYadU3xFQ== +"@ethersproject/web@5.5.0", "@ethersproject/web@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.0.tgz#0e5bb21a2b58fb4960a705bfc6522a6acf461e28" + integrity sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/hash" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/strings" "^5.2.0" + "@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.4.0", "@ethersproject/wordlists@^5.2.0", "@ethersproject/wordlists@^5.4.0": +"@ethersproject/wordlists@5.4.0", "@ethersproject/wordlists@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.4.0.tgz#f34205ec3bbc9e2c49cadaee774cf0b07e7573d7" integrity sha512-FemEkf6a+EBKEPxlzeVgUaVSodU7G0Na89jqKjmWMlDB0tomoU8RlEMgUvXyqtrg8N4cwpLh8nyRnm1Nay1isA== @@ -3039,6 +3030,17 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.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" + integrity sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@evocateur/libnpmaccess@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" @@ -11966,41 +11968,41 @@ ethers@4.0.0-beta.3: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.2.0.tgz#13452e35947ab5d77053286d1f7161ee666c85ba" - integrity sha512-HqFGU2Qab0mAg3y1eHKVMXS4i1gTObMY0/4+x4LiO72NHhJL3Z795gnqyivmwG1J8e5NLSlRSfyIR7TL0Hw3ig== - dependencies: - "@ethersproject/abi" "5.2.0" - "@ethersproject/abstract-provider" "5.2.0" - "@ethersproject/abstract-signer" "5.2.0" - "@ethersproject/address" "5.2.0" - "@ethersproject/base64" "5.2.0" - "@ethersproject/basex" "5.2.0" - "@ethersproject/bignumber" "5.2.0" - "@ethersproject/bytes" "5.2.0" - "@ethersproject/constants" "5.2.0" - "@ethersproject/contracts" "5.2.0" - "@ethersproject/hash" "5.2.0" - "@ethersproject/hdnode" "5.2.0" - "@ethersproject/json-wallets" "5.2.0" - "@ethersproject/keccak256" "5.2.0" - "@ethersproject/logger" "5.2.0" - "@ethersproject/networks" "5.2.0" - "@ethersproject/pbkdf2" "5.2.0" - "@ethersproject/properties" "5.2.0" - "@ethersproject/providers" "5.2.0" - "@ethersproject/random" "5.2.0" - "@ethersproject/rlp" "5.2.0" - "@ethersproject/sha2" "5.2.0" - "@ethersproject/signing-key" "5.2.0" - "@ethersproject/solidity" "5.2.0" - "@ethersproject/strings" "5.2.0" - "@ethersproject/transactions" "5.2.0" - "@ethersproject/units" "5.2.0" - "@ethersproject/wallet" "5.2.0" - "@ethersproject/web" "5.2.0" - "@ethersproject/wordlists" "5.2.0" +ethers@5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.1.tgz#d3259a95a42557844aa543906c537106c0406fbf" + integrity sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw== + 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.0" + "@ethersproject/pbkdf2" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/providers" "5.5.0" + "@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.0" + "@ethersproject/wordlists" "5.5.0" ethers@^4.0.0-beta.1, ethers@^4.0.32: version "4.0.48" @@ -24634,10 +24636,10 @@ typescript@2.9.1: resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.1.tgz#fdb19d2c67a15d11995fd15640e373e09ab09961" integrity sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA== -typescript@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" - integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== +typescript@4.4.4: + version "4.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" + integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== typescript@^4.0.3: version "4.2.3" @@ -27142,11 +27144,6 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" - integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== - ws@7.4.5: version "7.4.5" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1"