diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..fbe4eb7 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @Luisfc68 @MaximStanciu8 @gsoares85 @Dominikkq @AndresQuijano diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9dc3f5b..e02c9f0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,8 +5,7 @@ on: branches: [ main ] pull_request: -permissions: - contents: read +permissions: read-all jobs: validation: @@ -19,6 +18,10 @@ jobs: uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version: '19.6.0' + - name: NPM Login + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: npm config set //npm.pkg.github.com/:_authToken $GITHUB_TOKEN - name: Install dependencies run: npm ci && npm run build - name: Validate code format diff --git a/README.md b/README.md index ed0903e..c37966d 100644 --- a/README.md +++ b/README.md @@ -57,8 +57,7 @@ However we advice to only use `Mainnet` or `Testnet` for integration purposes as - **disableChecksum**: this parameter tells the FlyoverSDK whether to disable the RSK checksum validation for the RSK addresses involved in the PegIn and PegOut operations or not. It is false by default. ## Connect to RSK -If you need to connect to RSK to execute some operation then you need to create an RSKConnection and provide it to -Flyover object +If you need to connect to RSK to execute some operation then you need to create a Connection object and provide it to the Flyover object ```javascript const rsk = await BlockchainConnection.createUsingStandard(window.ethereum) const flyover = new Flyover({ rskConnection: rsk, network: 'Regtest' }) @@ -77,7 +76,7 @@ Also you can provide your own regtest LBC address if you want to connect to a lo customLbcAddress: '0x1eD614cd3443EFd9c70F04b6d777aed947A4b0c4' }) ``` -There are 3 ways to create an RSK connection, you can check them in RSKConnection class documentation +There are two types of connection; the [BlockchainConnection](https://github.com/rsksmart/bridges-core-sdk/blob/main/docs/classes/BlockchainConnection.md) and the [BlockchainReadOnlyConnection](https://github.com/rsksmart/bridges-core-sdk/blob/main/docs/classes/BlockchainReadOnlyConnection.md). The difference between them is that with the `BlockchainReadOnlyConnection` you wont be able to sign and broadcast transactions. For the alternatives to create the connection objects you can refer to the documentation of each one of the classes. ### Flyover utils FlyoverSDK exports an object with a collection of util functions that the client application might use during the integration with the SDK. You can see the list of the utility functions [here](./docs/modules.md#flyoverutils) and also when importing the `FlyoverUtils` object from the SDK package every function has a JsDoc explaining its usage. diff --git a/integration-test/config.ts b/integration-test/config.ts index f77e2ee..6bd4e15 100644 --- a/integration-test/config.ts +++ b/integration-test/config.ts @@ -11,6 +11,7 @@ export interface IntegrationTestConfig { peginAmount: bigint pegoutAmount: bigint mempoolSpaceUrl: string + testContractAddress: string } function getConfig (): IntegrationTestConfig { @@ -23,7 +24,8 @@ function getConfig (): IntegrationTestConfig { TEST_BTC_ADDRESS: btcAddress, TEST_PEGIN_AMOUNT: peginAmount, TEST_PEGOUT_AMOUNT: pegoutAmount, - TEST_MEMPOOL_SPACE_URL: mempoolSpaceUrl + TEST_MEMPOOL_SPACE_URL: mempoolSpaceUrl, + TEST_CONTRACT_ADDRESS: testContractAddress } = process.env assertTruthy(mnemonic, 'Missing test configuration: TEST_MNEMONIC') assertTruthy(providerId, 'Missing test configuration: TEST_PROVIDER_ID') @@ -34,6 +36,7 @@ function getConfig (): IntegrationTestConfig { assertTruthy(pegoutAmount, 'Missing test configuration: TEST_PEGOUT_AMOUNT') assertTruthy(mempoolSpaceUrl, 'Missing test configuration: TEST_MEMPOOL_SPACE_URL') assertTruthy(network, 'Missing test configuration: TEST_NETWORK') + assertTruthy(testContractAddress, 'Missing test configuration: TEST_CONTRACT_ADDRESS') return { network: network as keyof typeof FlyoverNetworks, testMnemonic: mnemonic, @@ -43,7 +46,8 @@ function getConfig (): IntegrationTestConfig { nodeUrl, rskAddress, btcAddress, - mempoolSpaceUrl + mempoolSpaceUrl, + testContractAddress } } diff --git a/integration-test/example.env b/integration-test/example.env index c29ed9a..1a4a31e 100644 --- a/integration-test/example.env +++ b/integration-test/example.env @@ -7,3 +7,4 @@ TEST_BTC_ADDRESS= TEST_PEGIN_AMOUNT=5000000000000000 TEST_PEGOUT_AMOUNT=5000000000000000 TEST_MEMPOOL_SPACE_URL= +TEST_CONTRACT_ADDRESS= diff --git a/integration-test/package-lock.json b/integration-test/package-lock.json index fa39d18..1865b50 100644 --- a/integration-test/package-lock.json +++ b/integration-test/package-lock.json @@ -20,7 +20,7 @@ "version": "1.6.2", "license": "ISC", "dependencies": { - "@rsksmart/bridges-core-sdk": "^0.4.1", + "@rsksmart/bridges-core-sdk": "^0.4.2", "bitcoinjs-lib": "^6.1.6", "qrcode": "^1.5.1" }, @@ -39,7 +39,7 @@ "eslint-plugin-n": "^15.6.1", "eslint-plugin-promise": "^6.1.1", "json-bigint": "^1.0.0", - "rollup": "^3.26.3", + "rollup": "^4.34.8", "rollup-plugin-dts": "^6.1.0", "rollup-plugin-typescript2": "^0.35.0", "swagger-typescript-api": "^13.0.23", @@ -80,6 +80,7 @@ "resolved": "https://registry.npmjs.org/eth-provider/-/eth-provider-0.13.7.tgz", "integrity": "sha512-D07HcKBQ0+liERDbkwpex03Y5D7agOMBv8NMkGu0obmD+vHzP9q8jI/tkZMfYAhbfXwpudEgXKiJODXH5UQu7g==", "dev": true, + "license": "GPL-3.0", "dependencies": { "ethereum-provider": "0.7.7", "events": "3.3.0", diff --git a/integration-test/test/client.test.ts b/integration-test/test/client.test.ts index 9e26c22..12ac546 100644 --- a/integration-test/test/client.test.ts +++ b/integration-test/test/client.test.ts @@ -1,5 +1,5 @@ import { describe, test, beforeAll, expect } from '@jest/globals' -import { assertTruthy, BlockchainConnection } from '@rsksmart/bridges-core-sdk' +import { assertTruthy, BlockchainReadOnlyConnection } from '@rsksmart/bridges-core-sdk' import { Flyover } from '@rsksmart/flyover-sdk' import { integrationTestConfig } from '../config' import { fakeTokenResolver } from './common/utils' @@ -14,10 +14,7 @@ describe('Flyover SDK client should', () => { captchaTokenResolver: fakeTokenResolver, disableChecksum: true }) - const rsk = await BlockchainConnection.createUsingPassphrase( - integrationTestConfig.testMnemonic, - integrationTestConfig.nodeUrl - ) + const rsk = await BlockchainReadOnlyConnection.createUsingRpc(integrationTestConfig.nodeUrl) await flyover.connectToRsk(rsk) }) diff --git a/integration-test/test/common/TestContract.sol b/integration-test/test/common/TestContract.sol new file mode 100644 index 0000000..45bdde4 --- /dev/null +++ b/integration-test/test/common/TestContract.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.2 <0.9.0; + +contract TestContract { + + event Deposit(address indexed destination, uint256 amount); + event Withdraw(address indexed destination, uint256 amount); + event ValueChanged(uint256 oldValue, uint256 newValue); + + mapping(address => uint256) private balances; + uint256 private value; + + function save(address destination) public payable { + uint256 amount = msg.value; + balances[destination] += amount; + emit Deposit(destination, amount); + } + + function setValue(uint256 _value) external { + emit ValueChanged(value, _value); + value = _value; + } + + function retrieveValue() external view returns (uint256) { + return value; + } + + function getBalance(address destination) external view returns (uint256) { + return balances[destination]; + } + + function withdraw() external { + uint256 balance = balances[msg.sender]; + require(balance > 0, "Insufficient balance"); + balances[msg.sender] = 0; + (bool success,) = msg.sender.call{value: balance}(""); + require(success, "Error sending the tokens"); + emit Withdraw(msg.sender, value); + } +} diff --git a/integration-test/test/common/constants.ts b/integration-test/test/common/constants.ts index 631242f..2307911 100644 --- a/integration-test/test/common/constants.ts +++ b/integration-test/test/common/constants.ts @@ -1,2 +1,8 @@ -export const TEST_URL = 'http://localhost:4444' export const EXTENDED_TIMEOUT = 7200 * 1000 +export const TEST_CONTRACT_ABI = [ + 'function save(address destination) public payable', + 'function setValue(uint256 _value) external', + 'function retrieveValue() external view returns (uint256)', + 'function getBalance(address destination) external view returns (uint256)', + 'function withdraw() external' +] diff --git a/integration-test/test/pegin.test.ts b/integration-test/test/pegin.test.ts index 1d2625a..b6ec2e8 100644 --- a/integration-test/test/pegin.test.ts +++ b/integration-test/test/pegin.test.ts @@ -1,9 +1,10 @@ import { describe, test, beforeAll, expect } from '@jest/globals' import { type AcceptedQuote, Flyover, FlyoverUtils, type ValidatePeginTransactionOptions, type LiquidityProvider, type Quote } from '@rsksmart/flyover-sdk' -import { BlockchainConnection, assertTruthy } from '@rsksmart/bridges-core-sdk' +import { assertTruthy, ethers, BlockchainReadOnlyConnection } from '@rsksmart/bridges-core-sdk' import { integrationTestConfig } from '../config' import { fakeTokenResolver, getUtxosFromMempoolSpace } from './common/utils' import { Transaction, payments, networks } from 'bitcoinjs-lib' +import { TEST_CONTRACT_ABI } from './common/constants' describe('Flyover pegin process should', () => { let flyover: Flyover @@ -19,10 +20,7 @@ describe('Flyover pegin process should', () => { captchaTokenResolver: fakeTokenResolver, disableChecksum: true }) - const rsk = await BlockchainConnection.createUsingPassphrase( - integrationTestConfig.testMnemonic, - integrationTestConfig.nodeUrl - ) + const rsk = await BlockchainReadOnlyConnection.createUsingRpc(integrationTestConfig.nodeUrl) await flyover.connectToRsk(rsk) }) @@ -180,4 +178,40 @@ describe('Flyover pegin process should', () => { }, options) expect(result).toBe('') }) + + test('get a smart contract interaction quote', async () => { + const smartContractData = new ethers.utils.Interface(TEST_CONTRACT_ABI) + .encodeFunctionData('save', [integrationTestConfig.rskAddress]) + flyover.useLiquidityProvider(provider) + const prefixedQuote = await flyover.getQuotes({ + callEoaOrContractAddress: integrationTestConfig.testContractAddress, + callContractArguments: smartContractData, + valueToTransfer: integrationTestConfig.peginAmount, + rskRefundAddress: integrationTestConfig.rskAddress + }).then(result => result[0]) + + const notPrefixedQuote = await flyover.getQuotes({ + callEoaOrContractAddress: integrationTestConfig.testContractAddress, + callContractArguments: smartContractData.slice(2), + valueToTransfer: integrationTestConfig.peginAmount, + rskRefundAddress: integrationTestConfig.rskAddress + }).then(result => result[0]) + + expect(prefixedQuote).not.toBeUndefined() + expect(notPrefixedQuote).not.toBeUndefined() + expect(prefixedQuote?.quote.contractAddr).toBe(integrationTestConfig.testContractAddress) + expect(notPrefixedQuote?.quote.contractAddr).toBe(integrationTestConfig.testContractAddress) + expect(prefixedQuote?.quote.data).toBe(smartContractData.slice(2)) + expect(notPrefixedQuote?.quote.data).toBe(smartContractData.slice(2)) + + /* eslint-disable @typescript-eslint/no-non-null-assertion */ + const acceptedPrefixed = await flyover.acceptQuote(prefixedQuote!) + const acceptedNotPrefixed = await flyover.acceptQuote(notPrefixedQuote!) + /* eslint-enable @typescript-eslint/no-non-null-assertion */ + expect(acceptedPrefixed.bitcoinDepositAddressHash).not.toBeUndefined() + expect(acceptedNotPrefixed.bitcoinDepositAddressHash).not.toBeUndefined() + + console.info('Prefixed quote payment address:', acceptedPrefixed.bitcoinDepositAddressHash) + console.info('Not prefixed quote payment address:', acceptedNotPrefixed.bitcoinDepositAddressHash) + }) }) diff --git a/integration-test/test/pegout.test.ts b/integration-test/test/pegout.test.ts index e32aaf1..48fb45e 100644 --- a/integration-test/test/pegout.test.ts +++ b/integration-test/test/pegout.test.ts @@ -1,5 +1,5 @@ import { describe, test, beforeAll, expect } from '@jest/globals' -import { assertTruthy, BlockchainConnection } from '@rsksmart/bridges-core-sdk' +import { assertTruthy, BlockchainConnection, BlockchainReadOnlyConnection } from '@rsksmart/bridges-core-sdk' import { Flyover, type PegoutQuote, type LiquidityProvider, type AcceptedPegoutQuote, FlyoverUtils } from '@rsksmart/flyover-sdk' import { integrationTestConfig } from '../config' import { EXTENDED_TIMEOUT } from './common/constants' @@ -96,6 +96,24 @@ describe('Flyover pegout process should', () => { expect(acceptedQuote.lbcAddress).not.toBeUndefined() }) + test('fail to deposit pegout if connection is readonly', async () => { + const readonlyFlyover = new Flyover({ + network: integrationTestConfig.network, + allowInsecureConnections: true, + captchaTokenResolver: fakeTokenResolver, + disableChecksum: true, + rskConnection: await BlockchainReadOnlyConnection.createUsingRpc(integrationTestConfig.nodeUrl) + }) + const amount = FlyoverUtils.getQuoteTotal(selectedQuote) + expect.assertions(2) + try { + await readonlyFlyover.depositPegout(selectedQuote, acceptedQuote.signature, amount) + } catch (e: any) { + expect(e.message).toBe('error executing function depositPegout') + expect(e.details.error).toContain('sending a transaction requires a signer') + } + }) + test('deposit amount to lbc for accepted quote', async () => { const txHash = await flyover.depositPegout(selectedQuote, acceptedQuote.signature, FlyoverUtils.getQuoteTotal(selectedQuote)) expect([null, undefined, '']).not.toContain(txHash) diff --git a/integration-test/test/providers.test.ts b/integration-test/test/providers.test.ts index 783cdec..bde5110 100644 --- a/integration-test/test/providers.test.ts +++ b/integration-test/test/providers.test.ts @@ -1,5 +1,5 @@ import { describe, test, beforeAll, expect } from '@jest/globals' -import { assertTruthy, BlockchainConnection } from '@rsksmart/bridges-core-sdk' +import { assertTruthy, BlockchainReadOnlyConnection } from '@rsksmart/bridges-core-sdk' import { Flyover } from '@rsksmart/flyover-sdk' import { fakeTokenResolver } from './common/utils' import { integrationTestConfig } from '../config' @@ -15,10 +15,7 @@ describe('Flyover SDK should perform the following liquidity provider related op captchaTokenResolver: fakeTokenResolver, disableChecksum: true }) - const rsk = await BlockchainConnection.createUsingPassphrase( - integrationTestConfig.testMnemonic, - integrationTestConfig.nodeUrl - ) + const rsk = await BlockchainReadOnlyConnection.createUsingRpc(integrationTestConfig.nodeUrl) await flyover.connectToRsk(rsk) }) diff --git a/integration-test/test/rsk.test.ts b/integration-test/test/rsk.test.ts index 1c5c5d2..5946f1c 100644 --- a/integration-test/test/rsk.test.ts +++ b/integration-test/test/rsk.test.ts @@ -1,7 +1,7 @@ import { describe, test, expect } from '@jest/globals' import { Flyover } from '@rsksmart/flyover-sdk' import ethProvider from 'eth-provider' -import { BlockchainConnection } from '@rsksmart/bridges-core-sdk' +import { BlockchainConnection, BlockchainReadOnlyConnection } from '@rsksmart/bridges-core-sdk' import { fakeTokenResolver } from './common/utils' import { integrationTestConfig } from '../config' import { EXTENDED_TIMEOUT } from './common/constants' @@ -26,4 +26,11 @@ describe('Flyover Rsk connection should', () => { const isConnected = await flyover.isConnected() expect(isConnected).toBe(true) }, EXTENDED_TIMEOUT) + + test('establish readonly connection', async () => { + const rsk = await BlockchainReadOnlyConnection.createUsingRpc(integrationTestConfig.nodeUrl) + const flyover = new Flyover({ rskConnection: rsk, network: integrationTestConfig.network, captchaTokenResolver: fakeTokenResolver }) + const isConnected = await flyover.isConnected() + expect(isConnected).toBe(true) + }) }) diff --git a/integration-test/test/user.test.ts b/integration-test/test/user.test.ts index 1bfe968..9cbd60d 100644 --- a/integration-test/test/user.test.ts +++ b/integration-test/test/user.test.ts @@ -1,5 +1,5 @@ import { describe, test, beforeAll, expect } from '@jest/globals' -import { assertTruthy, BlockchainConnection } from '@rsksmart/bridges-core-sdk' +import { assertTruthy, BlockchainReadOnlyConnection } from '@rsksmart/bridges-core-sdk' import { Flyover } from '@rsksmart/flyover-sdk' import { fakeTokenResolver } from './common/utils' import { integrationTestConfig } from '../config' @@ -12,10 +12,7 @@ describe('Flyover SDK client should', () => { allowInsecureConnections: true, captchaTokenResolver: fakeTokenResolver }) - const rsk = await BlockchainConnection.createUsingPassphrase( - integrationTestConfig.testMnemonic, - integrationTestConfig.nodeUrl - ) + const rsk = await BlockchainReadOnlyConnection.createUsingRpc(integrationTestConfig.nodeUrl) await flyover.connectToRsk(rsk) }) diff --git a/package-lock.json b/package-lock.json index ceb51f2..8b60c24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "@rsksmart/flyover-sdk", - "version": "1.6.2", + "version": "1.6.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@rsksmart/flyover-sdk", - "version": "1.6.2", + "version": "1.6.3", "license": "ISC", "dependencies": { - "@rsksmart/bridges-core-sdk": "^0.4.1", + "@rsksmart/bridges-core-sdk": "^0.4.2", "bitcoinjs-lib": "^6.1.6", "qrcode": "^1.5.1" }, @@ -248,29 +248,29 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", + "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", - "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", + "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/types": "^7.26.5" + "@babel/types": "^7.26.10" }, "bin": { "parser": "bin/babel-parser.js" @@ -536,16 +536,16 @@ } }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" @@ -583,9 +583,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", - "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", + "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", "dev": true, "license": "MIT", "peer": true, @@ -669,9 +669,9 @@ } }, "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", "funding": [ { "type": "individual", @@ -684,21 +684,21 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", "funding": [ { "type": "individual", @@ -711,19 +711,19 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" } }, "node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", "funding": [ { "type": "individual", @@ -736,17 +736,17 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, "node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", "funding": [ { "type": "individual", @@ -759,17 +759,17 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" } }, "node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", "funding": [ { "type": "individual", @@ -782,13 +782,13 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0" + "@ethersproject/bytes": "^5.8.0" } }, "node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", "funding": [ { "type": "individual", @@ -801,14 +801,14 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", "funding": [ { "type": "individual", @@ -821,15 +821,15 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", "bn.js": "^5.2.1" } }, "node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", "funding": [ { "type": "individual", @@ -842,13 +842,13 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", "funding": [ { "type": "individual", @@ -861,13 +861,13 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0" } }, "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", "funding": [ { "type": "individual", @@ -880,22 +880,22 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" } }, "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", "funding": [ { "type": "individual", @@ -908,21 +908,21 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", "funding": [ { "type": "individual", @@ -935,24 +935,24 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" } }, "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", "funding": [ { "type": "individual", @@ -965,25 +965,25 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", "aes-js": "3.0.0", "scrypt-js": "3.0.1" } }, "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", "funding": [ { "type": "individual", @@ -996,14 +996,14 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", + "@ethersproject/bytes": "^5.8.0", "js-sha3": "0.8.0" } }, "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", "funding": [ { "type": "individual", @@ -1017,9 +1017,9 @@ "license": "MIT" }, "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", "funding": [ { "type": "individual", @@ -1032,13 +1032,13 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", "funding": [ { "type": "individual", @@ -1051,14 +1051,14 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" } }, "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", "funding": [ { "type": "individual", @@ -1071,13 +1071,13 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", "funding": [ { "type": "individual", @@ -1090,32 +1090,32 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", "bech32": "1.1.4", - "ws": "7.4.6" + "ws": "8.18.0" } }, "node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", "funding": [ { "type": "individual", @@ -1128,14 +1128,14 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", "funding": [ { "type": "individual", @@ -1148,14 +1148,14 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", "funding": [ { "type": "individual", @@ -1168,15 +1168,15 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", "hash.js": "1.1.7" } }, "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", "funding": [ { "type": "individual", @@ -1189,18 +1189,18 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", "bn.js": "^5.2.1", - "elliptic": "6.5.4", + "elliptic": "6.6.1", "hash.js": "1.1.7" } }, "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", "funding": [ { "type": "individual", @@ -1213,18 +1213,18 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", "funding": [ { "type": "individual", @@ -1237,15 +1237,15 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", "funding": [ { "type": "individual", @@ -1258,21 +1258,21 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" } }, "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", "funding": [ { "type": "individual", @@ -1285,15 +1285,15 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", "funding": [ { "type": "individual", @@ -1306,27 +1306,27 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" } }, "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", "funding": [ { "type": "individual", @@ -1339,17 +1339,17 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", "funding": [ { "type": "individual", @@ -1362,11 +1362,11 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, "node_modules/@exodus/schemasafe": { @@ -2336,9 +2336,9 @@ ] }, "node_modules/@rsksmart/bridges-core-sdk": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@rsksmart/bridges-core-sdk/-/bridges-core-sdk-0.4.1.tgz", - "integrity": "sha512-bLED4LtICzKcvvYgVOnhjY7ncpyg7PZTWq4E+d5FbV6dc6XB9RWTqCis9kvM2p3m1iyVUZXBV1eDVS9FDNUIhw==", + "version": "0.4.2", + "resolved": "https://npm.pkg.github.com/download/@rsksmart/bridges-core-sdk/0.4.2/c37ec5b634b9f6671fe3fc75d52bf8757e10bc4b", + "integrity": "sha512-vrMRpLl0rK/kU+ltaYvex4G7XPXiJ/Cqr6cOVWvfLEuBMpCFoisM0ExwUQTeJDxWrEACU/wRn/pQq2p6Xh295g==", "license": "ISC", "dependencies": { "bech32": "^2.0.0", @@ -4126,9 +4126,9 @@ "peer": true }, "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "license": "MIT", "dependencies": { "bn.js": "^4.11.9", @@ -4870,9 +4870,9 @@ } }, "node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", "funding": [ { "type": "individual", @@ -4885,36 +4885,36 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" } }, "node_modules/execa": { @@ -10160,16 +10160,16 @@ } }, "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "license": "MIT", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { diff --git a/package.json b/package.json index 7d83a61..03eafb5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@rsksmart/flyover-sdk", - "version": "1.6.2", + "version": "1.6.3", "description": "SDK that simplifies interaction between Flyover's Liquidity Provider Server and client applications", "main": "lib/index.js", "private": false, @@ -64,7 +64,7 @@ "typescript": "^4.9.5" }, "dependencies": { - "@rsksmart/bridges-core-sdk": "^0.4.1", + "@rsksmart/bridges-core-sdk": "^0.4.2", "bitcoinjs-lib": "^6.1.6", "qrcode": "^1.5.1" } diff --git a/src/blockchain/lbc.test.ts b/src/blockchain/lbc.test.ts index 5e0d10f..0ae2a14 100644 --- a/src/blockchain/lbc.test.ts +++ b/src/blockchain/lbc.test.ts @@ -18,6 +18,7 @@ const signerMock = jest.mocked({}) // eslint-disable-next-line @typescript-eslint/consistent-type-assertions const connectionMock = jest.mocked({ getChainHeight: async () => Promise.resolve(1), + getAbstraction: function () { return this.signer }, get signer () { return signerMock } @@ -95,7 +96,7 @@ const peginQuoteMock: PeginQuote = { callFee: BigInt(1000000000000000), penaltyFee: BigInt(1000000), contractAddr: '0x79568c2989232dCa1840087D73d403602364c0D4', - data: '', + data: '0x1a1b1c', gasLimit: 46000, nonce: BigInt('7591081102472764799'), value: BigInt(600000000000000000), @@ -132,7 +133,7 @@ const parsedPeginQuoteMock: Quotes.PeginQuoteStruct = { callFee: BigInt(1000000000000000), penaltyFee: 1000000, contractAddress: '0x79568c2989232dCa1840087D73d403602364c0D4', - data: '0x', + data: '0x1a1b1c', gasLimit: 46000, nonce: BigInt('7591081102472764799'), value: BigInt(600000000000000000), @@ -515,4 +516,25 @@ describe('LiquidityBridgeContract class should', () => { expect(contractMock.productFeePercentage).toBeCalledTimes(1) expect(result).toEqual(2) }) + + test('normalize 0x prefix when parsing pegin quote', async () => { + const contractMock = { + hashQuote: jest.fn().mockReturnValue(Promise.resolve([0x01, 0x05, 0x07])) + } + jest.spyOn(ethers.utils, 'hexlify').mockImplementation((arg) => { + const { utils } = jest.requireActual('ethers') + return utils.hexlify(arg) + }) + const contractClassMock = jest.mocked(ethers.Contract) + contractClassMock.mockImplementation(() => contractMock as any) + const config: FlyoverConfig = { network: 'Regtest', captchaTokenResolver: async () => Promise.resolve('') } + const lbc = new LiquidityBridgeContract(connectionMock, config) + const prefixedMock = peginQuoteMock + const notPrefixedMock = structuredClone(peginQuoteMock) + notPrefixedMock.quote.data = notPrefixedMock.quote.data.slice(2) + await expect(lbc.hashPeginQuote(prefixedMock)).resolves.not.toThrow() + await expect(lbc.hashPeginQuote(notPrefixedMock)).resolves.not.toThrow() + expect(serializer.stringify(contractMock.hashQuote.mock.calls[0]?.[0])).toBe(serializer.stringify(parsedPeginQuoteMock)) + expect(serializer.stringify(contractMock.hashQuote.mock.calls[1]?.[0])).toBe(serializer.stringify(parsedPeginQuoteMock)) + }) }) diff --git a/src/blockchain/lbc.ts b/src/blockchain/lbc.ts index 06e04a8..544a80c 100644 --- a/src/blockchain/lbc.ts +++ b/src/blockchain/lbc.ts @@ -3,16 +3,16 @@ import abi from './lbc-abi' import { FlyoverNetworks, type FlyoverSupportedNetworks } from '../constants/networks' import { type PegoutQuoteDetail, type PegoutQuote, type Quote as PeginQuote, type QuoteDetail as PeginQuoteDetail, type LiquidityProviderBase } from '../api' import { type QuotesV2 as Quotes, type LiquidityBridgeContractV2 as LBC } from './bindings/Lbc' -import { decodeBtcAddress, executeContractFunction, executeContractView, type FlyoverConfig, isRskAddress, type Network, type BlockchainConnection, type TxResult } from '@rsksmart/bridges-core-sdk' +import { decodeBtcAddress, executeContractFunction, executeContractView, type FlyoverConfig, isRskAddress, type Network, type Connection, type TxResult } from '@rsksmart/bridges-core-sdk' export class LiquidityBridgeContract { private readonly liquidityBridgeContract: Contract - constructor (rskConnection: BlockchainConnection, config: FlyoverConfig) { + constructor (rskConnection: Connection, config: FlyoverConfig) { const address = getLbcAddress(config.network, config.customLbcAddress) if (address === undefined || !isRskAddress(address)) { throw new Error('invalid address') } - const lbc = new Contract(address, abi, rskConnection.signer) + const lbc = new Contract(address, abi, rskConnection.getAbstraction()) this.liquidityBridgeContract = lbc } @@ -110,7 +110,7 @@ export class LiquidityBridgeContract { callFee: detail.callFee, penaltyFee: detail.penaltyFee, contractAddress: detail.contractAddr.toLowerCase(), - data: detail.data, + data: detail.data.startsWith('0x') ? detail.data : '0x' + detail.data, gasLimit: detail.gasLimit, nonce: detail.nonce, value: detail.value, diff --git a/src/sdk/flyover.ts b/src/sdk/flyover.ts index fb09590..57dc234 100644 --- a/src/sdk/flyover.ts +++ b/src/sdk/flyover.ts @@ -22,7 +22,7 @@ import { registerPegin, type RegisterPeginParams } from './registerPegin' import { type CaptchaTokenResolver, type FlyoverConfig, getHttpClient, type HttpClient, isBtcAddress, isRskAddress, isSecureUrl, - type Network, type BlockchainConnection, type Bridge, type BridgeMetadata + type Network, type Connection, type Bridge, type BridgeMetadata } from '@rsksmart/bridges-core-sdk' import { FlyoverError } from '../client/httpClient' import { getMetadata } from './getMetadata' @@ -242,12 +242,12 @@ export class Flyover implements Bridge { } /** - * Connects Flyover to RSK network. It is useful if connetion wasn't provided on initial configuration + * Connects Flyover to RSK network. It is useful if connection wasn't provided on initial configuration * - * @param { BlockchainConnection } rskConnection object representing connection to the network + * @param { Connection } rskConnection object representing connection to the network * @throws { Error } If Flyover already has a connection to the network */ - async connectToRsk (rskConnection: BlockchainConnection): Promise { + async connectToRsk (rskConnection: Connection): Promise { if (this.config.rskConnection !== undefined) { throw new Error('already connected to Rsk network') } @@ -304,10 +304,11 @@ export class Flyover implements Bridge { } /** - * Disconnects from RSK network, removing BlockchainConnection object from Flyover and also current LiquidityProvider + * Disconnects from RSK network, removing Connection object from Flyover and also current LiquidityProvider */ disconnectFromRsk (): void { this.liquidityBridgeContract = undefined + this.rskBridge = undefined this.config.rskConnection = undefined this.liquidityProvider = undefined } diff --git a/src/sdk/getQuote.test.ts b/src/sdk/getQuote.test.ts index 0738928..8acf2dd 100644 --- a/src/sdk/getQuote.test.ts +++ b/src/sdk/getQuote.test.ts @@ -48,7 +48,7 @@ const providerMock: LiquidityProvider = { const quoteRequestMock: PeginQuoteRequest = { callEoaOrContractAddress: '0xF5ad1A6F6BA49C507Bb24676bbF80b8ed19B694c', - callContractArguments: 'any arguments', + callContractArguments: '', rskRefundAddress: '0xB050eE2D61c7A5fd4f2ed193f752fBa85E18b1d4', valueToTransfer: BigInt('9007199254750000') } @@ -131,7 +131,14 @@ describe('getQuote function should', () => { }) test('convert response to Quote array correctly', async () => { - const quotes = await getQuote(configMock, mockClient, lbcMock, providerMock, quoteRequestMock) + const client = { ...mockClient } + const data = 'c1f1d1' + const request = { ...quoteRequestMock } + const dataMock = structuredClone(quoteResponseMock) + request.callContractArguments = data + dataMock.quote.data = data + client.post = async (_url: string, _body: object) => Promise.resolve([dataMock] as T) + const quotes = await getQuote(configMock, client, lbcMock, providerMock, request) const quote = quotes[0]! // eslint-disable-line @typescript-eslint/no-non-null-assertion expect(quotes).toBeTruthy() @@ -243,4 +250,21 @@ describe('getQuote function should', () => { }) quoteResponseMock.quote = oldQuote // reset quote }) + + test('work with prefixed and not prefixed data', async () => { + const oldQuote = quoteResponseMock.quote + const prefixedRequest = structuredClone(quoteRequestMock) + prefixedRequest.callContractArguments = '0x1a1b1c' + const notPrefixedRequest = structuredClone(quoteRequestMock) + notPrefixedRequest.callContractArguments = '1a1b1c' + + const dataQuote = structuredClone(quoteResponseMock.quote) + dataQuote.data = '1a1b1c' + quoteResponseMock.quote = dataQuote + + await expect(getQuote(configMock, mockClient, lbcMock, providerMock, prefixedRequest)).resolves.not.toThrow() + await expect(getQuote(configMock, mockClient, lbcMock, providerMock, notPrefixedRequest)).resolves.not.toThrow() + + quoteResponseMock.quote = oldQuote // reset quote + }) })